@eqproject/eqp-attachments 3.1.6 → 3.1.7
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.
|
@@ -146,11 +146,11 @@ export class EqpAttachmentsComponent {
|
|
|
146
146
|
/**
|
|
147
147
|
* In caso di allegato singolo, permette di scegliere se aggiungere file tramite drag and drop
|
|
148
148
|
*/
|
|
149
|
-
singleAttachmentDragAndDrop =
|
|
149
|
+
singleAttachmentDragAndDrop = true;
|
|
150
150
|
/**
|
|
151
151
|
* Array di opzioni che si possono utilizzare per il crop
|
|
152
152
|
*/
|
|
153
|
-
cropOptions = [];
|
|
153
|
+
cropOptions = [1, 2];
|
|
154
154
|
/**
|
|
155
155
|
* Classe custom da assegnare al dialog del crop immagini
|
|
156
156
|
*/
|
|
@@ -1548,4 +1548,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1548
1548
|
type: ViewChild,
|
|
1549
1549
|
args: ['defaultActionsTemplate', { static: true }]
|
|
1550
1550
|
}] } });
|
|
1551
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWF0dGFjaG1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1hdHRhY2htZW50cy9zcmMvbGliL2VxcC1hdHRhY2htZW50cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtYXR0YWNobWVudHMvc3JjL2xpYi9lcXAtYXR0YWNobWVudHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxPQUFPLGdCQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQXFCLHFCQUFxQixFQUFrQixNQUFNLG1CQUFtQixDQUFDO0FBQzNHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBbUUsY0FBYyxFQUFrQyxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWpMLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBS3RGLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDeEIsSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7SUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUNoQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJ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YTtzQkFBMUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVVRLG1CQUFtQjtzQkFBdEUsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0ssc0JBQXNCO3NCQUE1RSxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IGltYWdlQ29tcHJlc3Npb24gZnJvbSBcImJyb3dzZXItaW1hZ2UtY29tcHJlc3Npb25cIjtcclxuaW1wb3J0IHsgYmFzZTY0VG9GaWxlLCBJbWFnZUNyb3BwZWRFdmVudCwgSW1hZ2VDcm9wcGVyQ29tcG9uZW50LCBJbWFnZVRyYW5zZm9ybSB9IGZyb20gXCJuZ3gtaW1hZ2UtY3JvcHBlclwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50SGVscGVyU2VydmljZSB9IGZyb20gXCIuL2hlbHBlcnMvYXR0YWNobWVudC5oZWxwZXJcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudENhcmRTaXplLCBBdHRhY2htZW50RmllbGRDb2x1bW4sIEF0dGFjaG1lbnRNZW51QWN0aW9uLCBBdHRhY2htZW50VHlwZSwgQ3JvcE9wdGlvbkVudW0sIElBdHRhY2htZW50RFRPLCBUeXBlQXR0YWNobWVudENvbHVtbiB9IGZyb20gXCIuL2ludGVyZmFjZXMvSUF0dGFjaG1lbnRcIjtcclxuaW1wb3J0IHsgSU9wdGlvbnMgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL0lPcHRpb25zXCI7XHJcbmltcG9ydCB7IEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvZXFwLWF0dGFjaG1lbnQtZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXFwQXR0YWNobWVudFNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9lcXAtYXR0YWNobWVudC5zZXJ2aWNlXCI7XHJcblxyXG5kZWNsYXJlIHZhciBEcm9wYm94OiBhbnk7XHJcblxyXG5jb25zdCB0b0Jhc2U2NCA9IChmaWxlKSA9PlxyXG4gIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdC50b1N0cmluZygpKTtcclxuICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xyXG4gIH0pO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZXFwLWF0dGFjaG1lbnRzXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9lcXAtYXR0YWNobWVudHMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vZXFwLWF0dGFjaG1lbnRzLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBBdHRhY2htZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8jcmVnaW9uIEBJbnB1dCBkZWwgY29tcG9uZW50ZVxyXG5cclxuICAvKipcclxuICAgKiBTZSBUUlVFIGFsbG9yYSBuYXNjb25kZSBsYSBjb2xvbm5hIHBlciBsZSBhemlvbmkgc3VsbCdhbGxlZ2F0byAobmVsIGNhc28gXCJtdWx0aXBsZUF0dGFjaG1lbnRcIiDDqCBUUlVFKS5cclxuICAgKi9cclxuICBASW5wdXQoXCJkaXNhYmxlQWN0aW9uXCIpIGRpc2FibGVBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2UgVFJVRSBtb3N0cmEgaWwgdGl0b2xvIG5lbGwnaGVhZGVyIG5lbCBjYXNvIGluIGN1aSBcIm11bHRpcGxlQXR0YWNobWVudFwiIMOoIFRSVUUgKFwiRWxlbmNvIGFsbGVnYXRpXCIgZGkgZGVmYXVsdCkuXHJcbiAgICovXHJcbiAgQElucHV0KFwic2hvd0hlYWRlclwiKSBzaG93SGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU29yZ2VudGUgZGF0aSBkYSB2aXN1YWxpenphcmUuIE5lbCBjYXNvIHNpIHZ1b2xlIGdlc3RpcmUgdW4gc2luZ29sbyBhbGxlZ2F0byB2YSBwYXNzYXRvIGluIG9nbmkgY2FzbyBjb21lIEFycmF5LlxyXG4gICAqL1xyXG4gIEBJbnB1dChcImF0dGFjaG1lbnRzTGlzdFwiKSBhdHRhY2htZW50c0xpc3Q6IEFycmF5PElBdHRhY2htZW50RFRPPiA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIE5lbCBjYXNvIHNpIHZ1b2xlIGdlc3RpcmUgdW4gc29sbyBlbGVtZW50byBzZW56YSBwYXNzYXJsbyBjb21lIGFycmF5LCBsbyBwYXNzbyBjb21lIHNpbmdvbG8gYWxsZWdhdG8gZSBnZXN0aXNjbyBuZWxsYSBsaWJyZXJpYSBsJ2FycmF5LlxyXG4gICAqL1xyXG4gIEBJbnB1dChcInNpbmdsZUF0dGFjaG1lbnRcIikgc2luZ2xlQXR0YWNobWVudDogSUF0dGFjaG1lbnREVE8gPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBUUlVFIG5vbiBtb3N0cmEgbGEgTWF0Q2FyZCAobmVsIGNhc28gaW4gY3VpIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSkuXHJcbiAgICovXHJcbiAgQElucHV0KFwic2hvd01hdENhcmRcIikgc2hvd01hdENhcmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBGQUxTRSBhbGxvcmEgaWwgY29tcG9uZW50ZSBtb3N0cmEgc29sbyBpbCBwdWxzYW50ZSBkaSBjYXJpY2FtZW50byBkaSB1biBzaW5nb2xvIGZpbGUsIHVuYSB2b2x0YSBjYXJpY2F0byBpbCBmaWxlIGludm9jYSBsJ2V2ZW50byBkaSBvdXRwdXQgXCJsb2NhbEVkaXRlZEF0dGFjaG1lbnRzXCIuXHJcbiAgICogU2UgVFJVRSBhbGxvcmEgaWwgY29tcG9uZW50ZSBtb3N0cmEgbCdlbGVuY28gZGkgdHV0dGkgZ2xpIGFsbGVnYXRpIHJpY2V2dXRvIG5lbCBwYXJhbWV0cm8gXCJhdHRhY2htZW50c0xpc3RcIi5cclxuICAgKi9cclxuICBASW5wdXQoXCJtdWx0aXBsZUF0dGFjaG1lbnRcIikgbXVsdGlwbGVBdHRhY2htZW50OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2UgYXNzdW1lIGlsIHZhbG9yZSBUUlVFIGFsbG9yYSBzYXLDoCBwb3NzaWJpbGUgY2FyaWNhcmUgcGnDuSBmaWxlIHBlciB2b2x0YS4gUXVlc3RhIGZ1bnppb25hbGl0w6Agw6ggYXR0aXZhXHJcbiAgICogU09MTyBzZSBzaSBnZXN0aXNjb25vIGFsbGVnYXRpIG11bHRpcGxpLCBxdWluZGkgc2UgbCdpbnB1dCAnbXVsdGlwbGVBdHRhY2htZW50JyBhc3N1bWUgaWwgdmFsb3JlIFRSVUUsIGFsdHJpbWVudGkgw6ggc2VtcHJlIGRpc2FiaWxpdGF0YS5cclxuICAgKi9cclxuICBASW5wdXQoXCJsb2FkTXVsdGlwbGVGaWxlc1wiKSBsb2FkTXVsdGlwbGVGaWxlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbXBvc3RhIGlsIG1lc3NhZ2dpbyBkYSB2aXN1YWxpenphcmUgbmVsIGNhc28gaW4gY3VpIGxhIHRhYmVsbGEgZGVnbGkgYWxsZWdhdGkgKG5lbCBjYXNvIGluIGN1aSBcIm11bHRpcGxlQXR0YWNobWVudFwiIMOoIFRSVUUpIMOoIHZ1b3RhLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcImVtcHR5VGFibGVNZXNzYWdlXCIpIGVtcHR5VGFibGVNZXNzYWdlOiBzdHJpbmcgPSBcIk5lc3N1biBkYXRvIHRyb3ZhdG9cIjtcclxuXHJcbiAgLyoqXHJcbiAgICogU2UgVFJVRSBhbGxvcmEgcGVybWV0dGUgZGkgc2VsZXppb25hcmUgc29sdGFudG8gZmlsZSBkaSB0aXBvIGltbWFnaW5lLCBhdmVudGUgdW5vIGRlaSBtaW1ldHlwZVxyXG4gICAqIHNwZWNpZmljYXRpIGRlbnRybyBBdHRhY2htZW50SGVscGVyU2VydmljZS5cclxuICAgKiBTZSBGQUxTRSBwZXJtZXR0ZSBkaSBzZWxlemlvbmFyZSBxdWFsc2lhc2kgdGlwbyBkaSBmaWxlXHJcbiAgICovXHJcbiAgQElucHV0KFwiYWxsb3dPbmx5SW1hZ2VzXCIpIGFsbG93T25seUltYWdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTcGVjaWZpY2EgaSB0aXBpIGRpIGZpbGUgY2hlIMOoIHBvc3NpYmlsZSBjYXJpY2FyZVxyXG4gICAqL1xyXG4gIEBJbnB1dChcImFjY2VwdGVkRmlsZVR5cGVzXCIpIGFjY2VwdGVkRmlsZVR5cGVzOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlIFRSVUUgZGlzYWJpbGl0YSBpbCBwdWxzYW50ZSBkaSBBZ2dpdW50YSBhbGxlZ2F0byAoYSBwcmVzY2luZGVyZSBkYWwgdmFsb3JlIGRlbCBwYXJhbWV0cm8gXCJtdWx0aXBsZUF0dGFjaG1lbnRcIikuXHJcbiAgICovXHJcbiAgQElucHV0KFwiaXNEaXNhYmxlZFwiKSBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vc3RyYS9uYXNjb25kZSBsYSBjb2xvbm5hIHBlciB2aXN1YWxpenphcmUgbCdhbnRlcHJpbWEgZGVpIGZpbGUgbmVsbGEgdGFiZWxsYSAoY2FzbyBtdWx0aXBsZUF0YXRjaG1lbnRzID0gdHJ1ZSkuXHJcbiAgICovXHJcbiAgQElucHV0KFwic2hvd0lubGluZVByZXZpZXdcIikgc2hvd0lubGluZVByZXZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VlcHJhcmUgbCdJQXR0YWNobWVudERUTyBjb21wbGV0byBkYSB2ZWRlcmUgbmVsbCdhbnRlcHJpbWEuIExhIGNoaWFtYXRhIHNhcsOgIGluIFBPU1QgZSBuZWwgYm9keVxyXG4gICAqIGNvbnRlcnLDoCBsJ0lBdHRhY2htZW50RFRPIHNlbGV6aW9uYXRvIGRhbGwndXRlbnRlLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVzZWd1aXRhIHNvbG8gcGVyIGwnYW50ZXByaW1hIGRlbGxlIGltbWFnaW5pIGVzc2VuZG8gbmVjZXNzYXJpbyBpbCBiYXNlNjQgY29tcGxldG8gZGVsbCdpbW1hZ2luZSBhIGRpbWVuc2lvbmUgcmVhbGUuXHJcbiAgICogUGVyIGRvY3VtZW50aS9saW5rIGJhc3RhIGNoZSBzaWEgcG9wb2xhdGEgbGEgcHJvcHJpZXTDoCBGaWxlUGF0aCBkaSBJQXR0YWNobWVudERUTy5cclxuICAgKi9cclxuICBASW5wdXQoXCJnZXRBdHRhY2htZW50RW5kcG9pbnRcIikgZ2V0QXR0YWNobWVudEVuZHBvaW50OiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBIb3N0bmFtZSBkZWxsJ2FtYmllbnRlIGRpIHByb2R1emlvbmUgZGVsbCdhcHBsaWNhdGl2by4gTmVjZXNzYXJpbyBwZXIgdmlzdWFsaXp6YXJlIGwnYW50ZXByaW1hIGRlaSBkb2N1bWVudGlcclxuICAgKiB0cmFtaXRlIGlsIHZpZXdlciBkaSBnb29nbGUuXHJcbiAgICogTk9UQTogUGVyIHZpc3VhbGl6emFyZSBsJ2FudGVwcmltYSDDqCBuZWNlc3NhcmlvIGNoZSBsYSBwcm9yaWV0w6AgRmlsZVBhdGggZGVsbCdJQXR0YWNobWVudERUTyBzaWEgcG9wb2xhdGEgZSBjaGVcclxuICAgKiBzaWEgYWJpbGl0YXRvIGwnYWNjZXNzbyBhbGxhIGNhcnRlbGxhIHN1bCBzZXJ2ZXIgdHJhbWl0ZSBob3N0bmFtZS5cclxuICAgKi9cclxuICBASW5wdXQoXCJwcm9kdWN0aW9uQmFzZVVybFwiKSBwcm9kdWN0aW9uQmFzZVVybDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogT3B6aW9uaSBwZXIgbGEgY29tcHJlc3Npb25lIGRlbGxlIGltbWFnaW5pIGNhcmljYXRlLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcImNvbXByZXNzaW9uT3B0aW9uc1wiKSBjb21wcmVzc2lvbk9wdGlvbnM6IElPcHRpb25zID0ge1xyXG4gICAgbWF4U2l6ZU1COiAwLjUsXHJcbiAgICBtYXhXaWR0aE9ySGVpZ2h0OiAxOTIwLFxyXG4gICAgdXNlV2ViV29ya2VyOiB0cnVlXHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQXJyYXkgZGkgQXR0YWNobWVudFR5cGUgY2hlIHNpIHBvc3Nvbm8gYWdnaXVuZ2VyZVxyXG4gICAqL1xyXG4gIEBJbnB1dChcImFsbG93ZWRUeXBlc1wiKSBhbGxvd2VkVHlwZXM6IEFycmF5PEF0dGFjaG1lbnRUeXBlPiA9IFtBdHRhY2htZW50VHlwZS5GSUxFLCBBdHRhY2htZW50VHlwZS5MSU5LXTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgc3RhYmlsaXJlIHNlIGxhIGVxcC10YWJsZSBjb250ZW5lbnRlIGwnZWxlbmNvIGRlZ2xpIGFsbGVnYXRpIHV0aWxpenphXHJcbiAgICogaWwgbXVsdGlsaW5ndWEgb3BwdXJlIG5vXHJcbiAgICovXHJcbiAgQElucHV0KFwiaXNFcXBUYWJsZU11bHRpTGFuZ3VhZ2VcIikgaXNFcXBUYWJsZU11bHRpTGFuZ3VhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgc3RhYmlsaXJlLCBpbiBjYXNvIGRpIGdlc3Rpb25lIGFsbGVnYXRpIG11bHRpcGxpLCBzZSBsYSB0YWJlbGxhIGNvbnRlbmVudGUgbCdlbGVuY29cclxuICAgKiBkZWdsaSBhbGxlZ2F0aSBkZXZlIGVzc2VyZSBwYWdpbmF0YSBvcHB1cmUgbm9cclxuICAgKi9cclxuICBASW5wdXQoXCJ0YWJsZVBhZ2luYXRvclZpc2libGVcIikgdGFibGVQYWdpbmF0b3JWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgc3RhYmlsaXJlLCBpbiBjYXNvIGRpIGdlc3Rpb25lIGFsbGVnYXRpIG11bHRpcGxpLCBzZSBsYSB0YWJlbGxhIGNvbnRlbmVudGUgbCdlbGVuY29cclxuICAgKiBkZWdsaSBhbGxlZ2F0aSBkZXZlIGNvbnRlbmVyZSBpbCBjYW1wbyBkaSByaWNlcmNhIG9wcHVyZSBub1xyXG4gICAqL1xyXG4gIEBJbnB1dChcImlzVGFibGVTZWFyY2hlYWJsZVwiKSBpc1RhYmxlU2VhcmNoZWFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBJbiBjYXNvIGRpIGdlc3Rpb25lIGFsbGVnYXRpIG11bHRpcGxpLCBwZXJtZXR0ZSBkaSBzdGFiaWxpcmUgbGEgZGltZW5zaW9uZSBwYWdpbmEgZGkgZGVmYXVsdFxyXG4gICAqIHBlciBsYSB0YWJlbGxhIGNvbnRlbmVudGUgbCdlbGVuY28gZGVnbGkgYWxsZWdhdGlcclxuICAgKi9cclxuICBASW5wdXQoXCJ0YWJsZVBhZ2luYXRvclNpemVcIikgdGFibGVQYWdpbmF0b3JTaXplOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBQZXJtZXR0ZSBkaSBzY2VnbGllcmUgaWwgbW9kbyBpbiBjdWkgaSBmaWxlIGRldm9ubyBlc3NlcmUgY2FyaWNhdGlcclxuICAgKi9cclxuICAvLyBASW5wdXQoXCJ1cGxvYWRUeXBlXCIpIHVwbG9hZFR5cGU6IFVwbG9hZFR5cGVFbnVtID0gVXBsb2FkVHlwZUVudW0uRklMRV9BTkRfTElOSztcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgc3RhYmlsaXJlIHNlIGkgcHVsc2FudGkgcGVyIGlsIGNhcmljYW1lbnRvIGRlaSBmaWxlIHNvbm8gc2VwYXJhdGkgbyBpbiB1biBtZW7DuSBhIHRlbmRpbmFcclxuICAgKi9cclxuICBASW5wdXQoXCJzZXBhcmF0ZWRVcGxvYWRCdXR0b25zXCIpIHNlcGFyYXRlZFVwbG9hZEJ1dHRvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgc2NlZ2xpZXJlIHNlIGRhcmUgbGEgcG9zc2liaWxpdMOgIGRpIHZlZGVyZSBvIG5vIGwnYW50ZXByaW1hXHJcbiAgICovXHJcbiAgQElucHV0KFwic2hvd1ByZXZpZXdcIikgc2hvd1ByZXZpZXc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBJbiBjYXNvIGRpIGFsbGVnYXRvIHNpbmdvbG8sIHBlcm1ldHRlIGRpIHNjZWdsaWVyZSBzZSBhZ2dpdW5nZXJlIGZpbGUgdHJhbWl0ZSBkcmFnIGFuZCBkcm9wXHJcbiAgICovXHJcbiAgQElucHV0KFwic2luZ2xlQXR0YWNobWVudERyYWdBbmREcm9wXCIpIHNpbmdsZUF0dGFjaG1lbnREcmFnQW5kRHJvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBcnJheSBkaSBvcHppb25pIGNoZSBzaSBwb3Nzb25vIHV0aWxpenphcmUgcGVyIGlsIGNyb3BcclxuICAgKi9cclxuICBASW5wdXQoXCJjcm9wT3B0aW9uc1wiKSBjcm9wT3B0aW9uczogQXJyYXk8Q3JvcE9wdGlvbkVudW0+ID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIENsYXNzZSBjdXN0b20gZGEgYXNzZWduYXJlIGFsIGRpYWxvZyBkZWwgY3JvcCBpbW1hZ2luaVxyXG4gICAqL1xyXG4gIEBJbnB1dChcImNyb3BEaWFsb2dDbGFzc1wiKSBjcm9wRGlhbG9nQ2xhc3M6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgbWF4RmlsZVNpemVNQjogbnVtYmVyID0gNTAwOyAvLyBEZWZhdWx0IG1heCBzaXplIG9mIDEwMCBNQlxyXG4gIEBJbnB1dCgpIGNhcmRTaXplOiBBdHRhY2htZW50Q2FyZFNpemUgPSAnc21hbGwnOyAvLyBEZWZhdWx0XHJcbiAgQElucHV0KCkgY3VzdG9tQ2FyZFdpZHRoUHg6IG51bWJlciA9IDIwMDsgLy8gTGFyZ2hlenphIGN1c3RvbSBpbiBweFxyXG4gIEBJbnB1dCgpIGN1c3RvbUNhcmRIZWlnaHRQeDogbnVtYmVyID0gMTgwOyAvLyBBbHRlenphIGN1c3RvbSBpbiBweFxyXG5cclxuICBASW5wdXQoKSBsYXlvdXQ6ICdmdWxsJyB8ICdjb21wYWN0JyA9ICdjb21wYWN0JztcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgcGVyIGRlZmluaXJlIGxlIGxhYmVsIGRhIHVzYXJlIG5lbCBjb21wb25lbnRlXHJcbiAgICovXHJcbiAgQElucHV0KFwib3BlbkxpbmtMYWJlbFwiKSBvcGVuTGlua0xhYmVsOiBzdHJpbmcgPSBcIkFwcmkgbGlua1wiO1xyXG4gIEBJbnB1dChcImFkZEJ1dHRvbkxhYmVsXCIpIGFkZEJ1dHRvbkxhYmVsOiBzdHJpbmcgPSBcIkFnZ2l1bmdpXCI7XHJcbiAgQElucHV0KFwiZG93bmxvYWRMYWJlbFwiKSBkb3dubG9hZExhYmVsOiBzdHJpbmcgPSBcIkRvd25sb2FkXCI7XHJcbiAgQElucHV0KFwiZGVsZXRlTGFiZWxcIikgZGVsZXRlTGFiZWw6IHN0cmluZyA9IFwiRWxpbWluYVwiO1xyXG4gIEBJbnB1dChcImZpbGVOYW1lTGFiZWxcIikgZmlsZU5hbWVMYWJlbDogc3RyaW5nID0gXCJOb21lIGZpbGVcIjtcclxuICBASW5wdXQoXCJwcmV2aWV3TGFiZWxcIikgcHJldmlld0xhYmVsOiBzdHJpbmcgPSBcIkFudGVwcmltYVwiO1xyXG4gIEBJbnB1dChcInVwbG9hZEZpbGVMYWJlbFwiKSB1cGxvYWRGaWxlTGFiZWw6IHN0cmluZyA9IFwiQ2FyaWNhIGZpbGVcIjtcclxuICBASW5wdXQoXCJjb25maXJtTGFiZWxcIikgY29uZmlybUxhYmVsOiBzdHJpbmcgPSBcIkNvbmZlcm1hXCI7XHJcbiAgQElucHV0KFwiYWJvcnRMYWJlbFwiKSBhYm9ydExhYmVsOiBzdHJpbmcgPSBcIkFubnVsbGFcIjtcclxuICBASW5wdXQoXCJzYXZlTGFiZWxcIikgc2F2ZUxhYmVsOiBzdHJpbmcgPSBcIlNhbHZhXCI7XHJcbiAgQElucHV0KFwiZXhpdExhYmVsXCIpIGV4aXRMYWJlbDogc3RyaW5nID0gXCJFc2NpXCI7XHJcbiAgQElucHV0KFwidXBsb2FkV2l0aERyb3Bib3hMYWJlbFwiKSB1cGxvYWRXaXRoRHJvcGJveExhYmVsOiBzdHJpbmcgPSBcIkNhcmljYSBjb24gRHJvcGJveFwiO1xyXG4gIEBJbnB1dChcImNyb3BMYWJlbFwiKSBjcm9wTGFiZWw6IHN0cmluZyA9IFwiU2NlZ2xpIGxlIGRpbWVuc2lvbmkgZGVsbCdpbW1hZ2luZVwiO1xyXG4gIEBJbnB1dChcImRlbGV0ZURpYWxvZ1RpdGxlXCIpIGRlbGV0ZURpYWxvZ1RpdGxlOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dChcImRlbGV0ZURpYWxvZ01lc3NhZ2VcIikgZGVsZXRlRGlhbG9nTWVzc2FnZTogc3RyaW5nID0gXCJTZWkgc2ljdXJvIGRpIHZvbGVyIGNhbmNlbGxhcmUgcXVlc3QnYWxsZWdhdG8/XCI7XHJcbiAgQElucHV0KFwibm9JbWFnZVNlbGVjdGVkRXJyb3JNZXNzYWdlXCIpIG5vSW1hZ2VTZWxlY3RlZEVycm9yTWVzc2FnZTogc3RyaW5nID1cclxuICAgIFwiTm9uIMOoIHBvc3NpYmlsZSBzZWxlemlvbmFyZSB1biBmaWxlIGNoZSBub24gc2lhIHVuJ2ltbWFnaW5lLlwiO1xyXG4gIEBJbnB1dChcIndyb25nVHlwZVNlbGVjdGVkRXJyb3JNZXNzYWdlXCIpIHdyb25nVHlwZVNlbGVjdGVkRXJyb3JNZXNzYWdlOiBzdHJpbmcgPVxyXG4gICAgXCJOb24gw6ggcG9zc2liaWxlIGNhcmljYXJlIGlsIGZpbGUgc2VsZXppb25hdG8uXCI7XHJcbiAgQElucHV0KFwidmlkZW9QcmV2aWV3RXJyb3JNZXNzYWdlXCIpIHZpZGVvUHJldmlld0Vycm9yTWVzc2FnZTogc3RyaW5nID1cclxuICAgIFwiSW1wb3NzaWJpbGUgYXByaXJlIGwnYW50ZXByaW1hIGRpIHVuIGZpbGUgdmlkZW8uXCI7XHJcbiAgQElucHV0KFwidmlkZW9QcmV2aWV3RXJyb3JNZXNzYWdlXCIpIGF1ZGlvUHJldmlld0Vycm9yTWVzc2FnZTogc3RyaW5nID1cclxuICAgIFwiSW1wb3NzaWJpbGUgYXByaXJlIGwnYW50ZXByaW1hIGRpIHVuIGZpbGUgYXVkaW8uXCI7XHJcbiAgQElucHV0KFwiZmxpcEhvcmluem9udGFsTGFiZWxcIikgZmxpcEhvcmluem9udGFsTGFiZWw6IHN0cmluZyA9IFwiQ2Fwb3ZvbGdpIG9yaXp6b250YWxtZW50ZVwiO1xyXG4gIEBJbnB1dChcImZsaXBWZXJ0aWNhbExhYmVsXCIpIGZsaXBWZXJ0aWNhbExhYmVsOiBzdHJpbmcgPSBcIkNhcG92b2xnaSB2ZXJ0aWNhbG1lbnRlXCI7XHJcbiAgQElucHV0KFwicm90YXRlUmlnaHRMYWJlbFwiKSByb3RhdGVSaWdodExhYmVsOiBzdHJpbmcgPSBcIlJ1b3RhIGEgZGVzdHJhXCI7XHJcbiAgQElucHV0KFwicm90YXRlTGVmdExhYmVsXCIpIHJvdGF0ZUxlZnRMYWJlbDogc3RyaW5nID0gXCJSdW90YSBhIHNpbmlzdHJhXCI7XHJcbiAgQElucHV0KFwiYmFzZTY0TGltaXRNQlwiKSBiYXNlNjRMaW1pdE1COiBudW1iZXIgPSAxMDA7XHJcbiAgQElucHV0KCkgdXBsb2FkVGl0bGUgPSAnVXBsb2FkIGZpbGUnO1xyXG4gIEBJbnB1dCgpIHVwbG9hZFN1YnRpdGxlID0gJ0RyYWcgJiBkcm9wIGZpbGVzIG8gY2xpY2snO1xyXG4gIEBJbnB1dCgpIGRyb3BIZXJlTGFiZWwgPSAnUmlsYXNjaWEgaSBmaWxlIHF1aSc7XHJcbiAgQElucHV0KCkgc3VwcG9ydGVkRm9ybWF0c0xhYmVsID0gJ0Zvcm1hdGkgc3VwcG9ydGF0aTogSlBFRywgUE5HLCBQREYgKE1heCAxMDBNQiknO1xyXG4gIEBJbnB1dCgpIGJyb3dzZUZpbGVzTGFiZWwgPSAnQ2VyY2EgaSBmaWxlJztcclxuICBASW5wdXQoKSB1cGxvYWRTdW1tYXJ5TGFiZWwgPSAnTGlzdGEgYWxsZWdhdGknO1xyXG4gIEBJbnB1dCgpIGZpbGVzTGFiZWwgPSAnRmlsZXMnO1xyXG4gIEBJbnB1dCgpIHRvdGFsU2l6ZUxhYmVsID0gJ0RpbWVuc2lvbmUgdG90YWxlJztcclxuICBASW5wdXQoKSBlbXB0eVN0YXRlTGFiZWwgPSAnTm9uIHNvbm8gcHJlc2VudGkgZmlsZSBjYXJpY2F0aSc7XHJcbiAgQElucHV0KCkgYWRkZWRTdWNjZXNzZnVsbHlMYWJlbCA9ICdmaWxlKHMpIGNhcmljYXRpIGNvbiBzdWNjZXNzby4nO1xyXG4gIEBJbnB1dCgpIHJlbW92ZWRMYWJlbCA9ICdGaWxlIHJpbW9zc28nO1xyXG4gIC8vIEBJbnB1dCgpIHJlbW92ZUxhYmVsID0gJ1JpbXVvdmkgZmlsZSc7XHJcbiAgQElucHV0KCkgY2hvb3NlVmlldyA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd1N1bW1hcnkgPSBmYWxzZTtcclxuICBASW5wdXQoXCJ2aWV3TW9kZVwiKSB2aWV3TW9kZTogJ2NhcmQnIHwgJ3RhYmxlJyA9ICd0YWJsZSc7XHJcbiAgQElucHV0KFwic2hvd1VwbG9hZFRpdGxlXCIpIHNob3dVcGxvYWRUaXRsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KFwic2hvd0Ryb3BBcmVhXCIpIHNob3dEcm9wQXJlYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgaGlkZGVuQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBoaWRkZW5BY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSB2aWRlb0NvbXByZXNzaW9uOiB7XHJcbiAgICBlbmFibGVkOiBib29sZWFuLFxyXG4gICAgbWF4V2lkdGg/OiBudW1iZXIsXHJcbiAgICBiaXRyYXRlPzogbnVtYmVyXHJcbiAgfSA9IHsgZW5hYmxlZDogZmFsc2UsIG1heFdpZHRoOiAxMjgwLCBiaXRyYXRlOiAyNTAwMDAwIH07XHJcblxyXG4gIHByaXZhdGUgX2N1c3RvbU1lbnVBY3Rpb25zOiBBdHRhY2htZW50TWVudUFjdGlvbltdID0gW107XHJcbiAgX3NvcnRlZE1lbnVBY3Rpb25zOiBBdHRhY2htZW50TWVudUFjdGlvbltdID0gW107XHJcblxyXG4gIC8qKlxyXG4gKiBTT0xPIHF1YW5kbyBbY3VzdG9tTWVudUFjdGlvbnNdPVwiLi4uXCIgY2FtYmlhLlxyXG4gKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjdXN0b21NZW51QWN0aW9ucyh2YWx1ZTogQXR0YWNobWVudE1lbnVBY3Rpb25bXSkge1xyXG4gICAgdGhpcy5fY3VzdG9tTWVudUFjdGlvbnMgPSB2YWx1ZSB8fCBbXTtcclxuICAgIHRoaXMuc2V0dXBNZW51QWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1c3RvbU1lbnVBY3Rpb25zKCk6IEF0dGFjaG1lbnRNZW51QWN0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbU1lbnVBY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3VzdG9tQ29sdW1uczogQXR0YWNobWVudEZpZWxkQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogU09MTyBxdWFuZG8gW2N1c3RvbUNvbHVtbnNdPVwiLi4uXCIgY2FtYmlhLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGN1c3RvbUNvbHVtbnModmFsdWU6IEF0dGFjaG1lbnRGaWVsZENvbHVtbltdKSB7XHJcbiAgICB0aGlzLl9jdXN0b21Db2x1bW5zID0gdmFsdWUgfHwgW107XHJcbiAgICB0aGlzLnNldHVwVGFibGVDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VzdG9tQ29sdW1ucygpOiBBdHRhY2htZW50RmllbGRDb2x1bW5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ29sdW1ucztcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gQE91dHB1dCBkZWwgY29tcG9uZW50ZVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdGl0dWlzY2UgbGEgbGlzdGEgYWdnaW9ybmF0YSBkZWdsaSBhbGxlZ2F0aS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbG9jYWxFZGl0ZWRBdHRhY2htZW50czogRXZlbnRFbWl0dGVyPEFycmF5PElBdHRhY2htZW50RFRPPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PElBdHRhY2htZW50RFRPPj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIHNjYXRlbmF0byBhbGxhIHByZXNzaW9uZSBkZWwgcHVsc2FudGUgRVNDSSBkZWxsYSBtb2RhbGUgZGkgY2FyaWNhbWVudG8gZmlsZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWJvcnRBZGRBdHRhY2htZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZGkgb3V0cHV0IGNoZSByZXN0aXR1aXNjZSBsJ0lBdHRhY2htZW50RFRPIHNlbGV6aW9uYXRvIHBlciBpbCBkb3dubG9hZCBuZWwgY2FzbyBGaWxlRGF0YUJhc2U2NCwgRmlsZUNvbnRlbnRUeXBlIG8gRmlsZU5hbWUgbm9uIGZvc3Nlcm8gc3BlY2lmaWNhdGkuXHJcbiAgICovXHJcbiAgQE91dHB1dChcImRvd25sb2FkQXR0YWNobWVudFwiKSBkb3dubG9hZEF0dGFjaG1lbnQ6IEV2ZW50RW1pdHRlcjxJQXR0YWNobWVudERUTz4gPSBuZXcgRXZlbnRFbWl0dGVyPElBdHRhY2htZW50RFRPPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZGkgb3V0cHV0IGNoZSByZXN0aXR1aXNjZSBsJ2VsZW1lbnRvIGVsaW1pbmF0byBwcmltYSBjaGUgcXVlc3RvIHZlbmdhIGVmZmV0dGl2YW1lbnRlIHJpc21vc3NvIGRhbGxhIGxpc3RhLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoXCJvbkRlbGV0ZUF0dGFjaG1lbnRcIikgb25EZWxldGVBdHRhY2htZW50OiBFdmVudEVtaXR0ZXI8SUF0dGFjaG1lbnREVE8+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQXR0YWNobWVudERUTz4oKTtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBnZXN0aW9uZSBjYXJpY2FtZW50byBudW92byBhbGxlZ2F0b1xyXG4gIG5ld0F0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPID0ge30gYXMgSUF0dGFjaG1lbnREVE87XHJcbiAgbmV3TXVsdGlwbGVBdHRhY2htZW50czogQXJyYXk8SUF0dGFjaG1lbnREVE8+ID0gW107XHJcbiAgYXR0YWNobWVudFR5cGUgPSBBdHRhY2htZW50VHlwZTtcclxuICAvLyB1cGxvYWRUeXBlRW51bSA9IFVwbG9hZFR5cGVFbnVtO1xyXG4gIG5ld0F0dGFjaG1lbnRGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc2VsZWN0ZWRGaWxlOiBGaWxlID0gbnVsbDtcclxuICBzZWxlY3RlZEZpbGVzOiBBcnJheTxGaWxlPiA9IG51bGw7XHJcbiAgc2hvd0Nyb3BJbWFnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dBZGRBdHRhY2htZW50XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0FkZEF0dGFjaG1lbnQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgZGlhbG9nUmVmQWRkQXR0YWNobWVudDogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dBZGRNdWx0aXBsZUF0dGFjaG1lbnRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nQWRkTXVsdGlwbGVBdHRhY2htZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIGRpYWxvZ1JlZkNyb3BJbWFnZTogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dDcm9wSW1hZ2VcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nQ3JvcEltYWdlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBAVmlld0NoaWxkKCdhZGRpbmdMaW5rVGVtcGxhdGUnKSBhZGRpbmdMaW5rVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBQcm9wcmlldMOgIHBlciBnZXN0aW9uZSByaWRpbWVuc2lvbmFtZW50byBmaWxlIGRpIHRpcG8gaW1hZ2VcclxuICBpbWFnZUNoYW5nZWRFdmVudDogYW55ID0gXCJcIjtcclxuICBjcm9wcGVkSW1hZ2U6IGFueSA9IFwiXCI7XHJcbiAgdHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSA9IHt9O1xyXG4gIGNhbnZhc1JvdGF0aW9uID0gMDtcclxuICBAVmlld0NoaWxkKEltYWdlQ3JvcHBlckNvbXBvbmVudCkgaW1hZ2VDcm9wcGVyOiBJbWFnZUNyb3BwZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChcImltYWdlSW5wdXRcIikgaW1hZ2VJbnB1dDogYW55O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBBdHRhY2htZW50VHlwZSA9IEF0dGFjaG1lbnRUeXBlO1xyXG4gIHNlbGVjdGVkQXR0YWNobWVudDogSUF0dGFjaG1lbnREVE87XHJcblxyXG4gIG9yaWdpbmFsV2lkdGg6IG51bWJlcjtcclxuICBvcmlnaW5hbEhlaWdodDogbnVtYmVyO1xyXG4gIGN1c3RvbVdpZHRoOiBudW1iZXI7XHJcbiAgY3VzdG9tSGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJpbmxpbmVQcmV2aWV3VGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSkgaW5saW5lUHJldmlld1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWFsb2dQcmV2aWV3XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ1ByZXZpZXc6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIGltYWdlRmlsZTogRmlsZTtcclxuXHJcbiAgYWRkaW5nTGlua01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8jcmVnaW9uIFNlemlvbmUgbnVvdmEgcmVmYWN0b3JpbmdcclxuXHJcbiAgLy8gUHJvcHJpZXTDoCBpbnRlcm5hIGNoZSBjb250ZXJyw6AgbCdhcnJheSBmaW5hbGUgZGkgY29sb25uZSBvcmRpbmF0ZVxyXG4gIF90YWJsZUNvbHVtbnM6IEF0dGFjaG1lbnRGaWVsZENvbHVtbltdID0gW107XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdEZpbGVUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGRlZmF1bHRGaWxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdEFjdGlvbnNUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGRlZmF1bHRBY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8vIFN0YXRvIGRyYWcgJiBkcm9wIGUgdG9hc3RcclxuICBkcmFnT3ZlciA9IGZhbHNlO1xyXG4gIHRvYXN0ID0ge1xyXG4gICAgdmlzaWJsZTogZmFsc2UgYXMgYm9vbGVhbixcclxuICAgIHR5cGU6ICdzdWNjZXNzJyBhcyAnc3VjY2VzcycgfCAnZXJyb3InLFxyXG4gICAgdGV4dDogJycgYXMgc3RyaW5nLFxyXG4gICAgdGltZW91dElkOiAwIGFzIGFueVxyXG4gIH07XHJcblxyXG4gIHByb2dyZXNzUGVyY2VudCA9IDA7XHJcbiAgdG90YWxTaXplQnl0ZXMgPSAwO1xyXG4gIGdldCB0b3RhbFNpemVGb3JtYXR0ZWQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZm9ybWF0RmlsZVNpemUodGhpcy50b3RhbFNpemVCeXRlcyk7IH1cclxuXHJcbiAgLy8gVXRpbGl0eSBwZXIgZm9ybWF0dGFyZSBieXRlcyAoMiBkZWNpbWFsaSlcclxuICBmb3JtYXRGaWxlU2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICghYnl0ZXMgfHwgYnl0ZXMgPD0gMCkgcmV0dXJuICcwIEJ5dGVzJztcclxuICAgIGNvbnN0IGsgPSAxMDI0O1xyXG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7XHJcbiAgICByZXR1cm4gYCR7cGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSl9ICR7c2l6ZXNbaV19YDtcclxuICB9XHJcblxyXG4gIC8vIE1vc3RyYSB0b2FzdCBjb24gYXV0b+KAkWhpZGUgZSByZXNldCBwcm9ncmVzcyBiYXIgQ1NTXHJcbiAgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyA9ICdzdWNjZXNzJywgZHVyYXRpb25NcyA9IDMwMDApIHtcclxuICAgIGlmICh0aGlzLnRvYXN0LnZpc2libGUgJiYgdGhpcy50b2FzdC50ZXh0ID09PSBtZXNzYWdlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYW5jZWxsYSBpbCB0aW1lb3V0IHByZWNlZGVudGUgc2UgZXNpc3RlXHJcbiAgICBpZiAodGhpcy50b2FzdC50aW1lb3V0SWQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG9hc3QudGltZW91dElkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYWxjb2xhIHVuYSBkdXJhdGEgZGluYW1pY2FcclxuICAgIGNvbnN0IGR1cmF0aW9uID0gZHVyYXRpb25NcyB8fCBNYXRoLm1heCg0MDAwLCBtZXNzYWdlLmxlbmd0aCAqIDEwMCk7XHJcblxyXG4gICAgdGhpcy50b2FzdC50ZXh0ID0gbWVzc2FnZTtcclxuICAgIHRoaXMudG9hc3QudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLnRvYXN0LnZpc2libGUgPSB0cnVlO1xyXG5cclxuICAgIC8vIEltcG9zdGEgaWwgbnVvdm8gdGltZW91dCBwZXIgbmFzY29uZGVyZSBhdXRvbWF0aWNhbWVudGUgaWwgdG9hc3RcclxuICAgIHRoaXMudG9hc3QudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudG9hc3QudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfSwgZHVyYXRpb24pO1xyXG4gIH1cclxuXHJcbiAgI2VuZHJlZ2lvblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGVxcEF0dGFjaG1lbnRTZXJ2aWNlOiBFcXBBdHRhY2htZW50U2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIC8vIEluaXppYWxpenphIG1ldHJpY2hlIGUgcHJvZ3Jlc3MgaW4gYmFzZSBhbGxvIHN0YXRvIGluaXppYWxlXHJcbiAgICB0aGlzLnJlY29tcHV0ZVRvdGFsc0FuZFByb2dyZXNzKCk7XHJcblxyXG4gICAgLy9TZSDDqCBzdGF0YSByaWNoaWVzdGEgbGEgZ2VzdGlvbmUgZGVsbGUgc29sZSBpbW1hZ2luaSBhbGxvcmEgaW1wb3N0YSBpbCBmaWx0cm8gcGVyIGxlIGVzdGVuc2lvbmkgcG9zc2liaWxpIGRhIGNhcmljYXJlXHJcbiAgICBpZiAoIXRoaXMuYWNjZXB0ZWRGaWxlVHlwZXMpXHJcbiAgICAgIGlmICh0aGlzLmFsbG93T25seUltYWdlcyA9PSB0cnVlKSB0aGlzLmFjY2VwdGVkRmlsZVR5cGVzID0gXCJpbWFnZS8qXCI7XHJcbiAgICAgIGVsc2UgdGhpcy5hY2NlcHRlZEZpbGVUeXBlcyA9IFwiKlwiO1xyXG5cclxuICAgIC8vIFNlIG5vbiBzb25vIHN0YXRpIHNwZWNpZmljYXRpIGkgdGlwaSBkYSBnZXN0aXJlIG1hIMOoIHN0YXRvIHBhc3NhdG8gbnVsbCBvIHVuIGFycmF5IHZ1b3RvIGltcG9zdG8gaSB0aXBpIGRpIGRlZmF1bHQuXHJcbiAgICBpZiAoIXRoaXMuYWxsb3dlZFR5cGVzIHx8IHRoaXMuYWxsb3dlZFR5cGVzLmxlbmd0aCA9PSAwKVxyXG4gICAgICB0aGlzLmFsbG93ZWRUeXBlcyA9IFtBdHRhY2htZW50VHlwZS5GSUxFLCBBdHRhY2htZW50VHlwZS5MSU5LLCBBdHRhY2htZW50VHlwZS5EUk9QQk9YXTtcclxuICAgIGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmFsbG93ZWRUeXBlcy5maW5kKCh0KSA9PiB0ICE9IEF0dGFjaG1lbnRUeXBlLkZJTEUgJiYgdCAhPSBBdHRhY2htZW50VHlwZS5MSU5LICYmIHQgIT0gQXR0YWNobWVudFR5cGUuRFJPUEJPWClcclxuICAgICkge1xyXG4gICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5XYXJuaW5nKFxyXG4gICAgICAgICdBbG1lbm8gdW5vIGRlZ2xpIEF0dGFjaG1lbnRUeXBlIHNlbGV6aW9uYXRpIG5lbCBwYXJhbWV0cm8gXCJhbGxvd2VkVHlwZXNcIiBub24gZXNpc3RlLidcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5hbGxvd2VkVHlwZXMgPSBbQXR0YWNobWVudFR5cGUuRklMRSwgQXR0YWNobWVudFR5cGUuTElOSywgQXR0YWNobWVudFR5cGUuRFJPUEJPWF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXR0YWNobWVudHNMaXN0ID09IG51bGwpIHRoaXMuYXR0YWNobWVudHNMaXN0ID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG5cclxuICAgIC8vIFNlIMOoIHN0YXRvIHBhc3NhdG8gdW4gc2luZ29sbyBhbGxlZ2F0byBsbyBhZ2dpdW5nbyBhbGxhIGxpc3RhXHJcbiAgICBpZiAodGhpcy5zaW5nbGVBdHRhY2htZW50ICE9IG51bGwgJiYgdGhpcy5hdHRhY2htZW50c0xpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5hdHRhY2htZW50c0xpc3QucHVzaCh0aGlzLnNpbmdsZUF0dGFjaG1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hlY2tBdHRhY2htZW50SW1hZ2UoKTtcclxuXHJcbiAgICBpZiAodGhpcy5hbGxvd2VkVHlwZXMuaW5jbHVkZXMoMykpIHtcclxuICAgICAgdGhpcy5lcXBBdHRhY2htZW50U2VydmljZS5sb2FkRHJvcGJveFNjcmlwdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0dXBUYWJsZUNvbHVtbnMoKTtcclxuICAgIHRoaXMuc2V0dXBNZW51QWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgc2V0Vmlld01vZGUobW9kZTogJ2NhcmQnIHwgJ3RhYmxlJyk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3TW9kZSA9IG1vZGU7XHJcbiAgfVxyXG5cclxuICAvLyBSaWNhbGNvbGEgbGEgc29tbWEgcGVzYXRhIHN1Z2xpIGFsbGVnYXRpIHByZXNlbnRpXHJcbiAgcHJpdmF0ZSByZWNvbXB1dGVUb3RhbHNBbmRQcm9ncmVzcygpIHtcclxuICAgIHRoaXMudG90YWxTaXplQnl0ZXMgPSAodGhpcy5hdHRhY2htZW50c0xpc3QgfHwgW10pXHJcbiAgICAgIC5maWx0ZXIoYSA9PiAhIWEpXHJcbiAgICAgIC5yZWR1Y2UoKHN1bSwgYSkgPT4gc3VtICsgdGhpcy5ieXRlc0Zyb21CYXNlNjQoYS5GaWxlRGF0YUJhc2U2NCB8fCBhLkZpbGVUaHVtYm5haWxCYXNlNjQgfHwgJycpLCAwKTtcclxuXHJcbiAgICAvLyBQcm9ncmVzcyBmaXR0aXppbzogMTAwJSBzZSBwcmVzZW50aSBmaWxlLCAwIHNlIHZ1b3RvXHJcbiAgICB0aGlzLnByb2dyZXNzUGVyY2VudCA9ICh0aGlzLmF0dGFjaG1lbnRzTGlzdCAmJiB0aGlzLmF0dGFjaG1lbnRzTGlzdC5sZW5ndGggPiAwKSA/IDEwMCA6IDA7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnRvYXN0LnRpbWVvdXRJZCkgY2xlYXJUaW1lb3V0KHRoaXMudG9hc3QudGltZW91dElkKTtcclxuICB9XHJcblxyXG4gIC8vIENhbGNvbGEgaSBieXRlIGRhIHVuYSBzdHJpbmdhIEJhc2U2NCBwdXJhIChzZW56YSBwcmVmaXNzbyBkYXRhOi4uLilcclxuICBwdWJsaWMgYnl0ZXNGcm9tQmFzZTY0KGJhc2U2NDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGlmICghYmFzZTY0KSByZXR1cm4gMDtcclxuICAgIC8vIFJpbXVvdmkgZXZlbnR1YWxlIHByZWZpc3NvIGRhdGEgVVJMXHJcbiAgICBjb25zdCBjb21tYUlkeCA9IGJhc2U2NC5pbmRleE9mKCcsJyk7XHJcbiAgICBjb25zdCBiNjQgPSBjb21tYUlkeCA+PSAwID8gYmFzZTY0LnN1YnN0cmluZyhjb21tYUlkeCArIDEpIDogYmFzZTY0O1xyXG4gICAgLy8gQ29udGEgcGFkZGluZ1xyXG4gICAgbGV0IHBhZGRpbmcgPSAwO1xyXG4gICAgaWYgKGI2NC5lbmRzV2l0aCgnPT0nKSkgcGFkZGluZyA9IDI7XHJcbiAgICBlbHNlIGlmIChiNjQuZW5kc1dpdGgoJz0nKSkgcGFkZGluZyA9IDE7XHJcbiAgICAvLyBGb3JtdWxhIGVzYXR0YTogKDMgKiAobGVuIC8gNCkpIC0gcGFkZGluZ1xyXG4gICAgY29uc3QgbGVuID0gYjY0Lmxlbmd0aDtcclxuICAgIHJldHVybiBNYXRoLm1heCgwLCAoMyAqIE1hdGguZmxvb3IobGVuIC8gNCkpIC0gcGFkZGluZyk7XHJcbiAgfVxyXG5cclxuICBjaGVja0F0dGFjaG1lbnRJbWFnZSgpIHtcclxuICAgIHRoaXMuYXR0YWNobWVudHNMaXN0LmZvckVhY2goKGEpID0+IHtcclxuICAgICAgYS5Jc0ltYWdlID0gQXR0YWNobWVudEhlbHBlclNlcnZpY2UuY2hlY2tJbWFnZUZyb21NaW1lVHlwZShhLkZpbGVDb250ZW50VHlwZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHZXN0aW9uZSBlbGVuY28gYWxsZWdhdGlcclxuXHJcbiAgLyoqXHJcbiAgICogRWxpbWluYSB1biBhbGxlZ2F0byBlbGltaW5hbmRvIGFuY2hlIGlsIGZpbGUgcHJlc2VudGUgbmVsbG8gc3RvcmFnZSBkaSBhcmNoaXZpYXppb25lIHV0aWxpenphdG8gKEFXUyBvIGNhcnRlbGxhIHByb2dldHRvKVxyXG4gICAqIEBwYXJhbSBlbGVtZW50IElBdHRhY2htZW50RFRPIGRhIGNhbmNlbGxhcmVcclxuICAgKi9cclxuICBkZWxldGVBdHRhY2htZW50KGVsZW1lbnQ6IElBdHRhY2htZW50RFRPKSB7XHJcbiAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5Db25maXJtKFxyXG4gICAgICB0aGlzLmRlbGV0ZURpYWxvZ01lc3NhZ2UsXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbW92ZUF0dGFjaG1lbnRGcm9tTGlzdCh0aGlzLmF0dGFjaG1lbnRzTGlzdC5pbmRleE9mKGVsZW1lbnQpKTtcclxuICAgICAgfSxcclxuICAgICAgdHJ1ZSxcclxuICAgICAgdGhpcy5kZWxldGVEaWFsb2dUaXRsZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpbXVvdmUgbCdhbGxlZ2F0byBzZWxlemlvbmF0byBkYWxsYSBsaXN0YSBcImF0dGFjaG1lbnRzTGlzdFwiIGUgaW52b2NhIGwnZXZlbnRvIGRpIG91dHB1dCBjaGUgcmVzdGl0dWlzY2UgbGEgbGlzdGEgYWdnaW9ybmF0YS5cclxuICAgKiBAcGFyYW0gYXR0YWNobWVudEluZGV4IEluZGljZSBkZWxsJ2F0dGFjaG1lbnQgZGEgcmltdW92ZXJlXHJcbiAgICovXHJcbiAgcmVtb3ZlQXR0YWNobWVudEZyb21MaXN0KGF0dGFjaG1lbnRJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm9uRGVsZXRlQXR0YWNobWVudC5lbWl0KHRoaXMuYXR0YWNobWVudHNMaXN0W2F0dGFjaG1lbnRJbmRleF0pO1xyXG5cclxuICAgIHRoaXMuYXR0YWNobWVudHNMaXN0LnNwbGljZShhdHRhY2htZW50SW5kZXgsIDEpO1xyXG4gICAgdGhpcy5sb2NhbEVkaXRlZEF0dGFjaG1lbnRzLmVtaXQodGhpcy5hdHRhY2htZW50c0xpc3QpO1xyXG5cclxuICAgIHRoaXMucmVjb21wdXRlVG90YWxzQW5kUHJvZ3Jlc3MoKTtcclxuICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMucmVtb3ZlZExhYmVsIHx8ICdGaWxlIHJlbW92ZWQnLCAnc3VjY2VzcycpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2ltdWxhdGVQcm9ncmVzcygpIHtcclxuICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50ID0gMDtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnByb2dyZXNzUGVyY2VudCA9IDMwO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudCA9IDYwO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnQgPSAxMDA7XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgICAgfSwgMjAwKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU2NhcmljYSBsJ2FsbGVnYXRvIG8gYXByZSBpbCBsaW5rXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgQWxsZWdhdG8gZGEgbW9zdHJhcmVcclxuICAgKi9cclxuICB2aWV3QXR0YWNobWVudChhdHRhY2htZW50OiBJQXR0YWNobWVudERUTykge1xyXG4gICAgaWYgKGF0dGFjaG1lbnQuQXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuTElOSykge1xyXG4gICAgICB3aW5kb3cub3BlbihhdHRhY2htZW50LkZpbGVQYXRoLCBcIl9ibGFua1wiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhdHRhY2htZW50LkxhcmdlRmlsZSkge1xyXG4gICAgICBjb25zdCBmaWxlID0gYXR0YWNobWVudC5MYXJnZUZpbGU7XHJcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgbGluay5ocmVmID0gdXJsO1xyXG4gICAgICBsaW5rLmRvd25sb2FkID0gYXR0YWNobWVudC5GaWxlTmFtZSB8fCBmaWxlLm5hbWU7XHJcbiAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCksIDEwMDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgJiYgYXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgJiYgYXR0YWNobWVudC5GaWxlTmFtZSkge1xyXG4gICAgICBsZXQgc291cmNlID0gYGRhdGE6JHthdHRhY2htZW50LkZpbGVDb250ZW50VHlwZX07YmFzZTY0LCR7YXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH1gO1xyXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgIGxpbmsuaHJlZiA9IHNvdXJjZTtcclxuICAgICAgbGluay5kb3dubG9hZCA9IGAke2F0dGFjaG1lbnQuRmlsZU5hbWV9YDtcclxuICAgICAgbGluay5jbGljaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kb3dubG9hZEF0dGFjaG1lbnQuZW1pdChhdHRhY2htZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpZGVmaW5pc2NlIGwnaWNvbmEgZGEgbW9zdHJhcmUgbmVsbGEgY29sb25uYSBkZWxsJ2VxcC10YWJsZSBwZXIgb2duaSBmaWxlLlxyXG4gICAqIEwnaWNvbmEgdmFyaWEgaW4gYmFzZSBhbGwnZXN0ZW5zaW9uZSBkZWwgZmlsZVxyXG4gICAqIEBwYXJhbSBhdHRhY2htZW50XHJcbiAgICovXHJcbiAgZ2V0QXR0YWNobWVudEljb24oYXR0YWNobWVudDogSUF0dGFjaG1lbnREVE8pIHtcclxuICAgIGlmIChhdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkxJTkspIHJldHVybiBcImZhcyBmYS1saW5rXCI7XHJcbiAgICBlbHNlIHJldHVybiBBdHRhY2htZW50SGVscGVyU2VydmljZS5nZXRJY29uRnJvbUZpbGVFeHRlbnNpb25lKGF0dGFjaG1lbnQuRmlsZUV4dGVuc2lvbik7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLyoqXHJcbiAgICogSW4gY2FzbyBkaSBhbGxlZ2F0byBzaW5nb2xvLCBzY2VnbGllIHF1YWxlIG1ldG9kbyByaWNoaWFtYXJlIGluIGJhc2UgYWwgdGlwbyBkaSBhbGxlZ2F0b1xyXG4gICAqL1xyXG4gIGFkZEZpbGUoYXR0YWNobWVudFR5cGU6IEF0dGFjaG1lbnRUeXBlLCBpbWFnZUlucHV0ID0gbnVsbCkge1xyXG4gICAgaWYgKGF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkxJTkspIHtcclxuICAgICAgdGhpcy5zd2l0Y2hUb0FkZGluZ0xpbmtNb2RlKCk7XHJcbiAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkZJTEUpIHtcclxuICAgICAgaW1hZ2VJbnB1dC5jbGljaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jaG9vc2VEcm9wYm94RmlsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQXR0YWNobWVudEZvcm0oKSB7XHJcbiAgICAvL0NyZWEgbGEgZm9ybSBwZXIgbGEgdmFsaWRhemlvbmUgZGVpIGNhbXBpXHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHR5cGU6IFt0aGlzLm5ld0F0dGFjaG1lbnQuQXR0YWNobWVudFR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBuYW1lOiBbdGhpcy5uZXdBdHRhY2htZW50LkZpbGVOYW1lXSxcclxuICAgICAgcGF0aDogW3RoaXMubmV3QXR0YWNobWVudC5GaWxlUGF0aF0sXHJcbiAgICAgIGN1c3RvbUhlaWdodDogW3RoaXMuY3VzdG9tSGVpZ2h0XSxcclxuICAgICAgY3VzdG9tV2lkdGg6IFt0aGlzLmN1c3RvbVdpZHRoXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZShlbWl0Q2xvc2VFdmVudCA9IHRydWUpIHtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudCA9IHt9IGFzIElBdHRhY2htZW50RFRPO1xyXG4gICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG4gICAgdGhpcy5hYm9ydEZpbGUoKTtcclxuICAgIGlmICh0aGlzLm5ld0F0dGFjaG1lbnRGb3JtKSB0aGlzLm5ld0F0dGFjaG1lbnRGb3JtLnJlc2V0KCk7XHJcblxyXG4gICAgdGhpcy5kaWFsb2dSZWZDcm9wSW1hZ2UuY2xvc2UoKTtcclxuICAgIHRoaXMucmVzdG9yZU9yaWdpbmFsRGltZW5zaW9ucygpO1xyXG5cclxuICAgIGlmIChlbWl0Q2xvc2VFdmVudCA9PSB0cnVlICYmIHRoaXMuYWJvcnRBZGRBdHRhY2htZW50KSB0aGlzLmFib3J0QWRkQXR0YWNobWVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbiBiYXNlIGFsIHRpcG8gZGkgYWxsZWdhdG8gY29udHJvbGxhIHNlIGRpc2FiaWxpdGFyZSBvIG1lbm8gaWwgcHVsc2FudGUgcGVyIHNhbHZhcmUuXHJcbiAgICogRnVuemlvbmUgdXNhdGEgbmVsIFtkaXNhYmxlXSBkZWwgcHVsc2FudGUgXCJTYWx2YVwiIGRlbCBkaWFsb2cgcGVyIGwnYWdnaXVudGEgZGkgdW4gYWxsZWdhdG8uXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBkaXNhYmxlU2F2ZSgpIHtcclxuICAgIGlmICh0aGlzLmxvYWRNdWx0aXBsZUZpbGVzICE9IHRydWUpIHtcclxuICAgICAgaWYgKHRoaXMubmV3QXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5GSUxFKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgJiYgIXRoaXMubmV3QXR0YWNobWVudC5MYXJnZUZpbGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZVBhdGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzLmZpbHRlcihcclxuICAgICAgICAgIChwKSA9PlxyXG4gICAgICAgICAgICAocC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5GSUxFICYmICFwLkZpbGVEYXRhQmFzZTY0ICYmICFwLkxhcmdlRmlsZSkgfHxcclxuICAgICAgICAgICAgKHAuQXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuTElOSyAmJiAhcC5GaWxlUGF0aClcclxuICAgICAgICApLmxlbmd0aCA+IDBcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbmZpcm1BZGRBdHRhY2htZW50KCkge1xyXG4gICAgaWYgKHRoaXMubmV3QXR0YWNobWVudC5Jc0ltYWdlICYmIHRoaXMuaW1hZ2VDcm9wcGVyKSB7XHJcbiAgICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IHRoaXMuaW1hZ2VDcm9wcGVyLmNyb3AoKS5iYXNlNjQuc3BsaXQoXCI7YmFzZTY0LFwiKVsxXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5sb2FkTXVsdGlwbGVGaWxlcyAhPSB0cnVlKSB7XHJcbiAgICAgIGlmICh0aGlzLm5ld0F0dGFjaG1lbnQuQXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuTElOSyAmJiAhdGhpcy5uZXdBdHRhY2htZW50LkZpbGVOYW1lKVxyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlTmFtZSA9IHRoaXMubmV3QXR0YWNobWVudC5GaWxlUGF0aDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzTGlzdCA9PSBudWxsKSB0aGlzLmF0dGFjaG1lbnRzTGlzdCA9IG5ldyBBcnJheTxJQXR0YWNobWVudERUTz4oKTtcclxuXHJcbiAgICAgIHRoaXMuYXR0YWNobWVudHNMaXN0LnB1c2godGhpcy5uZXdBdHRhY2htZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMgPT0gbnVsbCB8fCB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMubGVuZ3RoID09IDApIHJldHVybjtcclxuXHJcbiAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzTGlzdCA9PSBudWxsKSB0aGlzLmF0dGFjaG1lbnRzTGlzdCA9IG5ldyBBcnJheTxJQXR0YWNobWVudERUTz4oKTtcclxuXHJcbiAgICAgIHRoaXMuYXR0YWNobWVudHNMaXN0ID0gdGhpcy5hdHRhY2htZW50c0xpc3QuY29uY2F0KHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2NhbEVkaXRlZEF0dGFjaG1lbnRzLmVtaXQodGhpcy5hdHRhY2htZW50c0xpc3QpO1xyXG5cclxuICAgIGlmICh0aGlzLm5ld0F0dGFjaG1lbnQuSXNJbWFnZSkge1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZkNyb3BJbWFnZS5jbG9zZSgpO1xyXG4gICAgICB0aGlzLnJlc3RvcmVPcmlnaW5hbERpbWVuc2lvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5uZXdBdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlID09PSBBdHRhY2htZW50VHlwZS5MSU5LKSB7XHJcbiAgICAgIHRoaXMubmV3QXR0YWNobWVudCA9IHt9IGFzIElBdHRhY2htZW50RFRPO1xyXG4gICAgICBpZiAodGhpcy5uZXdBdHRhY2htZW50Rm9ybSkgdGhpcy5uZXdBdHRhY2htZW50Rm9ybS5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzZXRTZWxlY3RlZEZpbGVzKCk7XHJcbiAgfVxyXG5cclxuICAvLyAyLiBSRVNFVCBUT1RBTEU6IFN2dW90aWFtbyBsZSBwcm9wcmlldMOgIGRpIGNsYXNzZSBwZXIgZXZpdGFyZSBjaGUgXHJcbiAgLy8gcmVzaWR1aSBkaSB1cGxvYWQgcHJlY2VkZW50aSAoc2luZ29saSBvIG11bHRpcGxpKSB2ZW5nYW5vIHRyYXNjaW5hdGkuXHJcbiAgcHJpdmF0ZSByZXNldFNlbGVjdGVkRmlsZXMoKSB7XHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnQgPSB7fSBhcyBJQXR0YWNobWVudERUTztcclxuICAgIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBudWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gW107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHJlIGlsIGRpYWxvZyBwZXIgbCdhbnRlcHJpbWEgZGVsbCdhbGxlZ2F0byBzZWxlemlvbmF0by5cclxuICAgKiBAcGFyYW0gcm93XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBvcGVuUHJldmlld0RpYWxvZyhyb3c6IElBdHRhY2htZW50RFRPKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNobWVudCA9IHsgLi4ucm93IH07XHJcblxyXG5cclxuICAgIGlmICh0aGlzLmdldEF0dGFjaG1lbnRFbmRwb2ludCAmJiB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5Jc0ltYWdlICYmICF0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCkge1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEF0dGFjaG1lbnRCeUlEKClcclxuICAgICAgICAudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IHJlcy5GaWxlRGF0YUJhc2U2NDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5FcnJvcihlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5MSU5LKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LlRydXN0ZWRVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZVBhdGhcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVDb250ZW50VHlwZT8uc3RhcnRzV2l0aChcInZpZGVvL1wiKSAmJiB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5MYXJnZUZpbGUpIHtcclxuICAgICAgY29uc3QgdmlkZW9VcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkxhcmdlRmlsZSk7XHJcbiAgICAgIC8vIFVzaWFtbyBieXBhc3NTZWN1cml0eVRydXN0VXJsIHBlciBsYSBzb3JnZW50ZSBkZWwgdmlkZW9cclxuICAgICAgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuVHJ1c3RlZFVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodmlkZW9VcmwpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LklzSW1hZ2UgJiZcclxuICAgICAgIXRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0ICYmXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlVGh1bWJuYWlsQmFzZTY0XHJcbiAgICApIHtcclxuICAgICAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UuSW5mbyhcIkltcG9zc2liaWxlIGFwcmlyZSBsJ2FudGVwcmltYSBkZWxsJ2FsbGVnYXRvLCBmaWxlIG1hbmNhbnRlLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vcGRmJyAmJiB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5UcnVzdGVkVXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKFxyXG4gICAgICAgIGBkYXRhOmFwcGxpY2F0aW9uL3BkZjtiYXNlNjQsJHt0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH1gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuSXNJbWFnZSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZVBhdGggJiYgdGhpcy5wcm9kdWN0aW9uQmFzZVVybCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LlRydXN0ZWRVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXHJcbiAgICAgICAgICBcImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2d2aWV3P3VybD1cIiArXHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3Rpb25CYXNlVXJsICtcclxuICAgICAgICAgIFwiL1wiICtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVQYXRoICtcclxuICAgICAgICAgIFwiJmVtYmVkZGVkPXRydWVcIlxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UuSW5mbyhcIkltcG9zc2liaWxlIGFwcmlyZSBsJ2FudGVwcmltYSBkZWwgZG9jdW1lbnRvIVwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nUHJldmlldywge1xyXG4gICAgICBwYW5lbENsYXNzOiAnZXFwLWF0dGFjaG1lbnRzLXByZXZpZXctZGlhbG9nJyxcclxuICAgICAgbWF4V2lkdGg6ICc5NXZ3JyxcclxuICAgICAgd2lkdGg6IHJvdy5Jc0ltYWdlIHx8IHJvdy5GaWxlQ29udGVudFR5cGU/LnN0YXJ0c1dpdGgoJ3ZpZGVvLycpID8gJ2F1dG8nIDogJzExMDBweCcsXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQdWxpemlhIGRlbGxhIG1lbW9yaWEgcXVhbmRvIGlsIGRpYWxvZyBzaSBjaGl1ZGVcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNobWVudD8uRmlsZUNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKFwidmlkZW8vXCIpKSB7XHJcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5UcnVzdGVkVXJsIGFzIGFueSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0QXR0YWNobWVudEJ5SUQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SUF0dGFjaG1lbnREVE8+KHRoaXMuZ2V0QXR0YWNobWVudEVuZHBvaW50LCB0aGlzLnNlbGVjdGVkQXR0YWNobWVudCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gR2VzdGlvbmUgY2FyaWNhbWVudG8gZmlsZVxyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gc2NhdGVuYXRvIGFsbGEgc2VsZXppb25lIGRlbCBmaWxlIChvIGRlaSBmaWxlKS5cclxuICAgKiBTZSBpbCBjYXJpY2FtZW50byDDqCBTSU5HT0xPIG8gc2UgY29tdW5xdWUgw6ggc3RhdG8gc2VsZXppb25hdG8gdW4gc29sbyBmaWxlIGFsbG9yYSBzaSBvY2N1cGEgZGkgY29udHJvbGxhcmUgc2Ugc2kgdHJhdHRhIGRpIHVuIGltbWFnaW5lIGluIG1vZG8gZGFcclxuICAgKiBtb3N0cmFyZSBsZSBmdW56aW9uYWxpdMOgIGRlbCBjcm9wcGllIChwZXIgcml0YWdsaWFyZSBsJ2ltbWFnaW5lKSBvcHB1cmUgbm8uXHJcbiAgICogU2UgaWwgZmlsZSBjYXJpY2F0byBub24gw6ggdW4gaW1tYWdpbmUgYWxsb3JhIGdlbmVyYSBkaXJldHRhbWVudGUgaWwgYmFzZTY0IGUgbG8gYXNzb2NpYSBhbGwnYWxsZWdhdG8gZGEgc2FsdmFyZS5cclxuICAgKiBTZSBpbnZlY2UgaWwgY2FyaWNhbWVudG8gZGVpIGZpbGUgw6ggTVVMVElQTE8gZSBzb25vIHByZXNlbnRpIHBpw7kgZmlsZSBhbGxvcmEgZXNlZ3VlIGxlIHN0ZXNzZSBvcGVyYXppb25pIGlnbm9yYW5kbyBwZXLDsiBpbCBjb250cmxsb1xyXG4gICAqIGltbWFnaW5lIHBlciBpbCBjcm9wcGllIChpbiBjYXNvIGRpIGNhcmljYW1lbnRvIG11bHRpcGxvIGxlIGZ1bnppb25hbGl0w6AgZGVsIGNyb3BwaWUgc29ubyBkaXNhYmlsaXRhdGUpLlxyXG4gICAqL1xyXG4gIGFzeW5jIG9uRmlsZUFkZGVkKGV2ZW50LCBpc0ZpbGVEcm9wcGVkOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLkluZm8oXCJDYXJpY2FtZW50byBhbGxlZ2F0aSBub24gZGlzcG9uaWJpbGUuXCIpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dDcm9wSW1hZ2UgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnJlc2V0U2VsZWN0ZWRGaWxlcygpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzT25JbnB1dDogRmlsZVtdID0gaXNGaWxlRHJvcHBlZFxyXG4gICAgICA/IChldmVudCBhcyBGaWxlW10pXHJcbiAgICAgIDogQXJyYXkuZnJvbSgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy5maWxlcyB8fCBbXSk7XHJcblxyXG4gICAgY29uc3QgeyB2YWxpZEZpbGVzLCBvdmVyc2l6ZWRGaWxlcyB9ID0gdGhpcy52YWxpZGF0aW9uRmlsZShmaWxlc09uSW5wdXQpO1xyXG5cclxuICAgIGlmICghdmFsaWRGaWxlcyB8fCB2YWxpZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBpZiAoIWlzRmlsZURyb3BwZWQgJiYgZXZlbnQ/LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy9TZSDDqCBzdGF0byByaWNoaWVzdG8gaWwgY2FyaWNhbWVudG8gU0lOR09MTyBvcHB1cmUgc2UgaWwgY2FyaWNhbWVudG8gw6ggTVVMVElQTE8gbWEgw6ggc3RhdG8gc2VsZXppb25hdG8gdW4gc29sbyBmaWxlXHJcbiAgICAvL2FsbG9yYSB2ZXJpZmljYSBzZSBpbCBmaWxlIMOoIHVuIGltbWFnaW5lIChwZXIgbW9zdHJhcmUgaWwgQ1JPUFBJRSlcclxuICAgIGlmIChbLi4udmFsaWRGaWxlc10ubGVuZ3RoID09IDEgfHwgdGhpcy5sb2FkTXVsdGlwbGVGaWxlcyAhPSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gdmFsaWRGaWxlc1swXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gdmFsaWRGaWxlcztcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmlsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgLy9NZW1vcml6emEgaSBkYXRpIHBlciBsJ2FsbGVnYXRvXHJcbiAgICAgIHRoaXMubmV3QXR0YWNobWVudCA9IGF3YWl0IHRoaXMuY3JlYXRlQXR0YWNobWVudEZyb21VcGxvYWRlZEZpbGUodGhpcy5zZWxlY3RlZEZpbGUsIGZhbHNlKTtcclxuICAgICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG4gICAgICB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMucHVzaCh0aGlzLm5ld0F0dGFjaG1lbnQpO1xyXG5cclxuICAgICAgLy9TZSDDqCBzdGF0YSByaWNoaWVzdGEgbGEgZ2VzdGlvbmUgZGVsbGUgc29sZSBpbW1hZ2luaSBtYSBwZXIgZXJyb3JlIMOoIHN0YXRvIHNlbGV6aW9uYXRvIHVuIGZpbGUgY2hlIG5vbiDDqCB1biBpbW1hZ2luZVxyXG4gICAgICBsZXQgY2hlY2tPbmx5SW1hZ2UgPSB0aGlzLmNoZWNrQWxsb3dPbmx5SW1hZ2VGaWxlKHRoaXMubmV3QXR0YWNobWVudCk7XHJcbiAgICAgIGlmIChjaGVja09ubHlJbWFnZSA9PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5jcmVhdGVBdHRhY2htZW50Rm9ybSgpO1xyXG5cclxuICAgICAgLy9WZXJpZmljYSBzZSBpbCBmaWxlIGNhcmljYXRvIMOoIHVuJ2ltbWFnaW5lIG9wcHVyZSBuby4gU2Ugw6ggdW4gaW1tYWdpbmUsIHByaW1hIGRpIGNhcmljYXJsYSBtb3N0cmEgaWwgY3JvcHBpZSBwZXIgaWwgcmVzaXplLlxyXG4gICAgICAvL1NlIG5vbiDDqCB1biBpbW1hZ2luZSBhbGxvcmEgZ2VuZXJhIGlsIEJhc2U2NFxyXG4gICAgICBpZiAodGhpcy5uZXdBdHRhY2htZW50LklzSW1hZ2UgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZ2V0SW1hZ2VEaW1lbnNpb25zKHZhbGlkRmlsZXNbMF0pO1xyXG5cclxuICAgICAgICAvL01vc3RyYSBpbCBjcm9wcGllIGUgZGlzYWJpbGl0YSBsYSBmb3JtIGZpbmNow6ggbm9uIHRlcm1pbmEgbGEgbW9kaWZpY2EgZGVsbCdpbW1hZ2luZVxyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudEZvcm0uZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudEZvcm0uY29udHJvbHNbXCJjdXN0b21XaWR0aFwiXS5lbmFibGUoKTtcclxuICAgICAgICB0aGlzLm5ld0F0dGFjaG1lbnRGb3JtLmNvbnRyb2xzW1wiY3VzdG9tSGVpZ2h0XCJdLmVuYWJsZSgpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q3JvcEltYWdlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaW1hZ2VGaWxlID0gZXZlbnQ7XHJcblxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWZDcm9wSW1hZ2UgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nQ3JvcEltYWdlLCB7XHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgICAgIHdpZHRoOiBcIjYwJVwiLFxyXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IFwiODAlXCIsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiBcIjcwdmhcIixcclxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydlcXAtYXR0YWNobWVudHMtZGlhbG9nJywgJ2Nyb3AtZGlhbG9nJ11cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd0Nyb3BJbWFnZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBiYXNlNjRSZXN1bHQgPSBhd2FpdCB0aGlzLmdldEJhc2U2NEZyb21GaWxlKHRoaXMuc2VsZWN0ZWRGaWxlKTtcclxuICAgICAgICB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSBiYXNlNjRSZXN1bHQuQmFzZTY0RmlsZTtcclxuICAgICAgICB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlID0gYmFzZTY0UmVzdWx0LkNvbnRlbnRUeXBlO1xyXG4gICAgICAgIHRoaXMuY29uZmlybUFkZEF0dGFjaG1lbnQoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IHZhbGlkRmlsZXM7XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGVzIHx8IHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMpIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBuZXdBdHRhY2htZW50OiBJQXR0YWNobWVudERUTyA9IGF3YWl0IHRoaXMuY3JlYXRlQXR0YWNobWVudEZyb21VcGxvYWRlZEZpbGUoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXNbaV0sXHJcbiAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy9TZSDDqCBzdGF0YSByaWNoaWVzdGEgbGEgZ2VzdGlvbmUgZGVsbGUgc29sZSBpbW1hZ2luaSBtYSBwZXIgZXJyb3JlIMOoIHN0YXRvIHNlbGV6aW9uYXRvIHVuIGZpbGUgY2hlIG5vbiDDqCB1biBpbW1hZ2luZVxyXG4gICAgICAgIGxldCBjaGVja09ubHlJbWFnZSA9IHRoaXMuY2hlY2tBbGxvd09ubHlJbWFnZUZpbGUobmV3QXR0YWNobWVudCk7XHJcbiAgICAgICAgaWYgKGNoZWNrT25seUltYWdlID09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cy5wdXNoKG5ld0F0dGFjaG1lbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29uZmlybUFkZEF0dGFjaG1lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlY29tcHV0ZVRvdGFsc0FuZFByb2dyZXNzKCk7XHJcbiAgICB0aGlzLnNpbXVsYXRlUHJvZ3Jlc3MoKTtcclxuICAgIC8vIENhc28gMTogU3VjY2Vzc28gUGFyemlhbGUgKGFsY3VuaSBmaWxlIHZhbGlkaSwgYWx0cmkgbm8pXHJcbiAgICBpZiAob3ZlcnNpemVkRmlsZXMubGVuZ3RoID4gMCAmJiB2YWxpZEZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZmlsZU5hbWVzID0gb3ZlcnNpemVkRmlsZXMuam9pbignLCAnKTtcclxuICAgICAgdGhpcy5zaG93VG9hc3QoXHJcbiAgICAgICAgYCR7dmFsaWRGaWxlcy5sZW5ndGh9IGZpbGUgYWdnaXVudGkuICR7b3ZlcnNpemVkRmlsZXMubGVuZ3RofSBub24gY2FyaWNhdGkgcGVyY2jDqSB0cm9wcG8gZ3JhbmRpICgke2ZpbGVOYW1lc30pLmAsXHJcbiAgICAgICAgJ2Vycm9yJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gQ2FzbyAyOiBOZXNzdW4gZmlsZSB2YWxpZG9cclxuICAgIGVsc2UgaWYgKG92ZXJzaXplZEZpbGVzLmxlbmd0aCA+IDAgJiYgdmFsaWRGaWxlcy5sZW5ndGggPT09IDApIHtcclxuICAgIH1cclxuICAgIC8vIENhc28gMzogVHV0dGkgaSBmaWxlIHZhbGlkaVxyXG4gICAgZWxzZSBpZiAob3ZlcnNpemVkRmlsZXMubGVuZ3RoID09PSAwICYmIHZhbGlkRmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNob3dUb2FzdChcclxuICAgICAgICBgJHt2YWxpZEZpbGVzLmxlbmd0aH0gJHt0aGlzLmFkZGVkU3VjY2Vzc2Z1bGx5TGFiZWwgfHwgJ2ZpbGUocykgYWdnaXVudGkgY29uIHN1Y2Nlc3NvLid9YCxcclxuICAgICAgICAnc3VjY2VzcydcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvL1Jlc2V0dG8gaWwgdmFsb3JlIGRlbCBmaWxlIGlucHV0IGluIG1vZG8gZGEgc2NhdGVuYXJlIGlsIGNoYW5nZSBhbmNoZSBzZSBzaSBkb3Zlc3NlIGNhcmljYXJlIGxvIHN0ZXNzbyBmaWxlXHJcbiAgICBpZiAoIWlzRmlsZURyb3BwZWQpIGV2ZW50LnRhcmdldC52YWx1ZSA9IFwiXCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRpb25GaWxlKGZpbGVzT25JbnB1dDogRmlsZVtdKSB7XHJcbiAgICBjb25zdCB2YWxpZEZpbGVzOiBGaWxlW10gPSBbXTtcclxuICAgIGNvbnN0IG92ZXJzaXplZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlc09uSW5wdXQpIHtcclxuICAgICAgY29uc3QgZmlsZVNpemVNQiA9IGZpbGUuc2l6ZSAvIDEwMjQgLyAxMDI0O1xyXG4gICAgICBpZiAoZmlsZVNpemVNQiA+IHRoaXMubWF4RmlsZVNpemVNQikge1xyXG4gICAgICAgIG92ZXJzaXplZEZpbGVzLnB1c2goZmlsZS5uYW1lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWxpZEZpbGVzLnB1c2goZmlsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAob3ZlcnNpemVkRmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBmaWxlTmFtZXMgPSBvdmVyc2l6ZWRGaWxlcy5qb2luKCcsICcpO1xyXG4gICAgICB0aGlzLnNob3dUb2FzdChcclxuICAgICAgICBgRmlsZShzKSB0cm9wcG8gZ3JhbmRpOiAke2ZpbGVOYW1lc30uIExpbWl0ZTogJHt0aGlzLm1heEZpbGVTaXplTUJ9TUJgLFxyXG4gICAgICAgICdlcnJvcidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyB2YWxpZEZpbGVzLCBvdmVyc2l6ZWRGaWxlcyB9O1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcGFydGlyZSBkYWwgRklMRSByaWNldnV0byBpbiBpbnB1dCByaWNvc3RydWlzY2UgbCdvZ2dldHRvIElBdHRhY2htZW50RFRPIGUgbG8gcmVzdGl0dWlzY2UuXHJcbiAgICogU2UgaWwgcGFyYW1ldHJvIGdldEJhc2U2NCB2aWVuZSBwYXNzYXRvIGEgVFJVRSBhbGxvcmEsIHNlbXByZSBhIHBhcnRpcmUgZGFsIGZpbGUsZ2VuZXJhIGlsIGJhc2U2NCBlXHJcbiAgICogcmljYXZhIGlsIENvbnRlbnRUeXBlIGRhIGFzc29jaWFyZSBhbGwnb2dnZXR0byBJQXR0YWNobWVudERUTyBkYSByZXN0aXR1aXJlXHJcbiAgICogQHBhcmFtIGN1cnJlbnRGaWxlIE9nZ2V0dG8gRklMRSBkYSBwcm9jZXNzYXJlXHJcbiAgICogQHBhcmFtIGdldEJhc2U2NCBTZSBUUlVFIGFsbG9yYSBjYWxjb2xhIGJhc2U2NCBlIENvbnRlbnRUeXBlIGRlbCBmaWxlIHBhc3NhdG8gaW4gaW5wdXRcclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBvZ2dldHRvIGRpIHRpcG8gSUF0dGFjaG1lbnREVE9cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUF0dGFjaG1lbnRGcm9tVXBsb2FkZWRGaWxlKFxyXG4gICAgY3VycmVudEZpbGU6IEZpbGUsXHJcbiAgICBnZXRCYXNlNjQ6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgY3JvcEZpbGU6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IFByb21pc2U8SUF0dGFjaG1lbnREVE8+IHtcclxuICAgIGxldCBuZXdBdHRhY2htZW50OiBJQXR0YWNobWVudERUTyA9IHt9IGFzIElBdHRhY2htZW50RFRPO1xyXG4gICAgLy9NZW1vcml6emEgaSBkYXRpIHBlciBsJ2FsbGVnYXRvXHJcbiAgICBuZXdBdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlID0gQXR0YWNobWVudFR5cGUuRklMRTtcclxuICAgIG5ld0F0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlID0gY3VycmVudEZpbGUudHlwZTtcclxuICAgIG5ld0F0dGFjaG1lbnQuRmlsZU5hbWUgPSBjdXJyZW50RmlsZS5uYW1lO1xyXG4gICAgbmV3QXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uID0gY3VycmVudEZpbGUubmFtZS5zdWJzdHIoY3VycmVudEZpbGUubmFtZS5sYXN0SW5kZXhPZihcIi5cIikgKyAxKTtcclxuICAgIG5ld0F0dGFjaG1lbnQuSXNJbWFnZSA9IEF0dGFjaG1lbnRIZWxwZXJTZXJ2aWNlLmNoZWNrSW1hZ2VGcm9tTWltZVR5cGUoY3VycmVudEZpbGUudHlwZSk7XHJcblxyXG4gICAgY29uc3QgZmlsZVNpemVNQiA9IGN1cnJlbnRGaWxlLnNpemUgLyAxMDI0IC8gMTAyNDtcclxuICAgIGNvbnN0IGlzTGFyZ2VGaWxlID0gZmlsZVNpemVNQiA+IHRoaXMuYmFzZTY0TGltaXRNQjtcclxuICAgIGNvbnN0IGlzVmlkZW8gPSBjdXJyZW50RmlsZS50eXBlLnN0YXJ0c1dpdGgoJ3ZpZGVvJyk7XHJcblxyXG4gICAgaWYgKGlzVmlkZW8pIHtcclxuICAgICAgbGV0IGZpbmFsRmlsZTogRmlsZSB8IEJsb2IgPSBjdXJyZW50RmlsZTtcclxuXHJcbiAgICAgIC8vIE1pbmlhdHVyYSBkZWwgdmlkZW9cclxuICAgICAgbmV3QXR0YWNobWVudC5GaWxlVGh1bWJuYWlsQmFzZTY0ID0gYXdhaXQgdGhpcy5nZW5lcmF0ZVZpZGVvVGh1bWJuYWlsKGN1cnJlbnRGaWxlKTtcclxuXHJcbiAgICAgIC8vIFNlIGxhIGNvbXByZXNzaW9uZSDDqCBhYmlsaXRhdGEsIGVsYWJvcmlhbW8gaWwgdmlkZW9cclxuICAgICAgaWYgKHRoaXMudmlkZW9Db21wcmVzc2lvbi5lbmFibGVkKSB7XHJcbiAgICAgICAgLy8gdGhpcy5zaG93VG9hc3QoXCJDb21wcmVzc2lvbmUgdmlkZW8gaW4gY29yc28uLi5cIiwgXCJpbmZvXCIpO1xyXG4gICAgICAgIGZpbmFsRmlsZSA9IGF3YWl0IHRoaXMuY29tcHJlc3NWaWRlb05hdGl2ZShjdXJyZW50RmlsZSwgdGhpcy52aWRlb0NvbXByZXNzaW9uKTtcclxuXHJcbiAgICAgICAgLy8gQWdnaW9ybmlhbW8gaSBkYXRpIGRlbGwnYWxsZWdhdG8gY29uIGlsIG51b3ZvIGZpbGUgY29tcHJlc3NvXHJcbiAgICAgICAgbmV3QXR0YWNobWVudC5GaWxlTmFtZSA9IGN1cnJlbnRGaWxlLm5hbWUucmVwbGFjZSgvXFwuW14vLl0rJC8sIFwiXCIpICsgXCIud2VibVwiO1xyXG4gICAgICAgIG5ld0F0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlID0gXCJ2aWRlby93ZWJtXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5ld0F0dGFjaG1lbnQuTGFyZ2VGaWxlID0gZmluYWxGaWxlIGFzIEZpbGU7XHJcbiAgICAgIG5ld0F0dGFjaG1lbnQuSXNMYXJnZUZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gbmV3QXR0YWNobWVudDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNMYXJnZUZpbGUpIHtcclxuICAgICAgLy8gQ0FTTyBMQVJHRSBGSUxFOlxyXG4gICAgICAvLyBQb3BvbGlhbW8gT3JpZ2luYWxGaWxlIGUgZm9yemlhbW8gaWwgQmFzZTY0IGEgbnVsbC5cclxuICAgICAgbmV3QXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IG51bGw7XHJcbiAgICAgIG5ld0F0dGFjaG1lbnQuTGFyZ2VGaWxlID0gY3VycmVudEZpbGU7XHJcbiAgICAgIG5ld0F0dGFjaG1lbnQuSXNMYXJnZUZpbGUgPSB0cnVlO1xyXG4gICAgICBnZXRCYXNlNjQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZ2V0QmFzZTY0ID09IHRydWUpIHtcclxuICAgICAgbGV0IGJhc2U2NFJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QmFzZTY0RnJvbUZpbGUoY3VycmVudEZpbGUpO1xyXG4gICAgICBuZXdBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0ID0gYmFzZTY0UmVzdWx0LkJhc2U2NEZpbGU7XHJcbiAgICAgIGlmICghbmV3QXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgJiYgYmFzZTY0UmVzdWx0LkNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgbmV3QXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgPSBiYXNlNjRSZXN1bHQuQ29udGVudFR5cGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuZXdBdHRhY2htZW50LklzSW1hZ2UgJiYgbmV3QXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCAmJiBjcm9wRmlsZSkge1xyXG4gICAgICAgIHRoaXMuZ2V0Q3JvcHBlZEFuZFVwbG9hZChgZGF0YToke2Jhc2U2NFJlc3VsdC5Db250ZW50VHlwZX07YmFzZTY0LCR7YmFzZTY0UmVzdWx0LkJhc2U2NEZpbGV9YCwgbmV3QXR0YWNobWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3QXR0YWNobWVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcGFydGlyZSBkYWwgZmlsZSBwYXNzYXRvIGluIGlucHV0IHJlc3RpdHVpc2NlIHVuIG9nZ2V0dG9cclxuICAgKiBjb250ZW5lbnRlIGlsIGJhc2U2NCBkZWwgZmlsZSBlIGlsIHN1byBjb250ZW50VHlwZVxyXG4gICAqIEBwYXJhbSBjdXJyZW50RmlsZSBPZ2dldHRvIEZpbGUgZGEgY3VpIGVzdHJhcG9sYXJlIGJhc2U2NCBlIGNvbnRlbnRUeXBlXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW4gb2dnZXR0byBhdmVudGUgbGUgcHJvcHJpZXTDoCBCYXNlNjRGaWxlIGUgQ29udGVudFR5cGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGdldEJhc2U2NEZyb21GaWxlKGN1cnJlbnRGaWxlOiBGaWxlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGZpbGVTaXplTUIgPSBjdXJyZW50RmlsZS5zaXplIC8gMTAyNCAvIDEwMjQ7XHJcbiAgICBpZiAoZmlsZVNpemVNQiA+IHRoaXMuYmFzZTY0TGltaXRNQikge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIEJhc2U2NEZpbGU6IG51bGwsXHJcbiAgICAgICAgQ29udGVudFR5cGU6IGN1cnJlbnRGaWxlLnR5cGVcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIC8vIFByb2NlZHVyYSBzdGFuZGFyZFxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGJhc2U2NEZpbGUgPSBhd2FpdCB0b0Jhc2U2NChjdXJyZW50RmlsZSk7XHJcbiAgICAgIGxldCBjb250ZW50VHlwZTogc3RyaW5nID0gbnVsbDtcclxuICAgICAgaWYgKGJhc2U2NEZpbGUpIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IGJhc2U2NEZpbGUuc3BsaXQoXCIsXCIpWzBdLnNwbGl0KFwiOlwiKVsxXS5zcGxpdChcIjtcIilbMF07XHJcbiAgICAgICAgYmFzZTY0RmlsZSA9IGJhc2U2NEZpbGUuc3BsaXQoXCIsXCIpWzFdO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgQmFzZTY0RmlsZTogYmFzZTY0RmlsZSxcclxuICAgICAgICBDb250ZW50VHlwZTogY29udGVudFR5cGVcclxuICAgICAgfTtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIHJldHVybiB7IEJhc2U2NEZpbGU6IG51bGwsIENvbnRlbnRUeXBlOiBudWxsIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb250cm9sbGEgc2UgaWwgZmlsZSBjaGUgc2kgc3RhIGNhcmljYW5kbyDDqCBzdXBwb3J0YXRvIGRhbCBzaXN0ZW1hLlxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja0FjY2VwdGVkRmlsZXMoKTogYm9vbGVhbiB7XHJcbiAgICAvLyBTZSBhY2NldHRvIHR1dHRvLCBlc2NvIHN1Yml0b1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRGaWxlVHlwZXMgPT09IFwiKlwiKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBpc1R5cGVWYWxpZCA9IChtaW1lVHlwZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIGlmICghbWltZVR5cGUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIC8vIENvbnRyb2xsbyBjb3JyaXNwb25kZW56YSBlc2F0dGEgKGVzLiBpbWFnZS9wbmcpXHJcbiAgICAgIGlmICh0aGlzLmFjY2VwdGVkRmlsZVR5cGVzLmluY2x1ZGVzKG1pbWVUeXBlKSkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICBjb25zdCB3aWxkY2FyZHMgPSB0aGlzLmFjY2VwdGVkRmlsZVR5cGVzLnNwbGl0KFwiLFwiKS5maWx0ZXIodCA9PiB0LmluY2x1ZGVzKFwiKlwiKSk7XHJcbiAgICAgIGZvciAobGV0IHQgb2Ygd2lsZGNhcmRzKSB7XHJcbiAgICAgICAgY29uc3QgcHJlZml4ID0gdC5zcGxpdChcIipcIilbMF07IC8vIFByZW5kZSBcImltYWdlL1wiIGRhIFwiaW1hZ2UvKlwiXHJcbiAgICAgICAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMubG9hZE11bHRpcGxlRmlsZXMgIT09IHRydWUpIHtcclxuICAgICAgLy8gQ2FzbyBTaW5nb2xvXHJcbiAgICAgIHJldHVybiBpc1R5cGVWYWxpZCh0aGlzLnNlbGVjdGVkRmlsZS50eXBlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENhc28gTXVsdGlwbG86IFRVVFRJIGkgZmlsZSBzZWxlemlvbmF0aSBkZXZvbm8gZXNzZXJlIHZhbGlkaVxyXG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkRmlsZXMpLmV2ZXJ5KGZpbGUgPT4gaXNUeXBlVmFsaWQoZmlsZS50eXBlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZSBlcXAtYXR0YWNobWVudHMgw6ggc3RhdGEgY29uZmlndXJhdGEgcGVyIGlsIGNhcmljYW1lbnRvIGRlbGxlIHNvbGUgaW1tYWdpbmkgYWxsb3JhIHZlcmlmaWNhIGNoZSBpbCBmaWxlIHBhc3NhdG8gaW5cclxuICAgKiBpbnB1dCBzaWEgZWZmZXR0aXZhbWVudGUgdW4gaW1tYWdpbmUgbyBuby5cclxuICAgKiBTZSBpbCBjb250cm9sbG8gdmEgYSBidW9uIGZpbmUgcmVzdGl0dWlzY2UgVFJVRSBhbHRyaW1lbnRpIG1vc3RyYSB1biBtZXNzYWdnaW8gZCdlcnJvcmUgZSByZXN0aXR1aXNjZSBGQUxTRVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hlY2tBbGxvd09ubHlJbWFnZUZpbGUobmV3QXR0YWNobWVudCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dPbmx5SW1hZ2VzID09IHRydWUgJiYgbmV3QXR0YWNobWVudC5Jc0ltYWdlICE9IHRydWUpIHtcclxuICAgICAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UuRXJyb3IodGhpcy5ub0ltYWdlU2VsZWN0ZWRFcnJvck1lc3NhZ2UpO1xyXG4gICAgICB0aGlzLmFib3J0RmlsZSgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNoZWNrQWNjZXB0ZWRGaWxlcygpKSB7XHJcbiAgICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLkVycm9yKHRoaXMud3JvbmdUeXBlU2VsZWN0ZWRFcnJvck1lc3NhZ2UpO1xyXG4gICAgICB0aGlzLmFib3J0RmlsZSgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gR2VzdGlvbmUgY3JvcCBmaWxlXHJcblxyXG4gIGdldEltYWdlRGltZW5zaW9ucyhpbWc6IGFueSkge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XHJcbiAgICAgIGltYWdlLnNyYyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgaW1hZ2Uub25sb2FkID0gKHJzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEhlaWdodCA9IHJzLmN1cnJlbnRUYXJnZXRbXCJoZWlnaHRcIl07XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbFdpZHRoID0gcnMuY3VycmVudFRhcmdldFtcIndpZHRoXCJdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vcmlnaW5hbFdpZHRoID4gMTI4MCkge1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21XaWR0aCA9IDEyODA7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbUhlaWdodCA9IE1hdGgucm91bmQoKDEyODAgKiB0aGlzLm9yaWdpbmFsSGVpZ2h0KSAvIHRoaXMub3JpZ2luYWxXaWR0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tSGVpZ2h0ID0gcnMuY3VycmVudFRhcmdldFtcImhlaWdodFwiXTtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tV2lkdGggPSBycy5jdXJyZW50VGFyZ2V0W1wid2lkdGhcIl07XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGltZyk7XHJcbiAgfVxyXG5cclxuICByZXN0b3JlT3JpZ2luYWxEaW1lbnNpb25zKCkge1xyXG4gICAgdGhpcy5jdXN0b21XaWR0aCA9IHRoaXMub3JpZ2luYWxXaWR0aDtcclxuICAgIHRoaXMuY3VzdG9tSGVpZ2h0ID0gdGhpcy5vcmlnaW5hbEhlaWdodDtcclxuICAgIHRoaXMuY2FudmFzUm90YXRpb24gPSAwO1xyXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7fTtcclxuICB9XHJcblxyXG4gIG9uRGltZW5zaW9uc0NoYW5nZShkaW1lbnNpb246IHN0cmluZykge1xyXG4gICAgaWYgKGRpbWVuc2lvbiA9PSBcIkhcIikge1xyXG4gICAgICB0aGlzLmN1c3RvbVdpZHRoID0gTWF0aC5yb3VuZCgodGhpcy5jdXN0b21IZWlnaHQgKiB0aGlzLm9yaWdpbmFsV2lkdGgpIC8gdGhpcy5vcmlnaW5hbEhlaWdodCk7XHJcbiAgICB9IGVsc2UgaWYgKGRpbWVuc2lvbiA9PSBcIldcIikge1xyXG4gICAgICB0aGlzLmN1c3RvbUhlaWdodCA9IE1hdGgucm91bmQoKHRoaXMuY3VzdG9tV2lkdGggKiB0aGlzLm9yaWdpbmFsSGVpZ2h0KSAvIHRoaXMub3JpZ2luYWxXaWR0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbWFnZUNyb3BwZWQoZXZlbnQ6IEltYWdlQ3JvcHBlZEV2ZW50KSB7XHJcbiAgICB0aGlzLmNyb3BwZWRJbWFnZSA9IGV2ZW50LmJhc2U2NDtcclxuICAgIHRoaXMuZ2V0Q3JvcHBlZEFuZFVwbG9hZCh0aGlzLmNyb3BwZWRJbWFnZSwgdGhpcy5uZXdBdHRhY2htZW50KTtcclxuICB9XHJcblxyXG4gIGdldENyb3BwZWRBbmRVcGxvYWQoZmlsZSwgbmV3QXR0YWNobWVudDogSUF0dGFjaG1lbnREVE8pIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICB2YXIgZmlsZTogYW55ID0gYmFzZTY0VG9GaWxlKGZpbGUpO1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmNvbXByZXNzaW9uT3B0aW9ucztcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXByaW1lIGwnaW1tYWdpbmUgcGFzc2FuZG8gY29tZSBwYXJhbWV0cmkgbGUgb3B0aW9ucyBjcmVhdGUgbmVsbCdvZ2dldHRvIHNvcHJhLCBlIGlsIGZpbGUgZGFsIHJlYWRlciBwcmluY2lwYWxlXHJcbiAgICAgKi9cclxuICAgIGltYWdlQ29tcHJlc3Npb24oZmlsZSwgb3B0aW9ucykudGhlbigoZmlsZUNvbXByZXNzZWQpID0+IHtcclxuICAgICAgbGV0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgICAgLy9GYWNjaW8gbGEgcHVzaCBkaSBvZ25pIGZpbGUgYWxsJ2ludGVybm8gZGVsbCdhcnJheSBkaSBmaWxlIGRlbGwnaXRlbSBkYSBtYW5kYXJlIGFsIHNlcnZlclxyXG4gICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0UmVhZGVyID0gPHN0cmluZz5maWxlUmVhZGVyLnJlc3VsdDtcclxuICAgICAgICB2YXIgbWFya2VyID0gXCI7YmFzZTY0LFwiO1xyXG4gICAgICAgIG5ld0F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSByZXN1bHRSZWFkZXIuc3Vic3RyaW5nKHJlc3VsdFJlYWRlci5pbmRleE9mKG1hcmtlcikgKyBtYXJrZXIubGVuZ3RoKTtcclxuICAgICAgICBzZWxmLnNob3dDcm9wSW1hZ2UgPSBmYWxzZTtcclxuICAgICAgICBpZiAoc2VsZi5uZXdBdHRhY2htZW50Rm9ybSkge1xyXG4gICAgICAgICAgc2VsZi5uZXdBdHRhY2htZW50Rm9ybS5lbmFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZUNvbXByZXNzZWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByb3RhdGVMZWZ0KCkge1xyXG4gICAgdGhpcy5jYW52YXNSb3RhdGlvbi0tO1xyXG4gICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHJvdGF0ZVJpZ2h0KCkge1xyXG4gICAgdGhpcy5jYW52YXNSb3RhdGlvbisrO1xyXG4gICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmxpcEFmdGVyUm90YXRlKCkge1xyXG4gICAgY29uc3QgZmxpcHBlZEggPSB0aGlzLnRyYW5zZm9ybS5mbGlwSDtcclxuICAgIGNvbnN0IGZsaXBwZWRWID0gdGhpcy50cmFuc2Zvcm0uZmxpcFY7XHJcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcclxuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXHJcbiAgICAgIGZsaXBIOiBmbGlwcGVkVixcclxuICAgICAgZmxpcFY6IGZsaXBwZWRIXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZmxpcEhvcml6b250YWwoKSB7XHJcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcclxuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXHJcbiAgICAgIGZsaXBIOiAhdGhpcy50cmFuc2Zvcm0uZmxpcEhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmbGlwVmVydGljYWwoKSB7XHJcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcclxuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXHJcbiAgICAgIGZsaXBWOiAhdGhpcy50cmFuc2Zvcm0uZmxpcFZcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLyoqXHJcbiAgICogQW5udWxsYSBsYSBzZWxlemlvbmUgZGVsIGZpbGUsIHN2dW90YW5kbyBsJ2lucHV0IGUgcmVzZXR0YW5kbyB0dXR0ZSBsZSBwcm9wcmlldMOgIGRlbGwnSUF0dGFjaG1lbnREVE9cclxuICAgKi9cclxuICBhYm9ydEZpbGUoKSB7XHJcbiAgICBpZiAodGhpcy5pbWFnZUlucHV0KSB0aGlzLmltYWdlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBudWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gbnVsbDtcclxuICAgIHRoaXMuc2hvd0Nyb3BJbWFnZSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMubmV3QXR0YWNobWVudC5Jc0ltYWdlID0gZmFsc2U7XHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSBudWxsO1xyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50LkZpbGVOYW1lID0gbnVsbDtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uID0gbnVsbDtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgPSBudWxsO1xyXG5cclxuICAgIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cyA9IG5ldyBBcnJheTxJQXR0YWNobWVudERUTz4oKTtcclxuXHJcbiAgICB0aGlzLmN1c3RvbUhlaWdodCA9IG51bGw7XHJcbiAgICB0aGlzLmN1c3RvbVdpZHRoID0gbnVsbDtcclxuICAgIHRoaXMub3JpZ2luYWxIZWlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5vcmlnaW5hbFdpZHRoID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLmRpYWxvZ1JlZkNyb3BJbWFnZS5jbG9zZSgpO1xyXG4gICAgdGhpcy5yZXN0b3JlT3JpZ2luYWxEaW1lbnNpb25zKCk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgZmlsZURyb3BwZWQoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuZHJhZ092ZXIgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XHJcblxyXG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5vbkZpbGVBZGRlZCh7IHRhcmdldDogeyBmaWxlczogZmlsZXMgfSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFNlIGlsIGNhcmljYW1lbnRvIGRlbCBmaWxlIGRyb3Bib3ggdmEgYSBidW9uIGZpbmUsIGxhIGZ1bnppb25lIGRpIGNhbGxiYWNrIHJlc3RpdHVpc2NlIHVuIGFycmF5IGRpIG9nZ2V0dGkuXHJcbiAgLy8gVmllbmUgcG9pIGZhdHRhIHVuYSBYTUxIdHRwUmVxdWVzdCBjb24gcmVzcG9uc2VUeXBlICdibG9iJyBwZXIgY29udmVydGlyZSBpbCBwcmltbyBlbGVtZW50byBkZWxsYSByZXNwb25zZSBpbiB1biBCbG9iLlxyXG4gIGNob29zZURyb3Bib3hGaWxlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgdmFyIG9wdGlvbnMgPSB7XHJcbiAgICAgIHN1Y2Nlc3M6IChmaWxlczogYW55W10pID0+IHtcclxuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBmaWxlc1swXS5saW5rKTtcclxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgYEJlYXJlciAke0F0dGFjaG1lbnRIZWxwZXJTZXJ2aWNlLmRyb3Bib3hDcmVkZW50aWFscy5hY2Nlc3NUb2tlbn1gKTtcclxuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gXCJibG9iXCI7XHJcblxyXG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBibG9iID0geGhyLnJlc3BvbnNlO1xyXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgZmlsZXNbMF0ubmFtZSwgeyB0eXBlOiBibG9iLnR5cGUgfSk7XHJcbiAgICAgICAgICBsZXQgZmlsZXNBZGRlZCA9IFtmaWxlXTtcclxuICAgICAgICAgIHRoaXMub25GaWxlQWRkZWQoZmlsZXNBZGRlZCwgdHJ1ZSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgICAgfSxcclxuICAgICAgbGlua1R5cGU6IFwiZGlyZWN0XCIsXHJcbiAgICAgIG11bHRpc2VsZWN0OiBmYWxzZSxcclxuICAgICAgZXh0ZW5zaW9uczogW1wiLmpwZ1wiLCBcIi5wbmdcIiwgXCIucGRmXCIsIFwiLmRvY1wiLCBcIi5kb2N4XCIsIFwiLnR4dFwiXVxyXG4gICAgfTtcclxuICAgIERyb3Bib3guY2hvb3NlKG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLy8gV29ya2Fyb3VuZCBkcm9wem9uZTogZGlzYWJpbGl0byBpbCBjbGljayBkZWdsaSBlbGVtZW50aSBpbmNsdXNpIG5lbGxhIGRyb3B6b25lIHBlciBldml0YXJlIGRpIGNsaWNjYXJlIGR1ZSB2b2x0ZVxyXG4gIG9uU2VsZWN0RmlsZShldmVudCwgZmlsZUlucHV0KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLnRhZ05hbWUgPT09IFwiQlVUVE9OXCIgfHxcclxuICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MQnV0dG9uRWxlbWVudCkudGFnTmFtZSA9PT0gXCJJTlBVVFwiIHx8XHJcbiAgICAgIHRoaXMuYWRkaW5nTGlua01vZGUgPT0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZpbGVJbnB1dC5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXByZSBpbCBkaWFsb2dvIHBlciBsJ2luc2VyaW1lbnRvIGRlbCBsaW5rLlxyXG4gICAqL1xyXG4gIHN3aXRjaFRvQWRkaW5nTGlua01vZGUoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMubmV3QXR0YWNobWVudEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgZmlsZU5hbWU6IFsnJ10sXHJcbiAgICAgIGZpbGVQYXRoOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oJ2h0dHBzPzovLy4rJyldXVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmFkZGluZ0xpbmtUZW1wbGF0ZSwge1xyXG4gICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgcGFuZWxDbGFzczogJ2VxcC1hdHRhY2htZW50cy1kaWFsb2cnXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIC8vIENyZWEgbCdvZ2dldHRvIHBlciBpbCBudW92byBsaW5rIGRhaSBkYXRpIGRlbCBmb3JtXHJcbiAgICAgICAgY29uc3QgbmV3TGlua09iamVjdDogSUF0dGFjaG1lbnREVE8gPSB7XHJcbiAgICAgICAgICBJRDogMCxcclxuICAgICAgICAgIEF0dGFjaG1lbnRUeXBlOiBBdHRhY2htZW50VHlwZS5MSU5LLFxyXG4gICAgICAgICAgRmlsZU5hbWU6IHJlc3VsdC5maWxlTmFtZSxcclxuICAgICAgICAgIEZpbGVQYXRoOiByZXN1bHQuZmlsZVBhdGgsXHJcbiAgICAgICAgICBJc0ltYWdlOiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudCA9IG5ld0xpbmtPYmplY3Q7XHJcbiAgICAgICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID0gW25ld0xpbmtPYmplY3RdO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5jb25maXJtQWRkQXR0YWNobWVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8gTWV0b2RvIHBlciBvdHRlbmVyZSBsZSBjbGFzc2kgQ1NTIGRpbmFtaWNoZVxyXG4gIGdldENhcmRDbGFzcyhhdHQ6IElBdHRhY2htZW50RFRPKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ2ZpbGUtcHJldmlldyc6IHRydWUsXHJcbiAgICAgICd1cGxvYWRpbmcnOiAhIWF0dC5pc1VwbG9hZGluZyxcclxuICAgICAgJ2NhcmQtc21hbGwnOiB0aGlzLmNhcmRTaXplID09PSAnc21hbGwnLFxyXG4gICAgICAnY2FyZC1tZWRpdW0nOiB0aGlzLmNhcmRTaXplID09PSAnbWVkaXVtJyxcclxuICAgICAgJ2NhcmQtbGFyZ2UnOiB0aGlzLmNhcmRTaXplID09PSAnbGFyZ2UnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIFF1ZXN0YSBmdW56aW9uZSBvcmEgc2kgYXBwbGljYSBhbCBjb250ZW5pdG9yZSwgbm9uIGFsbGEgc2luZ29sYSBjYXJkLlxyXG4gIGdldFByZXZpZXdzQ29udGFpbmVyU3R5bGUoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XHJcbiAgICBsZXQgbWluV2lkdGggPSAnMjAwcHgnOyAvLyBEaW1lbnNpb25lIGRpIGRlZmF1bHQgcGVyICdtZWRpdW0nXHJcblxyXG4gICAgaWYgKHRoaXMuY2FyZFNpemUgPT09ICdzbWFsbCcpIHtcclxuICAgICAgbWluV2lkdGggPSAnMTQwcHgnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNhcmRTaXplID09PSAnbGFyZ2UnKSB7XHJcbiAgICAgIG1pbldpZHRoID0gJzI4MHB4JztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jYXJkU2l6ZSA9PT0gJ2N1c3RvbScpIHtcclxuICAgICAgbWluV2lkdGggPSBgJHt0aGlzLmN1c3RvbUNhcmRXaWR0aFB4fXB4YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyAnLS1jYXJkLW1pbi13aWR0aCc6IG1pbldpZHRoIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQcmltYXJ5QWN0aW9uKGF0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPKTogdm9pZCB7XHJcbiAgICAvLyBTZSBpbCBmaWxlIHB1w7IgZXNzZXJlIHZpc3VhbGl6emF0byBpbiBhbnRlcHJpbWEsIGFwcmkgaWwgZGlhbG9nXHJcbiAgICBpZiAodGhpcy5jYW5CZVByZXZpZXdlZChhdHRhY2htZW50KSkge1xyXG4gICAgICB0aGlzLm9wZW5QcmV2aWV3RGlhbG9nKGF0dGFjaG1lbnQpO1xyXG4gICAgfVxyXG4gICAgLy8gQWx0cmltZW50aSwgZXNlZ3VpIGwnYXppb25lIGRpIGRlZmF1bHQgKGRvd25sb2FkIHBlciBmaWxlLCBhcHJpIHBlciBsaW5rKVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudmlld0F0dGFjaG1lbnQoYXR0YWNobWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogRGV0ZXJtaW5lcyBpZiBhbiBhdHRhY2htZW50IGNhbiBiZSBwcmV2aWV3ZWQgaW4gdGhlIGRpYWxvZy5cclxuICogQHBhcmFtIGF0dCBUaGUgYXR0YWNobWVudCB0byBjaGVjay5cclxuICogQHJldHVybnMgYHRydWVgIGlmIGEgcHJldmlldyBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKi9cclxuICBjYW5CZVByZXZpZXdlZChhdHQ6IElBdHRhY2htZW50RFRPKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWF0dCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FzZSAxOiBJdCdzIGFuIGltYWdlIHdpdGggQmFzZTY0IGRhdGEuXHJcbiAgICBjb25zdCBpc1ByZXZpZXdhYmxlSW1hZ2UgPSBhdHQuSXNJbWFnZSAmJiAhIWF0dC5GaWxlRGF0YUJhc2U2NDtcclxuXHJcbiAgICAvLyBDYXNlIDI6IEl0J3MgYSBQREYgd2l0aCBCYXNlNjQgZGF0YS5cclxuICAgIGNvbnN0IGlzUHJldmlld2FibGVQZGYgPSBhdHQuRmlsZUNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vcGRmJyAmJiAhIWF0dC5GaWxlRGF0YUJhc2U2NDtcclxuXHJcbiAgICAvLyBDYXNlIDM6IEl0J3MgYSByZW1vdGUgZG9jdW1lbnQgd2l0aCBhIFVSTCAoZm9yIEdvb2dsZSBWaWV3ZXIpLlxyXG4gICAgY29uc3QgaXNSZW1vdGVEb2N1bWVudCA9ICFhdHQuSXNJbWFnZSAmJiAhIWF0dC5GaWxlUGF0aCAmJiAhIXRoaXMucHJvZHVjdGlvbkJhc2VVcmw7XHJcblxyXG4gICAgLy9DYXNlIDQ6IFZpZGVvIC0gw4ggdW4gdmlkZW8gZSBhYmJpYW1vIGlsIGZpbGUgYmluYXJpbyBzYWx2YXRvIGluIExhcmdlRmlsZVxyXG4gICAgY29uc3QgaXNQcmV2aWV3YWJsZVZpZGVvID0gYXR0LkZpbGVDb250ZW50VHlwZT8uc3RhcnRzV2l0aCgndmlkZW8vJykgJiYgISFhdHQuTGFyZ2VGaWxlO1xyXG5cclxuICAgIC8vIEEgcHJldmlldyBpcyBwb3NzaWJsZSBpZiBhbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgdHJ1ZS5cclxuICAgIHJldHVybiBpc1ByZXZpZXdhYmxlSW1hZ2UgfHwgaXNQcmV2aWV3YWJsZVBkZiB8fCBpc1JlbW90ZURvY3VtZW50IHx8IGlzUHJldmlld2FibGVWaWRlbztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNDb2x1bW5IaWRkZW4oY29sOiBBdHRhY2htZW50RmllbGRDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIC8vIDEpIGhpZGRlbkNvbHVtbnNcclxuICAgIGlmICh0aGlzLmhpZGRlbkNvbHVtbnM/LmluY2x1ZGVzKGNvbC5rZXkpKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAvLyAyKSBoaWRkZW4gZGVmaW5pdG8gc3VsbGEgY29sb25uYSAoYm9vbGVhbiBvIGZ1bnppb25lIHNlbnphIGFyZ3MpXHJcbiAgICBpZiAodHlwZW9mIGNvbC5oaWRkZW4gPT09ICdmdW5jdGlvbicpIHJldHVybiAhIWNvbC5oaWRkZW4oKTtcclxuICAgIHJldHVybiAhIWNvbC5oaWRkZW47XHJcbiAgfVxyXG5cclxuICBpc0FjdGlvbkhpZGRlbihhY3Rpb246IEF0dGFjaG1lbnRNZW51QWN0aW9uLCBhdHQ/OiBJQXR0YWNobWVudERUTyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaGlkZGVuQWN0aW9ucz8uaW5jbHVkZXMoYWN0aW9uLmtleSkpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24uaGlkZGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gISFhY3Rpb24uaGlkZGVuKGF0dCk7XHJcbiAgICByZXR1cm4gISFhY3Rpb24uaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5pc2NlIGxlIGNvbG9ubmUgZGkgZGVmYXVsdCBjb24gcXVlbGxlIGN1c3RvbSBlIGxlIG9yZGluYS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldHVwVGFibGVDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgLy8gRGVmaW5pYW1vIGxlIGNvbG9ubmUgc3RhbmRhcmQgY29uIHVuYSBwb3NpemlvbmVcclxuICAgIGNvbnN0IGRlZmF1bHRGaWxlQ29sdW1uOiBBdHRhY2htZW50RmllbGRDb2x1bW4gPSB7XHJcbiAgICAgIGtleTogJ2ZpbGUnLFxyXG4gICAgICBkaXNwbGF5OiAnRmlsZScsXHJcbiAgICAgIHR5cGU6IFR5cGVBdHRhY2htZW50Q29sdW1uLlRFTVBMQVRFLFxyXG4gICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLmRlZmF1bHRGaWxlVGVtcGxhdGUsXHJcbiAgICAgIHN0eWxlczogeyBmbGV4OiAnMSAxIDAlJyB9LFxyXG4gICAgICBwb3NpdGlvbjogMTBcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdEFjdGlvbnNDb2x1bW46IEF0dGFjaG1lbnRGaWVsZENvbHVtbiA9IHtcclxuICAgICAga2V5OiAnYWN0aW9ucycsXHJcbiAgICAgIGRpc3BsYXk6ICdBemlvbmknLFxyXG4gICAgICB0eXBlOiBUeXBlQXR0YWNobWVudENvbHVtbi5URU1QTEFURSxcclxuICAgICAgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5kZWZhdWx0QWN0aW9uc1RlbXBsYXRlLFxyXG4gICAgICBwb3NpdGlvbjogMTAwLFxyXG4gICAgICBjbGFzczogJ2NvbC1hY3Rpb25zJyxcclxuICAgICAgc3R5bGVzOiB7IGZsZXg6ICcwIDAgMTUwcHgnIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcHJvY2Vzc2VkQ3VzdG9tQ29sdW1ucyA9IHRoaXMuX2N1c3RvbUNvbHVtbnMubWFwKGNvbCA9PiB7XHJcbiAgICAgIC8vIEZsZXggZGkgZGVmYXVsdFxyXG4gICAgICBpZiAoIWNvbC5zdHlsZXMgfHwgIWNvbC5zdHlsZXMuZmxleCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICBzdHlsZXM6IHsgLi4uY29sLnN0eWxlcywgZmxleDogJzEgMSAwJScgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbDtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBbXHJcbiAgICAgIGRlZmF1bHRGaWxlQ29sdW1uLFxyXG4gICAgICBkZWZhdWx0QWN0aW9uc0NvbHVtbixcclxuICAgICAgLi4ucHJvY2Vzc2VkQ3VzdG9tQ29sdW1uc1xyXG4gICAgXTtcclxuXHJcbiAgICAvLyBPcmRpbmlhbW8gbCdhcnJheSBmaW5hbGUgaW4gYmFzZSBhbGxhIHByb3ByaWV0w6AgJ3Bvc2l0aW9uJ1xyXG4gICAgdGhpcy5fdGFibGVDb2x1bW5zID0gYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+ICF0aGlzLmlzQ29sdW1uSGlkZGVuKGNvbCkpXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcG9zQSA9IGEucG9zaXRpb24gfHwgOTk7XHJcbiAgICAgICAgY29uc3QgcG9zQiA9IGIucG9zaXRpb24gfHwgOTk7XHJcbiAgICAgICAgcmV0dXJuIHBvc0EgLSBwb3NCO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBNZW51QWN0aW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlZmF1bHRQcmV2aWV3QWN0aW9uOiBBdHRhY2htZW50TWVudUFjdGlvbiA9IHtcclxuICAgICAga2V5OiAncHJldmlldycsXHJcbiAgICAgIGljb246ICd2aXNpYmlsaXR5JyxcclxuICAgICAgbmFtZTogJ0FudGVwcmltYScsXHJcbiAgICAgIGZuOiAoYXR0KSA9PiB0aGlzLm9wZW5QcmV2aWV3RGlhbG9nKGF0dCksXHJcbiAgICAgIGRpc2FibGVkOiAoYXR0KSA9PiAhdGhpcy5jYW5CZVByZXZpZXdlZChhdHQpLFxyXG4gICAgICBwb3NpdGlvbjogMTBcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdERlbGV0ZUFjdGlvbjogQXR0YWNobWVudE1lbnVBY3Rpb24gPSB7XHJcbiAgICAgIGtleTogJ2RlbGV0ZScsXHJcbiAgICAgIGljb246ICdkZWxldGUnLFxyXG4gICAgICBuYW1lOiAnRWxpbWluYScsXHJcbiAgICAgIGZuOiAoYXR0KSA9PiB0aGlzLmRlbGV0ZUF0dGFjaG1lbnQoYXR0KSxcclxuICAgICAgZGlzYWJsZWQ6ICgpID0+IHRoaXMuZGlzYWJsZUFjdGlvbixcclxuICAgICAgcG9zaXRpb246IDEwMFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBhbGxBY3Rpb25zID0gW1xyXG4gICAgICBkZWZhdWx0UHJldmlld0FjdGlvbixcclxuICAgICAgZGVmYXVsdERlbGV0ZUFjdGlvbixcclxuICAgICAgLi4udGhpcy5fY3VzdG9tTWVudUFjdGlvbnNcclxuICAgIF07XHJcblxyXG4gICAgLy8gT3JkaW5pYW1vIGwnYXJyYXkgZmluYWxlIGluIGJhc2UgYWxsYSBwcm9wcmlldMOgICdwb3NpdGlvbidcclxuICAgIHRoaXMuX3NvcnRlZE1lbnVBY3Rpb25zID0gYWxsQWN0aW9ucy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBvc0EgPSBhLnBvc2l0aW9uIHx8IDk5O1xyXG4gICAgICBjb25zdCBwb3NCID0gYi5wb3NpdGlvbiB8fCA5OTtcclxuICAgICAgcmV0dXJuIHBvc0EgLSBwb3NCO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlVmlkZW9UaHVtYm5haWwoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XHJcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAvLyBDcmVhIHVuIFVSTCB0ZW1wb3JhbmVvIHBlciBpbCBmaWxlIHZpZGVvXHJcbiAgICAgIGNvbnN0IHZpZGVvVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuICAgICAgdmlkZW8uc3JjID0gdmlkZW9Vcmw7XHJcbiAgICAgIHZpZGVvLnByZWxvYWQgPSAnbWV0YWRhdGEnO1xyXG4gICAgICB2aWRlby5tdXRlZCA9IHRydWU7XHJcbiAgICAgIHZpZGVvLnBsYXlzSW5saW5lID0gdHJ1ZTtcclxuXHJcbiAgICAgIHZpZGVvLm9ubG9hZGVkbWV0YWRhdGEgPSAoKSA9PiB7XHJcbiAgICAgICAgLy8gVmFpIGFsIHNlY29uZG8gMSAocGVyIGV2aXRhcmUgaWwgZm90b2dyYW1tYSBuZXJvIGluaXppYWxlKVxyXG4gICAgICAgIHZpZGVvLmN1cnJlbnRUaW1lID0gMTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZpZGVvLm9uc2Vla2VkID0gKCkgPT4ge1xyXG4gICAgICAgIC8vIEltcG9zdGEgbGUgZGltZW5zaW9uaSBkZWwgY2FudmFzIHVndWFsaSBhbCB2aWRlb1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZGVvLnZpZGVvV2lkdGg7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZGVvLnZpZGVvSGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyBEaXNlZ25hIGlsIGZvdG9ncmFtbWEgc3VsIGNhbnZhc1xyXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHZpZGVvLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICAvLyBFc3RyYWkgaWwgQmFzZTY0IChxdWFsaXTDoCAwLjcgcGVyIHJpc3Bhcm1pYXJlIHNwYXppbylcclxuICAgICAgICBjb25zdCB0aHVtYm5haWwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC43KTtcclxuXHJcbiAgICAgICAgLy8gUHVsaXNjaSBsYSBtZW1vcmlhXHJcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh2aWRlb1VybCk7XHJcbiAgICAgICAgcmVzb2x2ZSh0aHVtYm5haWwuc3BsaXQoJywnKVsxXSk7IC8vIFJlc3RpdHVpYW1vIHNvbG8gbGEgcGFydGUgQmFzZTY0XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2aWRlby5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodmlkZW9VcmwpO1xyXG4gICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXByZXNzVmlkZW9OYXRpdmUoZmlsZTogRmlsZSwgY29uZmlnOiBhbnkpOiBQcm9taXNlPEJsb2I+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcclxuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICBjb25zdCB2aWRlb1VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcblxyXG4gICAgICB2aWRlby5zcmMgPSB2aWRlb1VybDtcclxuICAgICAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xyXG4gICAgICB2aWRlby5wbGF5KCk7XHJcblxyXG4gICAgICB2aWRlby5vbmxvYWRlZGRhdGEgPSAoKSA9PiB7XHJcbiAgICAgICAgLy8gQ2FsY29saWFtbyBsZSBudW92ZSBkaW1lbnNpb25pIG1hbnRlbmVuZG8gbCdhc3BlY3QgcmF0aW9cclxuICAgICAgICBsZXQgd2lkdGggPSB2aWRlby52aWRlb1dpZHRoO1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSB2aWRlby52aWRlb0hlaWdodDtcclxuICAgICAgICBpZiAod2lkdGggPiBjb25maWcubWF4V2lkdGgpIHtcclxuICAgICAgICAgIGhlaWdodCA9IE1hdGgucm91bmQoKGNvbmZpZy5tYXhXaWR0aCAqIGhlaWdodCkgLyB3aWR0aCk7XHJcbiAgICAgICAgICB3aWR0aCA9IGNvbmZpZy5tYXhXaWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIENhdHR1cmlhbW8gbG8gc3RyZWFtIGRhbCBjYW52YXMgYSAzMGZwc1xyXG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGNhbnZhcy5jYXB0dXJlU3RyZWFtKDMwKTtcclxuICAgICAgICBjb25zdCByZWNvcmRlciA9IG5ldyBNZWRpYVJlY29yZGVyKHN0cmVhbSwge1xyXG4gICAgICAgICAgbWltZVR5cGU6ICd2aWRlby93ZWJtO2NvZGVjcz12cDgnLCAvLyBGb3JtYXRvIHdlYiBvdHRpbWl6emF0b1xyXG4gICAgICAgICAgdmlkZW9CaXRzUGVyU2Vjb25kOiBjb25maWcuYml0cmF0ZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBjaHVua3M6IEJsb2JbXSA9IFtdO1xyXG4gICAgICAgIHJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IChlKSA9PiBjaHVua3MucHVzaChlLmRhdGEpO1xyXG4gICAgICAgIHJlY29yZGVyLm9uc3RvcCA9ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNvbXByZXNzZWRCbG9iID0gbmV3IEJsb2IoY2h1bmtzLCB7IHR5cGU6ICd2aWRlby93ZWJtJyB9KTtcclxuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodmlkZW9VcmwpO1xyXG4gICAgICAgICAgcmVzb2x2ZShjb21wcmVzc2VkQmxvYik7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmVjb3JkZXIuc3RhcnQoKTtcclxuXHJcbiAgICAgICAgLy8gRnVuemlvbmUgY2hlIGRpc2VnbmEgb2duaSBmcmFtZSBzdWwgY2FudmFzXHJcbiAgICAgICAgY29uc3QgZHJhd0ZyYW1lID0gKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHZpZGVvLnBhdXNlZCB8fCB2aWRlby5lbmRlZCkge1xyXG4gICAgICAgICAgICByZWNvcmRlci5zdG9wKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UodmlkZW8sIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRyYXdGcmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBkcmF3RnJhbWUoKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZpZGVvLm9uZXJyb3IgPSByZWplY3Q7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPCEtLSBTZSByaWNoaWVzdGEgbGEgZ2VzdGlvbmUgc2luZ29sYSBtb3N0cmEgaWwgcHVsc2FudGUgZGkgY2FyaWNhbWVudG8gZGkgdW4gc2luZ29sbyBmaWxlIC0tPlxyXG48ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgQGlmKHNob3dVcGxvYWRUaXRsZSA9PSB0cnVlKXtcclxuICA8aDQ+e3sgdXBsb2FkVGl0bGUgfX08L2g0PlxyXG4gIH1cclxuICBAaWYoY2hvb3NlVmlldyA9PSB0cnVlKXtcclxuICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW3ZhbHVlXT1cInZpZXdNb2RlXCIgKGNoYW5nZSk9XCJzZXRWaWV3TW9kZSgkZXZlbnQudmFsdWUpXCJcclxuICAgIGFyaWEtbGFiZWw9XCJNb2RhbGl0w6AgZGkgdmlzdWFsaXp6YXppb25lXCI+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJjYXJkXCI+PG1hdC1pY29uPmdyaWRfdmlldzwvbWF0LWljb24+PC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cInRhYmxlXCI+PG1hdC1pY29uPnZpZXdfbGlzdDwvbWF0LWljb24+PC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG48IS0tIEdlc3Rpb25lIHNpbmdvbG8gLS0+XHJcbkBpZiAobXVsdGlwbGVBdHRhY2htZW50ICE9IHRydWUpIHtcclxuQGlmICghc2luZ2xlQXR0YWNobWVudERyYWdBbmREcm9wKSB7XHJcbkBpZiAoIWFkZGluZ0xpbmtNb2RlKSB7XHJcbjxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWRkQXR0YWNobWVudEJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxufSBAZWxzZSB7XHJcbjxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWRkaW5nTGlua1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG59XHJcbn0gQGVsc2Uge1xyXG48aW5wdXQgI2ZpbGVJbnB1dCBpZD1cImZpbGVfYXR0YWNobWVudFwiIG5hbWU9XCJmaWxlX2F0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIGhpZGRlbiAoY2hhbmdlKT1cIm9uRmlsZUFkZGVkKCRldmVudClcIlxyXG4gIFthY2NlcHRdPVwiYWNjZXB0ZWRGaWxlVHlwZXNcIiBbbXVsdGlwbGVdPVwibG9hZE11bHRpcGxlRmlsZXNcIiAvPlxyXG5cclxuQGlmIChhbGxvd2VkVHlwZXMgJiYgYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDEpICYmICghYXR0YWNobWVudHNMaXN0IHx8IGF0dGFjaG1lbnRzTGlzdC5sZW5ndGggPT0gMCB8fFxyXG4oYXR0YWNobWVudHNMaXN0Lmxlbmd0aCA+IDAgJiYgIWF0dGFjaG1lbnRzTGlzdFswXSkpKSB7XHJcblxyXG5AaWYgKHNob3dEcm9wQXJlYSA9PSB0cnVlKSB7XHJcbjwhLS0gRlVMTCAtLT5cclxuQGlmIChsYXlvdXQgPT09ICdmdWxsJykge1xyXG5cclxuPGRpdiBjbGFzcz1cImRyb3Bib3hcIiBbY2xhc3MuZHJhZ292ZXJdPVwiZHJhZ092ZXJcIiAoZHJhZ292ZXIpPVwiZHJhZ092ZXIgPSB0cnVlOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXHJcbiAgKGRyYWdsZWF2ZSk9XCJkcmFnT3ZlciA9IGZhbHNlXCIgKGRyb3ApPVwiZHJhZ092ZXIgPSBmYWxzZTsgZmlsZURyb3BwZWQoJGV2ZW50KVwiXHJcbiAgKGNsaWNrKT1cIm9uU2VsZWN0RmlsZSgkZXZlbnQsIGZpbGVJbnB1dClcIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgKGtleWRvd24uZW50ZXIpPVwiZmlsZUlucHV0LmNsaWNrKClcIlxyXG4gIChrZXlkb3duLnNwYWNlKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImRyb3Bib3gtaWNvblwiPvCfk4E8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZHJvcGJveC10ZXh0XCI+e3sgZHJvcEhlcmVMYWJlbCB9fTwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJkcm9wYm94LXN1YnRleHRcIj5cclxuICAgIHt7IHN1cHBvcnRlZEZvcm1hdHNMYWJlbCB9fVxyXG4gIDwvZGl2PlxyXG4gIDxidXR0b24gY2xhc3M9XCJicm93c2UtYnRuXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICB7eyBicm93c2VGaWxlc0xhYmVsIH19XHJcbiAgPC9idXR0b24+XHJcbiAgPGRpdiBjbGFzcz1cInNlY29uZGFyeS1hY3Rpb25cIj5cclxuICAgIEBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDIpIHx8IGFsbG93ZWRUeXBlcy5pbmNsdWRlcygzKSkge1xyXG4gICAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMikgJiYgYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDMpKSB7XHJcbiAgICA8YSBjbGFzcz1cInNlY29uZGFyeS1hY3Rpb24tbGlua1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJpc0Rpc2FibGVkID8gbnVsbCA6IGxpbmtNZW51XCJcclxuICAgICAgW2NsYXNzLmRpc2FibGVkLWxpbmtdPVwiaXNEaXNhYmxlZFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgbyBhZ2dpdW5naSBkYSB3ZWJcclxuICAgIDwvYT5cclxuICAgIDxtYXQtbWVudSAjbGlua01lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic3dpdGNoVG9BZGRpbmdMaW5rTW9kZSgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmxpbms8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPkFnZ2l1bmdpIGRhIGxpbms8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNob29zZURyb3Bib3hGaWxlKClcIj5cclxuICAgICAgICA8bWF0LWljb24+Y2xvdWRfcXVldWU8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPkNhcmljYSBkYSBEcm9wYm94PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LW1lbnU+XHJcbiAgICB9XHJcblxyXG4gICAgQGVsc2UgaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygyKSkge1xyXG4gICAgPGEgW2NsYXNzLmRpc2FibGVkLWxpbmtdPVwiaXNEaXNhYmxlZFwiIGNsYXNzPVwic2Vjb25kYXJ5LWFjdGlvbi1saW5rXCJcclxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgc3dpdGNoVG9BZGRpbmdMaW5rTW9kZSgpXCI+XHJcbiAgICAgIGFnZ2l1bmdpIHVuIGxpbmtcclxuICAgIDwvYT5cclxuICAgIH1cclxuXHJcbiAgICBAZWxzZSBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDMpKSB7XHJcbiAgICA8YSBbY2xhc3MuZGlzYWJsZWQtbGlua109XCJpc0Rpc2FibGVkXCIgY2xhc3M9XCJzZWNvbmRhcnktYWN0aW9uLWxpbmtcIlxyXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBjaG9vc2VEcm9wYm94RmlsZSgpXCI+XHJcbiAgICAgIGNhcmljYSBkYSBEcm9wYm94XHJcbiAgICA8L2E+XHJcbiAgICB9XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG59QGVsc2Uge1xyXG48ZGl2IGNsYXNzPVwiY29tcGFjdC11cGxvYWRlclwiIFtjbGFzcy5kcmFnb3Zlcl09XCJkcmFnT3ZlclwiIChkcmFnb3Zlcik9XCJkcmFnT3ZlciA9IHRydWU7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcclxuICAoZHJhZ2xlYXZlKT1cImRyYWdPdmVyID0gZmFsc2VcIiAoZHJvcCk9XCJkcmFnT3ZlciA9IGZhbHNlOyBmaWxlRHJvcHBlZCgkZXZlbnQpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbXBhY3QtaWNvblwiPjxtYXQtaWNvbj5mb2xkZXJfb3BlbjwvbWF0LWljb24+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbXBhY3QtdGV4dFwiIChjbGljayk9XCJvblNlbGVjdEZpbGUoJGV2ZW50LCBmaWxlSW5wdXQpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29tcGFjdC10aXRsZVwiPlRyYXNjaW5hIGkgZmlsZSBvIHNlbGV6aW9uYSBkYWwgY29tcHV0ZXI8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb21wYWN0LXN1YnRpdGxlXCI+e3sgc3VwcG9ydGVkRm9ybWF0c0xhYmVsIH19PC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbXBhY3QtYWN0aW9uc1wiPlxyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmaWxlSW5wdXQuY2xpY2soKVwiPlNmb2dsaWE8L2J1dHRvbj5cclxuICAgIEBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDIpIHx8IGFsbG93ZWRUeXBlcy5pbmNsdWRlcygzKSkge1xyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29tcGFjdExpbmtNZW51XCJcclxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPkxpbms8L2J1dHRvbj5cclxuICAgIDxtYXQtbWVudSAjY29tcGFjdExpbmtNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICBAaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygyKSkgeyA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgIChjbGljayk9XCJzd2l0Y2hUb0FkZGluZ0xpbmtNb2RlKClcIj57eyBvcGVuTGlua0xhYmVsIH19PC9idXR0b24+IH1cclxuICAgICAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMykpIHsgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgKGNsaWNrKT1cImNob29zZURyb3Bib3hGaWxlKClcIj57e1xyXG4gICAgICAgIHVwbG9hZFdpdGhEcm9wYm94TGFiZWwgfX08L2J1dHRvbj4gfVxyXG4gICAgPC9tYXQtbWVudT5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbn1cclxufVxyXG59XHJcbn1cclxuXHJcbjwhLS0gQXppb25pIHNpbmdvbG8gZWxlbWVudG8gKGNvbWUgcHJpbWEpIC0tPlxyXG48ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICBAaWYgKGF0dGFjaG1lbnRzTGlzdCAmJiBhdHRhY2htZW50c0xpc3QubGVuZ3RoID4gMCAmJiBhdHRhY2htZW50c0xpc3RbMF0pIHtcclxuICA8YnV0dG9uIGNsYXNzPVwibWItMiBtZS0yIGVxcC1hdHRhY2htZW50cy1kb3dubG9hZC1idG5cIiAoY2xpY2spPVwidmlld0F0dGFjaG1lbnQoYXR0YWNobWVudHNMaXN0WzBdKVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICBAaWYgKGF0dGFjaG1lbnRzTGlzdFswXS5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5GSUxFKSB7XHJcbiAgICA8bWF0LWljb24+ZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICA8bWF0LWljb24+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxyXG4gICAgfVxyXG4gICAge3sgYXR0YWNobWVudHNMaXN0WzBdLkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkZJTEUgPyBkb3dubG9hZExhYmVsIDogb3BlbkxpbmtMYWJlbCB9fVxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICBAaWYgKHNob3dQcmV2aWV3ICYmICghYXR0YWNobWVudHNMaXN0WzBdLkZpbGVDb250ZW50VHlwZSB8fCAoIWF0dGFjaG1lbnRzTGlzdFswXS5GaWxlQ29udGVudFR5cGUuc3RhcnRzV2l0aCgndmlkZW8nKVxyXG4gICYmICFhdHRhY2htZW50c0xpc3RbMF0uRmlsZUNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvJykpKSAmJiBhdHRhY2htZW50c0xpc3RbMF0uSXNJbWFnZSA9PSB0cnVlKSB7XHJcbiAgPGJ1dHRvbiBjbGFzcz1cIm1iLTIgbWUtMiBlcXAtYXR0YWNobWVudHMtcHJldmlldy1idG5cIiAoY2xpY2spPVwib3BlblByZXZpZXdEaWFsb2coYXR0YWNobWVudHNMaXN0WzBdKVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICA8bWF0LWljb24+dmlzaWJpbGl0eTwvbWF0LWljb24+IHt7IHByZXZpZXdMYWJlbCB9fVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuXHJcbiAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiZGlzYWJsZUFjdGlvblwiIGNsYXNzPVwibWItMiBlcXAtYXR0YWNobWVudHMtZGVsZXRlLWJ0blwiXHJcbiAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50c0xpc3RbMF0pXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj4ge3sgZGVsZXRlTGFiZWwgfX1cclxuICA8L2J1dHRvbj5cclxuICB9XHJcbjwvZGl2PlxyXG59XHJcblxyXG48IS0tIEdlc3Rpb25lIG11bHRpcGxhIC0tPlxyXG5AaWYgKG11bHRpcGxlQXR0YWNobWVudCA9PSB0cnVlICYmIHNob3dEcm9wQXJlYSA9PSB0cnVlKSB7XHJcbjxpbnB1dCAjZmlsZUlucHV0IGlkPVwiZmlsZV9hdHRhY2htZW50X211bHRpXCIgbmFtZT1cImZpbGVfYXR0YWNobWVudF9tdWx0aVwiIHR5cGU9XCJmaWxlXCIgaGlkZGVuXHJcbiAgKGNoYW5nZSk9XCJvbkZpbGVBZGRlZCgkZXZlbnQpXCIgW2FjY2VwdF09XCJhY2NlcHRlZEZpbGVUeXBlc1wiIFttdWx0aXBsZV09XCJsb2FkTXVsdGlwbGVGaWxlc1wiIC8+XHJcblxyXG5AaWYgKGxheW91dCA9PT0gJ2Z1bGwnKSB7XHJcbjxkaXYgY2xhc3M9XCJkcm9wYm94XCIgW2NsYXNzLmRyYWdvdmVyXT1cImRyYWdPdmVyXCIgKGRyYWdvdmVyKT1cImRyYWdPdmVyID0gdHJ1ZTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxyXG4gIChkcmFnbGVhdmUpPVwiZHJhZ092ZXIgPSBmYWxzZVwiIChkcm9wKT1cImRyYWdPdmVyID0gZmFsc2U7IGZpbGVEcm9wcGVkKCRldmVudClcIlxyXG4gIChjbGljayk9XCJvblNlbGVjdEZpbGUoJGV2ZW50LCBmaWxlSW5wdXQpXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIChrZXlkb3duLmVudGVyKT1cImZpbGVJbnB1dC5jbGljaygpXCJcclxuICAoa2V5ZG93bi5zcGFjZSk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkcm9wYm94LWljb25cIj7wn5OBPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImRyb3Bib3gtdGV4dFwiPnt7IGRyb3BIZXJlTGFiZWwgfX08L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZHJvcGJveC1zdWJ0ZXh0XCI+XHJcbiAgICB7eyBzdXBwb3J0ZWRGb3JtYXRzTGFiZWwgfX1cclxuICA8L2Rpdj5cclxuICA8YnV0dG9uIGNsYXNzPVwiYnJvd3NlLWJ0blwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gICAge3sgYnJvd3NlRmlsZXNMYWJlbCB9fVxyXG4gIDwvYnV0dG9uPlxyXG4gIEBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDIpKSB7XHJcbiAgPGRpdiBjbGFzcz1cInNlY29uZGFyeS1hY3Rpb24tbGlua1wiPlxyXG4gICAgbyA8YSAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBzd2l0Y2hUb0FkZGluZ0xpbmtNb2RlKClcIj5hZ2dpdW5naSB1biBsaW5rPC9hPlxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcbn1AZWxzZXtcclxuPGRpdiBjbGFzcz1cImNvbXBhY3QtdXBsb2FkZXJcIiBbY2xhc3MuZHJhZ292ZXJdPVwiZHJhZ092ZXJcIiAoZHJhZ292ZXIpPVwiZHJhZ092ZXIgPSB0cnVlOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXHJcbiAgKGRyYWdsZWF2ZSk9XCJkcmFnT3ZlciA9IGZhbHNlXCIgKGRyb3ApPVwiZHJhZ092ZXIgPSBmYWxzZTsgZmlsZURyb3BwZWQoJGV2ZW50KVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb21wYWN0LWljb25cIj48bWF0LWljb24+Zm9sZGVyX29wZW48L21hdC1pY29uPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb21wYWN0LXRleHRcIiAoY2xpY2spPVwib25TZWxlY3RGaWxlKCRldmVudCwgZmlsZUlucHV0KVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbXBhY3QtdGl0bGVcIj5UcmFzY2luYSBpIGZpbGUgbyBzZWxlemlvbmEgZGFsIGNvbXB1dGVyPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29tcGFjdC1zdWJ0aXRsZVwiPnt7IHN1cHBvcnRlZEZvcm1hdHNMYWJlbCB9fTwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb21wYWN0LWFjdGlvbnNcIj5cclxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZmlsZUlucHV0LmNsaWNrKClcIj5TZm9nbGlhPC9idXR0b24+XHJcbiAgICBAaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygyKSB8fCBhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMykpIHtcclxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbXBhY3RMaW5rTWVudVwiXHJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5MaW5rPC9idXR0b24+XHJcbiAgICA8bWF0LW1lbnUgI2NvbXBhY3RMaW5rTWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMikpIHsgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcclxuICAgICAgICAoY2xpY2spPVwic3dpdGNoVG9BZGRpbmdMaW5rTW9kZSgpXCI+e3sgb3BlbkxpbmtMYWJlbCB9fTwvYnV0dG9uPiB9XHJcbiAgICAgIEBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDMpKSB7IDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIChjbGljayk9XCJjaG9vc2VEcm9wYm94RmlsZSgpXCI+e3tcclxuICAgICAgICB1cGxvYWRXaXRoRHJvcGJveExhYmVsIH19PC9idXR0b24+IH1cclxuICAgIDwvbWF0LW1lbnU+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG59XHJcbn1cclxuXHJcbkBpZiAoYXR0YWNobWVudHNMaXN0Py5sZW5ndGggPiAwICYmIHNob3dTdW1tYXJ5KSB7XHJcbjxkaXYgY2xhc3M9XCJ1cGxvYWQtc3RhdHNcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInN0YXRzLWluZm9cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzdGF0LWl0ZW1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0YXQtdmFsdWVcIj57eyBhdHRhY2htZW50c0xpc3Q/Lmxlbmd0aCB9fTwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdC1sYWJlbFwiPnt7IGZpbGVzTGFiZWwgfX08L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInN0YXQtaXRlbVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdC12YWx1ZVwiPnt7IHRvdGFsU2l6ZUZvcm1hdHRlZCB9fTwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdC1sYWJlbFwiPnt7IHRvdGFsU2l6ZUxhYmVsIH19PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWZpbGxcIiBbc3R5bGUud2lkdGguJV09XCJwcm9ncmVzc1BlcmNlbnRcIj48L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG59IEBlbHNlIGlmKGF0dGFjaG1lbnRzTGlzdD8ubGVuZ3RoID09IDApe1xyXG48ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj57eyBlbXB0eVN0YXRlTGFiZWwgfX08L2Rpdj5cclxufVxyXG5cclxuPCEtLSBHcmlnbGlhIGFudGVwcmltZSBjYXJkICh2YWxlIHBlciBzaW5nb2xvIGUgbXVsdGlwbG8pIC0tPlxyXG5AaWYgKHZpZXdNb2RlID09PSAnY2FyZCcpIHtcclxuXHJcbjxkaXYgY2xhc3M9XCJmaWxlLXByZXZpZXdzXCIgW25nU3R5bGVdPVwiZ2V0UHJldmlld3NDb250YWluZXJTdHlsZSgpXCI+XHJcbiAgQGZvciAoYXR0IG9mIGF0dGFjaG1lbnRzTGlzdDsgdHJhY2sgYXR0LklEKSB7XHJcbiAgPGRpdiBbbmdDbGFzc109XCJnZXRDYXJkQ2xhc3MoYXR0KVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInByZXZpZXctaW1nLWNvbnRhaW5lclwiIChjbGljayk9XCIhYXR0LmlzVXBsb2FkaW5nICYmIGhhbmRsZVByaW1hcnlBY3Rpb24oYXR0KVwiPlxyXG5cclxuICAgICAgQGlmIChhdHQuSXNJbWFnZSB8fCBhdHQuRmlsZVRodW1ibmFpbEJhc2U2NCkge1xyXG4gICAgICA8aW1nIGNsYXNzPVwicHJldmlldy1pbWdcIiBbc3JjXT1cIidkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcgKyAoYXR0LkZpbGVUaHVtYm5haWxCYXNlNjQgfHwgYXR0LkZpbGVEYXRhQmFzZTY0KVwiXHJcbiAgICAgICAgW2FsdF09XCJhdHQuRmlsZU5hbWVcIiAvPlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImZpbGUtaWNvblwiPjxpIFtuZ0NsYXNzXT1cImdldEF0dGFjaG1lbnRJY29uKGF0dClcIj48L2k+PC9kaXY+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWFjdGlvbi1vdmVybGF5XCI+XHJcbiAgICAgICAgQGlmIChhdHQuRmlsZUNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCd2aWRlby8nKSkge1xyXG4gICAgICAgIDxtYXQtaWNvbj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGVsc2UgaWYgKGF0dC5Jc0ltYWdlICYmIGNhbkJlUHJldmlld2VkKGF0dCkpIHtcclxuICAgICAgICA8bWF0LWljb24+dmlzaWJpbGl0eTwvbWF0LWljb24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBlbHNlIGlmIChhdHQuRmlsZUNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vcGRmJyAmJiBjYW5CZVByZXZpZXdlZChhdHQpKSB7XHJcbiAgICAgICAgPG1hdC1pY29uPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGVsc2UgaWYgKGF0dC5BdHRhY2htZW50VHlwZSA9PT0gQXR0YWNobWVudFR5cGUuRklMRSkge1xyXG4gICAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBlbHNlIHtcclxuICAgICAgICA8bWF0LWljb24+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGUtaW5mb1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1uYW1lXCIgW3RpdGxlXT1cImF0dC5GaWxlTmFtZVwiPnt7IGF0dC5GaWxlTmFtZSB9fTwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgQGlmKCFkaXNhYmxlQWN0aW9uKXtcclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicmVtb3ZlLWJ0blwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiUmltdW92aSBhbGxlZ2F0b1wiXHJcbiAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dClcIiBbZGlzYWJsZWRdPVwiYXR0LmlzVXBsb2FkaW5nXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmIChhdHQuaXNVcGxvYWRpbmcpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtc3Bpbm5lclwiPjwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG59IEBlbHNlIGlmKHZpZXdNb2RlID09PSAndGFibGUnICYmIGF0dGFjaG1lbnRzTGlzdD8ubGVuZ3RoID4gMCkge1xyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJ0YWJsZS12aWV3LWNvbnRhaW5lclwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XHJcbiAgICBAZm9yIChjb2wgb2YgX3RhYmxlQ29sdW1uczsgdHJhY2sgY29sLmtleSkge1xyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLWNlbGxcIiBbc3R5bGUuZmxleF09XCJjb2wuc3R5bGVzPy5mbGV4XCIgW25nQ2xhc3NdPVwiY29sLmNsYXNzXCI+XHJcbiAgICAgIHt7IGNvbC5kaXNwbGF5IH19XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuXHJcbiAgQGZvciAoYXR0IG9mIGF0dGFjaG1lbnRzTGlzdDsgdHJhY2sgYXR0LklEKSB7XHJcbiAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiPlxyXG5cclxuICAgIEBmb3IgKGNvbCBvZiBfdGFibGVDb2x1bW5zOyB0cmFjayBjb2wua2V5KSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtY2VsbFwiIFtzdHlsZS5mbGV4XT1cImNvbC5zdHlsZXM/LmZsZXhcIiBbbmdDbGFzc109XCJjb2wuY2xhc3NcIj5cclxuXHJcbiAgICAgIEBzd2l0Y2ggKGNvbC50eXBlKSB7XHJcblxyXG4gICAgICBAY2FzZSAoJ3RlbXBsYXRlJykge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGVtcGxhdGUtd3JhcHBlclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sLmV4dGVybmFsVGVtcGxhdGVcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBhdHQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICBAY2FzZSAoJ2RhdGUnKSB7XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibWV0YWRhdGEtdmFsdWVcIj57eyBhdHRbY29sLmtleV0gfCBkYXRlOidkZC9NTS95eXl5JyB9fTwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgICBAZGVmYXVsdCB7XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibWV0YWRhdGEtdmFsdWVcIj57eyBhdHRbY29sLmtleV0gfX08L3NwYW4+XHJcbiAgICAgIH1cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxufVxyXG5cclxuPCEtLSBOb3RpZmljYSB0b2FzdCAtLT5cclxuPGRpdiBjbGFzcz1cInVwbG9hZC1ub3RpZmljYXRpb25cIiBbY2xhc3Muc2hvd109XCJ0b2FzdD8udmlzaWJsZVwiIFtjbGFzcy5zdWNjZXNzXT1cInRvYXN0Py50eXBlID09PSAnc3VjY2VzcydcIlxyXG4gIFtjbGFzcy5lcnJvcl09XCJ0b2FzdD8udHlwZSA9PT0gJ2Vycm9yJ1wiPlxyXG4gIDxzcGFuPnt7IHRvYXN0Py50ZXh0IH19PC9zcGFuPlxyXG4gIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tcHJvZ3Jlc3NcIj48L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRGaWxlVGVtcGxhdGUgbGV0LWF0dD5cclxuICA8aSBjbGFzcz1cImZpbGUtaWNvbi1zbWFsbFwiIFtuZ0NsYXNzXT1cImdldEF0dGFjaG1lbnRJY29uKGF0dClcIj48L2k+XHJcbiAgPGRpdiBjbGFzcz1cImZpbGUtaW5mby10ZXh0XCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImZpbGUtbmFtZS10YWJsZVwiPnt7IGF0dC5GaWxlTmFtZSB9fTwvc3Bhbj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZmlsZS10eXBlLXRhYmxlXCI+e3sgYXR0LkZpbGVFeHRlbnNpb24gfHwgJ0xpbmsnIH19PC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0QWN0aW9uc1RlbXBsYXRlIGxldC1hdHQ+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImhhbmRsZVByaW1hcnlBY3Rpb24oYXR0KVwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCJhdHQuRmlsZUNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCd2aWRlby8nKSA/ICdSaXByb2R1Y2kgdmlkZW8nIDogJ1Zpc3VhbGl6emEvU2NhcmljYSdcIj5cclxuXHJcbiAgICA8bWF0LWljb24+XHJcbiAgICAgIEBpZiAoYXR0LkZpbGVDb250ZW50VHlwZT8uc3RhcnRzV2l0aCgndmlkZW8vJykpIHtcclxuICAgICAgcGxheV9hcnJvd1xyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAge3sgYXR0LkF0dGFjaG1lbnRUeXBlID09PSBBdHRhY2htZW50VHlwZS5GSUxFID8gJ2Rvd25sb2FkJyA6ICdvcGVuX2luX25ldycgfX1cclxuICAgICAgfVxyXG4gICAgPC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFjdGlvbnNNZW51XCIgbWF0VG9vbHRpcD1cIkFsdHJlIG9wemlvbmlcIj5cclxuICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8bWF0LW1lbnUgI2FjdGlvbnNNZW51PVwibWF0TWVudVwiPlxyXG4gICAgQGZvciAoYWN0aW9uIG9mIF9zb3J0ZWRNZW51QWN0aW9uczsgdHJhY2sgYWN0aW9uLm5hbWUpIHtcclxuICAgIEBpZiAoIWlzQWN0aW9uSGlkZGVuKGFjdGlvbiwgYXR0KSkge1xyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhY3Rpb24uZm4oYXR0KVwiIFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWQgPyBhY3Rpb24uZGlzYWJsZWQoYXR0KSA6IGZhbHNlXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBbY29sb3JdPVwiYWN0aW9uLmljb24gPT09ICdkZWxldGUnID8gJ3dhcm4nIDogdW5kZWZpbmVkXCI+XHJcbiAgICAgICAge3sgYWN0aW9uLmljb24gfX1cclxuICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4+e3sgYWN0aW9uLm5hbWUgfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIH1cclxuICA8L21hdC1tZW51PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nQ3JvcEltYWdlPlxyXG4gIDxkaXYgc3R5bGU9XCJvdmVyZmxvdy14OiBoaWRkZW5cIiBbbmdDbGFzc109XCJjcm9wRGlhbG9nQ2xhc3NcIj5cclxuICAgIDwhLS0gQGlmIChzaG93Q3JvcEltYWdlID09IHRydWUpIHsgLS0+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNyb3BwaWVUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZvcm06IG5ld0F0dGFjaG1lbnRGb3JtIH1cIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSB9IC0tPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjaW5saW5lUHJldmlld1RlbXBsYXRlIGxldC1yb3c9XCJyb3dcIj5cclxuICBAaWYgKHJvdy5BdHRhY2htZW50VHlwZSAhPSBBdHRhY2htZW50VHlwZS5MSU5LICYmIHJvdy5Jc0ltYWdlKSB7XHJcbiAgPGRpdiBjbGFzcz1cImlubGluZS1wcmV2aWV3LWNvbnRhaW5lclwiIChjbGljayk9XCJvcGVuUHJldmlld0RpYWxvZyhyb3cpXCI+XHJcbiAgICA8aW1nIFtzcmNdPVwiJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgKHJvdy5GaWxlVGh1bWJuYWlsQmFzZTY0ID8gcm93LkZpbGVUaHVtYm5haWxCYXNlNjQgOiByb3cuRmlsZURhdGFCYXNlNjQpXCIgLz5cclxuICA8L2Rpdj5cclxuICB9IEBlbHNlIGlmIChyb3cuQXR0YWNobWVudFR5cGUgIT0gQXR0YWNobWVudFR5cGUuTElOSyAmJiAhcm93LklzSW1hZ2UpIHtcclxuICA8ZGl2IGNsYXNzPVwiaW5saW5lLXByZXZpZXctY29udGFpbmVyXCIgKGNsaWNrKT1cIm9wZW5QcmV2aWV3RGlhbG9nKHJvdylcIj5cclxuICAgIDxpIFtuZ0NsYXNzXT1cImdldEF0dGFjaG1lbnRJY29uKHJvdylcIj48L2k+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nUHJldmlldz5cclxuICA8ZGl2IGNsYXNzPVwibW9kZXJuLWRpYWxvZy1jb250YWluZXJcIj4gQGlmIChzZWxlY3RlZEF0dGFjaG1lbnQpIHtcclxuICAgIDxkaXYgbWF0LWRpYWxvZy10aXRsZSBjbGFzcz1cInByZXZpZXctaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItaW5mb1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1ncm91cFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluLXRcIj57eyBwcmV2aWV3TGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtdFwiPnt7IHNlbGVjdGVkQXR0YWNobWVudC5GaWxlTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2UgY2xhc3M9XCJjbG9zZS1idG5cIj48bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cInByZXZpZXctY29udGVudC1hcmVhXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS12aWV3ZXItd3JhcHBlclwiPlxyXG4gICAgICAgIEBpZiAoc2VsZWN0ZWRBdHRhY2htZW50LklzSW1hZ2UpIHtcclxuICAgICAgICA8aW1nIGNsYXNzPVwibWFpbi1wcmV2aWV3LW1lZGlhXCJcclxuICAgICAgICAgIFtzcmNdPVwiJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgKHNlbGVjdGVkQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCB8fCBzZWxlY3RlZEF0dGFjaG1lbnQuRmlsZVRodW1ibmFpbEJhc2U2NClcIlxyXG4gICAgICAgICAgW2FsdF09XCJzZWxlY3RlZEF0dGFjaG1lbnQuRmlsZU5hbWVcIiAvPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZWxzZSBpZiAoc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVDb250ZW50VHlwZT8uc3RhcnRzV2l0aCgndmlkZW8vJykpIHtcclxuICAgICAgICA8dmlkZW8gY29udHJvbHMgYXV0b3BsYXkgcGxheXNpbmxpbmUgY2xhc3M9XCJtYWluLXByZXZpZXctbWVkaWEgdmlkZW8tcGxheWVyXCI+XHJcbiAgICAgICAgICA8c291cmNlIFtzcmNdPVwic2VsZWN0ZWRBdHRhY2htZW50LlRydXN0ZWRVcmxcIiBbdHlwZV09XCJzZWxlY3RlZEF0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlXCI+XHJcbiAgICAgICAgICBJbCB0dW8gYnJvd3NlciBub24gc3VwcG9ydGEgaWwgdmlkZW8uXHJcbiAgICAgICAgPC92aWRlbz5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZnJhbWUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8aWZyYW1lIGNsYXNzPVwicHJldmlldy1pZnJhbWUtbW9kZXJuXCIgW3NyY109XCJzZWxlY3RlZEF0dGFjaG1lbnQuVHJ1c3RlZFVybFwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJzZWxlY3RlZEF0dGFjaG1lbnQuRmlsZU5hbWVcIj48L2lmcmFtZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcblxyXG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiIGNsYXNzPVwicHJldmlldy1hY3Rpb25zXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGNsYXNzPVwiYnRuLWNsb3NlXCI+Q2hpdWRpPC9idXR0b24+XHJcbiAgICAgIEBpZiAoc2VsZWN0ZWRBdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlICE9PSBBdHRhY2htZW50VHlwZS5MSU5LKSB7XHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInZpZXdBdHRhY2htZW50KHNlbGVjdGVkQXR0YWNobWVudClcIiBjbGFzcz1cImJ0bi1kb3dubG9hZFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+IDxzcGFuPnt7IGRvd25sb2FkTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBJTCBQVUxTQU5URSBESSBBR0dJVU5UQSBOVU9WTyBBTExFR0FUTyAtLT5cclxuPG5nLXRlbXBsYXRlICNhZGRBdHRhY2htZW50QnV0dG9uPlxyXG4gIDxpbnB1dCAjZmlsZUlucHV0IHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIGlkPVwiZmlsZV9hdHRhY2htZW50XCIgbmFtZT1cImZpbGVfYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCJcclxuICAgIChjaGFuZ2UpPVwib25GaWxlQWRkZWQoJGV2ZW50KVwiIFthY2NlcHRdPVwiYWNjZXB0ZWRGaWxlVHlwZXNcIiBbbXVsdGlwbGVdPVwibG9hZE11bHRpcGxlRmlsZXNcIiAvPlxyXG5cclxuICBAaWYgKGFsbG93ZWRUeXBlcyAmJiBhbGxvd2VkVHlwZXMubGVuZ3RoID09IDEgJiYgKG11bHRpcGxlQXR0YWNobWVudCA9PSB0cnVlIHx8ICFhdHRhY2htZW50c0xpc3QgfHxcclxuICBhdHRhY2htZW50c0xpc3QubGVuZ3RoID09IDAgfHwgKGF0dGFjaG1lbnRzTGlzdC5sZW5ndGggPiAwICYmICFhdHRhY2htZW50c0xpc3RbMF0pKSkge1xyXG4gIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbWItNCBtZS01IGVxcC1hdHRhY2htZW50cy1hZGQtYnRuXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAoY2xpY2spPVwiYWRkRmlsZShhbGxvd2VkVHlwZXNbMF0sIGZpbGVJbnB1dClcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiPlxyXG4gICAgQGlmIChhbGxvd2VkVHlwZXNbMF0gPT0gMSkgeyA8bWF0LWljb24+Y2xvdWRfdXBsb2FkPC9tYXQtaWNvbj4gfVxyXG4gICAgQGlmIChhbGxvd2VkVHlwZXNbMF0gPT0gMikgeyA8aSBjbGFzcz1cImZhcyBmYS1saW5rXCI+PC9pPiB9XHJcbiAgICBAaWYgKGFsbG93ZWRUeXBlc1swXSA9PSAzKSB7IDxpIGNsYXNzPVwiZmEtYnJhbmRzIGZhLWRyb3Bib3hcIj48L2k+IH1cclxuICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5cclxuICAgICAge3sgYWxsb3dlZFR5cGVzWzBdID09IDEgPyAoYWRkQnV0dG9uTGFiZWwgKyBcIiBmaWxlXCIpIDogYWxsb3dlZFR5cGVzWzBdID09IDIgPyAoYWRkQnV0dG9uTGFiZWwgKyBcIiBsaW5rXCIpIDpcclxuICAgICAgdXBsb2FkV2l0aERyb3Bib3hMYWJlbCB9fVxyXG4gICAgPC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuXHJcbiAgQGlmICghc2VwYXJhdGVkVXBsb2FkQnV0dG9ucyAmJiBhbGxvd2VkVHlwZXMgJiYgYWxsb3dlZFR5cGVzLmxlbmd0aCA+IDEgJiYgKG11bHRpcGxlQXR0YWNobWVudCA9PSB0cnVlIHx8XHJcbiAgIWF0dGFjaG1lbnRzTGlzdCB8fCBhdHRhY2htZW50c0xpc3QubGVuZ3RoID09IDAgfHwgKGF0dGFjaG1lbnRzTGlzdC5sZW5ndGggPiAwICYmICFhdHRhY2htZW50c0xpc3RbMF0pKSkge1xyXG4gIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbWItNCBtZS01IGVxcC1hdHRhY2htZW50cy1hZGQtYnRuXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYXR0YWNobWVudFR5cGVNZW51XCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cclxuICAgIEBpZiAobXVsdGlwbGVBdHRhY2htZW50ICE9IHRydWUpIHsgPG1hdC1pY29uPmNsb3VkX3VwbG9hZDwvbWF0LWljb24+IH0gQGVsc2UgeyA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gfVxyXG4gICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMHB4XCI+e3sgYWRkQnV0dG9uTGFiZWwgfX08L3NwYW4+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxtYXQtbWVudSAjYXR0YWNobWVudFR5cGVNZW51PVwibWF0TWVudVwiPlxyXG4gICAgPGlucHV0ICNpbWFnZUlucHV0IHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIGlkPVwiZmlsZV9hdHRhY2htZW50XCIgbmFtZT1cImZpbGVfYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCJcclxuICAgICAgKGNoYW5nZSk9XCJvbkZpbGVBZGRlZCgkZXZlbnQpXCIgW2FjY2VwdF09XCJhY2NlcHRlZEZpbGVUeXBlc1wiIFttdWx0aXBsZV09XCJsb2FkTXVsdGlwbGVGaWxlc1wiIC8+XHJcbiAgICBAaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygxKSkge1xyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJpbWFnZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cImVxcC1hdHRhY2htZW50cy1maWxlLWJ0blwiPlxyXG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWxlXCI+PC9pPlxyXG4gICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+RmlsZTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMikpIHtcclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIChjbGljayk9XCJzd2l0Y2hUb0FkZGluZ0xpbmtNb2RlKClcIiBjbGFzcz1cImVxcC1hdHRhY2htZW50cy1saW5rLWJ0blwiPlxyXG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1saW5rXCI+PC9pPlxyXG4gICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+TGluazwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMykpIHtcclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hvb3NlRHJvcGJveEZpbGUoKVwiIGNsYXNzPVwiZXFwLWF0dGFjaG1lbnRzLWxpbmstYnRuXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEtYnJhbmRzIGZhLWRyb3Bib3hcIj48L2k+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5Ecm9wYm94PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgPC9tYXQtbWVudT5cclxuICB9XHJcblxyXG4gIEBpZiAoc2VwYXJhdGVkVXBsb2FkQnV0dG9ucyAmJiBhbGxvd2VkVHlwZXMgJiYgYWxsb3dlZFR5cGVzLmxlbmd0aCA+IDEgJiYgKG11bHRpcGxlQXR0YWNobWVudCA9PSB0cnVlIHx8XHJcbiAgIWF0dGFjaG1lbnRzTGlzdCB8fCBhdHRhY2htZW50c0xpc3QubGVuZ3RoID09IDAgfHwgKGF0dGFjaG1lbnRzTGlzdC5sZW5ndGggPiAwICYmICFhdHRhY2htZW50c0xpc3RbMF0pKSkge1xyXG4gIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIj5cclxuICAgIEBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDEpKSB7XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJpbWFnZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGVxcC1hdHRhY2htZW50cy1hZGQtYnRuXCIgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2xvdWQtdXBsb2FkXCI+PC9pPlxyXG4gICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+RmlsZTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgPGlucHV0ICNpbWFnZUlucHV0IHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIGlkPVwiZmlsZV9hdHRhY2htZW50XCIgbmFtZT1cImZpbGVfYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCJcclxuICAgICAgKGNoYW5nZSk9XCJvbkZpbGVBZGRlZCgkZXZlbnQpXCIgW2FjY2VwdF09XCJhY2NlcHRlZEZpbGVUeXBlc1wiIFttdWx0aXBsZV09XCJsb2FkTXVsdGlwbGVGaWxlc1wiIC8+XHJcbiAgICBAaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygyKSkge1xyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic3dpdGNoVG9BZGRpbmdMaW5rTW9kZSgpXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBlcXAtYXR0YWNobWVudHMtYWRkLWJ0blwiIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1saW5rXCI+PC9pPlxyXG4gICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+TGluazwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMykpIHtcclxuICAgIDxidXR0b24gKGNsaWNrKT1cImNob29zZURyb3Bib3hGaWxlKClcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGVxcC1hdHRhY2htZW50cy1hZGQtYnRuXCIgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEtYnJhbmRzIGZhLWRyb3Bib3hcIj48L2k+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5Ecm9wYm94PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY3JvcHBpZVRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2Rlcm4tZGlhbG9nLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlIGNsYXNzPVwicHJldmlldy1oZWFkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1pbmZvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWdyb3VwXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1haW4tdFwiPnt7IGNyb3BMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS10XCI+UmVnb2xhIGxlIGRpbWVuc2lvbmkgZSBsJ29yaWVudGFtZW50bzwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWJvcnRGaWxlKClcIiBjbGFzcz1cImNsb3NlLWJ0blwiPjxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwicHJldmlldy1jb250ZW50LWFyZWFcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNyb3AtdG9vbGJhclwiPlxyXG4gICAgICAgIEBpZiAoY3JvcE9wdGlvbnMuaW5jbHVkZXMoMSkpIHtcclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0VG9vbHRpcF09XCJyb3RhdGVMZWZ0TGFiZWxcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInJvdGF0ZUxlZnQoKVwiPjxtYXQtaWNvbj5yb3RhdGVfbGVmdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdFRvb2x0aXBdPVwicm90YXRlUmlnaHRMYWJlbFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwicm90YXRlUmlnaHQoKVwiPjxtYXQtaWNvbj5yb3RhdGVfcmlnaHQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYgKGNyb3BPcHRpb25zLmluY2x1ZGVzKDIpKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdFRvb2x0aXBdPVwiZmxpcEhvcmluem9udGFsTGFiZWxcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImZsaXBIb3Jpem9udGFsKClcIj48bWF0LWljb24+ZmxpcF9ob3Jpem9udGFsPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0VG9vbHRpcF09XCJmbGlwVmVydGljYWxMYWJlbFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZmxpcFZlcnRpY2FsKClcIj48bWF0LWljb24+ZmxpcF92ZXJ0aWNhbDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJSZXNldFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwicmVzdG9yZU9yaWdpbmFsRGltZW5zaW9ucygpXCI+PG1hdC1pY29uPnJlcGxheTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLXZpZXdlci13cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNyb3AtY29udGFpbmVyLW1vZGVyblwiPlxyXG4gICAgICAgICAgPGltYWdlLWNyb3BwZXIgW2ltYWdlRmlsZV09XCJzZWxlY3RlZEZpbGVcIiBbbWFpbnRhaW5Bc3BlY3RSYXRpb109XCJmYWxzZVwiIFtjYW52YXNSb3RhdGlvbl09XCJjYW52YXNSb3RhdGlvblwiXHJcbiAgICAgICAgICAgIFt0cmFuc2Zvcm1dPVwidHJhbnNmb3JtXCIgZm9ybWF0PVwicG5nXCIgKGltYWdlQ3JvcHBlZCk9XCJpbWFnZUNyb3BwZWQoJGV2ZW50KVwiIFtyZXNpemVUb1dpZHRoXT1cImN1c3RvbVdpZHRoXCJcclxuICAgICAgICAgICAgW3Jlc2l6ZVRvSGVpZ2h0XT1cImN1c3RvbUhlaWdodFwiIFtvdXRwdXRdPVwiJ2Jhc2U2NCdcIiBbY29udGFpbldpdGhpbkFzcGVjdFJhdGlvXT1cInRydWVcIiBbb25seVNjYWxlRG93bl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2FsaWduSW1hZ2VdPVwiJ2NlbnRlcidcIj5cclxuICAgICAgICAgIDwvaW1hZ2UtY3JvcHBlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cclxuXHJcbiAgICA8bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCIgY2xhc3M9XCJwcmV2aWV3LWFjdGlvbnNcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJhYm9ydEZpbGUoKVwiIGNsYXNzPVwiYnRuLWNsb3NlXCI+e3sgYWJvcnRMYWJlbCB9fTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjb25maXJtQWRkQXR0YWNobWVudCgpXCIgY2xhc3M9XCJidG4tZG93bmxvYWRcIj5cclxuICAgICAgICA8bWF0LWljb24+Y2hlY2s8L21hdC1pY29uPiB7eyBjb25maXJtTGFiZWwgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgRk9STSBESSBBR0dJVU5UQSBESSBVTiBMSU5LIC0tPlxyXG48bmctdGVtcGxhdGUgI2FkZGluZ0xpbmtUZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwibW9kZXJuLWRpYWxvZy1jb250YWluZXJcIj5cclxuICAgIDxkaXYgbWF0LWRpYWxvZy10aXRsZSBjbGFzcz1cInByZXZpZXctaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItaW5mb1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0eXBlLWljb24td3JhcHBlclwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmxpbms8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1ncm91cFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluLXRcIj5BZ2dpdW5naSB1biBsaW5rPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLXRcIj5JbnNlcmlzY2kgbCdVUkwgZGVsbGEgcmlzb3JzYSB3ZWI8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlIGNsYXNzPVwiY2xvc2UtYnRuXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJhZGQtbGluay1tb2Rlcm4tY29udGVudFwiPlxyXG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIm5ld0F0dGFjaG1lbnRGb3JtXCIgY2xhc3M9XCJhZGQtbGluay1mb3JtXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LTEwMCBtdC0zXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPlVSTCBkZWwgY29sbGVnYW1lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZmlsZVBhdGhcIiBwbGFjZWhvbGRlcj1cImh0dHBzOi8vLi4uXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4Pmxhbmd1YWdlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctMTAwXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPlRpdG9sbyAob3B6aW9uYWxlKTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImZpbGVOYW1lXCIgcGxhY2Vob2xkZXI9XCJFcy4gRG9jdW1lbnRvIFByb2dldHRvXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4PnRpdGxlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cclxuXHJcbiAgICA8bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCIgY2xhc3M9XCJwcmV2aWV3LWFjdGlvbnNcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2UgY2xhc3M9XCJidG4tY2xvc2VcIj5Bbm51bGxhPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW21hdC1kaWFsb2ctY2xvc2VdPVwibmV3QXR0YWNobWVudEZvcm0udmFsdWVcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJuZXdBdHRhY2htZW50Rm9ybS5pbnZhbGlkXCIgY2xhc3M9XCJidG4tZG93bmxvYWRcIj5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWdnaXVuZ2lcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
1551
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWF0dGFjaG1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1hdHRhY2htZW50cy9zcmMvbGliL2VxcC1hdHRhY2htZW50cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtYXR0YWNobWVudHMvc3JjL2xpYi9lcXAtYXR0YWNobWVudHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxPQUFPLGdCQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQXFCLHFCQUFxQixFQUFrQixNQUFNLG1CQUFtQixDQUFDO0FBQzNHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBbUUsY0FBYyxFQUFrQyxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWpMLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBS3RGLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDeEIsSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7SUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUNoQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN4RCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFPTCxNQUFNLE9BQU8sdUJBQXVCO0lBbVh4QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBdFhWLCtCQUErQjtJQUUvQjs7T0FFRztJQUNxQixhQUFhLEdBQVksS0FBSyxDQUFDO0lBRXZEOztPQUVHO0lBQ2tCLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFFaEQ7O09BRUc7SUFDdUIsZUFBZSxHQUEwQixJQUFJLENBQUM7SUFFeEU7O09BRUc7SUFDd0IsZ0JBQWdCLEdBQW1CLElBQUksQ0FBQztJQUVuRTs7T0FFRztJQUNtQixXQUFXLEdBQVksSUFBSSxDQUFDO0lBRWxEOzs7T0FHRztJQUMwQixrQkFBa0IsR0FBWSxJQUFJLENBQUM7SUFFaEU7OztPQUdHO0lBQ3lCLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUUvRDs7T0FFRztJQUN5QixpQkFBaUIsR0FBVyxxQkFBcUIsQ0FBQztJQUU5RTs7OztPQUlHO0lBQ3VCLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFFM0Q7O09BRUc7SUFDeUIsaUJBQWlCLENBQVM7SUFFdEQ7O09BRUc7SUFDa0IsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUVqRDs7T0FFRztJQUN5QixpQkFBaUIsR0FBWSxLQUFLLENBQUM7SUFFL0Q7Ozs7O09BS0c7SUFDNkIscUJBQXFCLEdBQVcsSUFBSSxDQUFDO0lBRXJFOzs7OztPQUtHO0lBQ3lCLGlCQUFpQixHQUFXLElBQUksQ0FBQztJQUU3RDs7T0FFRztJQUMwQixrQkFBa0IsR0FBYTtRQUMxRCxTQUFTLEVBQUUsR0FBRztRQUNkLGdCQUFnQixFQUFFLElBQUk7UUFDdEIsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQztJQUVGOztPQUVHO0lBQ29CLFlBQVksR0FBMEIsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV4Rzs7O09BR0c7SUFDK0IsdUJBQXVCLEdBQVksS0FBSyxDQUFDO0lBRTNFOzs7T0FHRztJQUM2QixxQkFBcUIsR0FBWSxJQUFJLENBQUM7SUFFdEU7OztPQUdHO0lBQzBCLGtCQUFrQixHQUFZLElBQUksQ0FBQztJQUVoRTs7O09BR0c7SUFDMEIsa0JBQWtCLEdBQVcsSUFBSSxDQUFDO0lBRS9EOztPQUVHO0lBQ0gsa0ZBQWtGO0lBRWxGOztPQUVHO0lBQzhCLHNCQUFzQixHQUFZLEtBQUssQ0FBQztJQUV6RTs7T0FFRztJQUNtQixXQUFXLEdBQVksSUFBSSxDQUFDO0lBRWxEOztPQUVHO0lBQ21DLDJCQUEyQixHQUFZLElBQUksQ0FBQztJQUVsRjs7T0FFRztJQUNtQixXQUFXLEdBQTBCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWxFOztPQUVHO0lBQ3VCLGVBQWUsQ0FBUztJQUV6QyxhQUFhLEdBQVcsR0FBRyxDQUFDLENBQUMsNkJBQTZCO0lBQzFELFFBQVEsR0FBdUIsT0FBTyxDQUFDLENBQUMsVUFBVTtJQUNsRCxpQkFBaUIsR0FBVyxHQUFHLENBQUMsQ0FBQyx5QkFBeUI7SUFDMUQsa0JBQWtCLEdBQVcsR0FBRyxDQUFDLENBQUMsdUJBQXVCO0lBRXpELE1BQU0sR0FBdUIsU0FBUyxDQUFDO0lBRWhEOztPQUVHO0lBQ3FCLGFBQWEsR0FBVyxXQUFXLENBQUM7SUFDbkMsY0FBYyxHQUFXLFVBQVUsQ0FBQztJQUNyQyxhQUFhLEdBQVcsVUFBVSxDQUFDO0lBQ3JDLFdBQVcsR0FBVyxTQUFTLENBQUM7SUFDOUIsYUFBYSxHQUFXLFdBQVcsQ0FBQztJQUNyQyxZQUFZLEdBQVcsV0FBVyxDQUFDO0lBQ2hDLGVBQWUsR0FBVyxhQUFhLENBQUM7SUFDM0MsWUFBWSxHQUFXLFVBQVUsQ0FBQztJQUNwQyxVQUFVLEdBQVcsU0FBUyxDQUFDO0lBQ2hDLFNBQVMsR0FBVyxPQUFPLENBQUM7SUFDNUIsU0FBUyxHQUFXLE1BQU0sQ0FBQztJQUNkLHNCQUFzQixHQUFXLG9CQUFvQixDQUFDO0lBQ25FLFNBQVMsR0FBVyxvQ0FBb0MsQ0FBQztJQUNqRCxpQkFBaUIsR0FBVyxJQUFJLENBQUM7SUFDL0IsbUJBQW1CLEdBQVcsZ0RBQWdELENBQUM7SUFDdkUsMkJBQTJCLEdBQy9ELDhEQUE4RCxDQUFDO0lBQ3pCLDZCQUE2QixHQUNuRSwrQ0FBK0MsQ0FBQztJQUNmLHdCQUF3QixHQUN6RCxrREFBa0QsQ0FBQztJQUNsQix3QkFBd0IsR0FDekQsa0RBQWtELENBQUM7SUFDdEIsb0JBQW9CLEdBQVcsMkJBQTJCLENBQUM7SUFDOUQsaUJBQWlCLEdBQVcseUJBQXlCLENBQUM7SUFDdkQsZ0JBQWdCLEdBQVcsZ0JBQWdCLENBQUM7SUFDN0MsZUFBZSxHQUFXLGtCQUFrQixDQUFDO0lBQy9DLGFBQWEsR0FBVyxHQUFHLENBQUM7SUFDM0MsV0FBVyxHQUFHLGFBQWEsQ0FBQztJQUM1QixjQUFjLEdBQUcsMkJBQTJCLENBQUM7SUFDN0MsYUFBYSxHQUFHLHFCQUFxQixDQUFDO0lBQ3RDLHFCQUFxQixHQUFHLGdEQUFnRCxDQUFDO0lBQ3pFLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztJQUNsQyxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUN0QyxVQUFVLEdBQUcsT0FBTyxDQUFDO0lBQ3JCLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQztJQUNyQyxlQUFlLEdBQUcsaUNBQWlDLENBQUM7SUFDcEQsc0JBQXNCLEdBQUcsZ0NBQWdDLENBQUM7SUFDMUQsWUFBWSxHQUFHLGNBQWMsQ0FBQztJQUN2Qyx5Q0FBeUM7SUFDaEMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNsQixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ1YsUUFBUSxHQUFxQixPQUFPLENBQUM7SUFDOUIsZUFBZSxHQUFZLElBQUksQ0FBQztJQUNuQyxZQUFZLEdBQVksSUFBSSxDQUFDO0lBQzNDLGFBQWEsR0FBYSxFQUFFLENBQUM7SUFDN0IsYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUU3QixnQkFBZ0IsR0FJckIsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBRWpELGtCQUFrQixHQUEyQixFQUFFLENBQUM7SUFDeEQsa0JBQWtCLEdBQTJCLEVBQUUsQ0FBQztJQUVoRDs7S0FFQztJQUNELElBQ0ksaUJBQWlCLENBQUMsS0FBNkI7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFTyxjQUFjLEdBQTRCLEVBQUUsQ0FBQztJQUVyRDs7T0FFRztJQUNILElBQ0ksYUFBYSxDQUFDLEtBQThCO1FBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZO0lBRVosZ0NBQWdDO0lBR2hDOztPQUVHO0lBQ08sc0JBQXNCLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO0lBRWxIOztPQUVHO0lBQ08sa0JBQWtCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFFMUU7O09BRUc7SUFDMkIsa0JBQWtCLEdBQWlDLElBQUksWUFBWSxFQUFrQixDQUFDO0lBRXBIOztPQUVHO0lBQzJCLGtCQUFrQixHQUFpQyxJQUFJLFlBQVksRUFBa0IsQ0FBQztJQUVwSCxZQUFZO0lBRVosMkRBQTJEO0lBQzNELGFBQWEsR0FBbUIsRUFBb0IsQ0FBQztJQUNyRCxzQkFBc0IsR0FBMEIsRUFBRSxDQUFDO0lBQ25ELGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDaEMsbUNBQW1DO0lBQ25DLGlCQUFpQixDQUFZO0lBQzdCLFlBQVksR0FBUyxJQUFJLENBQUM7SUFDMUIsYUFBYSxHQUFnQixJQUFJLENBQUM7SUFDbEMsYUFBYSxHQUFZLEtBQUssQ0FBQztJQUNxQixtQkFBbUIsQ0FBbUI7SUFDMUYsc0JBQXNCLENBQWlDO0lBQ0ssMkJBQTJCLENBQW1CO0lBQzFHLGtCQUFrQixDQUFpQztJQUNILGVBQWUsQ0FBbUI7SUFFakQsa0JBQWtCLENBQW1CO0lBQ3RFLFlBQVk7SUFFWixxRUFBcUU7SUFDckUsaUJBQWlCLEdBQVEsRUFBRSxDQUFDO0lBQzVCLFlBQVksR0FBUSxFQUFFLENBQUM7SUFDdkIsU0FBUyxHQUFtQixFQUFFLENBQUM7SUFDL0IsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUNlLFlBQVksQ0FBd0I7SUFDN0MsVUFBVSxDQUFNO0lBQ3pDLFlBQVk7SUFFWixjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ2hDLGtCQUFrQixDQUFpQjtJQUVuQyxhQUFhLENBQVM7SUFDdEIsY0FBYyxDQUFTO0lBQ3ZCLFdBQVcsQ0FBUztJQUNwQixZQUFZLENBQVM7SUFFaUMscUJBQXFCLENBQW1CO0lBQ2hELGFBQWEsQ0FBbUI7SUFFOUUsU0FBUyxDQUFPO0lBRWhCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsbUNBQW1DO0lBRW5DLG9FQUFvRTtJQUNwRSxhQUFhLEdBQTRCLEVBQUUsQ0FBQztJQUNRLG1CQUFtQixDQUFtQjtJQUNuQyxzQkFBc0IsQ0FBbUI7SUFFaEcsNEJBQTRCO0lBQzVCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsS0FBSyxHQUFHO1FBQ04sT0FBTyxFQUFFLEtBQWdCO1FBQ3pCLElBQUksRUFBRSxTQUFnQztRQUN0QyxJQUFJLEVBQUUsRUFBWTtRQUNsQixTQUFTLEVBQUUsQ0FBUTtLQUNwQixDQUFDO0lBRUYsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUNwQixjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksa0JBQWtCLEtBQWEsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckYsNENBQTRDO0lBQzVDLGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUMzQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDZixNQUFNLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMxRSxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELFNBQVMsQ0FBQyxPQUFlLEVBQUUsT0FBNEIsU0FBUyxFQUFFLFVBQVUsR0FBRyxJQUFJO1FBQ2pGLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQ3JELE9BQU87U0FDUjtRQUVELDJDQUEyQztRQUMzQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsOEJBQThCO1FBQzlCLE1BQU0sUUFBUSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRXBFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRTFCLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDZixDQUFDO0lBRUQsVUFBVSxDQUFBO0lBRVYsWUFDVSxNQUFpQixFQUNqQixXQUF3QixFQUN4QixTQUF1QixFQUN2QixJQUFnQixFQUNoQixvQkFBMEM7UUFKMUMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtJQUNoRCxDQUFDO0lBRUwsUUFBUTtRQUVOLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUVsQyx1SEFBdUg7UUFDdkgsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUI7WUFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUk7Z0JBQUUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQzs7Z0JBQ2hFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7UUFFcEMsc0hBQXNIO1FBQ3RILElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDckQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDcEYsSUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFDbEg7WUFDQSwwQkFBMEIsQ0FBQyxPQUFPLENBQ2hDLHNGQUFzRixDQUN2RixDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDeEY7UUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSTtZQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxLQUFLLEVBQWtCLENBQUM7UUFFckYsZ0VBQWdFO1FBQ2hFLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDckUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDbEQ7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU1QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQy9DO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFzQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsb0RBQW9EO0lBQzVDLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7YUFDL0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV0Ryx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsc0VBQXNFO0lBQy9ELGVBQWUsQ0FBQyxNQUFjO1FBQ25DLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEIsc0NBQXNDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsTUFBTSxHQUFHLEdBQUcsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNwRSxnQkFBZ0I7UUFDaEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDO2FBQy9CLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLDRDQUE0QztRQUM1QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDakMsQ0FBQyxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0NBQWtDO0lBRWxDOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLE9BQXVCO1FBQ3RDLDBCQUEwQixDQUFDLE9BQU8sQ0FDaEMsSUFBSSxDQUFDLG1CQUFtQixFQUN4QixHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDLEVBQ0QsSUFBSSxFQUNKLElBQUksQ0FBQyxpQkFBaUIsQ0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0IsQ0FBQyxlQUF1QjtRQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVqRSxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO2dCQUM3QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDVixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDVixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLFVBQTBCO1FBQ3ZDLElBQUksVUFBVSxDQUFDLGNBQWMsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMzQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDakQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakQsT0FBTztTQUNSO1FBRUQsSUFBSSxVQUFVLENBQUMsY0FBYyxJQUFJLFVBQVUsQ0FBQyxlQUFlLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUNsRixJQUFJLE1BQU0sR0FBRyxRQUFRLFVBQVUsQ0FBQyxlQUFlLFdBQVcsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RGLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZDthQUFNO1lBQ0wsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsVUFBMEI7UUFDMUMsSUFBSSxVQUFVLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxJQUFJO1lBQUUsT0FBTyxhQUFhLENBQUM7O1lBQ3RFLE9BQU8sdUJBQXVCLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxZQUFZO0lBRVo7O09BRUc7SUFDSCxPQUFPLENBQUMsY0FBOEIsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUN2RCxJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO2FBQU0sSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLElBQUksRUFBRTtZQUNoRCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDcEI7YUFBTTtZQUNMLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELG9CQUFvQjtRQUNsQiwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzlDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDOUQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDbkMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDbkMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNqQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxHQUFHLElBQUk7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFvQixDQUFDO1FBQzFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQztRQUMxRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsaUJBQWlCO1lBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLGNBQWMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQjtZQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4RixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLEVBQUU7WUFDbEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO2dCQUM1RCxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQzthQUM1RTtpQkFBTTtnQkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7YUFDckM7U0FDRjthQUFNO1lBQ0wsT0FBTyxDQUNMLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQ2hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUM5RSxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FDM0QsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNiLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxRjtRQUVELElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVE7Z0JBQzFGLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBRTVELElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJO2dCQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxLQUFLLEVBQWtCLENBQUM7WUFFckYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQy9DO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUFFLE9BQU87WUFFM0YsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUk7Z0JBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQztZQUVyRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQ2pGO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdkQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTtZQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7U0FDbEM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQUU7WUFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFvQixDQUFDO1lBQzFDLElBQUksSUFBSSxDQUFDLGlCQUFpQjtnQkFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDNUQ7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLHdFQUF3RTtJQUNoRSxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFvQixDQUFDO1FBQzFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBbUI7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUdyQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRTtZQUM1RyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtpQkFDM0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDO1lBQzlELENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYiwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQ2pFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FDaEYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FDakMsQ0FBQztTQUNIO2FBQ0ksSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFO1lBQzNHLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hFLDBEQUEwRDtZQUMxRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEY7YUFDSSxJQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPO1lBQy9CLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWM7WUFDdkMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLEVBQzVDO1lBQ0EsMEJBQTBCLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDaEcsT0FBTztTQUNSO2FBQ0ksSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxLQUFLLGlCQUFpQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUU7WUFDaEgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUNoRiwrQkFBK0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxDQUN4RSxDQUFDO1NBQ0g7YUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtZQUN6QyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUM5RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQ2hGLG9DQUFvQztvQkFDcEMsSUFBSSxDQUFDLGlCQUFpQjtvQkFDdEIsR0FBRztvQkFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUTtvQkFDaEMsZ0JBQWdCLENBQ2pCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsK0NBQStDLENBQUMsQ0FBQztnQkFDakYsT0FBTzthQUNSO1NBQ0Y7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JELFVBQVUsRUFBRSxnQ0FBZ0M7WUFDNUMsUUFBUSxFQUFFLE1BQU07WUFDaEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUNwRixDQUFDLENBQUM7UUFFSCxtREFBbUQ7UUFDbkQsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDckMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbEUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBaUIsQ0FBQyxDQUFDO2FBQ2hFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFpQixJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekcsQ0FBQztJQUVELG1DQUFtQztJQUVuQzs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsZ0JBQXlCLEtBQUs7UUFFckQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLDBCQUEwQixDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQ3pFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUzQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixNQUFNLFlBQVksR0FBVyxhQUFhO1lBQ3hDLENBQUMsQ0FBRSxLQUFnQjtZQUNuQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBRSxLQUFLLENBQUMsTUFBMkIsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFFaEUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLEVBQUUsTUFBTSxZQUFZLGdCQUFnQixFQUFFO2dCQUMvRCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7YUFDekI7WUFDRCxPQUFPO1NBQ1I7UUFFRCxxSEFBcUg7UUFDckgsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRTtZQUNqRSxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7Z0JBQUUsT0FBTztZQUUvQixpQ0FBaUM7WUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQztZQUMxRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUVyRCxzSEFBc0g7WUFDdEgsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RSxJQUFJLGNBQWMsSUFBSSxLQUFLO2dCQUFFLE9BQU87WUFFcEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFNUIsNkhBQTZIO1lBQzdILDhDQUE4QztZQUM5QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV2QyxxRkFBcUY7Z0JBQ3JGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekQsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7b0JBRXZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO3dCQUMvRCxZQUFZLEVBQUUsSUFBSTt3QkFDbEIsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLEtBQUssRUFBRSxLQUFLO3dCQUNaLFNBQVMsRUFBRSxLQUFLO3dCQUNoQixRQUFRLEVBQUUsTUFBTTt3QkFDaEIsVUFBVSxFQUFFLENBQUMsd0JBQXdCLEVBQUUsYUFBYSxDQUFDO3FCQUN0RCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO2dCQUM1RCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUM3QjtTQUVGO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUFFLE9BQU87WUFFbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0I7Z0JBQUUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztZQUNuRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xELElBQUksYUFBYSxHQUFtQixNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsQ0FDN0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDckIsSUFBSSxFQUNKLElBQUksQ0FDTCxDQUFDO2dCQUNGLHNIQUFzSDtnQkFDdEgsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLGNBQWMsSUFBSSxLQUFLO29CQUFFLE9BQU87Z0JBRXBDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDakQ7WUFDRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUM3QjtRQUVELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLDJEQUEyRDtRQUMzRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FDWixHQUFHLFVBQVUsQ0FBQyxNQUFNLG1CQUFtQixjQUFjLENBQUMsTUFBTSx1Q0FBdUMsU0FBUyxJQUFJLEVBQ2hILE9BQU8sQ0FDUixDQUFDO1NBQ0g7UUFDRCw2QkFBNkI7YUFDeEIsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtTQUM5RDtRQUNELDhCQUE4QjthQUN6QixJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxTQUFTLENBQ1osR0FBRyxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxnQ0FBZ0MsRUFBRSxFQUN6RixTQUFTLENBQ1YsQ0FBQztTQUNIO1FBRUQsNkdBQTZHO1FBQzdHLElBQUksQ0FBQyxhQUFhO1lBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFTyxjQUFjLENBQUMsWUFBb0I7UUFDekMsTUFBTSxVQUFVLEdBQVcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQztRQUVwQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRTtZQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7WUFDM0MsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbkMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0wsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QjtTQUNGO1FBRUQsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3QixNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQ1osMEJBQTBCLFNBQVMsYUFBYSxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQ3RFLE9BQU8sQ0FDUixDQUFDO1NBQ0g7UUFFRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFHRDs7Ozs7OztPQU9HO0lBQ0ssS0FBSyxDQUFDLGdDQUFnQyxDQUM1QyxXQUFpQixFQUNqQixZQUFxQixJQUFJLEVBQ3pCLFdBQW9CLEtBQUs7UUFFekIsSUFBSSxhQUFhLEdBQW1CLEVBQW9CLENBQUM7UUFDekQsaUNBQWlDO1FBQ2pDLGFBQWEsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztRQUNuRCxhQUFhLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDakQsYUFBYSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQzFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0YsYUFBYSxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekYsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xELE1BQU0sV0FBVyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3BELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJELElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxTQUFTLEdBQWdCLFdBQVcsQ0FBQztZQUV6QyxzQkFBc0I7WUFDdEIsYUFBYSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRW5GLHNEQUFzRDtZQUN0RCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pDLDREQUE0RDtnQkFDNUQsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFFL0UsK0RBQStEO2dCQUMvRCxhQUFhLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7Z0JBQzdFLGFBQWEsQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDO2FBQzlDO1lBRUQsYUFBYSxDQUFDLFNBQVMsR0FBRyxTQUFpQixDQUFDO1lBQzVDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLE9BQU8sYUFBYSxDQUFDO1NBQ3RCO1FBRUQsSUFBSSxXQUFXLEVBQUU7WUFDZixtQkFBbUI7WUFDbkIsc0RBQXNEO1lBQ3RELGFBQWEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3BDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO1lBQ3RDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDbkI7UUFFRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDckIsSUFBSSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0QsYUFBYSxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUU7Z0JBQzlELGFBQWEsQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQzthQUMxRDtZQUVELElBQUksYUFBYSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsY0FBYyxJQUFJLFFBQVEsRUFBRTtnQkFDckUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsWUFBWSxDQUFDLFdBQVcsV0FBVyxZQUFZLENBQUMsVUFBVSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7YUFDL0c7U0FDRjtRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFpQjtRQUMvQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNuQyxPQUFPO2dCQUNMLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsV0FBVyxDQUFDLElBQUk7YUFDOUIsQ0FBQztTQUNIO1FBQ0QscUJBQXFCO1FBQ3JCLElBQUk7WUFDRixJQUFJLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3QyxJQUFJLFdBQVcsR0FBVyxJQUFJLENBQUM7WUFDL0IsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkM7WUFDRCxPQUFPO2dCQUNMLFVBQVUsRUFBRSxVQUFVO2dCQUN0QixXQUFXLEVBQUUsV0FBVzthQUN6QixDQUFDO1NBQ0g7UUFBQyxPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0I7UUFDeEIsZ0NBQWdDO1FBQ2hDLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVoRCxNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQWdCLEVBQVcsRUFBRTtZQUNoRCxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUU1QixrREFBa0Q7WUFDbEQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUUzRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRixLQUFLLElBQUksQ0FBQyxJQUFJLFNBQVMsRUFBRTtnQkFDdkIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtnQkFDL0QsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQzthQUM5QztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFO1lBQ25DLGVBQWU7WUFDZixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVDO2FBQU07WUFDTCwrREFBK0Q7WUFDL0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHVCQUF1QixDQUFDLGFBQWE7UUFDM0MsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksSUFBSSxhQUFhLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUNqRSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDckMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsNEJBQTRCO0lBRTVCLGtCQUFrQixDQUFDLEdBQVE7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzVCLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRS9DLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDbkY7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzlDO1lBQ0gsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQWlCO1FBQ2xDLElBQUksU0FBUyxJQUFJLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDL0Y7YUFBTSxJQUFJLFNBQVMsSUFBSSxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQy9GO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUF3QjtRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBNkI7UUFDckQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWhCLElBQUksSUFBSSxHQUFRLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFFeEM7O1dBRUc7UUFDSCxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDdEQsSUFBSSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUVsQywyRkFBMkY7WUFDM0YsVUFBVSxDQUFDLE1BQU0sR0FBRztnQkFDbEIsSUFBSSxZQUFZLEdBQVcsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDN0MsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDO2dCQUN4QixhQUFhLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BHLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUNqQztZQUNILENBQUMsQ0FBQztZQUVGLFVBQVUsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLEtBQUssRUFBRSxRQUFRO1lBQ2YsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDakIsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztTQUM3QixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVk7SUFFWjs7T0FFRztJQUNILFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUU5RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUzQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQztRQUUxRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQVk7SUFFWixXQUFXLENBQUMsS0FBZ0I7UUFFMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUV0QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQztRQUV4QyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFRCw4R0FBOEc7SUFDOUcseUhBQXlIO0lBQ3pILGlCQUFpQjtRQUNmLElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQzVCLElBQUksT0FBTyxHQUFHO1lBQ1osT0FBTyxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7Z0JBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ2pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxVQUFVLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzFHLEdBQUcsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO2dCQUUxQixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtvQkFDaEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztvQkFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNsRSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDckMsQ0FBQyxDQUFDO2dCQUVGLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNiLENBQUM7WUFDRCxRQUFRLEVBQUUsUUFBUTtZQUNsQixXQUFXLEVBQUUsS0FBSztZQUNsQixVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztTQUM5RCxDQUFDO1FBQ0YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsbUhBQW1IO0lBQ25ILFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUztRQUMzQixJQUNHLEtBQUssQ0FBQyxNQUE0QixDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQ3ZELEtBQUssQ0FBQyxNQUE0QixDQUFDLE9BQU8sS0FBSyxPQUFPO1lBQ3ZELElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxFQUMzQjtZQUNBLE9BQU87U0FDUjtRQUNELFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxzQkFBc0I7UUFFcEIsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzlDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNkLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQ3pFLENBQUMsQ0FBQztRQUVILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMxRCxLQUFLLEVBQUUsT0FBTztZQUNkLFVBQVUsRUFBRSx3QkFBd0I7U0FDckMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QyxJQUFJLE1BQU0sRUFBRTtnQkFDVixxREFBcUQ7Z0JBQ3JELE1BQU0sYUFBYSxHQUFtQjtvQkFDcEMsRUFBRSxFQUFFLENBQUM7b0JBQ0wsY0FBYyxFQUFFLGNBQWMsQ0FBQyxJQUFJO29CQUNuQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtvQkFDekIsT0FBTyxFQUFFLEtBQUs7aUJBQ2YsQ0FBQztnQkFFRixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRzlDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzdCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBSUQsOENBQThDO0lBQzlDLFlBQVksQ0FBQyxHQUFtQjtRQUM5QixPQUFPO1lBQ0wsY0FBYyxFQUFFLElBQUk7WUFDcEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVztZQUM5QixZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPO1lBQ3ZDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVE7WUFDekMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTztTQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVELHdFQUF3RTtJQUN4RSx5QkFBeUI7UUFDdkIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMscUNBQXFDO1FBRTdELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUU7WUFDN0IsUUFBUSxHQUFHLE9BQU8sQ0FBQztTQUNwQjthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUU7WUFDcEMsUUFBUSxHQUFHLE9BQU8sQ0FBQztTQUNwQjthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDckMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUM7U0FDMUM7UUFFRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELG1CQUFtQixDQUFDLFVBQTBCO1FBQzVDLGtFQUFrRTtRQUNsRSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsNEVBQTRFO2FBQ3ZFO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRDs7OztLQUlDO0lBQ0QsY0FBYyxDQUFDLEdBQW1CO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsMENBQTBDO1FBQzFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUUvRCx1Q0FBdUM7UUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZUFBZSxLQUFLLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO1FBRTNGLGlFQUFpRTtRQUNqRSxNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRXBGLDJFQUEyRTtRQUMzRSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBRXhGLDZEQUE2RDtRQUM3RCxPQUFPLGtCQUFrQixJQUFJLGdCQUFnQixJQUFJLGdCQUFnQixJQUFJLGtCQUFrQixDQUFDO0lBQzFGLENBQUM7SUFFTyxjQUFjLENBQUMsR0FBMEI7UUFDL0MsbUJBQW1CO1FBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXZELG1FQUFtRTtRQUNuRSxJQUFJLE9BQU8sR0FBRyxDQUFDLE1BQU0sS0FBSyxVQUFVO1lBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDdEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUE0QixFQUFFLEdBQW9CO1FBQy9ELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzFELElBQUksT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7WUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCO1FBQ3ZCLGtEQUFrRDtRQUNsRCxNQUFNLGlCQUFpQixHQUEwQjtZQUMvQyxHQUFHLEVBQUUsTUFBTTtZQUNYLE9BQU8sRUFBRSxNQUFNO1lBQ2YsSUFBSSxFQUFFLG9CQUFvQixDQUFDLFFBQVE7WUFDbkMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUMxQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQzFCLFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQTBCO1lBQ2xELEdBQUcsRUFBRSxTQUFTO1lBQ2QsT0FBTyxFQUFFLFFBQVE7WUFDakIsSUFBSSxFQUFFLG9CQUFvQixDQUFDLFFBQVE7WUFDbkMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtZQUM3QyxRQUFRLEVBQUUsR0FBRztZQUNiLEtBQUssRUFBRSxhQUFhO1lBQ3BCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7U0FDOUIsQ0FBQztRQUVGLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0Qsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ25DLE9BQU87b0JBQ0wsR0FBRyxHQUFHO29CQUNOLE1BQU0sRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2lCQUMxQyxDQUFDO2FBQ0g7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUc7WUFDakIsaUJBQWlCO1lBQ2pCLG9CQUFvQjtZQUNwQixHQUFHLHNCQUFzQjtTQUMxQixDQUFDO1FBRUYsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNyRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDYixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUM5QixPQUFPLElBQUksR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE1BQU0sb0JBQW9CLEdBQXlCO1lBQ2pELEdBQUcsRUFBRSxTQUFTO1lBQ2QsSUFBSSxFQUFFLFlBQVk7WUFDbEIsSUFBSSxFQUFFLFdBQVc7WUFDakIsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztZQUM1QyxRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFFRixNQUFNLG1CQUFtQixHQUF5QjtZQUNoRCxHQUFHLEVBQUUsUUFBUTtZQUNiLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLFNBQVM7WUFDZixFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7WUFDdkMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQ2xDLFFBQVEsRUFBRSxHQUFHO1NBQ2QsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLG9CQUFvQjtZQUNwQixtQkFBbUI7WUFDbkIsR0FBRyxJQUFJLENBQUMsa0JBQWtCO1NBQzNCLENBQUM7UUFFRiw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDakQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQixDQUFDLElBQVU7UUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV4QywyQ0FBMkM7WUFDM0MsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxLQUFLLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztZQUNyQixLQUFLLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztZQUMzQixLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUV6QixLQUFLLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO2dCQUM1Qiw2REFBNkQ7Z0JBQzdELEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQztZQUVGLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixtREFBbUQ7Z0JBQ25ELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO2dCQUVsQyxtQ0FBbUM7Z0JBQ25DLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRTVELHdEQUF3RDtnQkFDeEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBRXRELHFCQUFxQjtnQkFDckIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztZQUN2RSxDQUFDLENBQUM7WUFFRixLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3RCLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNkLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLElBQVUsRUFBRSxNQUFXO1FBQ2pELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUzQyxLQUFLLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztZQUNyQixLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNuQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFYixLQUFLLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRTtnQkFDeEIsMkRBQTJEO2dCQUMzRCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUM3QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO2dCQUMvQixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFO29CQUMzQixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7b0JBQ3hELEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO2lCQUN6QjtnQkFFRCxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDckIsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBRXZCLDBDQUEwQztnQkFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO29CQUN6QyxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsT0FBTztpQkFDbkMsQ0FBQyxDQUFDO2dCQUVILE1BQU0sTUFBTSxHQUFXLEVBQUUsQ0FBQztnQkFDMUIsUUFBUSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO29CQUNyQixNQUFNLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztvQkFDaEUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDOUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMxQixDQUFDLENBQUM7Z0JBRUYsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUVqQiw2Q0FBNkM7Z0JBQzdDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRTtvQkFDckIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7d0JBQy9CLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDaEIsT0FBTztxQkFDUjtvQkFDRCxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDMUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQztnQkFDRixTQUFTLEVBQUUsQ0FBQztZQUNkLENBQUMsQ0FBQztZQUVGLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F2K0NVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLDQrR0F3U3ZCLHFCQUFxQixxbkJDN1VsQyw4NXpCQXVsQmM7OzRGRGxqQkQsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGlCQUFpQjsrTEFVSCxhQUFhO3NCQUFwQyxLQUFLO3VCQUFDLGVBQWU7Z0JBS0QsVUFBVTtzQkFBOUIsS0FBSzt1QkFBQyxZQUFZO2dCQUtPLGVBQWU7c0JBQXhDLEtBQUs7dUJBQUMsaUJBQWlCO2dCQUtHLGdCQUFnQjtzQkFBMUMsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBS0gsV0FBVztzQkFBaEMsS0FBSzt1QkFBQyxhQUFhO2dCQU1TLGtCQUFrQjtzQkFBOUMsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBTUMsaUJBQWlCO3NCQUE1QyxLQUFLO3VCQUFDLG1CQUFtQjtnQkFLRSxpQkFBaUI7c0JBQTVDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQU9BLGVBQWU7c0JBQXhDLEtBQUs7dUJBQUMsaUJBQWlCO2dCQUtJLGlCQUFpQjtzQkFBNUMsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBS0wsVUFBVTtzQkFBOUIsS0FBSzt1QkFBQyxZQUFZO2dCQUtTLGlCQUFpQjtzQkFBNUMsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBUU0scUJBQXFCO3NCQUFwRCxLQUFLO3VCQUFDLHVCQUF1QjtnQkFRRixpQkFBaUI7c0JBQTVDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQUtHLGtCQUFrQjtzQkFBOUMsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBU0osWUFBWTtzQkFBbEMsS0FBSzt1QkFBQyxjQUFjO2dCQU1hLHVCQUF1QjtzQkFBeEQsS0FBSzt1QkFBQyx5QkFBeUI7Z0JBTUEscUJBQXFCO3NCQUFwRCxLQUFLO3VCQUFDLHVCQUF1QjtnQkFNRCxrQkFBa0I7c0JBQTlDLEtBQUs7dUJBQUMsb0JBQW9CO2dCQU1FLGtCQUFrQjtzQkFBOUMsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBVU0sc0JBQXNCO3NCQUF0RCxLQUFLO3VCQUFDLHdCQUF3QjtnQkFLVCxXQUFXO3NCQUFoQyxLQUFLO3VCQUFDLGFBQWE7Z0JBS2tCLDJCQUEyQjtzQkFBaEUsS0FBSzt1QkFBQyw2QkFBNkI7Z0JBS2QsV0FBVztzQkFBaEMsS0FBSzt1QkFBQyxhQUFhO2dCQUtNLGVBQWU7c0JBQXhDLEtBQUs7dUJBQUMsaUJBQWlCO2dCQUVmLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFLa0IsYUFBYTtzQkFBcEMsS0FBSzt1QkFBQyxlQUFlO2dCQUNHLGNBQWM7c0JBQXRDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUNDLGFBQWE7c0JBQXBDLEtBQUs7dUJBQUMsZUFBZTtnQkFDQSxXQUFXO3NCQUFoQyxLQUFLO3VCQUFDLGFBQWE7Z0JBQ0ksYUFBYTtzQkFBcEMsS0FBSzt1QkFBQyxlQUFlO2dCQUNDLFlBQVk7c0JBQWxDLEtBQUs7dUJBQUMsY0FBYztnQkFDSyxlQUFlO3NCQUF4QyxLQUFLO3VCQUFDLGlCQUFpQjtnQkFDRCxZQUFZO3NCQUFsQyxLQUFLO3VCQUFDLGNBQWM7Z0JBQ0EsVUFBVTtzQkFBOUIsS0FBSzt1QkFBQyxZQUFZO2dCQUNDLFNBQVM7c0JBQTVCLEtBQUs7dUJBQUMsV0FBVztnQkFDRSxTQUFTO3NCQUE1QixLQUFLO3VCQUFDLFdBQVc7Z0JBQ2Usc0JBQXNCO3NCQUF0RCxLQUFLO3VCQUFDLHdCQUF3QjtnQkFDWCxTQUFTO3NCQUE1QixLQUFLO3VCQUFDLFdBQVc7Z0JBQ1UsaUJBQWlCO3NCQUE1QyxLQUFLO3VCQUFDLG1CQUFtQjtnQkFDSSxtQkFBbUI7c0JBQWhELEtBQUs7dUJBQUMscUJBQXFCO2dCQUNVLDJCQUEyQjtzQkFBaEUsS0FBSzt1QkFBQyw2QkFBNkI7Z0JBRUksNkJBQTZCO3NCQUFwRSxLQUFLO3VCQUFDLCtCQUErQjtnQkFFSCx3QkFBd0I7c0JBQTFELEtBQUs7dUJBQUMsMEJBQTBCO2dCQUVFLHdCQUF3QjtzQkFBMUQsS0FBSzt1QkFBQywwQkFBMEI7Z0JBRUYsb0JBQW9CO3NCQUFsRCxLQUFLO3VCQUFDLHNCQUFzQjtnQkFDRCxpQkFBaUI7c0JBQTVDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQUNDLGdCQUFnQjtzQkFBMUMsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBQ0MsZUFBZTtzQkFBeEMsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBQ0EsYUFBYTtzQkFBcEMsS0FBSzt1QkFBQyxlQUFlO2dCQUNiLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDYSxRQUFRO3NCQUExQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1MsZUFBZTtzQkFBeEMsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBQ0QsWUFBWTtzQkFBbEMsS0FBSzt1QkFBQyxjQUFjO2dCQUNaLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBYUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQWdCRixhQUFhO3NCQURoQixLQUFLO2dCQWtCSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBS0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUt1QixrQkFBa0I7c0JBQS9DLE1BQU07dUJBQUMsb0JBQW9CO2dCQUtFLGtCQUFrQjtzQkFBL0MsTUFBTTt1QkFBQyxvQkFBb0I7Z0JBYXdCLG1CQUFtQjtzQkFBdEUsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRVUsMkJBQTJCO3NCQUF0RixTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFVixlQUFlO3NCQUE5RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFYixrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CO2dCQVFHLFlBQVk7c0JBQTdDLFNBQVM7dUJBQUMscUJBQXFCO2dCQUNQLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFXK0IscUJBQXFCO3NCQUExRSxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDTixhQUFhO3NCQUExRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBVVEsbUJBQW1CO3NCQUF0RSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSyxzQkFBc0I7c0JBQTVFLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgaW1hZ2VDb21wcmVzc2lvbiBmcm9tIFwiYnJvd3Nlci1pbWFnZS1jb21wcmVzc2lvblwiO1xyXG5pbXBvcnQgeyBiYXNlNjRUb0ZpbGUsIEltYWdlQ3JvcHBlZEV2ZW50LCBJbWFnZUNyb3BwZXJDb21wb25lbnQsIEltYWdlVHJhbnNmb3JtIH0gZnJvbSBcIm5neC1pbWFnZS1jcm9wcGVyXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4vaGVscGVycy9hdHRhY2htZW50LmhlbHBlclwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZFNpemUsIEF0dGFjaG1lbnRGaWVsZENvbHVtbiwgQXR0YWNobWVudE1lbnVBY3Rpb24sIEF0dGFjaG1lbnRUeXBlLCBDcm9wT3B0aW9uRW51bSwgSUF0dGFjaG1lbnREVE8sIFR5cGVBdHRhY2htZW50Q29sdW1uIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9JQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBJT3B0aW9ucyB9IGZyb20gXCIuL2ludGVyZmFjZXMvSU9wdGlvbnNcIjtcclxuaW1wb3J0IHsgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9lcXAtYXR0YWNobWVudC1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXBBdHRhY2htZW50U2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL2VxcC1hdHRhY2htZW50LnNlcnZpY2VcIjtcclxuXHJcbmRlY2xhcmUgdmFyIERyb3Bib3g6IGFueTtcclxuXHJcbmNvbnN0IHRvQmFzZTY0ID0gKGZpbGUpID0+XHJcbiAgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0LnRvU3RyaW5nKCkpO1xyXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHJlamVjdChlcnJvcik7XHJcbiAgfSk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJlcXAtYXR0YWNobWVudHNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2VxcC1hdHRhY2htZW50cy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9lcXAtYXR0YWNobWVudHMuY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvLyNyZWdpb24gQElucHV0IGRlbCBjb21wb25lbnRlXHJcblxyXG4gIC8qKlxyXG4gICAqIFNlIFRSVUUgYWxsb3JhIG5hc2NvbmRlIGxhIGNvbG9ubmEgcGVyIGxlIGF6aW9uaSBzdWxsJ2FsbGVnYXRvIChuZWwgY2FzbyBcIm11bHRpcGxlQXR0YWNobWVudFwiIMOoIFRSVUUpLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcImRpc2FibGVBY3Rpb25cIikgZGlzYWJsZUFjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBUUlVFIG1vc3RyYSBpbCB0aXRvbG8gbmVsbCdoZWFkZXIgbmVsIGNhc28gaW4gY3VpIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSAoXCJFbGVuY28gYWxsZWdhdGlcIiBkaSBkZWZhdWx0KS5cclxuICAgKi9cclxuICBASW5wdXQoXCJzaG93SGVhZGVyXCIpIHNob3dIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBTb3JnZW50ZSBkYXRpIGRhIHZpc3VhbGl6emFyZS4gTmVsIGNhc28gc2kgdnVvbGUgZ2VzdGlyZSB1biBzaW5nb2xvIGFsbGVnYXRvIHZhIHBhc3NhdG8gaW4gb2duaSBjYXNvIGNvbWUgQXJyYXkuXHJcbiAgICovXHJcbiAgQElucHV0KFwiYXR0YWNobWVudHNMaXN0XCIpIGF0dGFjaG1lbnRzTGlzdDogQXJyYXk8SUF0dGFjaG1lbnREVE8+ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogTmVsIGNhc28gc2kgdnVvbGUgZ2VzdGlyZSB1biBzb2xvIGVsZW1lbnRvIHNlbnphIHBhc3NhcmxvIGNvbWUgYXJyYXksIGxvIHBhc3NvIGNvbWUgc2luZ29sbyBhbGxlZ2F0byBlIGdlc3Rpc2NvIG5lbGxhIGxpYnJlcmlhIGwnYXJyYXkuXHJcbiAgICovXHJcbiAgQElucHV0KFwic2luZ2xlQXR0YWNobWVudFwiKSBzaW5nbGVBdHRhY2htZW50OiBJQXR0YWNobWVudERUTyA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlIFRSVUUgbm9uIG1vc3RyYSBsYSBNYXRDYXJkIChuZWwgY2FzbyBpbiBjdWkgXCJtdWx0aXBsZUF0dGFjaG1lbnRcIiDDqCBUUlVFKS5cclxuICAgKi9cclxuICBASW5wdXQoXCJzaG93TWF0Q2FyZFwiKSBzaG93TWF0Q2FyZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlIEZBTFNFIGFsbG9yYSBpbCBjb21wb25lbnRlIG1vc3RyYSBzb2xvIGlsIHB1bHNhbnRlIGRpIGNhcmljYW1lbnRvIGRpIHVuIHNpbmdvbG8gZmlsZSwgdW5hIHZvbHRhIGNhcmljYXRvIGlsIGZpbGUgaW52b2NhIGwnZXZlbnRvIGRpIG91dHB1dCBcImxvY2FsRWRpdGVkQXR0YWNobWVudHNcIi5cclxuICAgKiBTZSBUUlVFIGFsbG9yYSBpbCBjb21wb25lbnRlIG1vc3RyYSBsJ2VsZW5jbyBkaSB0dXR0aSBnbGkgYWxsZWdhdGkgcmljZXZ1dG8gbmVsIHBhcmFtZXRybyBcImF0dGFjaG1lbnRzTGlzdFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcIm11bHRpcGxlQXR0YWNobWVudFwiKSBtdWx0aXBsZUF0dGFjaG1lbnQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBhc3N1bWUgaWwgdmFsb3JlIFRSVUUgYWxsb3JhIHNhcsOgIHBvc3NpYmlsZSBjYXJpY2FyZSBwacO5IGZpbGUgcGVyIHZvbHRhLiBRdWVzdGEgZnVuemlvbmFsaXTDoCDDqCBhdHRpdmFcclxuICAgKiBTT0xPIHNlIHNpIGdlc3Rpc2Nvbm8gYWxsZWdhdGkgbXVsdGlwbGksIHF1aW5kaSBzZSBsJ2lucHV0ICdtdWx0aXBsZUF0dGFjaG1lbnQnIGFzc3VtZSBpbCB2YWxvcmUgVFJVRSwgYWx0cmltZW50aSDDqCBzZW1wcmUgZGlzYWJpbGl0YXRhLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcImxvYWRNdWx0aXBsZUZpbGVzXCIpIGxvYWRNdWx0aXBsZUZpbGVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgaWwgbWVzc2FnZ2lvIGRhIHZpc3VhbGl6emFyZSBuZWwgY2FzbyBpbiBjdWkgbGEgdGFiZWxsYSBkZWdsaSBhbGxlZ2F0aSAobmVsIGNhc28gaW4gY3VpIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSkgw6ggdnVvdGEuXHJcbiAgICovXHJcbiAgQElucHV0KFwiZW1wdHlUYWJsZU1lc3NhZ2VcIikgZW1wdHlUYWJsZU1lc3NhZ2U6IHN0cmluZyA9IFwiTmVzc3VuIGRhdG8gdHJvdmF0b1wiO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBUUlVFIGFsbG9yYSBwZXJtZXR0ZSBkaSBzZWxlemlvbmFyZSBzb2x0YW50byBmaWxlIGRpIHRpcG8gaW1tYWdpbmUsIGF2ZW50ZSB1bm8gZGVpIG1pbWV0eXBlXHJcbiAgICogc3BlY2lmaWNhdGkgZGVudHJvIEF0dGFjaG1lbnRIZWxwZXJTZXJ2aWNlLlxyXG4gICAqIFNlIEZBTFNFIHBlcm1ldHRlIGRpIHNlbGV6aW9uYXJlIHF1YWxzaWFzaSB0aXBvIGRpIGZpbGVcclxuICAgKi9cclxuICBASW5wdXQoXCJhbGxvd09ubHlJbWFnZXNcIikgYWxsb3dPbmx5SW1hZ2VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNwZWNpZmljYSBpIHRpcGkgZGkgZmlsZSBjaGUgw6ggcG9zc2liaWxlIGNhcmljYXJlXHJcbiAgICovXHJcbiAgQElucHV0KFwiYWNjZXB0ZWRGaWxlVHlwZXNcIikgYWNjZXB0ZWRGaWxlVHlwZXM6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogU2UgVFJVRSBkaXNhYmlsaXRhIGlsIHB1bHNhbnRlIGRpIEFnZ2l1bnRhIGFsbGVnYXRvIChhIHByZXNjaW5kZXJlIGRhbCB2YWxvcmUgZGVsIHBhcmFtZXRybyBcIm11bHRpcGxlQXR0YWNobWVudFwiKS5cclxuICAgKi9cclxuICBASW5wdXQoXCJpc0Rpc2FibGVkXCIpIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW9zdHJhL25hc2NvbmRlIGxhIGNvbG9ubmEgcGVyIHZpc3VhbGl6emFyZSBsJ2FudGVwcmltYSBkZWkgZmlsZSBuZWxsYSB0YWJlbGxhIChjYXNvIG11bHRpcGxlQXRhdGNobWVudHMgPSB0cnVlKS5cclxuICAgKi9cclxuICBASW5wdXQoXCJzaG93SW5saW5lUHJldmlld1wiKSBzaG93SW5saW5lUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdWVwcmFyZSBsJ0lBdHRhY2htZW50RFRPIGNvbXBsZXRvIGRhIHZlZGVyZSBuZWxsJ2FudGVwcmltYS4gTGEgY2hpYW1hdGEgc2Fyw6AgaW4gUE9TVCBlIG5lbCBib2R5XHJcbiAgICogY29udGVycsOgIGwnSUF0dGFjaG1lbnREVE8gc2VsZXppb25hdG8gZGFsbCd1dGVudGUuXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZXNlZ3VpdGEgc29sbyBwZXIgbCdhbnRlcHJpbWEgZGVsbGUgaW1tYWdpbmkgZXNzZW5kbyBuZWNlc3NhcmlvIGlsIGJhc2U2NCBjb21wbGV0byBkZWxsJ2ltbWFnaW5lIGEgZGltZW5zaW9uZSByZWFsZS5cclxuICAgKiBQZXIgZG9jdW1lbnRpL2xpbmsgYmFzdGEgY2hlIHNpYSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIEZpbGVQYXRoIGRpIElBdHRhY2htZW50RFRPLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcImdldEF0dGFjaG1lbnRFbmRwb2ludFwiKSBnZXRBdHRhY2htZW50RW5kcG9pbnQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhvc3RuYW1lIGRlbGwnYW1iaWVudGUgZGkgcHJvZHV6aW9uZSBkZWxsJ2FwcGxpY2F0aXZvLiBOZWNlc3NhcmlvIHBlciB2aXN1YWxpenphcmUgbCdhbnRlcHJpbWEgZGVpIGRvY3VtZW50aVxyXG4gICAqIHRyYW1pdGUgaWwgdmlld2VyIGRpIGdvb2dsZS5cclxuICAgKiBOT1RBOiBQZXIgdmlzdWFsaXp6YXJlIGwnYW50ZXByaW1hIMOoIG5lY2Vzc2FyaW8gY2hlIGxhIHByb3JpZXTDoCBGaWxlUGF0aCBkZWxsJ0lBdHRhY2htZW50RFRPIHNpYSBwb3BvbGF0YSBlIGNoZVxyXG4gICAqIHNpYSBhYmlsaXRhdG8gbCdhY2Nlc3NvIGFsbGEgY2FydGVsbGEgc3VsIHNlcnZlciB0cmFtaXRlIGhvc3RuYW1lLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcInByb2R1Y3Rpb25CYXNlVXJsXCIpIHByb2R1Y3Rpb25CYXNlVXJsOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBPcHppb25pIHBlciBsYSBjb21wcmVzc2lvbmUgZGVsbGUgaW1tYWdpbmkgY2FyaWNhdGUuXHJcbiAgICovXHJcbiAgQElucHV0KFwiY29tcHJlc3Npb25PcHRpb25zXCIpIGNvbXByZXNzaW9uT3B0aW9uczogSU9wdGlvbnMgPSB7XHJcbiAgICBtYXhTaXplTUI6IDAuNSxcclxuICAgIG1heFdpZHRoT3JIZWlnaHQ6IDE5MjAsXHJcbiAgICB1c2VXZWJXb3JrZXI6IHRydWVcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBcnJheSBkaSBBdHRhY2htZW50VHlwZSBjaGUgc2kgcG9zc29ubyBhZ2dpdW5nZXJlXHJcbiAgICovXHJcbiAgQElucHV0KFwiYWxsb3dlZFR5cGVzXCIpIGFsbG93ZWRUeXBlczogQXJyYXk8QXR0YWNobWVudFR5cGU+ID0gW0F0dGFjaG1lbnRUeXBlLkZJTEUsIEF0dGFjaG1lbnRUeXBlLkxJTktdO1xyXG5cclxuICAvKipcclxuICAgKiBQZXJtZXR0ZSBkaSBzdGFiaWxpcmUgc2UgbGEgZXFwLXRhYmxlIGNvbnRlbmVudGUgbCdlbGVuY28gZGVnbGkgYWxsZWdhdGkgdXRpbGl6emFcclxuICAgKiBpbCBtdWx0aWxpbmd1YSBvcHB1cmUgbm9cclxuICAgKi9cclxuICBASW5wdXQoXCJpc0VxcFRhYmxlTXVsdGlMYW5ndWFnZVwiKSBpc0VxcFRhYmxlTXVsdGlMYW5ndWFnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBQZXJtZXR0ZSBkaSBzdGFiaWxpcmUsIGluIGNhc28gZGkgZ2VzdGlvbmUgYWxsZWdhdGkgbXVsdGlwbGksIHNlIGxhIHRhYmVsbGEgY29udGVuZW50ZSBsJ2VsZW5jb1xyXG4gICAqIGRlZ2xpIGFsbGVnYXRpIGRldmUgZXNzZXJlIHBhZ2luYXRhIG9wcHVyZSBub1xyXG4gICAqL1xyXG4gIEBJbnB1dChcInRhYmxlUGFnaW5hdG9yVmlzaWJsZVwiKSB0YWJsZVBhZ2luYXRvclZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBQZXJtZXR0ZSBkaSBzdGFiaWxpcmUsIGluIGNhc28gZGkgZ2VzdGlvbmUgYWxsZWdhdGkgbXVsdGlwbGksIHNlIGxhIHRhYmVsbGEgY29udGVuZW50ZSBsJ2VsZW5jb1xyXG4gICAqIGRlZ2xpIGFsbGVnYXRpIGRldmUgY29udGVuZXJlIGlsIGNhbXBvIGRpIHJpY2VyY2Egb3BwdXJlIG5vXHJcbiAgICovXHJcbiAgQElucHV0KFwiaXNUYWJsZVNlYXJjaGVhYmxlXCIpIGlzVGFibGVTZWFyY2hlYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluIGNhc28gZGkgZ2VzdGlvbmUgYWxsZWdhdGkgbXVsdGlwbGksIHBlcm1ldHRlIGRpIHN0YWJpbGlyZSBsYSBkaW1lbnNpb25lIHBhZ2luYSBkaSBkZWZhdWx0XHJcbiAgICogcGVyIGxhIHRhYmVsbGEgY29udGVuZW50ZSBsJ2VsZW5jbyBkZWdsaSBhbGxlZ2F0aVxyXG4gICAqL1xyXG4gIEBJbnB1dChcInRhYmxlUGFnaW5hdG9yU2l6ZVwiKSB0YWJsZVBhZ2luYXRvclNpemU6IG51bWJlciA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcm1ldHRlIGRpIHNjZWdsaWVyZSBpbCBtb2RvIGluIGN1aSBpIGZpbGUgZGV2b25vIGVzc2VyZSBjYXJpY2F0aVxyXG4gICAqL1xyXG4gIC8vIEBJbnB1dChcInVwbG9hZFR5cGVcIikgdXBsb2FkVHlwZTogVXBsb2FkVHlwZUVudW0gPSBVcGxvYWRUeXBlRW51bS5GSUxFX0FORF9MSU5LO1xyXG5cclxuICAvKipcclxuICAgKiBQZXJtZXR0ZSBkaSBzdGFiaWxpcmUgc2UgaSBwdWxzYW50aSBwZXIgaWwgY2FyaWNhbWVudG8gZGVpIGZpbGUgc29ubyBzZXBhcmF0aSBvIGluIHVuIG1lbsO5IGEgdGVuZGluYVxyXG4gICAqL1xyXG4gIEBJbnB1dChcInNlcGFyYXRlZFVwbG9hZEJ1dHRvbnNcIikgc2VwYXJhdGVkVXBsb2FkQnV0dG9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBQZXJtZXR0ZSBkaSBzY2VnbGllcmUgc2UgZGFyZSBsYSBwb3NzaWJpbGl0w6AgZGkgdmVkZXJlIG8gbm8gbCdhbnRlcHJpbWFcclxuICAgKi9cclxuICBASW5wdXQoXCJzaG93UHJldmlld1wiKSBzaG93UHJldmlldzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluIGNhc28gZGkgYWxsZWdhdG8gc2luZ29sbywgcGVybWV0dGUgZGkgc2NlZ2xpZXJlIHNlIGFnZ2l1bmdlcmUgZmlsZSB0cmFtaXRlIGRyYWcgYW5kIGRyb3BcclxuICAgKi9cclxuICBASW5wdXQoXCJzaW5nbGVBdHRhY2htZW50RHJhZ0FuZERyb3BcIikgc2luZ2xlQXR0YWNobWVudERyYWdBbmREcm9wOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQXJyYXkgZGkgb3B6aW9uaSBjaGUgc2kgcG9zc29ubyB1dGlsaXp6YXJlIHBlciBpbCBjcm9wXHJcbiAgICovXHJcbiAgQElucHV0KFwiY3JvcE9wdGlvbnNcIikgY3JvcE9wdGlvbnM6IEFycmF5PENyb3BPcHRpb25FbnVtPiA9IFsxLCAyXTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2xhc3NlIGN1c3RvbSBkYSBhc3NlZ25hcmUgYWwgZGlhbG9nIGRlbCBjcm9wIGltbWFnaW5pXHJcbiAgICovXHJcbiAgQElucHV0KFwiY3JvcERpYWxvZ0NsYXNzXCIpIGNyb3BEaWFsb2dDbGFzczogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBtYXhGaWxlU2l6ZU1COiBudW1iZXIgPSA1MDA7IC8vIERlZmF1bHQgbWF4IHNpemUgb2YgMTAwIE1CXHJcbiAgQElucHV0KCkgY2FyZFNpemU6IEF0dGFjaG1lbnRDYXJkU2l6ZSA9ICdzbWFsbCc7IC8vIERlZmF1bHRcclxuICBASW5wdXQoKSBjdXN0b21DYXJkV2lkdGhQeDogbnVtYmVyID0gMjAwOyAvLyBMYXJnaGV6emEgY3VzdG9tIGluIHB4XHJcbiAgQElucHV0KCkgY3VzdG9tQ2FyZEhlaWdodFB4OiBudW1iZXIgPSAxODA7IC8vIEFsdGV6emEgY3VzdG9tIGluIHB4XHJcblxyXG4gIEBJbnB1dCgpIGxheW91dDogJ2Z1bGwnIHwgJ2NvbXBhY3QnID0gJ2NvbXBhY3QnO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCBwZXIgZGVmaW5pcmUgbGUgbGFiZWwgZGEgdXNhcmUgbmVsIGNvbXBvbmVudGVcclxuICAgKi9cclxuICBASW5wdXQoXCJvcGVuTGlua0xhYmVsXCIpIG9wZW5MaW5rTGFiZWw6IHN0cmluZyA9IFwiQXByaSBsaW5rXCI7XHJcbiAgQElucHV0KFwiYWRkQnV0dG9uTGFiZWxcIikgYWRkQnV0dG9uTGFiZWw6IHN0cmluZyA9IFwiQWdnaXVuZ2lcIjtcclxuICBASW5wdXQoXCJkb3dubG9hZExhYmVsXCIpIGRvd25sb2FkTGFiZWw6IHN0cmluZyA9IFwiRG93bmxvYWRcIjtcclxuICBASW5wdXQoXCJkZWxldGVMYWJlbFwiKSBkZWxldGVMYWJlbDogc3RyaW5nID0gXCJFbGltaW5hXCI7XHJcbiAgQElucHV0KFwiZmlsZU5hbWVMYWJlbFwiKSBmaWxlTmFtZUxhYmVsOiBzdHJpbmcgPSBcIk5vbWUgZmlsZVwiO1xyXG4gIEBJbnB1dChcInByZXZpZXdMYWJlbFwiKSBwcmV2aWV3TGFiZWw6IHN0cmluZyA9IFwiQW50ZXByaW1hXCI7XHJcbiAgQElucHV0KFwidXBsb2FkRmlsZUxhYmVsXCIpIHVwbG9hZEZpbGVMYWJlbDogc3RyaW5nID0gXCJDYXJpY2EgZmlsZVwiO1xyXG4gIEBJbnB1dChcImNvbmZpcm1MYWJlbFwiKSBjb25maXJtTGFiZWw6IHN0cmluZyA9IFwiQ29uZmVybWFcIjtcclxuICBASW5wdXQoXCJhYm9ydExhYmVsXCIpIGFib3J0TGFiZWw6IHN0cmluZyA9IFwiQW5udWxsYVwiO1xyXG4gIEBJbnB1dChcInNhdmVMYWJlbFwiKSBzYXZlTGFiZWw6IHN0cmluZyA9IFwiU2FsdmFcIjtcclxuICBASW5wdXQoXCJleGl0TGFiZWxcIikgZXhpdExhYmVsOiBzdHJpbmcgPSBcIkVzY2lcIjtcclxuICBASW5wdXQoXCJ1cGxvYWRXaXRoRHJvcGJveExhYmVsXCIpIHVwbG9hZFdpdGhEcm9wYm94TGFiZWw6IHN0cmluZyA9IFwiQ2FyaWNhIGNvbiBEcm9wYm94XCI7XHJcbiAgQElucHV0KFwiY3JvcExhYmVsXCIpIGNyb3BMYWJlbDogc3RyaW5nID0gXCJTY2VnbGkgbGUgZGltZW5zaW9uaSBkZWxsJ2ltbWFnaW5lXCI7XHJcbiAgQElucHV0KFwiZGVsZXRlRGlhbG9nVGl0bGVcIikgZGVsZXRlRGlhbG9nVGl0bGU6IHN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KFwiZGVsZXRlRGlhbG9nTWVzc2FnZVwiKSBkZWxldGVEaWFsb2dNZXNzYWdlOiBzdHJpbmcgPSBcIlNlaSBzaWN1cm8gZGkgdm9sZXIgY2FuY2VsbGFyZSBxdWVzdCdhbGxlZ2F0bz9cIjtcclxuICBASW5wdXQoXCJub0ltYWdlU2VsZWN0ZWRFcnJvck1lc3NhZ2VcIikgbm9JbWFnZVNlbGVjdGVkRXJyb3JNZXNzYWdlOiBzdHJpbmcgPVxyXG4gICAgXCJOb24gw6ggcG9zc2liaWxlIHNlbGV6aW9uYXJlIHVuIGZpbGUgY2hlIG5vbiBzaWEgdW4naW1tYWdpbmUuXCI7XHJcbiAgQElucHV0KFwid3JvbmdUeXBlU2VsZWN0ZWRFcnJvck1lc3NhZ2VcIikgd3JvbmdUeXBlU2VsZWN0ZWRFcnJvck1lc3NhZ2U6IHN0cmluZyA9XHJcbiAgICBcIk5vbiDDqCBwb3NzaWJpbGUgY2FyaWNhcmUgaWwgZmlsZSBzZWxlemlvbmF0by5cIjtcclxuICBASW5wdXQoXCJ2aWRlb1ByZXZpZXdFcnJvck1lc3NhZ2VcIikgdmlkZW9QcmV2aWV3RXJyb3JNZXNzYWdlOiBzdHJpbmcgPVxyXG4gICAgXCJJbXBvc3NpYmlsZSBhcHJpcmUgbCdhbnRlcHJpbWEgZGkgdW4gZmlsZSB2aWRlby5cIjtcclxuICBASW5wdXQoXCJ2aWRlb1ByZXZpZXdFcnJvck1lc3NhZ2VcIikgYXVkaW9QcmV2aWV3RXJyb3JNZXNzYWdlOiBzdHJpbmcgPVxyXG4gICAgXCJJbXBvc3NpYmlsZSBhcHJpcmUgbCdhbnRlcHJpbWEgZGkgdW4gZmlsZSBhdWRpby5cIjtcclxuICBASW5wdXQoXCJmbGlwSG9yaW56b250YWxMYWJlbFwiKSBmbGlwSG9yaW56b250YWxMYWJlbDogc3RyaW5nID0gXCJDYXBvdm9sZ2kgb3JpenpvbnRhbG1lbnRlXCI7XHJcbiAgQElucHV0KFwiZmxpcFZlcnRpY2FsTGFiZWxcIikgZmxpcFZlcnRpY2FsTGFiZWw6IHN0cmluZyA9IFwiQ2Fwb3ZvbGdpIHZlcnRpY2FsbWVudGVcIjtcclxuICBASW5wdXQoXCJyb3RhdGVSaWdodExhYmVsXCIpIHJvdGF0ZVJpZ2h0TGFiZWw6IHN0cmluZyA9IFwiUnVvdGEgYSBkZXN0cmFcIjtcclxuICBASW5wdXQoXCJyb3RhdGVMZWZ0TGFiZWxcIikgcm90YXRlTGVmdExhYmVsOiBzdHJpbmcgPSBcIlJ1b3RhIGEgc2luaXN0cmFcIjtcclxuICBASW5wdXQoXCJiYXNlNjRMaW1pdE1CXCIpIGJhc2U2NExpbWl0TUI6IG51bWJlciA9IDEwMDtcclxuICBASW5wdXQoKSB1cGxvYWRUaXRsZSA9ICdVcGxvYWQgZmlsZSc7XHJcbiAgQElucHV0KCkgdXBsb2FkU3VidGl0bGUgPSAnRHJhZyAmIGRyb3AgZmlsZXMgbyBjbGljayc7XHJcbiAgQElucHV0KCkgZHJvcEhlcmVMYWJlbCA9ICdSaWxhc2NpYSBpIGZpbGUgcXVpJztcclxuICBASW5wdXQoKSBzdXBwb3J0ZWRGb3JtYXRzTGFiZWwgPSAnRm9ybWF0aSBzdXBwb3J0YXRpOiBKUEVHLCBQTkcsIFBERiAoTWF4IDEwME1CKSc7XHJcbiAgQElucHV0KCkgYnJvd3NlRmlsZXNMYWJlbCA9ICdDZXJjYSBpIGZpbGUnO1xyXG4gIEBJbnB1dCgpIHVwbG9hZFN1bW1hcnlMYWJlbCA9ICdMaXN0YSBhbGxlZ2F0aSc7XHJcbiAgQElucHV0KCkgZmlsZXNMYWJlbCA9ICdGaWxlcyc7XHJcbiAgQElucHV0KCkgdG90YWxTaXplTGFiZWwgPSAnRGltZW5zaW9uZSB0b3RhbGUnO1xyXG4gIEBJbnB1dCgpIGVtcHR5U3RhdGVMYWJlbCA9ICdOb24gc29ubyBwcmVzZW50aSBmaWxlIGNhcmljYXRpJztcclxuICBASW5wdXQoKSBhZGRlZFN1Y2Nlc3NmdWxseUxhYmVsID0gJ2ZpbGUocykgY2FyaWNhdGkgY29uIHN1Y2Nlc3NvLic7XHJcbiAgQElucHV0KCkgcmVtb3ZlZExhYmVsID0gJ0ZpbGUgcmltb3Nzbyc7XHJcbiAgLy8gQElucHV0KCkgcmVtb3ZlTGFiZWwgPSAnUmltdW92aSBmaWxlJztcclxuICBASW5wdXQoKSBjaG9vc2VWaWV3ID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93U3VtbWFyeSA9IGZhbHNlO1xyXG4gIEBJbnB1dChcInZpZXdNb2RlXCIpIHZpZXdNb2RlOiAnY2FyZCcgfCAndGFibGUnID0gJ3RhYmxlJztcclxuICBASW5wdXQoXCJzaG93VXBsb2FkVGl0bGVcIikgc2hvd1VwbG9hZFRpdGxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoXCJzaG93RHJvcEFyZWFcIikgc2hvd0Ryb3BBcmVhOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBoaWRkZW5Db2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGhpZGRlbkFjdGlvbnM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHZpZGVvQ29tcHJlc3Npb246IHtcclxuICAgIGVuYWJsZWQ6IGJvb2xlYW4sXHJcbiAgICBtYXhXaWR0aD86IG51bWJlcixcclxuICAgIGJpdHJhdGU/OiBudW1iZXJcclxuICB9ID0geyBlbmFibGVkOiBmYWxzZSwgbWF4V2lkdGg6IDEyODAsIGJpdHJhdGU6IDI1MDAwMDAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfY3VzdG9tTWVudUFjdGlvbnM6IEF0dGFjaG1lbnRNZW51QWN0aW9uW10gPSBbXTtcclxuICBfc29ydGVkTWVudUFjdGlvbnM6IEF0dGFjaG1lbnRNZW51QWN0aW9uW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAqIFNPTE8gcXVhbmRvIFtjdXN0b21NZW51QWN0aW9uc109XCIuLi5cIiBjYW1iaWEuXHJcbiAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGN1c3RvbU1lbnVBY3Rpb25zKHZhbHVlOiBBdHRhY2htZW50TWVudUFjdGlvbltdKSB7XHJcbiAgICB0aGlzLl9jdXN0b21NZW51QWN0aW9ucyA9IHZhbHVlIHx8IFtdO1xyXG4gICAgdGhpcy5zZXR1cE1lbnVBY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VzdG9tTWVudUFjdGlvbnMoKTogQXR0YWNobWVudE1lbnVBY3Rpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tTWVudUFjdGlvbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jdXN0b21Db2x1bW5zOiBBdHRhY2htZW50RmllbGRDb2x1bW5bXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBTT0xPIHF1YW5kbyBbY3VzdG9tQ29sdW1uc109XCIuLi5cIiBjYW1iaWEuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY3VzdG9tQ29sdW1ucyh2YWx1ZTogQXR0YWNobWVudEZpZWxkQ29sdW1uW10pIHtcclxuICAgIHRoaXMuX2N1c3RvbUNvbHVtbnMgPSB2YWx1ZSB8fCBbXTtcclxuICAgIHRoaXMuc2V0dXBUYWJsZUNvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIGdldCBjdXN0b21Db2x1bW5zKCk6IEF0dGFjaG1lbnRGaWVsZENvbHVtbltdIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXN0b21Db2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBAT3V0cHV0IGRlbCBjb21wb25lbnRlXHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXN0aXR1aXNjZSBsYSBsaXN0YSBhZ2dpb3JuYXRhIGRlZ2xpIGFsbGVnYXRpLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBsb2NhbEVkaXRlZEF0dGFjaG1lbnRzOiBFdmVudEVtaXR0ZXI8QXJyYXk8SUF0dGFjaG1lbnREVE8+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8SUF0dGFjaG1lbnREVE8+PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gc2NhdGVuYXRvIGFsbGEgcHJlc3Npb25lIGRlbCBwdWxzYW50ZSBFU0NJIGRlbGxhIG1vZGFsZSBkaSBjYXJpY2FtZW50byBmaWxlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhYm9ydEFkZEF0dGFjaG1lbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBkaSBvdXRwdXQgY2hlIHJlc3RpdHVpc2NlIGwnSUF0dGFjaG1lbnREVE8gc2VsZXppb25hdG8gcGVyIGlsIGRvd25sb2FkIG5lbCBjYXNvIEZpbGVEYXRhQmFzZTY0LCBGaWxlQ29udGVudFR5cGUgbyBGaWxlTmFtZSBub24gZm9zc2VybyBzcGVjaWZpY2F0aS5cclxuICAgKi9cclxuICBAT3V0cHV0KFwiZG93bmxvYWRBdHRhY2htZW50XCIpIGRvd25sb2FkQXR0YWNobWVudDogRXZlbnRFbWl0dGVyPElBdHRhY2htZW50RFRPPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUF0dGFjaG1lbnREVE8+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBkaSBvdXRwdXQgY2hlIHJlc3RpdHVpc2NlIGwnZWxlbWVudG8gZWxpbWluYXRvIHByaW1hIGNoZSBxdWVzdG8gdmVuZ2EgZWZmZXR0aXZhbWVudGUgcmlzbW9zc28gZGFsbGEgbGlzdGEuXHJcbiAgICovXHJcbiAgQE91dHB1dChcIm9uRGVsZXRlQXR0YWNobWVudFwiKSBvbkRlbGV0ZUF0dGFjaG1lbnQ6IEV2ZW50RW1pdHRlcjxJQXR0YWNobWVudERUTz4gPSBuZXcgRXZlbnRFbWl0dGVyPElBdHRhY2htZW50RFRPPigpO1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGdlc3Rpb25lIGNhcmljYW1lbnRvIG51b3ZvIGFsbGVnYXRvXHJcbiAgbmV3QXR0YWNobWVudDogSUF0dGFjaG1lbnREVE8gPSB7fSBhcyBJQXR0YWNobWVudERUTztcclxuICBuZXdNdWx0aXBsZUF0dGFjaG1lbnRzOiBBcnJheTxJQXR0YWNobWVudERUTz4gPSBbXTtcclxuICBhdHRhY2htZW50VHlwZSA9IEF0dGFjaG1lbnRUeXBlO1xyXG4gIC8vIHVwbG9hZFR5cGVFbnVtID0gVXBsb2FkVHlwZUVudW07XHJcbiAgbmV3QXR0YWNobWVudEZvcm06IEZvcm1Hcm91cDtcclxuICBzZWxlY3RlZEZpbGU6IEZpbGUgPSBudWxsO1xyXG4gIHNlbGVjdGVkRmlsZXM6IEFycmF5PEZpbGU+ID0gbnVsbDtcclxuICBzaG93Q3JvcEltYWdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0FkZEF0dGFjaG1lbnRcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nQWRkQXR0YWNobWVudDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBkaWFsb2dSZWZBZGRBdHRhY2htZW50OiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0FkZE11bHRpcGxlQXR0YWNobWVudFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dBZGRNdWx0aXBsZUF0dGFjaG1lbnQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgZGlhbG9nUmVmQ3JvcEltYWdlOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ0Nyb3BJbWFnZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dDcm9wSW1hZ2U6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2FkZGluZ0xpbmtUZW1wbGF0ZScpIGFkZGluZ0xpbmtUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGdlc3Rpb25lIHJpZGltZW5zaW9uYW1lbnRvIGZpbGUgZGkgdGlwbyBpbWFnZVxyXG4gIGltYWdlQ2hhbmdlZEV2ZW50OiBhbnkgPSBcIlwiO1xyXG4gIGNyb3BwZWRJbWFnZTogYW55ID0gXCJcIjtcclxuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge307XHJcbiAgY2FudmFzUm90YXRpb24gPSAwO1xyXG4gIEBWaWV3Q2hpbGQoSW1hZ2VDcm9wcGVyQ29tcG9uZW50KSBpbWFnZUNyb3BwZXI6IEltYWdlQ3JvcHBlckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiaW1hZ2VJbnB1dFwiKSBpbWFnZUlucHV0OiBhbnk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIEF0dGFjaG1lbnRUeXBlID0gQXR0YWNobWVudFR5cGU7XHJcbiAgc2VsZWN0ZWRBdHRhY2htZW50OiBJQXR0YWNobWVudERUTztcclxuXHJcbiAgb3JpZ2luYWxXaWR0aDogbnVtYmVyO1xyXG4gIG9yaWdpbmFsSGVpZ2h0OiBudW1iZXI7XHJcbiAgY3VzdG9tV2lkdGg6IG51bWJlcjtcclxuICBjdXN0b21IZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgQFZpZXdDaGlsZChcImlubGluZVByZXZpZXdUZW1wbGF0ZVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbmxpbmVQcmV2aWV3VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRpYWxvZ1ByZXZpZXdcIiwgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nUHJldmlldzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgaW1hZ2VGaWxlOiBGaWxlO1xyXG5cclxuICBhZGRpbmdMaW5rTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyNyZWdpb24gU2V6aW9uZSBudW92YSByZWZhY3RvcmluZ1xyXG5cclxuICAvLyBQcm9wcmlldMOgIGludGVybmEgY2hlIGNvbnRlcnLDoCBsJ2FycmF5IGZpbmFsZSBkaSBjb2xvbm5lIG9yZGluYXRlXHJcbiAgX3RhYmxlQ29sdW1uczogQXR0YWNobWVudEZpZWxkQ29sdW1uW10gPSBbXTtcclxuICBAVmlld0NoaWxkKCdkZWZhdWx0RmlsZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgZGVmYXVsdEZpbGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdkZWZhdWx0QWN0aW9uc1RlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgZGVmYXVsdEFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy8gU3RhdG8gZHJhZyAmIGRyb3AgZSB0b2FzdFxyXG4gIGRyYWdPdmVyID0gZmFsc2U7XHJcbiAgdG9hc3QgPSB7XHJcbiAgICB2aXNpYmxlOiBmYWxzZSBhcyBib29sZWFuLFxyXG4gICAgdHlwZTogJ3N1Y2Nlc3MnIGFzICdzdWNjZXNzJyB8ICdlcnJvcicsXHJcbiAgICB0ZXh0OiAnJyBhcyBzdHJpbmcsXHJcbiAgICB0aW1lb3V0SWQ6IDAgYXMgYW55XHJcbiAgfTtcclxuXHJcbiAgcHJvZ3Jlc3NQZXJjZW50ID0gMDtcclxuICB0b3RhbFNpemVCeXRlcyA9IDA7XHJcbiAgZ2V0IHRvdGFsU2l6ZUZvcm1hdHRlZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5mb3JtYXRGaWxlU2l6ZSh0aGlzLnRvdGFsU2l6ZUJ5dGVzKTsgfVxyXG5cclxuICAvLyBVdGlsaXR5IHBlciBmb3JtYXR0YXJlIGJ5dGVzICgyIGRlY2ltYWxpKVxyXG4gIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFieXRlcyB8fCBieXRlcyA8PSAwKSByZXR1cm4gJzAgQnl0ZXMnO1xyXG4gICAgY29uc3QgayA9IDEwMjQ7XHJcbiAgICBjb25zdCBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcclxuICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKTtcclxuICAgIHJldHVybiBgJHtwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKDIpKX0gJHtzaXplc1tpXX1gO1xyXG4gIH1cclxuXHJcbiAgLy8gTW9zdHJhIHRvYXN0IGNvbiBhdXRv4oCRaGlkZSBlIHJlc2V0IHByb2dyZXNzIGJhciBDU1NcclxuICBzaG93VG9hc3QobWVzc2FnZTogc3RyaW5nLCB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InID0gJ3N1Y2Nlc3MnLCBkdXJhdGlvbk1zID0gMzAwMCkge1xyXG4gICAgaWYgKHRoaXMudG9hc3QudmlzaWJsZSAmJiB0aGlzLnRvYXN0LnRleHQgPT09IG1lc3NhZ2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhbmNlbGxhIGlsIHRpbWVvdXQgcHJlY2VkZW50ZSBzZSBlc2lzdGVcclxuICAgIGlmICh0aGlzLnRvYXN0LnRpbWVvdXRJZCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50b2FzdC50aW1lb3V0SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhbGNvbGEgdW5hIGR1cmF0YSBkaW5hbWljYVxyXG4gICAgY29uc3QgZHVyYXRpb24gPSBkdXJhdGlvbk1zIHx8IE1hdGgubWF4KDQwMDAsIG1lc3NhZ2UubGVuZ3RoICogMTAwKTtcclxuXHJcbiAgICB0aGlzLnRvYXN0LnRleHQgPSBtZXNzYWdlO1xyXG4gICAgdGhpcy50b2FzdC50eXBlID0gdHlwZTtcclxuICAgIHRoaXMudG9hc3QudmlzaWJsZSA9IHRydWU7XHJcblxyXG4gICAgLy8gSW1wb3N0YSBpbCBudW92byB0aW1lb3V0IHBlciBuYXNjb25kZXJlIGF1dG9tYXRpY2FtZW50ZSBpbCB0b2FzdFxyXG4gICAgdGhpcy50b2FzdC50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy50b2FzdC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICB9LCBkdXJhdGlvbik7XHJcbiAgfVxyXG5cclxuICAjZW5kcmVnaW9uXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgZXFwQXR0YWNobWVudFNlcnZpY2U6IEVxcEF0dGFjaG1lbnRTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgLy8gSW5pemlhbGl6emEgbWV0cmljaGUgZSBwcm9ncmVzcyBpbiBiYXNlIGFsbG8gc3RhdG8gaW5pemlhbGVcclxuICAgIHRoaXMucmVjb21wdXRlVG90YWxzQW5kUHJvZ3Jlc3MoKTtcclxuXHJcbiAgICAvL1NlIMOoIHN0YXRhIHJpY2hpZXN0YSBsYSBnZXN0aW9uZSBkZWxsZSBzb2xlIGltbWFnaW5pIGFsbG9yYSBpbXBvc3RhIGlsIGZpbHRybyBwZXIgbGUgZXN0ZW5zaW9uaSBwb3NzaWJpbGkgZGEgY2FyaWNhcmVcclxuICAgIGlmICghdGhpcy5hY2NlcHRlZEZpbGVUeXBlcylcclxuICAgICAgaWYgKHRoaXMuYWxsb3dPbmx5SW1hZ2VzID09IHRydWUpIHRoaXMuYWNjZXB0ZWRGaWxlVHlwZXMgPSBcImltYWdlLypcIjtcclxuICAgICAgZWxzZSB0aGlzLmFjY2VwdGVkRmlsZVR5cGVzID0gXCIqXCI7XHJcblxyXG4gICAgLy8gU2Ugbm9uIHNvbm8gc3RhdGkgc3BlY2lmaWNhdGkgaSB0aXBpIGRhIGdlc3RpcmUgbWEgw6ggc3RhdG8gcGFzc2F0byBudWxsIG8gdW4gYXJyYXkgdnVvdG8gaW1wb3N0byBpIHRpcGkgZGkgZGVmYXVsdC5cclxuICAgIGlmICghdGhpcy5hbGxvd2VkVHlwZXMgfHwgdGhpcy5hbGxvd2VkVHlwZXMubGVuZ3RoID09IDApXHJcbiAgICAgIHRoaXMuYWxsb3dlZFR5cGVzID0gW0F0dGFjaG1lbnRUeXBlLkZJTEUsIEF0dGFjaG1lbnRUeXBlLkxJTkssIEF0dGFjaG1lbnRUeXBlLkRST1BCT1hdO1xyXG4gICAgZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuYWxsb3dlZFR5cGVzLmZpbmQoKHQpID0+IHQgIT0gQXR0YWNobWVudFR5cGUuRklMRSAmJiB0ICE9IEF0dGFjaG1lbnRUeXBlLkxJTksgJiYgdCAhPSBBdHRhY2htZW50VHlwZS5EUk9QQk9YKVxyXG4gICAgKSB7XHJcbiAgICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLldhcm5pbmcoXHJcbiAgICAgICAgJ0FsbWVubyB1bm8gZGVnbGkgQXR0YWNobWVudFR5cGUgc2VsZXppb25hdGkgbmVsIHBhcmFtZXRybyBcImFsbG93ZWRUeXBlc1wiIG5vbiBlc2lzdGUuJ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmFsbG93ZWRUeXBlcyA9IFtBdHRhY2htZW50VHlwZS5GSUxFLCBBdHRhY2htZW50VHlwZS5MSU5LLCBBdHRhY2htZW50VHlwZS5EUk9QQk9YXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hdHRhY2htZW50c0xpc3QgPT0gbnVsbCkgdGhpcy5hdHRhY2htZW50c0xpc3QgPSBuZXcgQXJyYXk8SUF0dGFjaG1lbnREVE8+KCk7XHJcblxyXG4gICAgLy8gU2Ugw6ggc3RhdG8gcGFzc2F0byB1biBzaW5nb2xvIGFsbGVnYXRvIGxvIGFnZ2l1bmdvIGFsbGEgbGlzdGFcclxuICAgIGlmICh0aGlzLnNpbmdsZUF0dGFjaG1lbnQgIT0gbnVsbCAmJiB0aGlzLmF0dGFjaG1lbnRzTGlzdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLmF0dGFjaG1lbnRzTGlzdC5wdXNoKHRoaXMuc2luZ2xlQXR0YWNobWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGVja0F0dGFjaG1lbnRJbWFnZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmFsbG93ZWRUeXBlcy5pbmNsdWRlcygzKSkge1xyXG4gICAgICB0aGlzLmVxcEF0dGFjaG1lbnRTZXJ2aWNlLmxvYWREcm9wYm94U2NyaXB0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXR1cFRhYmxlQ29sdW1ucygpO1xyXG4gICAgdGhpcy5zZXR1cE1lbnVBY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBzZXRWaWV3TW9kZShtb2RlOiAnY2FyZCcgfCAndGFibGUnKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gbW9kZTtcclxuICB9XHJcblxyXG4gIC8vIFJpY2FsY29sYSBsYSBzb21tYSBwZXNhdGEgc3VnbGkgYWxsZWdhdGkgcHJlc2VudGlcclxuICBwcml2YXRlIHJlY29tcHV0ZVRvdGFsc0FuZFByb2dyZXNzKCkge1xyXG4gICAgdGhpcy50b3RhbFNpemVCeXRlcyA9ICh0aGlzLmF0dGFjaG1lbnRzTGlzdCB8fCBbXSlcclxuICAgICAgLmZpbHRlcihhID0+ICEhYSlcclxuICAgICAgLnJlZHVjZSgoc3VtLCBhKSA9PiBzdW0gKyB0aGlzLmJ5dGVzRnJvbUJhc2U2NChhLkZpbGVEYXRhQmFzZTY0IHx8IGEuRmlsZVRodW1ibmFpbEJhc2U2NCB8fCAnJyksIDApO1xyXG5cclxuICAgIC8vIFByb2dyZXNzIGZpdHRpemlvOiAxMDAlIHNlIHByZXNlbnRpIGZpbGUsIDAgc2UgdnVvdG9cclxuICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50ID0gKHRoaXMuYXR0YWNobWVudHNMaXN0ICYmIHRoaXMuYXR0YWNobWVudHNMaXN0Lmxlbmd0aCA+IDApID8gMTAwIDogMDtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMudG9hc3QudGltZW91dElkKSBjbGVhclRpbWVvdXQodGhpcy50b2FzdC50aW1lb3V0SWQpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2FsY29sYSBpIGJ5dGUgZGEgdW5hIHN0cmluZ2EgQmFzZTY0IHB1cmEgKHNlbnphIHByZWZpc3NvIGRhdGE6Li4uKVxyXG4gIHB1YmxpYyBieXRlc0Zyb21CYXNlNjQoYmFzZTY0OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKCFiYXNlNjQpIHJldHVybiAwO1xyXG4gICAgLy8gUmltdW92aSBldmVudHVhbGUgcHJlZmlzc28gZGF0YSBVUkxcclxuICAgIGNvbnN0IGNvbW1hSWR4ID0gYmFzZTY0LmluZGV4T2YoJywnKTtcclxuICAgIGNvbnN0IGI2NCA9IGNvbW1hSWR4ID49IDAgPyBiYXNlNjQuc3Vic3RyaW5nKGNvbW1hSWR4ICsgMSkgOiBiYXNlNjQ7XHJcbiAgICAvLyBDb250YSBwYWRkaW5nXHJcbiAgICBsZXQgcGFkZGluZyA9IDA7XHJcbiAgICBpZiAoYjY0LmVuZHNXaXRoKCc9PScpKSBwYWRkaW5nID0gMjtcclxuICAgIGVsc2UgaWYgKGI2NC5lbmRzV2l0aCgnPScpKSBwYWRkaW5nID0gMTtcclxuICAgIC8vIEZvcm11bGEgZXNhdHRhOiAoMyAqIChsZW4gLyA0KSkgLSBwYWRkaW5nXHJcbiAgICBjb25zdCBsZW4gPSBiNjQubGVuZ3RoO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KDAsICgzICogTWF0aC5mbG9vcihsZW4gLyA0KSkgLSBwYWRkaW5nKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQXR0YWNobWVudEltYWdlKCkge1xyXG4gICAgdGhpcy5hdHRhY2htZW50c0xpc3QuZm9yRWFjaCgoYSkgPT4ge1xyXG4gICAgICBhLklzSW1hZ2UgPSBBdHRhY2htZW50SGVscGVyU2VydmljZS5jaGVja0ltYWdlRnJvbU1pbWVUeXBlKGEuRmlsZUNvbnRlbnRUeXBlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdlc3Rpb25lIGVsZW5jbyBhbGxlZ2F0aVxyXG5cclxuICAvKipcclxuICAgKiBFbGltaW5hIHVuIGFsbGVnYXRvIGVsaW1pbmFuZG8gYW5jaGUgaWwgZmlsZSBwcmVzZW50ZSBuZWxsbyBzdG9yYWdlIGRpIGFyY2hpdmlhemlvbmUgdXRpbGl6emF0byAoQVdTIG8gY2FydGVsbGEgcHJvZ2V0dG8pXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgSUF0dGFjaG1lbnREVE8gZGEgY2FuY2VsbGFyZVxyXG4gICAqL1xyXG4gIGRlbGV0ZUF0dGFjaG1lbnQoZWxlbWVudDogSUF0dGFjaG1lbnREVE8pIHtcclxuICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgIHRoaXMuZGVsZXRlRGlhbG9nTWVzc2FnZSxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQXR0YWNobWVudEZyb21MaXN0KHRoaXMuYXR0YWNobWVudHNMaXN0LmluZGV4T2YoZWxlbWVudCkpO1xyXG4gICAgICB9LFxyXG4gICAgICB0cnVlLFxyXG4gICAgICB0aGlzLmRlbGV0ZURpYWxvZ1RpdGxlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmltdW92ZSBsJ2FsbGVnYXRvIHNlbGV6aW9uYXRvIGRhbGxhIGxpc3RhIFwiYXR0YWNobWVudHNMaXN0XCIgZSBpbnZvY2EgbCdldmVudG8gZGkgb3V0cHV0IGNoZSByZXN0aXR1aXNjZSBsYSBsaXN0YSBhZ2dpb3JuYXRhLlxyXG4gICAqIEBwYXJhbSBhdHRhY2htZW50SW5kZXggSW5kaWNlIGRlbGwnYXR0YWNobWVudCBkYSByaW11b3ZlcmVcclxuICAgKi9cclxuICByZW1vdmVBdHRhY2htZW50RnJvbUxpc3QoYXR0YWNobWVudEluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMub25EZWxldGVBdHRhY2htZW50LmVtaXQodGhpcy5hdHRhY2htZW50c0xpc3RbYXR0YWNobWVudEluZGV4XSk7XHJcblxyXG4gICAgdGhpcy5hdHRhY2htZW50c0xpc3Quc3BsaWNlKGF0dGFjaG1lbnRJbmRleCwgMSk7XHJcbiAgICB0aGlzLmxvY2FsRWRpdGVkQXR0YWNobWVudHMuZW1pdCh0aGlzLmF0dGFjaG1lbnRzTGlzdCk7XHJcblxyXG4gICAgdGhpcy5yZWNvbXB1dGVUb3RhbHNBbmRQcm9ncmVzcygpO1xyXG4gICAgdGhpcy5zaG93VG9hc3QodGhpcy5yZW1vdmVkTGFiZWwgfHwgJ0ZpbGUgcmVtb3ZlZCcsICdzdWNjZXNzJyk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaW11bGF0ZVByb2dyZXNzKCkge1xyXG4gICAgdGhpcy5wcm9ncmVzc1BlcmNlbnQgPSAwO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50ID0gMzA7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50ID0gNjA7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudCA9IDEwMDtcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgICB9LCAyMDApO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTY2FyaWNhIGwnYWxsZWdhdG8gbyBhcHJlIGlsIGxpbmtcclxuICAgKiBAcGFyYW0gZWxlbWVudCBBbGxlZ2F0byBkYSBtb3N0cmFyZVxyXG4gICAqL1xyXG4gIHZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPKSB7XHJcbiAgICBpZiAoYXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5MSU5LKSB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKGF0dGFjaG1lbnQuRmlsZVBhdGgsIFwiX2JsYW5rXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGF0dGFjaG1lbnQuTGFyZ2VGaWxlKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBhdHRhY2htZW50LkxhcmdlRmlsZTtcclxuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XHJcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBhdHRhY2htZW50LkZpbGVOYW1lIHx8IGZpbGUubmFtZTtcclxuICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IFVSTC5yZXZva2VPYmplY3RVUkwodXJsKSwgMTAwMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCAmJiBhdHRhY2htZW50LkZpbGVDb250ZW50VHlwZSAmJiBhdHRhY2htZW50LkZpbGVOYW1lKSB7XHJcbiAgICAgIGxldCBzb3VyY2UgPSBgZGF0YToke2F0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlfTtiYXNlNjQsJHthdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0fWA7XHJcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgbGluay5ocmVmID0gc291cmNlO1xyXG4gICAgICBsaW5rLmRvd25sb2FkID0gYCR7YXR0YWNobWVudC5GaWxlTmFtZX1gO1xyXG4gICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRvd25sb2FkQXR0YWNobWVudC5lbWl0KGF0dGFjaG1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmlkZWZpbmlzY2UgbCdpY29uYSBkYSBtb3N0cmFyZSBuZWxsYSBjb2xvbm5hIGRlbGwnZXFwLXRhYmxlIHBlciBvZ25pIGZpbGUuXHJcbiAgICogTCdpY29uYSB2YXJpYSBpbiBiYXNlIGFsbCdlc3RlbnNpb25lIGRlbCBmaWxlXHJcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRcclxuICAgKi9cclxuICBnZXRBdHRhY2htZW50SWNvbihhdHRhY2htZW50OiBJQXR0YWNobWVudERUTykge1xyXG4gICAgaWYgKGF0dGFjaG1lbnQuQXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuTElOSykgcmV0dXJuIFwiZmFzIGZhLWxpbmtcIjtcclxuICAgIGVsc2UgcmV0dXJuIEF0dGFjaG1lbnRIZWxwZXJTZXJ2aWNlLmdldEljb25Gcm9tRmlsZUV4dGVuc2lvbmUoYXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBJbiBjYXNvIGRpIGFsbGVnYXRvIHNpbmdvbG8sIHNjZWdsaWUgcXVhbGUgbWV0b2RvIHJpY2hpYW1hcmUgaW4gYmFzZSBhbCB0aXBvIGRpIGFsbGVnYXRvXHJcbiAgICovXHJcbiAgYWRkRmlsZShhdHRhY2htZW50VHlwZTogQXR0YWNobWVudFR5cGUsIGltYWdlSW5wdXQgPSBudWxsKSB7XHJcbiAgICBpZiAoYXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuTElOSykge1xyXG4gICAgICB0aGlzLnN3aXRjaFRvQWRkaW5nTGlua01vZGUoKTtcclxuICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuRklMRSkge1xyXG4gICAgICBpbWFnZUlucHV0LmNsaWNrKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNob29zZURyb3Bib3hGaWxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVBdHRhY2htZW50Rm9ybSgpIHtcclxuICAgIC8vQ3JlYSBsYSBmb3JtIHBlciBsYSB2YWxpZGF6aW9uZSBkZWkgY2FtcGlcclxuICAgIHRoaXMubmV3QXR0YWNobWVudEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgdHlwZTogW3RoaXMubmV3QXR0YWNobWVudC5BdHRhY2htZW50VHlwZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIG5hbWU6IFt0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZU5hbWVdLFxyXG4gICAgICBwYXRoOiBbdGhpcy5uZXdBdHRhY2htZW50LkZpbGVQYXRoXSxcclxuICAgICAgY3VzdG9tSGVpZ2h0OiBbdGhpcy5jdXN0b21IZWlnaHRdLFxyXG4gICAgICBjdXN0b21XaWR0aDogW3RoaXMuY3VzdG9tV2lkdGhdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlKGVtaXRDbG9zZUV2ZW50ID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50ID0ge30gYXMgSUF0dGFjaG1lbnREVE87XHJcbiAgICB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMgPSBuZXcgQXJyYXk8SUF0dGFjaG1lbnREVE8+KCk7XHJcbiAgICB0aGlzLmFib3J0RmlsZSgpO1xyXG4gICAgaWYgKHRoaXMubmV3QXR0YWNobWVudEZvcm0pIHRoaXMubmV3QXR0YWNobWVudEZvcm0ucmVzZXQoKTtcclxuXHJcbiAgICB0aGlzLmRpYWxvZ1JlZkNyb3BJbWFnZS5jbG9zZSgpO1xyXG4gICAgdGhpcy5yZXN0b3JlT3JpZ2luYWxEaW1lbnNpb25zKCk7XHJcblxyXG4gICAgaWYgKGVtaXRDbG9zZUV2ZW50ID09IHRydWUgJiYgdGhpcy5hYm9ydEFkZEF0dGFjaG1lbnQpIHRoaXMuYWJvcnRBZGRBdHRhY2htZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluIGJhc2UgYWwgdGlwbyBkaSBhbGxlZ2F0byBjb250cm9sbGEgc2UgZGlzYWJpbGl0YXJlIG8gbWVubyBpbCBwdWxzYW50ZSBwZXIgc2FsdmFyZS5cclxuICAgKiBGdW56aW9uZSB1c2F0YSBuZWwgW2Rpc2FibGVdIGRlbCBwdWxzYW50ZSBcIlNhbHZhXCIgZGVsIGRpYWxvZyBwZXIgbCdhZ2dpdW50YSBkaSB1biBhbGxlZ2F0by5cclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGRpc2FibGVTYXZlKCkge1xyXG4gICAgaWYgKHRoaXMubG9hZE11bHRpcGxlRmlsZXMgIT0gdHJ1ZSkge1xyXG4gICAgICBpZiAodGhpcy5uZXdBdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkZJTEUpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMubmV3QXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCAmJiAhdGhpcy5uZXdBdHRhY2htZW50LkxhcmdlRmlsZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMubmV3QXR0YWNobWVudC5GaWxlUGF0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgKHApID0+XHJcbiAgICAgICAgICAgIChwLkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkZJTEUgJiYgIXAuRmlsZURhdGFCYXNlNjQgJiYgIXAuTGFyZ2VGaWxlKSB8fFxyXG4gICAgICAgICAgICAocC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5MSU5LICYmICFwLkZpbGVQYXRoKVxyXG4gICAgICAgICkubGVuZ3RoID4gMFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uZmlybUFkZEF0dGFjaG1lbnQoKSB7XHJcbiAgICBpZiAodGhpcy5uZXdBdHRhY2htZW50LklzSW1hZ2UgJiYgdGhpcy5pbWFnZUNyb3BwZXIpIHtcclxuICAgICAgdGhpcy5uZXdBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0ID0gdGhpcy5pbWFnZUNyb3BwZXIuY3JvcCgpLmJhc2U2NC5zcGxpdChcIjtiYXNlNjQsXCIpWzFdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmxvYWRNdWx0aXBsZUZpbGVzICE9IHRydWUpIHtcclxuICAgICAgaWYgKHRoaXMubmV3QXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5MSU5LICYmICF0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZU5hbWUpXHJcbiAgICAgICAgdGhpcy5uZXdBdHRhY2htZW50LkZpbGVOYW1lID0gdGhpcy5uZXdBdHRhY2htZW50LkZpbGVQYXRoO1xyXG5cclxuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNMaXN0ID09IG51bGwpIHRoaXMuYXR0YWNobWVudHNMaXN0ID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG5cclxuICAgICAgdGhpcy5hdHRhY2htZW50c0xpc3QucHVzaCh0aGlzLm5ld0F0dGFjaG1lbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cyA9PSBudWxsIHx8IHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNMaXN0ID09IG51bGwpIHRoaXMuYXR0YWNobWVudHNMaXN0ID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG5cclxuICAgICAgdGhpcy5hdHRhY2htZW50c0xpc3QgPSB0aGlzLmF0dGFjaG1lbnRzTGlzdC5jb25jYXQodGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvY2FsRWRpdGVkQXR0YWNobWVudHMuZW1pdCh0aGlzLmF0dGFjaG1lbnRzTGlzdCk7XHJcblxyXG4gICAgaWYgKHRoaXMubmV3QXR0YWNobWVudC5Jc0ltYWdlKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmQ3JvcEltYWdlLmNsb3NlKCk7XHJcbiAgICAgIHRoaXMucmVzdG9yZU9yaWdpbmFsRGltZW5zaW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5ld0F0dGFjaG1lbnQuQXR0YWNobWVudFR5cGUgPT09IEF0dGFjaG1lbnRUeXBlLkxJTkspIHtcclxuICAgICAgdGhpcy5uZXdBdHRhY2htZW50ID0ge30gYXMgSUF0dGFjaG1lbnREVE87XHJcbiAgICAgIGlmICh0aGlzLm5ld0F0dGFjaG1lbnRGb3JtKSB0aGlzLm5ld0F0dGFjaG1lbnRGb3JtLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldFNlbGVjdGVkRmlsZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIDIuIFJFU0VUIFRPVEFMRTogU3Z1b3RpYW1vIGxlIHByb3ByaWV0w6AgZGkgY2xhc3NlIHBlciBldml0YXJlIGNoZSBcclxuICAvLyByZXNpZHVpIGRpIHVwbG9hZCBwcmVjZWRlbnRpIChzaW5nb2xpIG8gbXVsdGlwbGkpIHZlbmdhbm8gdHJhc2NpbmF0aS5cclxuICBwcml2YXRlIHJlc2V0U2VsZWN0ZWRGaWxlcygpIHtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudCA9IHt9IGFzIElBdHRhY2htZW50RFRPO1xyXG4gICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcmUgaWwgZGlhbG9nIHBlciBsJ2FudGVwcmltYSBkZWxsJ2FsbGVnYXRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGFzeW5jIG9wZW5QcmV2aWV3RGlhbG9nKHJvdzogSUF0dGFjaG1lbnREVE8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50ID0geyAuLi5yb3cgfTtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMuZ2V0QXR0YWNobWVudEVuZHBvaW50ICYmIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LklzSW1hZ2UgJiYgIXRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0KSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0QXR0YWNobWVudEJ5SUQoKVxyXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0ID0gcmVzLkZpbGVEYXRhQmFzZTY0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLkVycm9yKGVycik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkxJTkspIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuVHJ1c3RlZFVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlUGF0aFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKFwidmlkZW8vXCIpICYmIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkxhcmdlRmlsZSkge1xyXG4gICAgICBjb25zdCB2aWRlb1VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuTGFyZ2VGaWxlKTtcclxuICAgICAgLy8gVXNpYW1vIGJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwgcGVyIGxhIHNvcmdlbnRlIGRlbCB2aWRlb1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5UcnVzdGVkVXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh2aWRlb1VybCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuSXNJbWFnZSAmJlxyXG4gICAgICAhdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgJiZcclxuICAgICAgIXRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVUaHVtYm5haWxCYXNlNjRcclxuICAgICkge1xyXG4gICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5JbmZvKFwiSW1wb3NzaWJpbGUgYXByaXJlIGwnYW50ZXByaW1hIGRlbGwnYWxsZWdhdG8sIGZpbGUgbWFuY2FudGUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnICYmIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LlRydXN0ZWRVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXHJcbiAgICAgICAgYGRhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwke3RoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0fWBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCF0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5Jc0ltYWdlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlUGF0aCAmJiB0aGlzLnByb2R1Y3Rpb25CYXNlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuVHJ1c3RlZFVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChcclxuICAgICAgICAgIFwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZ3ZpZXc/dXJsPVwiICtcclxuICAgICAgICAgIHRoaXMucHJvZHVjdGlvbkJhc2VVcmwgK1xyXG4gICAgICAgICAgXCIvXCIgK1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZVBhdGggK1xyXG4gICAgICAgICAgXCImZW1iZWRkZWQ9dHJ1ZVwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5JbmZvKFwiSW1wb3NzaWJpbGUgYXByaXJlIGwnYW50ZXByaW1hIGRlbCBkb2N1bWVudG8hXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dQcmV2aWV3LCB7XHJcbiAgICAgIHBhbmVsQ2xhc3M6ICdlcXAtYXR0YWNobWVudHMtcHJldmlldy1kaWFsb2cnLFxyXG4gICAgICBtYXhXaWR0aDogJzk1dncnLFxyXG4gICAgICB3aWR0aDogcm93LklzSW1hZ2UgfHwgcm93LkZpbGVDb250ZW50VHlwZT8uc3RhcnRzV2l0aCgndmlkZW8vJykgPyAnYXV0bycgOiAnMTEwMHB4JyxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFB1bGl6aWEgZGVsbGEgbWVtb3JpYSBxdWFuZG8gaWwgZGlhbG9nIHNpIGNoaXVkZVxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50Py5GaWxlQ29udGVudFR5cGU/LnN0YXJ0c1dpdGgoXCJ2aWRlby9cIikpIHtcclxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LlRydXN0ZWRVcmwgYXMgYW55KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRBdHRhY2htZW50QnlJRCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxJQXR0YWNobWVudERUTz4odGhpcy5nZXRBdHRhY2htZW50RW5kcG9pbnQsIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50KS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHZXN0aW9uZSBjYXJpY2FtZW50byBmaWxlXHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBzY2F0ZW5hdG8gYWxsYSBzZWxlemlvbmUgZGVsIGZpbGUgKG8gZGVpIGZpbGUpLlxyXG4gICAqIFNlIGlsIGNhcmljYW1lbnRvIMOoIFNJTkdPTE8gbyBzZSBjb211bnF1ZSDDqCBzdGF0byBzZWxlemlvbmF0byB1biBzb2xvIGZpbGUgYWxsb3JhIHNpIG9jY3VwYSBkaSBjb250cm9sbGFyZSBzZSBzaSB0cmF0dGEgZGkgdW4gaW1tYWdpbmUgaW4gbW9kbyBkYVxyXG4gICAqIG1vc3RyYXJlIGxlIGZ1bnppb25hbGl0w6AgZGVsIGNyb3BwaWUgKHBlciByaXRhZ2xpYXJlIGwnaW1tYWdpbmUpIG9wcHVyZSBuby5cclxuICAgKiBTZSBpbCBmaWxlIGNhcmljYXRvIG5vbiDDqCB1biBpbW1hZ2luZSBhbGxvcmEgZ2VuZXJhIGRpcmV0dGFtZW50ZSBpbCBiYXNlNjQgZSBsbyBhc3NvY2lhIGFsbCdhbGxlZ2F0byBkYSBzYWx2YXJlLlxyXG4gICAqIFNlIGludmVjZSBpbCBjYXJpY2FtZW50byBkZWkgZmlsZSDDqCBNVUxUSVBMTyBlIHNvbm8gcHJlc2VudGkgcGnDuSBmaWxlIGFsbG9yYSBlc2VndWUgbGUgc3Rlc3NlIG9wZXJhemlvbmkgaWdub3JhbmRvIHBlcsOyIGlsIGNvbnRybGxvXHJcbiAgICogaW1tYWdpbmUgcGVyIGlsIGNyb3BwaWUgKGluIGNhc28gZGkgY2FyaWNhbWVudG8gbXVsdGlwbG8gbGUgZnVuemlvbmFsaXTDoCBkZWwgY3JvcHBpZSBzb25vIGRpc2FiaWxpdGF0ZSkuXHJcbiAgICovXHJcbiAgYXN5bmMgb25GaWxlQWRkZWQoZXZlbnQsIGlzRmlsZURyb3BwZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UuSW5mbyhcIkNhcmljYW1lbnRvIGFsbGVnYXRpIG5vbiBkaXNwb25pYmlsZS5cIik7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0Nyb3BJbWFnZSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMucmVzZXRTZWxlY3RlZEZpbGVzKCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXNPbklucHV0OiBGaWxlW10gPSBpc0ZpbGVEcm9wcGVkXHJcbiAgICAgID8gKGV2ZW50IGFzIEZpbGVbXSlcclxuICAgICAgOiBBcnJheS5mcm9tKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmZpbGVzIHx8IFtdKTtcclxuXHJcbiAgICBjb25zdCB7IHZhbGlkRmlsZXMsIG92ZXJzaXplZEZpbGVzIH0gPSB0aGlzLnZhbGlkYXRpb25GaWxlKGZpbGVzT25JbnB1dCk7XHJcblxyXG4gICAgaWYgKCF2YWxpZEZpbGVzIHx8IHZhbGlkRmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGlmICghaXNGaWxlRHJvcHBlZCAmJiBldmVudD8udGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvL1NlIMOoIHN0YXRvIHJpY2hpZXN0byBpbCBjYXJpY2FtZW50byBTSU5HT0xPIG9wcHVyZSBzZSBpbCBjYXJpY2FtZW50byDDqCBNVUxUSVBMTyBtYSDDqCBzdGF0byBzZWxlemlvbmF0byB1biBzb2xvIGZpbGVcclxuICAgIC8vYWxsb3JhIHZlcmlmaWNhIHNlIGlsIGZpbGUgw6ggdW4gaW1tYWdpbmUgKHBlciBtb3N0cmFyZSBpbCBDUk9QUElFKVxyXG4gICAgaWYgKFsuLi52YWxpZEZpbGVzXS5sZW5ndGggPT0gMSB8fCB0aGlzLmxvYWRNdWx0aXBsZUZpbGVzICE9IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSB2YWxpZEZpbGVzWzBdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSB2YWxpZEZpbGVzO1xyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWxlKSByZXR1cm47XHJcblxyXG4gICAgICAvL01lbW9yaXp6YSBpIGRhdGkgcGVyIGwnYWxsZWdhdG9cclxuICAgICAgdGhpcy5uZXdBdHRhY2htZW50ID0gYXdhaXQgdGhpcy5jcmVhdGVBdHRhY2htZW50RnJvbVVwbG9hZGVkRmlsZSh0aGlzLnNlbGVjdGVkRmlsZSwgZmFsc2UpO1xyXG4gICAgICB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMgPSBuZXcgQXJyYXk8SUF0dGFjaG1lbnREVE8+KCk7XHJcbiAgICAgIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cy5wdXNoKHRoaXMubmV3QXR0YWNobWVudCk7XHJcblxyXG4gICAgICAvL1NlIMOoIHN0YXRhIHJpY2hpZXN0YSBsYSBnZXN0aW9uZSBkZWxsZSBzb2xlIGltbWFnaW5pIG1hIHBlciBlcnJvcmUgw6ggc3RhdG8gc2VsZXppb25hdG8gdW4gZmlsZSBjaGUgbm9uIMOoIHVuIGltbWFnaW5lXHJcbiAgICAgIGxldCBjaGVja09ubHlJbWFnZSA9IHRoaXMuY2hlY2tBbGxvd09ubHlJbWFnZUZpbGUodGhpcy5uZXdBdHRhY2htZW50KTtcclxuICAgICAgaWYgKGNoZWNrT25seUltYWdlID09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLmNyZWF0ZUF0dGFjaG1lbnRGb3JtKCk7XHJcblxyXG4gICAgICAvL1ZlcmlmaWNhIHNlIGlsIGZpbGUgY2FyaWNhdG8gw6ggdW4naW1tYWdpbmUgb3BwdXJlIG5vLiBTZSDDqCB1biBpbW1hZ2luZSwgcHJpbWEgZGkgY2FyaWNhcmxhIG1vc3RyYSBpbCBjcm9wcGllIHBlciBpbCByZXNpemUuXHJcbiAgICAgIC8vU2Ugbm9uIMOoIHVuIGltbWFnaW5lIGFsbG9yYSBnZW5lcmEgaWwgQmFzZTY0XHJcbiAgICAgIGlmICh0aGlzLm5ld0F0dGFjaG1lbnQuSXNJbWFnZSA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5nZXRJbWFnZURpbWVuc2lvbnModmFsaWRGaWxlc1swXSk7XHJcblxyXG4gICAgICAgIC8vTW9zdHJhIGlsIGNyb3BwaWUgZSBkaXNhYmlsaXRhIGxhIGZvcm0gZmluY2jDqCBub24gdGVybWluYSBsYSBtb2RpZmljYSBkZWxsJ2ltbWFnaW5lXHJcbiAgICAgICAgdGhpcy5uZXdBdHRhY2htZW50Rm9ybS5kaXNhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5uZXdBdHRhY2htZW50Rm9ybS5jb250cm9sc1tcImN1c3RvbVdpZHRoXCJdLmVuYWJsZSgpO1xyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudEZvcm0uY29udHJvbHNbXCJjdXN0b21IZWlnaHRcIl0uZW5hYmxlKCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dDcm9wSW1hZ2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pbWFnZUZpbGUgPSBldmVudDtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZkNyb3BJbWFnZSA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dDcm9wSW1hZ2UsIHtcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICAgICAgd2lkdGg6IFwiNjAlXCIsXHJcbiAgICAgICAgICAgIG1heEhlaWdodDogXCI4MCVcIixcclxuICAgICAgICAgICAgbWF4V2lkdGg6IFwiNzB2aFwiLFxyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ2VxcC1hdHRhY2htZW50cy1kaWFsb2cnLCAnY3JvcC1kaWFsb2cnXVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93Q3JvcEltYWdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGJhc2U2NFJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QmFzZTY0RnJvbUZpbGUodGhpcy5zZWxlY3RlZEZpbGUpO1xyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IGJhc2U2NFJlc3VsdC5CYXNlNjRGaWxlO1xyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgPSBiYXNlNjRSZXN1bHQuQ29udGVudFR5cGU7XHJcbiAgICAgICAgdGhpcy5jb25maXJtQWRkQXR0YWNobWVudCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gdmFsaWRGaWxlcztcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmlsZXMgfHwgdGhpcy5zZWxlY3RlZEZpbGVzLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAoIXRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cykgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZEZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IG5ld0F0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPID0gYXdhaXQgdGhpcy5jcmVhdGVBdHRhY2htZW50RnJvbVVwbG9hZGVkRmlsZShcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlc1tpXSxcclxuICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvL1NlIMOoIHN0YXRhIHJpY2hpZXN0YSBsYSBnZXN0aW9uZSBkZWxsZSBzb2xlIGltbWFnaW5pIG1hIHBlciBlcnJvcmUgw6ggc3RhdG8gc2VsZXppb25hdG8gdW4gZmlsZSBjaGUgbm9uIMOoIHVuIGltbWFnaW5lXHJcbiAgICAgICAgbGV0IGNoZWNrT25seUltYWdlID0gdGhpcy5jaGVja0FsbG93T25seUltYWdlRmlsZShuZXdBdHRhY2htZW50KTtcclxuICAgICAgICBpZiAoY2hlY2tPbmx5SW1hZ2UgPT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzLnB1c2gobmV3QXR0YWNobWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25maXJtQWRkQXR0YWNobWVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVjb21wdXRlVG90YWxzQW5kUHJvZ3Jlc3MoKTtcclxuICAgIHRoaXMuc2ltdWxhdGVQcm9ncmVzcygpO1xyXG4gICAgLy8gQ2FzbyAxOiBTdWNjZXNzbyBQYXJ6aWFsZSAoYWxjdW5pIGZpbGUgdmFsaWRpLCBhbHRyaSBubylcclxuICAgIGlmIChvdmVyc2l6ZWRGaWxlcy5sZW5ndGggPiAwICYmIHZhbGlkRmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBmaWxlTmFtZXMgPSBvdmVyc2l6ZWRGaWxlcy5qb2luKCcsICcpO1xyXG4gICAgICB0aGlzLnNob3dUb2FzdChcclxuICAgICAgICBgJHt2YWxpZEZpbGVzLmxlbmd0aH0gZmlsZSBhZ2dpdW50aS4gJHtvdmVyc2l6ZWRGaWxlcy5sZW5ndGh9IG5vbiBjYXJpY2F0aSBwZXJjaMOpIHRyb3BwbyBncmFuZGkgKCR7ZmlsZU5hbWVzfSkuYCxcclxuICAgICAgICAnZXJyb3InXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBDYXNvIDI6IE5lc3N1biBmaWxlIHZhbGlkb1xyXG4gICAgZWxzZSBpZiAob3ZlcnNpemVkRmlsZXMubGVuZ3RoID4gMCAmJiB2YWxpZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgfVxyXG4gICAgLy8gQ2FzbyAzOiBUdXR0aSBpIGZpbGUgdmFsaWRpXHJcbiAgICBlbHNlIGlmIChvdmVyc2l6ZWRGaWxlcy5sZW5ndGggPT09IDAgJiYgdmFsaWRGaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2hvd1RvYXN0KFxyXG4gICAgICAgIGAke3ZhbGlkRmlsZXMubGVuZ3RofSAke3RoaXMuYWRkZWRTdWNjZXNzZnVsbHlMYWJlbCB8fCAnZmlsZShzKSBhZ2dpdW50aSBjb24gc3VjY2Vzc28uJ31gLFxyXG4gICAgICAgICdzdWNjZXNzJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vUmVzZXR0byBpbCB2YWxvcmUgZGVsIGZpbGUgaW5wdXQgaW4gbW9kbyBkYSBzY2F0ZW5hcmUgaWwgY2hhbmdlIGFuY2hlIHNlIHNpIGRvdmVzc2UgY2FyaWNhcmUgbG8gc3Rlc3NvIGZpbGVcclxuICAgIGlmICghaXNGaWxlRHJvcHBlZCkgZXZlbnQudGFyZ2V0LnZhbHVlID0gXCJcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGlvbkZpbGUoZmlsZXNPbklucHV0OiBGaWxlW10pIHtcclxuICAgIGNvbnN0IHZhbGlkRmlsZXM6IEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3Qgb3ZlcnNpemVkRmlsZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzT25JbnB1dCkge1xyXG4gICAgICBjb25zdCBmaWxlU2l6ZU1CID0gZmlsZS5zaXplIC8gMTAyNCAvIDEwMjQ7XHJcbiAgICAgIGlmIChmaWxlU2l6ZU1CID4gdGhpcy5tYXhGaWxlU2l6ZU1CKSB7XHJcbiAgICAgICAgb3ZlcnNpemVkRmlsZXMucHVzaChmaWxlLm5hbWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbGlkRmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvdmVyc2l6ZWRGaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpbGVOYW1lcyA9IG92ZXJzaXplZEZpbGVzLmpvaW4oJywgJyk7XHJcbiAgICAgIHRoaXMuc2hvd1RvYXN0KFxyXG4gICAgICAgIGBGaWxlKHMpIHRyb3BwbyBncmFuZGk6ICR7ZmlsZU5hbWVzfS4gTGltaXRlOiAke3RoaXMubWF4RmlsZVNpemVNQn1NQmAsXHJcbiAgICAgICAgJ2Vycm9yJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IHZhbGlkRmlsZXMsIG92ZXJzaXplZEZpbGVzIH07XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQSBwYXJ0aXJlIGRhbCBGSUxFIHJpY2V2dXRvIGluIGlucHV0IHJpY29zdHJ1aXNjZSBsJ29nZ2V0dG8gSUF0dGFjaG1lbnREVE8gZSBsbyByZXN0aXR1aXNjZS5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gZ2V0QmFzZTY0IHZpZW5lIHBhc3NhdG8gYSBUUlVFIGFsbG9yYSwgc2VtcHJlIGEgcGFydGlyZSBkYWwgZmlsZSxnZW5lcmEgaWwgYmFzZTY0IGVcclxuICAgKiByaWNhdmEgaWwgQ29udGVudFR5cGUgZGEgYXNzb2NpYXJlIGFsbCdvZ2dldHRvIElBdHRhY2htZW50RFRPIGRhIHJlc3RpdHVpcmVcclxuICAgKiBAcGFyYW0gY3VycmVudEZpbGUgT2dnZXR0byBGSUxFIGRhIHByb2Nlc3NhcmVcclxuICAgKiBAcGFyYW0gZ2V0QmFzZTY0IFNlIFRSVUUgYWxsb3JhIGNhbGNvbGEgYmFzZTY0IGUgQ29udGVudFR5cGUgZGVsIGZpbGUgcGFzc2F0byBpbiBpbnB1dFxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIG9nZ2V0dG8gZGkgdGlwbyBJQXR0YWNobWVudERUT1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlQXR0YWNobWVudEZyb21VcGxvYWRlZEZpbGUoXHJcbiAgICBjdXJyZW50RmlsZTogRmlsZSxcclxuICAgIGdldEJhc2U2NDogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBjcm9wRmlsZTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTxJQXR0YWNobWVudERUTz4ge1xyXG4gICAgbGV0IG5ld0F0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPID0ge30gYXMgSUF0dGFjaG1lbnREVE87XHJcbiAgICAvL01lbW9yaXp6YSBpIGRhdGkgcGVyIGwnYWxsZWdhdG9cclxuICAgIG5ld0F0dGFjaG1lbnQuQXR0YWNobWVudFR5cGUgPSBBdHRhY2htZW50VHlwZS5GSUxFO1xyXG4gICAgbmV3QXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgPSBjdXJyZW50RmlsZS50eXBlO1xyXG4gICAgbmV3QXR0YWNobWVudC5GaWxlTmFtZSA9IGN1cnJlbnRGaWxlLm5hbWU7XHJcbiAgICBuZXdBdHRhY2htZW50LkZpbGVFeHRlbnNpb24gPSBjdXJyZW50RmlsZS5uYW1lLnN1YnN0cihjdXJyZW50RmlsZS5uYW1lLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xyXG4gICAgbmV3QXR0YWNobWVudC5Jc0ltYWdlID0gQXR0YWNobWVudEhlbHBlclNlcnZpY2UuY2hlY2tJbWFnZUZyb21NaW1lVHlwZShjdXJyZW50RmlsZS50eXBlKTtcclxuXHJcbiAgICBjb25zdCBmaWxlU2l6ZU1CID0gY3VycmVudEZpbGUuc2l6ZSAvIDEwMjQgLyAxMDI0O1xyXG4gICAgY29uc3QgaXNMYXJnZUZpbGUgPSBmaWxlU2l6ZU1CID4gdGhpcy5iYXNlNjRMaW1pdE1CO1xyXG4gICAgY29uc3QgaXNWaWRlbyA9IGN1cnJlbnRGaWxlLnR5cGUuc3RhcnRzV2l0aCgndmlkZW8nKTtcclxuXHJcbiAgICBpZiAoaXNWaWRlbykge1xyXG4gICAgICBsZXQgZmluYWxGaWxlOiBGaWxlIHwgQmxvYiA9IGN1cnJlbnRGaWxlO1xyXG5cclxuICAgICAgLy8gTWluaWF0dXJhIGRlbCB2aWRlb1xyXG4gICAgICBuZXdBdHRhY2htZW50LkZpbGVUaHVtYm5haWxCYXNlNjQgPSBhd2FpdCB0aGlzLmdlbmVyYXRlVmlkZW9UaHVtYm5haWwoY3VycmVudEZpbGUpO1xyXG5cclxuICAgICAgLy8gU2UgbGEgY29tcHJlc3Npb25lIMOoIGFiaWxpdGF0YSwgZWxhYm9yaWFtbyBpbCB2aWRlb1xyXG4gICAgICBpZiAodGhpcy52aWRlb0NvbXByZXNzaW9uLmVuYWJsZWQpIHtcclxuICAgICAgICAvLyB0aGlzLnNob3dUb2FzdChcIkNvbXByZXNzaW9uZSB2aWRlbyBpbiBjb3Jzby4uLlwiLCBcImluZm9cIik7XHJcbiAgICAgICAgZmluYWxGaWxlID0gYXdhaXQgdGhpcy5jb21wcmVzc1ZpZGVvTmF0aXZlKGN1cnJlbnRGaWxlLCB0aGlzLnZpZGVvQ29tcHJlc3Npb24pO1xyXG5cclxuICAgICAgICAvLyBBZ2dpb3JuaWFtbyBpIGRhdGkgZGVsbCdhbGxlZ2F0byBjb24gaWwgbnVvdm8gZmlsZSBjb21wcmVzc29cclxuICAgICAgICBuZXdBdHRhY2htZW50LkZpbGVOYW1lID0gY3VycmVudEZpbGUubmFtZS5yZXBsYWNlKC9cXC5bXi8uXSskLywgXCJcIikgKyBcIi53ZWJtXCI7XHJcbiAgICAgICAgbmV3QXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgPSBcInZpZGVvL3dlYm1cIjtcclxuICAgICAgfVxyXG5cclxuICAgICAgbmV3QXR0YWNobWVudC5MYXJnZUZpbGUgPSBmaW5hbEZpbGUgYXMgRmlsZTtcclxuICAgICAgbmV3QXR0YWNobWVudC5Jc0xhcmdlRmlsZSA9IHRydWU7XHJcbiAgICAgIHJldHVybiBuZXdBdHRhY2htZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0xhcmdlRmlsZSkge1xyXG4gICAgICAvLyBDQVNPIExBUkdFIEZJTEU6XHJcbiAgICAgIC8vIFBvcG9saWFtbyBPcmlnaW5hbEZpbGUgZSBmb3J6aWFtbyBpbCBCYXNlNjQgYSBudWxsLlxyXG4gICAgICBuZXdBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0ID0gbnVsbDtcclxuICAgICAgbmV3QXR0YWNobWVudC5MYXJnZUZpbGUgPSBjdXJyZW50RmlsZTtcclxuICAgICAgbmV3QXR0YWNobWVudC5Jc0xhcmdlRmlsZSA9IHRydWU7XHJcbiAgICAgIGdldEJhc2U2NCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChnZXRCYXNlNjQgPT0gdHJ1ZSkge1xyXG4gICAgICBsZXQgYmFzZTY0UmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRCYXNlNjRGcm9tRmlsZShjdXJyZW50RmlsZSk7XHJcbiAgICAgIG5ld0F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSBiYXNlNjRSZXN1bHQuQmFzZTY0RmlsZTtcclxuICAgICAgaWYgKCFuZXdBdHRhY2htZW50LkZpbGVDb250ZW50VHlwZSAmJiBiYXNlNjRSZXN1bHQuQ29udGVudFR5cGUpIHtcclxuICAgICAgICBuZXdBdHRhY2htZW50LkZpbGVDb250ZW50VHlwZSA9IGJhc2U2NFJlc3VsdC5Db250ZW50VHlwZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5ld0F0dGFjaG1lbnQuSXNJbWFnZSAmJiBuZXdBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0ICYmIGNyb3BGaWxlKSB7XHJcbiAgICAgICAgdGhpcy5nZXRDcm9wcGVkQW5kVXBsb2FkKGBkYXRhOiR7YmFzZTY0UmVzdWx0LkNvbnRlbnRUeXBlfTtiYXNlNjQsJHtiYXNlNjRSZXN1bHQuQmFzZTY0RmlsZX1gLCBuZXdBdHRhY2htZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdBdHRhY2htZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBwYXJ0aXJlIGRhbCBmaWxlIHBhc3NhdG8gaW4gaW5wdXQgcmVzdGl0dWlzY2UgdW4gb2dnZXR0b1xyXG4gICAqIGNvbnRlbmVudGUgaWwgYmFzZTY0IGRlbCBmaWxlIGUgaWwgc3VvIGNvbnRlbnRUeXBlXHJcbiAgICogQHBhcmFtIGN1cnJlbnRGaWxlIE9nZ2V0dG8gRmlsZSBkYSBjdWkgZXN0cmFwb2xhcmUgYmFzZTY0IGUgY29udGVudFR5cGVcclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBvZ2dldHRvIGF2ZW50ZSBsZSBwcm9wcmlldMOgIEJhc2U2NEZpbGUgZSBDb250ZW50VHlwZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgZ2V0QmFzZTY0RnJvbUZpbGUoY3VycmVudEZpbGU6IEZpbGUpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgZmlsZVNpemVNQiA9IGN1cnJlbnRGaWxlLnNpemUgLyAxMDI0IC8gMTAyNDtcclxuICAgIGlmIChmaWxlU2l6ZU1CID4gdGhpcy5iYXNlNjRMaW1pdE1CKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgQmFzZTY0RmlsZTogbnVsbCxcclxuICAgICAgICBDb250ZW50VHlwZTogY3VycmVudEZpbGUudHlwZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgLy8gUHJvY2VkdXJhIHN0YW5kYXJkXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgYmFzZTY0RmlsZSA9IGF3YWl0IHRvQmFzZTY0KGN1cnJlbnRGaWxlKTtcclxuICAgICAgbGV0IGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICBpZiAoYmFzZTY0RmlsZSkge1xyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gYmFzZTY0RmlsZS5zcGxpdChcIixcIilbMF0uc3BsaXQoXCI6XCIpWzFdLnNwbGl0KFwiO1wiKVswXTtcclxuICAgICAgICBiYXNlNjRGaWxlID0gYmFzZTY0RmlsZS5zcGxpdChcIixcIilbMV07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBCYXNlNjRGaWxlOiBiYXNlNjRGaWxlLFxyXG4gICAgICAgIENvbnRlbnRUeXBlOiBjb250ZW50VHlwZVxyXG4gICAgICB9O1xyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgcmV0dXJuIHsgQmFzZTY0RmlsZTogbnVsbCwgQ29udGVudFR5cGU6IG51bGwgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xsYSBzZSBpbCBmaWxlIGNoZSBzaSBzdGEgY2FyaWNhbmRvIMOoIHN1cHBvcnRhdG8gZGFsIHNpc3RlbWEuXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBwcml2YXRlIGNoZWNrQWNjZXB0ZWRGaWxlcygpOiBib29sZWFuIHtcclxuICAgIC8vIFNlIGFjY2V0dG8gdHV0dG8sIGVzY28gc3ViaXRvXHJcbiAgICBpZiAodGhpcy5hY2NlcHRlZEZpbGVUeXBlcyA9PT0gXCIqXCIpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGlzVHlwZVZhbGlkID0gKG1pbWVUeXBlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICAgICAgaWYgKCFtaW1lVHlwZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgLy8gQ29udHJvbGxvIGNvcnJpc3BvbmRlbnphIGVzYXR0YSAoZXMuIGltYWdlL3BuZylcclxuICAgICAgaWYgKHRoaXMuYWNjZXB0ZWRGaWxlVHlwZXMuaW5jbHVkZXMobWltZVR5cGUpKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIGNvbnN0IHdpbGRjYXJkcyA9IHRoaXMuYWNjZXB0ZWRGaWxlVHlwZXMuc3BsaXQoXCIsXCIpLmZpbHRlcih0ID0+IHQuaW5jbHVkZXMoXCIqXCIpKTtcclxuICAgICAgZm9yIChsZXQgdCBvZiB3aWxkY2FyZHMpIHtcclxuICAgICAgICBjb25zdCBwcmVmaXggPSB0LnNwbGl0KFwiKlwiKVswXTsgLy8gUHJlbmRlIFwiaW1hZ2UvXCIgZGEgXCJpbWFnZS8qXCJcclxuICAgICAgICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aChwcmVmaXgpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5sb2FkTXVsdGlwbGVGaWxlcyAhPT0gdHJ1ZSkge1xyXG4gICAgICAvLyBDYXNvIFNpbmdvbG9cclxuICAgICAgcmV0dXJuIGlzVHlwZVZhbGlkKHRoaXMuc2VsZWN0ZWRGaWxlLnR5cGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ2FzbyBNdWx0aXBsbzogVFVUVEkgaSBmaWxlIHNlbGV6aW9uYXRpIGRldm9ubyBlc3NlcmUgdmFsaWRpXHJcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRGaWxlcykuZXZlcnkoZmlsZSA9PiBpc1R5cGVWYWxpZChmaWxlLnR5cGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlIGVxcC1hdHRhY2htZW50cyDDqCBzdGF0YSBjb25maWd1cmF0YSBwZXIgaWwgY2FyaWNhbWVudG8gZGVsbGUgc29sZSBpbW1hZ2luaSBhbGxvcmEgdmVyaWZpY2EgY2hlIGlsIGZpbGUgcGFzc2F0byBpblxyXG4gICAqIGlucHV0IHNpYSBlZmZldHRpdmFtZW50ZSB1biBpbW1hZ2luZSBvIG5vLlxyXG4gICAqIFNlIGlsIGNvbnRyb2xsbyB2YSBhIGJ1b24gZmluZSByZXN0aXR1aXNjZSBUUlVFIGFsdHJpbWVudGkgbW9zdHJhIHVuIG1lc3NhZ2dpbyBkJ2Vycm9yZSBlIHJlc3RpdHVpc2NlIEZBTFNFXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja0FsbG93T25seUltYWdlRmlsZShuZXdBdHRhY2htZW50KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5hbGxvd09ubHlJbWFnZXMgPT0gdHJ1ZSAmJiBuZXdBdHRhY2htZW50LklzSW1hZ2UgIT0gdHJ1ZSkge1xyXG4gICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5FcnJvcih0aGlzLm5vSW1hZ2VTZWxlY3RlZEVycm9yTWVzc2FnZSk7XHJcbiAgICAgIHRoaXMuYWJvcnRGaWxlKCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tBY2NlcHRlZEZpbGVzKCkpIHtcclxuICAgICAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UuRXJyb3IodGhpcy53cm9uZ1R5cGVTZWxlY3RlZEVycm9yTWVzc2FnZSk7XHJcbiAgICAgIHRoaXMuYWJvcnRGaWxlKCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHZXN0aW9uZSBjcm9wIGZpbGVcclxuXHJcbiAgZ2V0SW1hZ2VEaW1lbnNpb25zKGltZzogYW55KSB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1hZ2Uuc3JjID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICBpbWFnZS5vbmxvYWQgPSAocnMpID0+IHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsSGVpZ2h0ID0gcnMuY3VycmVudFRhcmdldFtcImhlaWdodFwiXTtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsV2lkdGggPSBycy5jdXJyZW50VGFyZ2V0W1wid2lkdGhcIl07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9yaWdpbmFsV2lkdGggPiAxMjgwKSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbVdpZHRoID0gMTI4MDtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tSGVpZ2h0ID0gTWF0aC5yb3VuZCgoMTI4MCAqIHRoaXMub3JpZ2luYWxIZWlnaHQpIC8gdGhpcy5vcmlnaW5hbFdpZHRoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21IZWlnaHQgPSBycy5jdXJyZW50VGFyZ2V0W1wiaGVpZ2h0XCJdO1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21XaWR0aCA9IHJzLmN1cnJlbnRUYXJnZXRbXCJ3aWR0aFwiXTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoaW1nKTtcclxuICB9XHJcblxyXG4gIHJlc3RvcmVPcmlnaW5hbERpbWVuc2lvbnMoKSB7XHJcbiAgICB0aGlzLmN1c3RvbVdpZHRoID0gdGhpcy5vcmlnaW5hbFdpZHRoO1xyXG4gICAgdGhpcy5jdXN0b21IZWlnaHQgPSB0aGlzLm9yaWdpbmFsSGVpZ2h0O1xyXG4gICAgdGhpcy5jYW52YXNSb3RhdGlvbiA9IDA7XHJcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHt9O1xyXG4gIH1cclxuXHJcbiAgb25EaW1lbnNpb25zQ2hhbmdlKGRpbWVuc2lvbjogc3RyaW5nKSB7XHJcbiAgICBpZiAoZGltZW5zaW9uID09IFwiSFwiKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tV2lkdGggPSBNYXRoLnJvdW5kKCh0aGlzLmN1c3RvbUhlaWdodCAqIHRoaXMub3JpZ2luYWxXaWR0aCkgLyB0aGlzLm9yaWdpbmFsSGVpZ2h0KTtcclxuICAgIH0gZWxzZSBpZiAoZGltZW5zaW9uID09IFwiV1wiKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tSGVpZ2h0ID0gTWF0aC5yb3VuZCgodGhpcy5jdXN0b21XaWR0aCAqIHRoaXMub3JpZ2luYWxIZWlnaHQpIC8gdGhpcy5vcmlnaW5hbFdpZHRoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGltYWdlQ3JvcHBlZChldmVudDogSW1hZ2VDcm9wcGVkRXZlbnQpIHtcclxuICAgIHRoaXMuY3JvcHBlZEltYWdlID0gZXZlbnQuYmFzZTY0O1xyXG4gICAgdGhpcy5nZXRDcm9wcGVkQW5kVXBsb2FkKHRoaXMuY3JvcHBlZEltYWdlLCB0aGlzLm5ld0F0dGFjaG1lbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3JvcHBlZEFuZFVwbG9hZChmaWxlLCBuZXdBdHRhY2htZW50OiBJQXR0YWNobWVudERUTykge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHZhciBmaWxlOiBhbnkgPSBiYXNlNjRUb0ZpbGUoZmlsZSk7XHJcblxyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY29tcHJlc3Npb25PcHRpb25zO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcHJpbWUgbCdpbW1hZ2luZSBwYXNzYW5kbyBjb21lIHBhcmFtZXRyaSBsZSBvcHRpb25zIGNyZWF0ZSBuZWxsJ29nZ2V0dG8gc29wcmEsIGUgaWwgZmlsZSBkYWwgcmVhZGVyIHByaW5jaXBhbGVcclxuICAgICAqL1xyXG4gICAgaW1hZ2VDb21wcmVzc2lvbihmaWxlLCBvcHRpb25zKS50aGVuKChmaWxlQ29tcHJlc3NlZCkgPT4ge1xyXG4gICAgICBsZXQgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICAvL0ZhY2NpbyBsYSBwdXNoIGRpIG9nbmkgZmlsZSBhbGwnaW50ZXJubyBkZWxsJ2FycmF5IGRpIGZpbGUgZGVsbCdpdGVtIGRhIG1hbmRhcmUgYWwgc2VydmVyXHJcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCByZXN1bHRSZWFkZXIgPSA8c3RyaW5nPmZpbGVSZWFkZXIucmVzdWx0O1xyXG4gICAgICAgIHZhciBtYXJrZXIgPSBcIjtiYXNlNjQsXCI7XHJcbiAgICAgICAgbmV3QXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IHJlc3VsdFJlYWRlci5zdWJzdHJpbmcocmVzdWx0UmVhZGVyLmluZGV4T2YobWFya2VyKSArIG1hcmtlci5sZW5ndGgpO1xyXG4gICAgICAgIHNlbGYuc2hvd0Nyb3BJbWFnZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChzZWxmLm5ld0F0dGFjaG1lbnRGb3JtKSB7XHJcbiAgICAgICAgICBzZWxmLm5ld0F0dGFjaG1lbnRGb3JtLmVuYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlQ29tcHJlc3NlZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJvdGF0ZUxlZnQoKSB7XHJcbiAgICB0aGlzLmNhbnZhc1JvdGF0aW9uLS07XHJcbiAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcm90YXRlUmlnaHQoKSB7XHJcbiAgICB0aGlzLmNhbnZhc1JvdGF0aW9uKys7XHJcbiAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmbGlwQWZ0ZXJSb3RhdGUoKSB7XHJcbiAgICBjb25zdCBmbGlwcGVkSCA9IHRoaXMudHJhbnNmb3JtLmZsaXBIO1xyXG4gICAgY29uc3QgZmxpcHBlZFYgPSB0aGlzLnRyYW5zZm9ybS5mbGlwVjtcclxuICAgIHRoaXMudHJhbnNmb3JtID0ge1xyXG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcclxuICAgICAgZmxpcEg6IGZsaXBwZWRWLFxyXG4gICAgICBmbGlwVjogZmxpcHBlZEhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmbGlwSG9yaXpvbnRhbCgpIHtcclxuICAgIHRoaXMudHJhbnNmb3JtID0ge1xyXG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcclxuICAgICAgZmxpcEg6ICF0aGlzLnRyYW5zZm9ybS5mbGlwSFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZsaXBWZXJ0aWNhbCgpIHtcclxuICAgIHRoaXMudHJhbnNmb3JtID0ge1xyXG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcclxuICAgICAgZmxpcFY6ICF0aGlzLnRyYW5zZm9ybS5mbGlwVlxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBBbm51bGxhIGxhIHNlbGV6aW9uZSBkZWwgZmlsZSwgc3Z1b3RhbmRvIGwnaW5wdXQgZSByZXNldHRhbmRvIHR1dHRlIGxlIHByb3ByaWV0w6AgZGVsbCdJQXR0YWNobWVudERUT1xyXG4gICAqL1xyXG4gIGFib3J0RmlsZSgpIHtcclxuICAgIGlmICh0aGlzLmltYWdlSW5wdXQpIHRoaXMuaW1hZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBudWxsO1xyXG4gICAgdGhpcy5zaG93Q3JvcEltYWdlID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50LklzSW1hZ2UgPSBmYWxzZTtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IG51bGw7XHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZU5hbWUgPSBudWxsO1xyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50LkZpbGVFeHRlbnNpb24gPSBudWxsO1xyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50LkZpbGVDb250ZW50VHlwZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG5cclxuICAgIHRoaXMuY3VzdG9tSGVpZ2h0ID0gbnVsbDtcclxuICAgIHRoaXMuY3VzdG9tV2lkdGggPSBudWxsO1xyXG4gICAgdGhpcy5vcmlnaW5hbEhlaWdodCA9IG51bGw7XHJcbiAgICB0aGlzLm9yaWdpbmFsV2lkdGggPSBudWxsO1xyXG5cclxuICAgIHRoaXMuZGlhbG9nUmVmQ3JvcEltYWdlLmNsb3NlKCk7XHJcbiAgICB0aGlzLnJlc3RvcmVPcmlnaW5hbERpbWVuc2lvbnMoKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBmaWxlRHJvcHBlZChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5kcmFnT3ZlciA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcclxuXHJcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLm9uRmlsZUFkZGVkKHsgdGFyZ2V0OiB7IGZpbGVzOiBmaWxlcyB9IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU2UgaWwgY2FyaWNhbWVudG8gZGVsIGZpbGUgZHJvcGJveCB2YSBhIGJ1b24gZmluZSwgbGEgZnVuemlvbmUgZGkgY2FsbGJhY2sgcmVzdGl0dWlzY2UgdW4gYXJyYXkgZGkgb2dnZXR0aS5cclxuICAvLyBWaWVuZSBwb2kgZmF0dGEgdW5hIFhNTEh0dHBSZXF1ZXN0IGNvbiByZXNwb25zZVR5cGUgJ2Jsb2InIHBlciBjb252ZXJ0aXJlIGlsIHByaW1vIGVsZW1lbnRvIGRlbGxhIHJlc3BvbnNlIGluIHVuIEJsb2IuXHJcbiAgY2hvb3NlRHJvcGJveEZpbGUoKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSByZXR1cm47XHJcbiAgICB2YXIgb3B0aW9ucyA9IHtcclxuICAgICAgc3VjY2VzczogKGZpbGVzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGZpbGVzWzBdLmxpbmspO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBgQmVhcmVyICR7QXR0YWNobWVudEhlbHBlclNlcnZpY2UuZHJvcGJveENyZWRlbnRpYWxzLmFjY2Vzc1Rva2VufWApO1xyXG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBcImJsb2JcIjtcclxuXHJcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJsb2IgPSB4aHIucmVzcG9uc2U7XHJcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlc1swXS5uYW1lLCB7IHR5cGU6IGJsb2IudHlwZSB9KTtcclxuICAgICAgICAgIGxldCBmaWxlc0FkZGVkID0gW2ZpbGVdO1xyXG4gICAgICAgICAgdGhpcy5vbkZpbGVBZGRlZChmaWxlc0FkZGVkLCB0cnVlKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB4aHIuc2VuZCgpO1xyXG4gICAgICB9LFxyXG4gICAgICBsaW5rVHlwZTogXCJkaXJlY3RcIixcclxuICAgICAgbXVsdGlzZWxlY3Q6IGZhbHNlLFxyXG4gICAgICBleHRlbnNpb25zOiBbXCIuanBnXCIsIFwiLnBuZ1wiLCBcIi5wZGZcIiwgXCIuZG9jXCIsIFwiLmRvY3hcIiwgXCIudHh0XCJdXHJcbiAgICB9O1xyXG4gICAgRHJvcGJveC5jaG9vc2Uob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvLyBXb3JrYXJvdW5kIGRyb3B6b25lOiBkaXNhYmlsaXRvIGlsIGNsaWNrIGRlZ2xpIGVsZW1lbnRpIGluY2x1c2kgbmVsbGEgZHJvcHpvbmUgcGVyIGV2aXRhcmUgZGkgY2xpY2NhcmUgZHVlIHZvbHRlXHJcbiAgb25TZWxlY3RGaWxlKGV2ZW50LCBmaWxlSW5wdXQpIHtcclxuICAgIGlmIChcclxuICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MQnV0dG9uRWxlbWVudCkudGFnTmFtZSA9PT0gXCJCVVRUT05cIiB8fFxyXG4gICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxCdXR0b25FbGVtZW50KS50YWdOYW1lID09PSBcIklOUFVUXCIgfHxcclxuICAgICAgdGhpcy5hZGRpbmdMaW5rTW9kZSA9PSB0cnVlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZmlsZUlucHV0LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHJlIGlsIGRpYWxvZ28gcGVyIGwnaW5zZXJpbWVudG8gZGVsIGxpbmsuXHJcbiAgICovXHJcbiAgc3dpdGNoVG9BZGRpbmdMaW5rTW9kZSgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBmaWxlTmFtZTogWycnXSxcclxuICAgICAgZmlsZVBhdGg6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybignaHR0cHM/Oi8vLisnKV1dXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuYWRkaW5nTGlua1RlbXBsYXRlLCB7XHJcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxyXG4gICAgICBwYW5lbENsYXNzOiAnZXFwLWF0dGFjaG1lbnRzLWRpYWxvZydcclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgLy8gQ3JlYSBsJ29nZ2V0dG8gcGVyIGlsIG51b3ZvIGxpbmsgZGFpIGRhdGkgZGVsIGZvcm1cclxuICAgICAgICBjb25zdCBuZXdMaW5rT2JqZWN0OiBJQXR0YWNobWVudERUTyA9IHtcclxuICAgICAgICAgIElEOiAwLFxyXG4gICAgICAgICAgQXR0YWNobWVudFR5cGU6IEF0dGFjaG1lbnRUeXBlLkxJTkssXHJcbiAgICAgICAgICBGaWxlTmFtZTogcmVzdWx0LmZpbGVOYW1lLFxyXG4gICAgICAgICAgRmlsZVBhdGg6IHJlc3VsdC5maWxlUGF0aCxcclxuICAgICAgICAgIElzSW1hZ2U6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5uZXdBdHRhY2htZW50ID0gbmV3TGlua09iamVjdDtcclxuICAgICAgICB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMgPSBbbmV3TGlua09iamVjdF07XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNvbmZpcm1BZGRBdHRhY2htZW50KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLyBNZXRvZG8gcGVyIG90dGVuZXJlIGxlIGNsYXNzaSBDU1MgZGluYW1pY2hlXHJcbiAgZ2V0Q2FyZENsYXNzKGF0dDogSUF0dGFjaG1lbnREVE8pOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnZmlsZS1wcmV2aWV3JzogdHJ1ZSxcclxuICAgICAgJ3VwbG9hZGluZyc6ICEhYXR0LmlzVXBsb2FkaW5nLFxyXG4gICAgICAnY2FyZC1zbWFsbCc6IHRoaXMuY2FyZFNpemUgPT09ICdzbWFsbCcsXHJcbiAgICAgICdjYXJkLW1lZGl1bSc6IHRoaXMuY2FyZFNpemUgPT09ICdtZWRpdW0nLFxyXG4gICAgICAnY2FyZC1sYXJnZSc6IHRoaXMuY2FyZFNpemUgPT09ICdsYXJnZScsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gUXVlc3RhIGZ1bnppb25lIG9yYSBzaSBhcHBsaWNhIGFsIGNvbnRlbml0b3JlLCBub24gYWxsYSBzaW5nb2xhIGNhcmQuXHJcbiAgZ2V0UHJldmlld3NDb250YWluZXJTdHlsZSgpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICAgIGxldCBtaW5XaWR0aCA9ICcyMDBweCc7IC8vIERpbWVuc2lvbmUgZGkgZGVmYXVsdCBwZXIgJ21lZGl1bSdcclxuXHJcbiAgICBpZiAodGhpcy5jYXJkU2l6ZSA9PT0gJ3NtYWxsJykge1xyXG4gICAgICBtaW5XaWR0aCA9ICcxNDBweCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2FyZFNpemUgPT09ICdsYXJnZScpIHtcclxuICAgICAgbWluV2lkdGggPSAnMjgwcHgnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNhcmRTaXplID09PSAnY3VzdG9tJykge1xyXG4gICAgICBtaW5XaWR0aCA9IGAke3RoaXMuY3VzdG9tQ2FyZFdpZHRoUHh9cHhgO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7ICctLWNhcmQtbWluLXdpZHRoJzogbWluV2lkdGggfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVByaW1hcnlBY3Rpb24oYXR0YWNobWVudDogSUF0dGFjaG1lbnREVE8pOiB2b2lkIHtcclxuICAgIC8vIFNlIGlsIGZpbGUgcHXDsiBlc3NlcmUgdmlzdWFsaXp6YXRvIGluIGFudGVwcmltYSwgYXByaSBpbCBkaWFsb2dcclxuICAgIGlmICh0aGlzLmNhbkJlUHJldmlld2VkKGF0dGFjaG1lbnQpKSB7XHJcbiAgICAgIHRoaXMub3BlblByZXZpZXdEaWFsb2coYXR0YWNobWVudCk7XHJcbiAgICB9XHJcbiAgICAvLyBBbHRyaW1lbnRpLCBlc2VndWkgbCdhemlvbmUgZGkgZGVmYXVsdCAoZG93bmxvYWQgcGVyIGZpbGUsIGFwcmkgcGVyIGxpbmspXHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy52aWV3QXR0YWNobWVudChhdHRhY2htZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBEZXRlcm1pbmVzIGlmIGFuIGF0dGFjaG1lbnQgY2FuIGJlIHByZXZpZXdlZCBpbiB0aGUgZGlhbG9nLlxyXG4gKiBAcGFyYW0gYXR0IFRoZSBhdHRhY2htZW50IHRvIGNoZWNrLlxyXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYSBwcmV2aWV3IGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqL1xyXG4gIGNhbkJlUHJldmlld2VkKGF0dDogSUF0dGFjaG1lbnREVE8pOiBib29sZWFuIHtcclxuICAgIGlmICghYXR0KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYXNlIDE6IEl0J3MgYW4gaW1hZ2Ugd2l0aCBCYXNlNjQgZGF0YS5cclxuICAgIGNvbnN0IGlzUHJldmlld2FibGVJbWFnZSA9IGF0dC5Jc0ltYWdlICYmICEhYXR0LkZpbGVEYXRhQmFzZTY0O1xyXG5cclxuICAgIC8vIENhc2UgMjogSXQncyBhIFBERiB3aXRoIEJhc2U2NCBkYXRhLlxyXG4gICAgY29uc3QgaXNQcmV2aWV3YWJsZVBkZiA9IGF0dC5GaWxlQ29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnICYmICEhYXR0LkZpbGVEYXRhQmFzZTY0O1xyXG5cclxuICAgIC8vIENhc2UgMzogSXQncyBhIHJlbW90ZSBkb2N1bWVudCB3aXRoIGEgVVJMIChmb3IgR29vZ2xlIFZpZXdlcikuXHJcbiAgICBjb25zdCBpc1JlbW90ZURvY3VtZW50ID0gIWF0dC5Jc0ltYWdlICYmICEhYXR0LkZpbGVQYXRoICYmICEhdGhpcy5wcm9kdWN0aW9uQmFzZVVybDtcclxuXHJcbiAgICAvL0Nhc2UgNDogVmlkZW8gLSDDiCB1biB2aWRlbyBlIGFiYmlhbW8gaWwgZmlsZSBiaW5hcmlvIHNhbHZhdG8gaW4gTGFyZ2VGaWxlXHJcbiAgICBjb25zdCBpc1ByZXZpZXdhYmxlVmlkZW8gPSBhdHQuRmlsZUNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCd2aWRlby8nKSAmJiAhIWF0dC5MYXJnZUZpbGU7XHJcblxyXG4gICAgLy8gQSBwcmV2aWV3IGlzIHBvc3NpYmxlIGlmIGFueSBvZiB0aGVzZSBjb25kaXRpb25zIGFyZSB0cnVlLlxyXG4gICAgcmV0dXJuIGlzUHJldmlld2FibGVJbWFnZSB8fCBpc1ByZXZpZXdhYmxlUGRmIHx8IGlzUmVtb3RlRG9jdW1lbnQgfHwgaXNQcmV2aWV3YWJsZVZpZGVvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0NvbHVtbkhpZGRlbihjb2w6IEF0dGFjaG1lbnRGaWVsZENvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgLy8gMSkgaGlkZGVuQ29sdW1uc1xyXG4gICAgaWYgKHRoaXMuaGlkZGVuQ29sdW1ucz8uaW5jbHVkZXMoY29sLmtleSkpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIC8vIDIpIGhpZGRlbiBkZWZpbml0byBzdWxsYSBjb2xvbm5hIChib29sZWFuIG8gZnVuemlvbmUgc2VuemEgYXJncylcclxuICAgIGlmICh0eXBlb2YgY29sLmhpZGRlbiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuICEhY29sLmhpZGRlbigpO1xyXG4gICAgcmV0dXJuICEhY29sLmhpZGRlbjtcclxuICB9XHJcblxyXG4gIGlzQWN0aW9uSGlkZGVuKGFjdGlvbjogQXR0YWNobWVudE1lbnVBY3Rpb24sIGF0dD86IElBdHRhY2htZW50RFRPKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5oaWRkZW5BY3Rpb25zPy5pbmNsdWRlcyhhY3Rpb24ua2V5KSkgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAodHlwZW9mIGFjdGlvbi5oaWRkZW4gPT09ICdmdW5jdGlvbicpIHJldHVybiAhIWFjdGlvbi5oaWRkZW4oYXR0KTtcclxuICAgIHJldHVybiAhIWFjdGlvbi5oaWRkZW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbmlzY2UgbGUgY29sb25uZSBkaSBkZWZhdWx0IGNvbiBxdWVsbGUgY3VzdG9tIGUgbGUgb3JkaW5hLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0dXBUYWJsZUNvbHVtbnMoKTogdm9pZCB7XHJcbiAgICAvLyBEZWZpbmlhbW8gbGUgY29sb25uZSBzdGFuZGFyZCBjb24gdW5hIHBvc2l6aW9uZVxyXG4gICAgY29uc3QgZGVmYXVsdEZpbGVDb2x1bW46IEF0dGFjaG1lbnRGaWVsZENvbHVtbiA9IHtcclxuICAgICAga2V5OiAnZmlsZScsXHJcbiAgICAgIGRpc3BsYXk6ICdGaWxlJyxcclxuICAgICAgdHlwZTogVHlwZUF0dGFjaG1lbnRDb2x1bW4uVEVNUExBVEUsXHJcbiAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuZGVmYXVsdEZpbGVUZW1wbGF0ZSxcclxuICAgICAgc3R5bGVzOiB7IGZsZXg6ICcxIDEgMCUnIH0sXHJcbiAgICAgIHBvc2l0aW9uOiAxMFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0QWN0aW9uc0NvbHVtbjogQXR0YWNobWVudEZpZWxkQ29sdW1uID0ge1xyXG4gICAgICBrZXk6ICdhY3Rpb25zJyxcclxuICAgICAgZGlzcGxheTogJ0F6aW9uaScsXHJcbiAgICAgIHR5cGU6IFR5cGVBdHRhY2htZW50Q29sdW1uLlRFTVBMQVRFLFxyXG4gICAgICBleHRlcm5hbFRlbXBsYXRlOiB0aGlzLmRlZmF1bHRBY3Rpb25zVGVtcGxhdGUsXHJcbiAgICAgIHBvc2l0aW9uOiAxMDAsXHJcbiAgICAgIGNsYXNzOiAnY29sLWFjdGlvbnMnLFxyXG4gICAgICBzdHlsZXM6IHsgZmxleDogJzAgMCAxNTBweCcgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBwcm9jZXNzZWRDdXN0b21Db2x1bW5zID0gdGhpcy5fY3VzdG9tQ29sdW1ucy5tYXAoY29sID0+IHtcclxuICAgICAgLy8gRmxleCBkaSBkZWZhdWx0XHJcbiAgICAgIGlmICghY29sLnN0eWxlcyB8fCAhY29sLnN0eWxlcy5mbGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgIHN0eWxlczogeyAuLi5jb2wuc3R5bGVzLCBmbGV4OiAnMSAxIDAlJyB9XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29sO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IFtcclxuICAgICAgZGVmYXVsdEZpbGVDb2x1bW4sXHJcbiAgICAgIGRlZmF1bHRBY3Rpb25zQ29sdW1uLFxyXG4gICAgICAuLi5wcm9jZXNzZWRDdXN0b21Db2x1bW5zXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIE9yZGluaWFtbyBsJ2FycmF5IGZpbmFsZSBpbiBiYXNlIGFsbGEgcHJvcHJpZXTDoCAncG9zaXRpb24nXHJcbiAgICB0aGlzLl90YWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gIXRoaXMuaXNDb2x1bW5IaWRkZW4oY29sKSlcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBjb25zdCBwb3NBID0gYS5wb3NpdGlvbiB8fCA5OTtcclxuICAgICAgICBjb25zdCBwb3NCID0gYi5wb3NpdGlvbiB8fCA5OTtcclxuICAgICAgICByZXR1cm4gcG9zQSAtIHBvc0I7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cE1lbnVBY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVmYXVsdFByZXZpZXdBY3Rpb246IEF0dGFjaG1lbnRNZW51QWN0aW9uID0ge1xyXG4gICAgICBrZXk6ICdwcmV2aWV3JyxcclxuICAgICAgaWNvbjogJ3Zpc2liaWxpdHknLFxyXG4gICAgICBuYW1lOiAnQW50ZXByaW1hJyxcclxuICAgICAgZm46IChhdHQpID0+IHRoaXMub3BlblByZXZpZXdEaWFsb2coYXR0KSxcclxuICAgICAgZGlzYWJsZWQ6IChhdHQpID0+ICF0aGlzLmNhbkJlUHJldmlld2VkKGF0dCksXHJcbiAgICAgIHBvc2l0aW9uOiAxMFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0RGVsZXRlQWN0aW9uOiBBdHRhY2htZW50TWVudUFjdGlvbiA9IHtcclxuICAgICAga2V5OiAnZGVsZXRlJyxcclxuICAgICAgaWNvbjogJ2RlbGV0ZScsXHJcbiAgICAgIG5hbWU6ICdFbGltaW5hJyxcclxuICAgICAgZm46IChhdHQpID0+IHRoaXMuZGVsZXRlQXR0YWNobWVudChhdHQpLFxyXG4gICAgICBkaXNhYmxlZDogKCkgPT4gdGhpcy5kaXNhYmxlQWN0aW9uLFxyXG4gICAgICBwb3NpdGlvbjogMTAwXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGFsbEFjdGlvbnMgPSBbXHJcbiAgICAgIGRlZmF1bHRQcmV2aWV3QWN0aW9uLFxyXG4gICAgICBkZWZhdWx0RGVsZXRlQWN0aW9uLFxyXG4gICAgICAuLi50aGlzLl9jdXN0b21NZW51QWN0aW9uc1xyXG4gICAgXTtcclxuXHJcbiAgICAvLyBPcmRpbmlhbW8gbCdhcnJheSBmaW5hbGUgaW4gYmFzZSBhbGxhIHByb3ByaWV0w6AgJ3Bvc2l0aW9uJ1xyXG4gICAgdGhpcy5fc29ydGVkTWVudUFjdGlvbnMgPSBhbGxBY3Rpb25zLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgcG9zQSA9IGEucG9zaXRpb24gfHwgOTk7XHJcbiAgICAgIGNvbnN0IHBvc0IgPSBiLnBvc2l0aW9uIHx8IDk5O1xyXG4gICAgICByZXR1cm4gcG9zQSAtIHBvc0I7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVWaWRlb1RodW1ibmFpbChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcclxuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgIC8vIENyZWEgdW4gVVJMIHRlbXBvcmFuZW8gcGVyIGlsIGZpbGUgdmlkZW9cclxuICAgICAgY29uc3QgdmlkZW9VcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xyXG4gICAgICB2aWRlby5zcmMgPSB2aWRlb1VybDtcclxuICAgICAgdmlkZW8ucHJlbG9hZCA9ICdtZXRhZGF0YSc7XHJcbiAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTtcclxuICAgICAgdmlkZW8ucGxheXNJbmxpbmUgPSB0cnVlO1xyXG5cclxuICAgICAgdmlkZW8ub25sb2FkZWRtZXRhZGF0YSA9ICgpID0+IHtcclxuICAgICAgICAvLyBWYWkgYWwgc2Vjb25kbyAxIChwZXIgZXZpdGFyZSBpbCBmb3RvZ3JhbW1hIG5lcm8gaW5pemlhbGUpXHJcbiAgICAgICAgdmlkZW8uY3VycmVudFRpbWUgPSAxO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmlkZW8ub25zZWVrZWQgPSAoKSA9PiB7XHJcbiAgICAgICAgLy8gSW1wb3N0YSBsZSBkaW1lbnNpb25pIGRlbCBjYW52YXMgdWd1YWxpIGFsIHZpZGVvXHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gdmlkZW8udmlkZW9XaWR0aDtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gdmlkZW8udmlkZW9IZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIERpc2VnbmEgaWwgZm90b2dyYW1tYSBzdWwgY2FudmFzXHJcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UodmlkZW8sIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XHJcblxyXG4gICAgICAgIC8vIEVzdHJhaSBpbCBCYXNlNjQgKHF1YWxpdMOgIDAuNyBwZXIgcmlzcGFybWlhcmUgc3BhemlvKVxyXG4gICAgICAgIGNvbnN0IHRodW1ibmFpbCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjcpO1xyXG5cclxuICAgICAgICAvLyBQdWxpc2NpIGxhIG1lbW9yaWFcclxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHZpZGVvVXJsKTtcclxuICAgICAgICByZXNvbHZlKHRodW1ibmFpbC5zcGxpdCgnLCcpWzFdKTsgLy8gUmVzdGl0dWlhbW8gc29sbyBsYSBwYXJ0ZSBCYXNlNjRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZpZGVvLm9uZXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh2aWRlb1VybCk7XHJcbiAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHJlc3NWaWRlb05hdGl2ZShmaWxlOiBGaWxlLCBjb25maWc6IGFueSk6IFByb21pc2U8QmxvYj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xyXG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgIGNvbnN0IHZpZGVvVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuXHJcbiAgICAgIHZpZGVvLnNyYyA9IHZpZGVvVXJsO1xyXG4gICAgICB2aWRlby5tdXRlZCA9IHRydWU7XHJcbiAgICAgIHZpZGVvLnBsYXkoKTtcclxuXHJcbiAgICAgIHZpZGVvLm9ubG9hZGVkZGF0YSA9ICgpID0+IHtcclxuICAgICAgICAvLyBDYWxjb2xpYW1vIGxlIG51b3ZlIGRpbWVuc2lvbmkgbWFudGVuZW5kbyBsJ2FzcGVjdCByYXRpb1xyXG4gICAgICAgIGxldCB3aWR0aCA9IHZpZGVvLnZpZGVvV2lkdGg7XHJcbiAgICAgICAgbGV0IGhlaWdodCA9IHZpZGVvLnZpZGVvSGVpZ2h0O1xyXG4gICAgICAgIGlmICh3aWR0aCA+IGNvbmZpZy5tYXhXaWR0aCkge1xyXG4gICAgICAgICAgaGVpZ2h0ID0gTWF0aC5yb3VuZCgoY29uZmlnLm1heFdpZHRoICogaGVpZ2h0KSAvIHdpZHRoKTtcclxuICAgICAgICAgIHdpZHRoID0gY29uZmlnLm1heFdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gQ2F0dHVyaWFtbyBsbyBzdHJlYW0gZGFsIGNhbnZhcyBhIDMwZnBzXHJcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gY2FudmFzLmNhcHR1cmVTdHJlYW0oMzApO1xyXG4gICAgICAgIGNvbnN0IHJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtLCB7XHJcbiAgICAgICAgICBtaW1lVHlwZTogJ3ZpZGVvL3dlYm07Y29kZWNzPXZwOCcsIC8vIEZvcm1hdG8gd2ViIG90dGltaXp6YXRvXHJcbiAgICAgICAgICB2aWRlb0JpdHNQZXJTZWNvbmQ6IGNvbmZpZy5iaXRyYXRlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNodW5rczogQmxvYltdID0gW107XHJcbiAgICAgICAgcmVjb3JkZXIub25kYXRhYXZhaWxhYmxlID0gKGUpID0+IGNodW5rcy5wdXNoKGUuZGF0YSk7XHJcbiAgICAgICAgcmVjb3JkZXIub25zdG9wID0gKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY29tcHJlc3NlZEJsb2IgPSBuZXcgQmxvYihjaHVua3MsIHsgdHlwZTogJ3ZpZGVvL3dlYm0nIH0pO1xyXG4gICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh2aWRlb1VybCk7XHJcbiAgICAgICAgICByZXNvbHZlKGNvbXByZXNzZWRCbG9iKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZWNvcmRlci5zdGFydCgpO1xyXG5cclxuICAgICAgICAvLyBGdW56aW9uZSBjaGUgZGlzZWduYSBvZ25pIGZyYW1lIHN1bCBjYW52YXNcclxuICAgICAgICBjb25zdCBkcmF3RnJhbWUgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodmlkZW8ucGF1c2VkIHx8IHZpZGVvLmVuZGVkKSB7XHJcbiAgICAgICAgICAgIHJlY29yZGVyLnN0b3AoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY3R4LmRyYXdJbWFnZSh2aWRlbywgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZHJhd0ZyYW1lKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGRyYXdGcmFtZSgpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmlkZW8ub25lcnJvciA9IHJlamVjdDtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tIFNlIHJpY2hpZXN0YSBsYSBnZXN0aW9uZSBzaW5nb2xhIG1vc3RyYSBpbCBwdWxzYW50ZSBkaSBjYXJpY2FtZW50byBkaSB1biBzaW5nb2xvIGZpbGUgLS0+XHJcbjxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICBAaWYoc2hvd1VwbG9hZFRpdGxlID09IHRydWUpe1xyXG4gIDxoND57eyB1cGxvYWRUaXRsZSB9fTwvaDQ+XHJcbiAgfVxyXG4gIEBpZihjaG9vc2VWaWV3ID09IHRydWUpe1xyXG4gIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBbdmFsdWVdPVwidmlld01vZGVcIiAoY2hhbmdlKT1cInNldFZpZXdNb2RlKCRldmVudC52YWx1ZSlcIlxyXG4gICAgYXJpYS1sYWJlbD1cIk1vZGFsaXTDoCBkaSB2aXN1YWxpenphemlvbmVcIj5cclxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cImNhcmRcIj48bWF0LWljb24+Z3JpZF92aWV3PC9tYXQtaWNvbj48L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwidGFibGVcIj48bWF0LWljb24+dmlld19saXN0PC9tYXQtaWNvbj48L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgfVxyXG48L2Rpdj5cclxuXHJcbjwhLS0gR2VzdGlvbmUgc2luZ29sbyAtLT5cclxuQGlmIChtdWx0aXBsZUF0dGFjaG1lbnQgIT0gdHJ1ZSkge1xyXG5AaWYgKCFzaW5nbGVBdHRhY2htZW50RHJhZ0FuZERyb3ApIHtcclxuQGlmICghYWRkaW5nTGlua01vZGUpIHtcclxuPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJhZGRBdHRhY2htZW50QnV0dG9uXCI+PC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG59IEBlbHNlIHtcclxuPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJhZGRpbmdMaW5rVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbn1cclxufSBAZWxzZSB7XHJcbjxpbnB1dCAjZmlsZUlucHV0IGlkPVwiZmlsZV9hdHRhY2htZW50XCIgbmFtZT1cImZpbGVfYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgaGlkZGVuIChjaGFuZ2UpPVwib25GaWxlQWRkZWQoJGV2ZW50KVwiXHJcbiAgW2FjY2VwdF09XCJhY2NlcHRlZEZpbGVUeXBlc1wiIFttdWx0aXBsZV09XCJsb2FkTXVsdGlwbGVGaWxlc1wiIC8+XHJcblxyXG5AaWYgKGFsbG93ZWRUeXBlcyAmJiBhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMSkgJiYgKCFhdHRhY2htZW50c0xpc3QgfHwgYXR0YWNobWVudHNMaXN0Lmxlbmd0aCA9PSAwIHx8XHJcbihhdHRhY2htZW50c0xpc3QubGVuZ3RoID4gMCAmJiAhYXR0YWNobWVudHNMaXN0WzBdKSkpIHtcclxuXHJcbkBpZiAoc2hvd0Ryb3BBcmVhID09IHRydWUpIHtcclxuPCEtLSBGVUxMIC0tPlxyXG5AaWYgKGxheW91dCA9PT0gJ2Z1bGwnKSB7XHJcblxyXG48ZGl2IGNsYXNzPVwiZHJvcGJveFwiIFtjbGFzcy5kcmFnb3Zlcl09XCJkcmFnT3ZlclwiIChkcmFnb3Zlcik9XCJkcmFnT3ZlciA9IHRydWU7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcclxuICAoZHJhZ2xlYXZlKT1cImRyYWdPdmVyID0gZmFsc2VcIiAoZHJvcCk9XCJkcmFnT3ZlciA9IGZhbHNlOyBmaWxlRHJvcHBlZCgkZXZlbnQpXCJcclxuICAoY2xpY2spPVwib25TZWxlY3RGaWxlKCRldmVudCwgZmlsZUlucHV0KVwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiAoa2V5ZG93bi5lbnRlcik9XCJmaWxlSW5wdXQuY2xpY2soKVwiXHJcbiAgKGtleWRvd24uc3BhY2UpPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cclxuICA8ZGl2IGNsYXNzPVwiZHJvcGJveC1pY29uXCI+8J+TgTwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJkcm9wYm94LXRleHRcIj57eyBkcm9wSGVyZUxhYmVsIH19PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImRyb3Bib3gtc3VidGV4dFwiPlxyXG4gICAge3sgc3VwcG9ydGVkRm9ybWF0c0xhYmVsIH19XHJcbiAgPC9kaXY+XHJcbiAgPGJ1dHRvbiBjbGFzcz1cImJyb3dzZS1idG5cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZmlsZUlucHV0LmNsaWNrKClcIj5cclxuICAgIHt7IGJyb3dzZUZpbGVzTGFiZWwgfX1cclxuICA8L2J1dHRvbj5cclxuICA8ZGl2IGNsYXNzPVwic2Vjb25kYXJ5LWFjdGlvblwiPlxyXG4gICAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMikgfHwgYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDMpKSB7XHJcbiAgICBAaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygyKSAmJiBhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMykpIHtcclxuICAgIDxhIGNsYXNzPVwic2Vjb25kYXJ5LWFjdGlvbi1saW5rXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImlzRGlzYWJsZWQgPyBudWxsIDogbGlua01lbnVcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWQtbGlua109XCJpc0Rpc2FibGVkXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICBvIGFnZ2l1bmdpIGRhIHdlYlxyXG4gICAgPC9hPlxyXG4gICAgPG1hdC1tZW51ICNsaW5rTWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzd2l0Y2hUb0FkZGluZ0xpbmtNb2RlKClcIj5cclxuICAgICAgICA8bWF0LWljb24+bGluazwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+QWdnaXVuZ2kgZGEgbGluazwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hvb3NlRHJvcGJveEZpbGUoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG91ZF9xdWV1ZTwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+Q2FyaWNhIGRhIERyb3Bib3g8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtbWVudT5cclxuICAgIH1cclxuXHJcbiAgICBAZWxzZSBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDIpKSB7XHJcbiAgICA8YSBbY2xhc3MuZGlzYWJsZWQtbGlua109XCJpc0Rpc2FibGVkXCIgY2xhc3M9XCJzZWNvbmRhcnktYWN0aW9uLWxpbmtcIlxyXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBzd2l0Y2hUb0FkZGluZ0xpbmtNb2RlKClcIj5cclxuICAgICAgYWdnaXVuZ2kgdW4gbGlua1xyXG4gICAgPC9hPlxyXG4gICAgfVxyXG5cclxuICAgIEBlbHNlIGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMykpIHtcclxuICAgIDxhIFtjbGFzcy5kaXNhYmxlZC1saW5rXT1cImlzRGlzYWJsZWRcIiBjbGFzcz1cInNlY29uZGFyeS1hY3Rpb24tbGlua1wiXHJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGNob29zZURyb3Bib3hGaWxlKClcIj5cclxuICAgICAgY2FyaWNhIGRhIERyb3Bib3hcclxuICAgIDwvYT5cclxuICAgIH1cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbn1AZWxzZSB7XHJcbjxkaXYgY2xhc3M9XCJjb21wYWN0LXVwbG9hZGVyXCIgW2NsYXNzLmRyYWdvdmVyXT1cImRyYWdPdmVyXCIgKGRyYWdvdmVyKT1cImRyYWdPdmVyID0gdHJ1ZTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxyXG4gIChkcmFnbGVhdmUpPVwiZHJhZ092ZXIgPSBmYWxzZVwiIChkcm9wKT1cImRyYWdPdmVyID0gZmFsc2U7IGZpbGVEcm9wcGVkKCRldmVudClcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29tcGFjdC1pY29uXCI+PG1hdC1pY29uPmZvbGRlcl9vcGVuPC9tYXQtaWNvbj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29tcGFjdC10ZXh0XCIgKGNsaWNrKT1cIm9uU2VsZWN0RmlsZSgkZXZlbnQsIGZpbGVJbnB1dClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb21wYWN0LXRpdGxlXCI+VHJhc2NpbmEgaSBmaWxlIG8gc2VsZXppb25hIGRhbCBjb21wdXRlcjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbXBhY3Qtc3VidGl0bGVcIj57eyBzdXBwb3J0ZWRGb3JtYXRzTGFiZWwgfX08L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29tcGFjdC1hY3Rpb25zXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGZpbGVJbnB1dC5jbGljaygpXCI+U2ZvZ2xpYTwvYnV0dG9uPlxyXG4gICAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMikgfHwgYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDMpKSB7XHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb21wYWN0TGlua01lbnVcIlxyXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+TGluazwvYnV0dG9uPlxyXG4gICAgPG1hdC1tZW51ICNjb21wYWN0TGlua01lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgIEBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDIpKSB7IDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRvQWRkaW5nTGlua01vZGUoKVwiPnt7IG9wZW5MaW5rTGFiZWwgfX08L2J1dHRvbj4gfVxyXG4gICAgICBAaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygzKSkgeyA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiAoY2xpY2spPVwiY2hvb3NlRHJvcGJveEZpbGUoKVwiPnt7XHJcbiAgICAgICAgdXBsb2FkV2l0aERyb3Bib3hMYWJlbCB9fTwvYnV0dG9uPiB9XHJcbiAgICA8L21hdC1tZW51PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxufVxyXG59XHJcbn1cclxufVxyXG5cclxuPCEtLSBBemlvbmkgc2luZ29sbyBlbGVtZW50byAoY29tZSBwcmltYSkgLS0+XHJcbjxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gIEBpZiAoYXR0YWNobWVudHNMaXN0ICYmIGF0dGFjaG1lbnRzTGlzdC5sZW5ndGggPiAwICYmIGF0dGFjaG1lbnRzTGlzdFswXSkge1xyXG4gIDxidXR0b24gY2xhc3M9XCJtYi0yIG1lLTIgZXFwLWF0dGFjaG1lbnRzLWRvd25sb2FkLWJ0blwiIChjbGljayk9XCJ2aWV3QXR0YWNobWVudChhdHRhY2htZW50c0xpc3RbMF0pXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgIEBpZiAoYXR0YWNobWVudHNMaXN0WzBdLkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkZJTEUpIHtcclxuICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgIDxtYXQtaWNvbj5vcGVuX2luX25ldzwvbWF0LWljb24+XHJcbiAgICB9XHJcbiAgICB7eyBhdHRhY2htZW50c0xpc3RbMF0uQXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuRklMRSA/IGRvd25sb2FkTGFiZWwgOiBvcGVuTGlua0xhYmVsIH19XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIEBpZiAoc2hvd1ByZXZpZXcgJiYgKCFhdHRhY2htZW50c0xpc3RbMF0uRmlsZUNvbnRlbnRUeXBlIHx8ICghYXR0YWNobWVudHNMaXN0WzBdLkZpbGVDb250ZW50VHlwZS5zdGFydHNXaXRoKCd2aWRlbycpXHJcbiAgJiYgIWF0dGFjaG1lbnRzTGlzdFswXS5GaWxlQ29udGVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8nKSkpICYmIGF0dGFjaG1lbnRzTGlzdFswXS5Jc0ltYWdlID09IHRydWUpIHtcclxuICA8YnV0dG9uIGNsYXNzPVwibWItMiBtZS0yIGVxcC1hdHRhY2htZW50cy1wcmV2aWV3LWJ0blwiIChjbGljayk9XCJvcGVuUHJldmlld0RpYWxvZyhhdHRhY2htZW50c0xpc3RbMF0pXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgIDxtYXQtaWNvbj52aXNpYmlsaXR5PC9tYXQtaWNvbj4ge3sgcHJldmlld0xhYmVsIH19XHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG5cclxuICA8YnV0dG9uIFtkaXNhYmxlZF09XCJkaXNhYmxlQWN0aW9uXCIgY2xhc3M9XCJtYi0yIGVxcC1hdHRhY2htZW50cy1kZWxldGUtYnRuXCJcclxuICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnRzTGlzdFswXSlcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cclxuICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPiB7eyBkZWxldGVMYWJlbCB9fVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuPC9kaXY+XHJcbn1cclxuXHJcbjwhLS0gR2VzdGlvbmUgbXVsdGlwbGEgLS0+XHJcbkBpZiAobXVsdGlwbGVBdHRhY2htZW50ID09IHRydWUgJiYgc2hvd0Ryb3BBcmVhID09IHRydWUpIHtcclxuPGlucHV0ICNmaWxlSW5wdXQgaWQ9XCJmaWxlX2F0dGFjaG1lbnRfbXVsdGlcIiBuYW1lPVwiZmlsZV9hdHRhY2htZW50X211bHRpXCIgdHlwZT1cImZpbGVcIiBoaWRkZW5cclxuICAoY2hhbmdlKT1cIm9uRmlsZUFkZGVkKCRldmVudClcIiBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZVR5cGVzXCIgW211bHRpcGxlXT1cImxvYWRNdWx0aXBsZUZpbGVzXCIgLz5cclxuXHJcbkBpZiAobGF5b3V0ID09PSAnZnVsbCcpIHtcclxuPGRpdiBjbGFzcz1cImRyb3Bib3hcIiBbY2xhc3MuZHJhZ292ZXJdPVwiZHJhZ092ZXJcIiAoZHJhZ292ZXIpPVwiZHJhZ092ZXIgPSB0cnVlOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXHJcbiAgKGRyYWdsZWF2ZSk9XCJkcmFnT3ZlciA9IGZhbHNlXCIgKGRyb3ApPVwiZHJhZ092ZXIgPSBmYWxzZTsgZmlsZURyb3BwZWQoJGV2ZW50KVwiXHJcbiAgKGNsaWNrKT1cIm9uU2VsZWN0RmlsZSgkZXZlbnQsIGZpbGVJbnB1dClcIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgKGtleWRvd24uZW50ZXIpPVwiZmlsZUlucHV0LmNsaWNrKClcIlxyXG4gIChrZXlkb3duLnNwYWNlKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImRyb3Bib3gtaWNvblwiPvCfk4E8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZHJvcGJveC10ZXh0XCI+e3sgZHJvcEhlcmVMYWJlbCB9fTwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJkcm9wYm94LXN1YnRleHRcIj5cclxuICAgIHt7IHN1cHBvcnRlZEZvcm1hdHNMYWJlbCB9fVxyXG4gIDwvZGl2PlxyXG4gIDxidXR0b24gY2xhc3M9XCJicm93c2UtYnRuXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICB7eyBicm93c2VGaWxlc0xhYmVsIH19XHJcbiAgPC9idXR0b24+XHJcbiAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMikpIHtcclxuICA8ZGl2IGNsYXNzPVwic2Vjb25kYXJ5LWFjdGlvbi1saW5rXCI+XHJcbiAgICBvIDxhIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHN3aXRjaFRvQWRkaW5nTGlua01vZGUoKVwiPmFnZ2l1bmdpIHVuIGxpbms8L2E+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxufUBlbHNle1xyXG48ZGl2IGNsYXNzPVwiY29tcGFjdC11cGxvYWRlclwiIFtjbGFzcy5kcmFnb3Zlcl09XCJkcmFnT3ZlclwiIChkcmFnb3Zlcik9XCJkcmFnT3ZlciA9IHRydWU7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcclxuICAoZHJhZ2xlYXZlKT1cImRyYWdPdmVyID0gZmFsc2VcIiAoZHJvcCk9XCJkcmFnT3ZlciA9IGZhbHNlOyBmaWxlRHJvcHBlZCgkZXZlbnQpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbXBhY3QtaWNvblwiPjxtYXQtaWNvbj5mb2xkZXJfb3BlbjwvbWF0LWljb24+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbXBhY3QtdGV4dFwiIChjbGljayk9XCJvblNlbGVjdEZpbGUoJGV2ZW50LCBmaWxlSW5wdXQpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29tcGFjdC10aXRsZVwiPlRyYXNjaW5hIGkgZmlsZSBvIHNlbGV6aW9uYSBkYWwgY29tcHV0ZXI8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb21wYWN0LXN1YnRpdGxlXCI+e3sgc3VwcG9ydGVkRm9ybWF0c0xhYmVsIH19PC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbXBhY3QtYWN0aW9uc1wiPlxyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmaWxlSW5wdXQuY2xpY2soKVwiPlNmb2dsaWE8L2J1dHRvbj5cclxuICAgIEBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDIpIHx8IGFsbG93ZWRUeXBlcy5pbmNsdWRlcygzKSkge1xyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29tcGFjdExpbmtNZW51XCJcclxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPkxpbms8L2J1dHRvbj5cclxuICAgIDxtYXQtbWVudSAjY29tcGFjdExpbmtNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICBAaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygyKSkgeyA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgICAgIChjbGljayk9XCJzd2l0Y2hUb0FkZGluZ0xpbmtNb2RlKClcIj57eyBvcGVuTGlua0xhYmVsIH19PC9idXR0b24+IH1cclxuICAgICAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMykpIHsgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgKGNsaWNrKT1cImNob29zZURyb3Bib3hGaWxlKClcIj57e1xyXG4gICAgICAgIHVwbG9hZFdpdGhEcm9wYm94TGFiZWwgfX08L2J1dHRvbj4gfVxyXG4gICAgPC9tYXQtbWVudT5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbn1cclxufVxyXG5cclxuQGlmIChhdHRhY2htZW50c0xpc3Q/Lmxlbmd0aCA+IDAgJiYgc2hvd1N1bW1hcnkpIHtcclxuPGRpdiBjbGFzcz1cInVwbG9hZC1zdGF0c1wiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic3RhdHMtaW5mb1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInN0YXQtaXRlbVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdC12YWx1ZVwiPnt7IGF0dGFjaG1lbnRzTGlzdD8ubGVuZ3RoIH19PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0LWxhYmVsXCI+e3sgZmlsZXNMYWJlbCB9fTwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3RhdC1pdGVtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0LXZhbHVlXCI+e3sgdG90YWxTaXplRm9ybWF0dGVkIH19PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0LWxhYmVsXCI+e3sgdG90YWxTaXplTGFiZWwgfX08L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZmlsbFwiIFtzdHlsZS53aWR0aC4lXT1cInByb2dyZXNzUGVyY2VudFwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcbn0gQGVsc2UgaWYoYXR0YWNobWVudHNMaXN0Py5sZW5ndGggPT0gMCl7XHJcbjxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPnt7IGVtcHR5U3RhdGVMYWJlbCB9fTwvZGl2PlxyXG59XHJcblxyXG48IS0tIEdyaWdsaWEgYW50ZXByaW1lIGNhcmQgKHZhbGUgcGVyIHNpbmdvbG8gZSBtdWx0aXBsbykgLS0+XHJcbkBpZiAodmlld01vZGUgPT09ICdjYXJkJykge1xyXG5cclxuPGRpdiBjbGFzcz1cImZpbGUtcHJldmlld3NcIiBbbmdTdHlsZV09XCJnZXRQcmV2aWV3c0NvbnRhaW5lclN0eWxlKClcIj5cclxuICBAZm9yIChhdHQgb2YgYXR0YWNobWVudHNMaXN0OyB0cmFjayBhdHQuSUQpIHtcclxuICA8ZGl2IFtuZ0NsYXNzXT1cImdldENhcmRDbGFzcyhhdHQpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1pbWctY29udGFpbmVyXCIgKGNsaWNrKT1cIiFhdHQuaXNVcGxvYWRpbmcgJiYgaGFuZGxlUHJpbWFyeUFjdGlvbihhdHQpXCI+XHJcblxyXG4gICAgICBAaWYgKGF0dC5Jc0ltYWdlIHx8IGF0dC5GaWxlVGh1bWJuYWlsQmFzZTY0KSB7XHJcbiAgICAgIDxpbWcgY2xhc3M9XCJwcmV2aWV3LWltZ1wiIFtzcmNdPVwiJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJyArIChhdHQuRmlsZVRodW1ibmFpbEJhc2U2NCB8fCBhdHQuRmlsZURhdGFCYXNlNjQpXCJcclxuICAgICAgICBbYWx0XT1cImF0dC5GaWxlTmFtZVwiIC8+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1pY29uXCI+PGkgW25nQ2xhc3NdPVwiZ2V0QXR0YWNobWVudEljb24oYXR0KVwiPjwvaT48L2Rpdj5cclxuICAgICAgfVxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctYWN0aW9uLW92ZXJsYXlcIj5cclxuICAgICAgICBAaWYgKGF0dC5GaWxlQ29udGVudFR5cGU/LnN0YXJ0c1dpdGgoJ3ZpZGVvLycpKSB7XHJcbiAgICAgICAgPG1hdC1pY29uPnBsYXlfYXJyb3c8L21hdC1pY29uPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZWxzZSBpZiAoYXR0LklzSW1hZ2UgJiYgY2FuQmVQcmV2aWV3ZWQoYXR0KSkge1xyXG4gICAgICAgIDxtYXQtaWNvbj52aXNpYmlsaXR5PC9tYXQtaWNvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGVsc2UgaWYgKGF0dC5GaWxlQ29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnICYmIGNhbkJlUHJldmlld2VkKGF0dCkpIHtcclxuICAgICAgICA8bWF0LWljb24+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZWxzZSBpZiAoYXR0LkF0dGFjaG1lbnRUeXBlID09PSBBdHRhY2htZW50VHlwZS5GSUxFKSB7XHJcbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgIDxtYXQtaWNvbj5vcGVuX2luX25ldzwvbWF0LWljb24+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZS1pbmZvXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLW5hbWVcIiBbdGl0bGVdPVwiYXR0LkZpbGVOYW1lXCI+e3sgYXR0LkZpbGVOYW1lIH19PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYoIWRpc2FibGVBY3Rpb24pe1xyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJyZW1vdmUtYnRuXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJSaW11b3ZpIGFsbGVnYXRvXCJcclxuICAgICAgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0KVwiIFtkaXNhYmxlZF09XCJhdHQuaXNVcGxvYWRpbmdcIj5cclxuICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuXHJcbiAgICBAaWYgKGF0dC5pc1VwbG9hZGluZykge1xyXG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZC1zcGlubmVyXCI+PC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxuXHJcbn0gQGVsc2UgaWYodmlld01vZGUgPT09ICd0YWJsZScgJiYgYXR0YWNobWVudHNMaXN0Py5sZW5ndGggPiAwKSB7XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cInRhYmxlLXZpZXctY29udGFpbmVyXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cclxuICAgIEBmb3IgKGNvbCBvZiBfdGFibGVDb2x1bW5zOyB0cmFjayBjb2wua2V5KSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtY2VsbFwiIFtzdHlsZS5mbGV4XT1cImNvbC5zdHlsZXM/LmZsZXhcIiBbbmdDbGFzc109XCJjb2wuY2xhc3NcIj5cclxuICAgICAge3sgY29sLmRpc3BsYXkgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuICBAZm9yIChhdHQgb2YgYXR0YWNobWVudHNMaXN0OyB0cmFjayBhdHQuSUQpIHtcclxuICA8ZGl2IGNsYXNzPVwidGFibGUtcm93XCI+XHJcblxyXG4gICAgQGZvciAoY29sIG9mIF90YWJsZUNvbHVtbnM7IHRyYWNrIGNvbC5rZXkpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsXCIgW3N0eWxlLmZsZXhdPVwiY29sLnN0eWxlcz8uZmxleFwiIFtuZ0NsYXNzXT1cImNvbC5jbGFzc1wiPlxyXG5cclxuICAgICAgQHN3aXRjaCAoY29sLnR5cGUpIHtcclxuXHJcbiAgICAgIEBjYXNlICgndGVtcGxhdGUnKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZW1wbGF0ZS13cmFwcGVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2wuZXh0ZXJuYWxUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGF0dCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIEBjYXNlICgnZGF0ZScpIHtcclxuICAgICAgPHNwYW4gY2xhc3M9XCJtZXRhZGF0YS12YWx1ZVwiPnt7IGF0dFtjb2wua2V5XSB8IGRhdGU6J2RkL01NL3l5eXknIH19PC9zcGFuPlxyXG4gICAgICB9XHJcbiAgICAgIEBkZWZhdWx0IHtcclxuICAgICAgPHNwYW4gY2xhc3M9XCJtZXRhZGF0YS12YWx1ZVwiPnt7IGF0dFtjb2wua2V5XSB9fTwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuICB9XHJcbjwvZGl2PlxyXG59XHJcblxyXG48IS0tIE5vdGlmaWNhIHRvYXN0IC0tPlxyXG48ZGl2IGNsYXNzPVwidXBsb2FkLW5vdGlmaWNhdGlvblwiIFtjbGFzcy5zaG93XT1cInRvYXN0Py52aXNpYmxlXCIgW2NsYXNzLnN1Y2Nlc3NdPVwidG9hc3Q/LnR5cGUgPT09ICdzdWNjZXNzJ1wiXHJcbiAgW2NsYXNzLmVycm9yXT1cInRvYXN0Py50eXBlID09PSAnZXJyb3InXCI+XHJcbiAgPHNwYW4+e3sgdG9hc3Q/LnRleHQgfX08L3NwYW4+XHJcbiAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvbi1wcm9ncmVzc1wiPjwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZpbGVUZW1wbGF0ZSBsZXQtYXR0PlxyXG4gIDxpIGNsYXNzPVwiZmlsZS1pY29uLXNtYWxsXCIgW25nQ2xhc3NdPVwiZ2V0QXR0YWNobWVudEljb24oYXR0KVwiPjwvaT5cclxuICA8ZGl2IGNsYXNzPVwiZmlsZS1pbmZvLXRleHRcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZmlsZS1uYW1lLXRhYmxlXCI+e3sgYXR0LkZpbGVOYW1lIH19PC9zcGFuPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJmaWxlLXR5cGUtdGFibGVcIj57eyBhdHQuRmlsZUV4dGVuc2lvbiB8fCAnTGluaycgfX08L3NwYW4+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRBY3Rpb25zVGVtcGxhdGUgbGV0LWF0dD5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlUHJpbWFyeUFjdGlvbihhdHQpXCJcclxuICAgIFttYXRUb29sdGlwXT1cImF0dC5GaWxlQ29udGVudFR5cGU/LnN0YXJ0c1dpdGgoJ3ZpZGVvLycpID8gJ1JpcHJvZHVjaSB2aWRlbycgOiAnVmlzdWFsaXp6YS9TY2FyaWNhJ1wiPlxyXG5cclxuICAgIDxtYXQtaWNvbj5cclxuICAgICAgQGlmIChhdHQuRmlsZUNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCd2aWRlby8nKSkge1xyXG4gICAgICBwbGF5X2Fycm93XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICB7eyBhdHQuQXR0YWNobWVudFR5cGUgPT09IEF0dGFjaG1lbnRUeXBlLkZJTEUgPyAnZG93bmxvYWQnIDogJ29wZW5faW5fbmV3JyB9fVxyXG4gICAgICB9XHJcbiAgICA8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYWN0aW9uc01lbnVcIiBtYXRUb29sdGlwPVwiQWx0cmUgb3B6aW9uaVwiPlxyXG4gICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxtYXQtbWVudSAjYWN0aW9uc01lbnU9XCJtYXRNZW51XCI+XHJcbiAgICBAZm9yIChhY3Rpb24gb2YgX3NvcnRlZE1lbnVBY3Rpb25zOyB0cmFjayBhY3Rpb24ubmFtZSkge1xyXG4gICAgQGlmICghaXNBY3Rpb25IaWRkZW4oYWN0aW9uLCBhdHQpKSB7XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFjdGlvbi5mbihhdHQpXCIgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZCA/IGFjdGlvbi5kaXNhYmxlZChhdHQpIDogZmFsc2VcIj5cclxuICAgICAgPG1hdC1pY29uIFtjb2xvcl09XCJhY3Rpb24uaWNvbiA9PT0gJ2RlbGV0ZScgPyAnd2FybicgOiB1bmRlZmluZWRcIj5cclxuICAgICAgICB7eyBhY3Rpb24uaWNvbiB9fVxyXG4gICAgICA8L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj57eyBhY3Rpb24ubmFtZSB9fTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgfVxyXG4gIDwvbWF0LW1lbnU+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dDcm9wSW1hZ2U+XHJcbiAgPGRpdiBzdHlsZT1cIm92ZXJmbG93LXg6IGhpZGRlblwiIFtuZ0NsYXNzXT1cImNyb3BEaWFsb2dDbGFzc1wiPlxyXG4gICAgPCEtLSBAaWYgKHNob3dDcm9wSW1hZ2UgPT0gdHJ1ZSkgeyAtLT5cclxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3JvcHBpZVRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZm9ybTogbmV3QXR0YWNobWVudEZvcm0gfVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIH0gLS0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPG5nLXRlbXBsYXRlICNpbmxpbmVQcmV2aWV3VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiPlxyXG4gIEBpZiAocm93LkF0dGFjaG1lbnRUeXBlICE9IEF0dGFjaG1lbnRUeXBlLkxJTksgJiYgcm93LklzSW1hZ2UpIHtcclxuICA8ZGl2IGNsYXNzPVwiaW5saW5lLXByZXZpZXctY29udGFpbmVyXCIgKGNsaWNrKT1cIm9wZW5QcmV2aWV3RGlhbG9nKHJvdylcIj5cclxuICAgIDxpbWcgW3NyY109XCInZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyAocm93LkZpbGVUaHVtYm5haWxCYXNlNjQgPyByb3cuRmlsZVRodW1ibmFpbEJhc2U2NCA6IHJvdy5GaWxlRGF0YUJhc2U2NClcIiAvPlxyXG4gIDwvZGl2PlxyXG4gIH0gQGVsc2UgaWYgKHJvdy5BdHRhY2htZW50VHlwZSAhPSBBdHRhY2htZW50VHlwZS5MSU5LICYmICFyb3cuSXNJbWFnZSkge1xyXG4gIDxkaXYgY2xhc3M9XCJpbmxpbmUtcHJldmlldy1jb250YWluZXJcIiAoY2xpY2spPVwib3BlblByZXZpZXdEaWFsb2cocm93KVwiPlxyXG4gICAgPGkgW25nQ2xhc3NdPVwiZ2V0QXR0YWNobWVudEljb24ocm93KVwiPjwvaT5cclxuICA8L2Rpdj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dQcmV2aWV3PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2Rlcm4tZGlhbG9nLWNvbnRhaW5lclwiPiBAaWYgKHNlbGVjdGVkQXR0YWNobWVudCkge1xyXG4gICAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlIGNsYXNzPVwicHJldmlldy1oZWFkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1pbmZvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWdyb3VwXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1haW4tdFwiPnt7IHByZXZpZXdMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS10XCI+e3sgc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0LWRpYWxvZy1jbG9zZSBjbGFzcz1cImNsb3NlLWJ0blwiPjxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwicHJldmlldy1jb250ZW50LWFyZWFcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLXZpZXdlci13cmFwcGVyXCI+XHJcbiAgICAgICAgQGlmIChzZWxlY3RlZEF0dGFjaG1lbnQuSXNJbWFnZSkge1xyXG4gICAgICAgIDxpbWcgY2xhc3M9XCJtYWluLXByZXZpZXctbWVkaWFcIlxyXG4gICAgICAgICAgW3NyY109XCInZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyAoc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0IHx8IHNlbGVjdGVkQXR0YWNobWVudC5GaWxlVGh1bWJuYWlsQmFzZTY0KVwiXHJcbiAgICAgICAgICBbYWx0XT1cInNlbGVjdGVkQXR0YWNobWVudC5GaWxlTmFtZVwiIC8+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBlbHNlIGlmIChzZWxlY3RlZEF0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCd2aWRlby8nKSkge1xyXG4gICAgICAgIDx2aWRlbyBjb250cm9scyBhdXRvcGxheSBwbGF5c2lubGluZSBjbGFzcz1cIm1haW4tcHJldmlldy1tZWRpYSB2aWRlby1wbGF5ZXJcIj5cclxuICAgICAgICAgIDxzb3VyY2UgW3NyY109XCJzZWxlY3RlZEF0dGFjaG1lbnQuVHJ1c3RlZFVybFwiIFt0eXBlXT1cInNlbGVjdGVkQXR0YWNobWVudC5GaWxlQ29udGVudFR5cGVcIj5cclxuICAgICAgICAgIElsIHR1byBicm93c2VyIG5vbiBzdXBwb3J0YSBpbCB2aWRlby5cclxuICAgICAgICA8L3ZpZGVvPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlmcmFtZS1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxpZnJhbWUgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZS1tb2Rlcm5cIiBbc3JjXT1cInNlbGVjdGVkQXR0YWNobWVudC5UcnVzdGVkVXJsXCJcclxuICAgICAgICAgICAgW3RpdGxlXT1cInNlbGVjdGVkQXR0YWNobWVudC5GaWxlTmFtZVwiPjwvaWZyYW1lPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cclxuXHJcbiAgICA8bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCIgY2xhc3M9XCJwcmV2aWV3LWFjdGlvbnNcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2UgY2xhc3M9XCJidG4tY2xvc2VcIj5DaGl1ZGk8L2J1dHRvbj5cclxuICAgICAgQGlmIChzZWxlY3RlZEF0dGFjaG1lbnQuQXR0YWNobWVudFR5cGUgIT09IEF0dGFjaG1lbnRUeXBlLkxJTkspIHtcclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwidmlld0F0dGFjaG1lbnQoc2VsZWN0ZWRBdHRhY2htZW50KVwiIGNsYXNzPVwiYnRuLWRvd25sb2FkXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj4gPHNwYW4+e3sgZG93bmxvYWRMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIH1cclxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIElMIFBVTFNBTlRFIERJIEFHR0lVTlRBIE5VT1ZPIEFMTEVHQVRPIC0tPlxyXG48bmctdGVtcGxhdGUgI2FkZEF0dGFjaG1lbnRCdXR0b24+XHJcbiAgPGlucHV0ICNmaWxlSW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgaWQ9XCJmaWxlX2F0dGFjaG1lbnRcIiBuYW1lPVwiZmlsZV9hdHRhY2htZW50XCIgdHlwZT1cImZpbGVcIlxyXG4gICAgKGNoYW5nZSk9XCJvbkZpbGVBZGRlZCgkZXZlbnQpXCIgW2FjY2VwdF09XCJhY2NlcHRlZEZpbGVUeXBlc1wiIFttdWx0aXBsZV09XCJsb2FkTXVsdGlwbGVGaWxlc1wiIC8+XHJcblxyXG4gIEBpZiAoYWxsb3dlZFR5cGVzICYmIGFsbG93ZWRUeXBlcy5sZW5ndGggPT0gMSAmJiAobXVsdGlwbGVBdHRhY2htZW50ID09IHRydWUgfHwgIWF0dGFjaG1lbnRzTGlzdCB8fFxyXG4gIGF0dGFjaG1lbnRzTGlzdC5sZW5ndGggPT0gMCB8fCAoYXR0YWNobWVudHNMaXN0Lmxlbmd0aCA+IDAgJiYgIWF0dGFjaG1lbnRzTGlzdFswXSkpKSB7XHJcbiAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtYi00IG1lLTUgZXFwLWF0dGFjaG1lbnRzLWFkZC1idG5cIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgIChjbGljayk9XCJhZGRGaWxlKGFsbG93ZWRUeXBlc1swXSwgZmlsZUlucHV0KVwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCI+XHJcbiAgICBAaWYgKGFsbG93ZWRUeXBlc1swXSA9PSAxKSB7IDxtYXQtaWNvbj5jbG91ZF91cGxvYWQ8L21hdC1pY29uPiB9XHJcbiAgICBAaWYgKGFsbG93ZWRUeXBlc1swXSA9PSAyKSB7IDxpIGNsYXNzPVwiZmFzIGZhLWxpbmtcIj48L2k+IH1cclxuICAgIEBpZiAoYWxsb3dlZFR5cGVzWzBdID09IDMpIHsgPGkgY2xhc3M9XCJmYS1icmFuZHMgZmEtZHJvcGJveFwiPjwvaT4gfVxyXG4gICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPlxyXG4gICAgICB7eyBhbGxvd2VkVHlwZXNbMF0gPT0gMSA/IChhZGRCdXR0b25MYWJlbCArIFwiIGZpbGVcIikgOiBhbGxvd2VkVHlwZXNbMF0gPT0gMiA/IChhZGRCdXR0b25MYWJlbCArIFwiIGxpbmtcIikgOlxyXG4gICAgICB1cGxvYWRXaXRoRHJvcGJveExhYmVsIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG5cclxuICBAaWYgKCFzZXBhcmF0ZWRVcGxvYWRCdXR0b25zICYmIGFsbG93ZWRUeXBlcyAmJiBhbGxvd2VkVHlwZXMubGVuZ3RoID4gMSAmJiAobXVsdGlwbGVBdHRhY2htZW50ID09IHRydWUgfHxcclxuICAhYXR0YWNobWVudHNMaXN0IHx8IGF0dGFjaG1lbnRzTGlzdC5sZW5ndGggPT0gMCB8fCAoYXR0YWNobWVudHNMaXN0Lmxlbmd0aCA+IDAgJiYgIWF0dGFjaG1lbnRzTGlzdFswXSkpKSB7XHJcbiAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtYi00IG1lLTUgZXFwLWF0dGFjaG1lbnRzLWFkZC1idG5cIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJhdHRhY2htZW50VHlwZU1lbnVcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiPlxyXG4gICAgQGlmIChtdWx0aXBsZUF0dGFjaG1lbnQgIT0gdHJ1ZSkgeyA8bWF0LWljb24+Y2xvdWRfdXBsb2FkPC9tYXQtaWNvbj4gfSBAZWxzZSB7IDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiB9XHJcbiAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAwcHhcIj57eyBhZGRCdXR0b25MYWJlbCB9fTwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPG1hdC1tZW51ICNhdHRhY2htZW50VHlwZU1lbnU9XCJtYXRNZW51XCI+XHJcbiAgICA8aW5wdXQgI2ltYWdlSW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgaWQ9XCJmaWxlX2F0dGFjaG1lbnRcIiBuYW1lPVwiZmlsZV9hdHRhY2htZW50XCIgdHlwZT1cImZpbGVcIlxyXG4gICAgICAoY2hhbmdlKT1cIm9uRmlsZUFkZGVkKCRldmVudClcIiBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZVR5cGVzXCIgW211bHRpcGxlXT1cImxvYWRNdWx0aXBsZUZpbGVzXCIgLz5cclxuICAgIEBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDEpKSB7XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImltYWdlSW5wdXQuY2xpY2soKVwiIGNsYXNzPVwiZXFwLWF0dGFjaG1lbnRzLWZpbGUtYnRuXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbGVcIj48L2k+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5GaWxlPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICBAaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygyKSkge1xyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgKGNsaWNrKT1cInN3aXRjaFRvQWRkaW5nTGlua01vZGUoKVwiIGNsYXNzPVwiZXFwLWF0dGFjaG1lbnRzLWxpbmstYnRuXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWxpbmtcIj48L2k+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5MaW5rPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICBAaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygzKSkge1xyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjaG9vc2VEcm9wYm94RmlsZSgpXCIgY2xhc3M9XCJlcXAtYXR0YWNobWVudHMtbGluay1idG5cIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYS1icmFuZHMgZmEtZHJvcGJveFwiPjwvaT5cclxuICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkRyb3Bib3g8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICA8L21hdC1tZW51PlxyXG4gIH1cclxuXHJcbiAgQGlmIChzZXBhcmF0ZWRVcGxvYWRCdXR0b25zICYmIGFsbG93ZWRUeXBlcyAmJiBhbGxvd2VkVHlwZXMubGVuZ3RoID4gMSAmJiAobXVsdGlwbGVBdHRhY2htZW50ID09IHRydWUgfHxcclxuICAhYXR0YWNobWVudHNMaXN0IHx8IGF0dGFjaG1lbnRzTGlzdC5sZW5ndGggPT0gMCB8fCAoYXR0YWNobWVudHNMaXN0Lmxlbmd0aCA+IDAgJiYgIWF0dGFjaG1lbnRzTGlzdFswXSkpKSB7XHJcbiAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiPlxyXG4gICAgQGlmIChhbGxvd2VkVHlwZXMuaW5jbHVkZXMoMSkpIHtcclxuICAgIDxidXR0b24gKGNsaWNrKT1cImltYWdlSW5wdXQuY2xpY2soKVwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgZXFwLWF0dGFjaG1lbnRzLWFkZC1idG5cIiBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cInNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jbG91ZC11cGxvYWRcIj48L2k+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5GaWxlPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICA8aW5wdXQgI2ltYWdlSW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgaWQ9XCJmaWxlX2F0dGFjaG1lbnRcIiBuYW1lPVwiZmlsZV9hdHRhY2htZW50XCIgdHlwZT1cImZpbGVcIlxyXG4gICAgICAoY2hhbmdlKT1cIm9uRmlsZUFkZGVkKCRldmVudClcIiBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZVR5cGVzXCIgW211bHRpcGxlXT1cImxvYWRNdWx0aXBsZUZpbGVzXCIgLz5cclxuICAgIEBpZiAoYWxsb3dlZFR5cGVzLmluY2x1ZGVzKDIpKSB7XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJzd2l0Y2hUb0FkZGluZ0xpbmtNb2RlKClcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGVxcC1hdHRhY2htZW50cy1hZGQtYnRuXCIgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWxpbmtcIj48L2k+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5MaW5rPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICBAaWYgKGFsbG93ZWRUeXBlcy5pbmNsdWRlcygzKSkge1xyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2hvb3NlRHJvcGJveEZpbGUoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgZXFwLWF0dGFjaG1lbnRzLWFkZC1idG5cIiBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cInNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYS1icmFuZHMgZmEtZHJvcGJveFwiPjwvaT5cclxuICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkRyb3Bib3g8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPG5nLXRlbXBsYXRlICNjcm9wcGllVGVtcGxhdGU+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGVybi1kaWFsb2ctY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJwcmV2aWV3LWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWluZm9cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtZ3JvdXBcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbi10XCI+e3sgY3JvcExhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLXRcIj5SZWdvbGEgbGUgZGltZW5zaW9uaSBlIGwnb3JpZW50YW1lbnRvPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhYm9ydEZpbGUoKVwiIGNsYXNzPVwiY2xvc2UtYnRuXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJwcmV2aWV3LWNvbnRlbnQtYXJlYVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY3JvcC10b29sYmFyXCI+XHJcbiAgICAgICAgQGlmIChjcm9wT3B0aW9ucy5pbmNsdWRlcygxKSkge1xyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRUb29sdGlwXT1cInJvdGF0ZUxlZnRMYWJlbFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwicm90YXRlTGVmdCgpXCI+PG1hdC1pY29uPnJvdGF0ZV9sZWZ0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0VG9vbHRpcF09XCJyb3RhdGVSaWdodExhYmVsXCJcclxuICAgICAgICAgIChjbGljayk9XCJyb3RhdGVSaWdodCgpXCI+PG1hdC1pY29uPnJvdGF0ZV9yaWdodDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBpZiAoY3JvcE9wdGlvbnMuaW5jbHVkZXMoMikpIHtcclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0VG9vbHRpcF09XCJmbGlwSG9yaW56b250YWxMYWJlbFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZmxpcEhvcml6b250YWwoKVwiPjxtYXQtaWNvbj5mbGlwX2hvcml6b250YWw8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRUb29sdGlwXT1cImZsaXBWZXJ0aWNhbExhYmVsXCJcclxuICAgICAgICAgIChjbGljayk9XCJmbGlwVmVydGljYWwoKVwiPjxtYXQtaWNvbj5mbGlwX3ZlcnRpY2FsPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIlJlc2V0XCJcclxuICAgICAgICAgIChjbGljayk9XCJyZXN0b3JlT3JpZ2luYWxEaW1lbnNpb25zKClcIj48bWF0LWljb24+cmVwbGF5PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtdmlld2VyLXdyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3JvcC1jb250YWluZXItbW9kZXJuXCI+XHJcbiAgICAgICAgICA8aW1hZ2UtY3JvcHBlciBbaW1hZ2VGaWxlXT1cInNlbGVjdGVkRmlsZVwiIFttYWludGFpbkFzcGVjdFJhdGlvXT1cImZhbHNlXCIgW2NhbnZhc1JvdGF0aW9uXT1cImNhbnZhc1JvdGF0aW9uXCJcclxuICAgICAgICAgICAgW3RyYW5zZm9ybV09XCJ0cmFuc2Zvcm1cIiBmb3JtYXQ9XCJwbmdcIiAoaW1hZ2VDcm9wcGVkKT1cImltYWdlQ3JvcHBlZCgkZXZlbnQpXCIgW3Jlc2l6ZVRvV2lkdGhdPVwiY3VzdG9tV2lkdGhcIlxyXG4gICAgICAgICAgICBbcmVzaXplVG9IZWlnaHRdPVwiY3VzdG9tSGVpZ2h0XCIgW291dHB1dF09XCInYmFzZTY0J1wiIFtjb250YWluV2l0aGluQXNwZWN0UmF0aW9dPVwidHJ1ZVwiIFtvbmx5U2NhbGVEb3duXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbYWxpZ25JbWFnZV09XCInY2VudGVyJ1wiPlxyXG4gICAgICAgICAgPC9pbWFnZS1jcm9wcGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG5cclxuICAgIDxtYXQtZGlhbG9nLWFjdGlvbnMgYWxpZ249XCJlbmRcIiBjbGFzcz1cInByZXZpZXctYWN0aW9uc1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImFib3J0RmlsZSgpXCIgY2xhc3M9XCJidG4tY2xvc2VcIj57eyBhYm9ydExhYmVsIH19PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNvbmZpcm1BZGRBdHRhY2htZW50KClcIiBjbGFzcz1cImJ0bi1kb3dubG9hZFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+IHt7IGNvbmZpcm1MYWJlbCB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBGT1JNIERJIEFHR0lVTlRBIERJIFVOIExJTksgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYWRkaW5nTGlua1RlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2Rlcm4tZGlhbG9nLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlIGNsYXNzPVwicHJldmlldy1oZWFkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1pbmZvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInR5cGUtaWNvbi13cmFwcGVyXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+bGluazwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWdyb3VwXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1haW4tdFwiPkFnZ2l1bmdpIHVuIGxpbms8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtdFwiPkluc2VyaXNjaSBsJ1VSTCBkZWxsYSByaXNvcnNhIHdlYjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2UgY2xhc3M9XCJjbG9zZS1idG5cIj48bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cImFkZC1saW5rLW1vZGVybi1jb250ZW50XCI+XHJcbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwibmV3QXR0YWNobWVudEZvcm1cIiBjbGFzcz1cImFkZC1saW5rLWZvcm1cIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctMTAwIG10LTNcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+VVJMIGRlbCBjb2xsZWdhbWVudG88L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJmaWxlUGF0aFwiIHBsYWNlaG9sZGVyPVwiaHR0cHM6Ly8uLi5cIiByZXF1aXJlZD5cclxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXg+bGFuZ3VhZ2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+VGl0b2xvIChvcHppb25hbGUpPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZmlsZU5hbWVcIiBwbGFjZWhvbGRlcj1cIkVzLiBEb2N1bWVudG8gUHJvZ2V0dG9cIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXg+dGl0bGU8L21hdC1pY29uPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG5cclxuICAgIDxtYXQtZGlhbG9nLWFjdGlvbnMgYWxpZ249XCJlbmRcIiBjbGFzcz1cInByZXZpZXctYWN0aW9uc1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWRpYWxvZy1jbG9zZSBjbGFzcz1cImJ0bi1jbG9zZVwiPkFubnVsbGE8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbbWF0LWRpYWxvZy1jbG9zZV09XCJuZXdBdHRhY2htZW50Rm9ybS52YWx1ZVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm5ld0F0dGFjaG1lbnRGb3JtLmludmFsaWRcIiBjbGFzcz1cImJ0bi1kb3dubG9hZFwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBZ2dpdW5naVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|