@universis/ngx-tables 6.0.0 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/universis-ngx-tables.umd.js +2 -2
- package/bundles/universis-ngx-tables.umd.js.map +1 -1
- package/bundles/universis-ngx-tables.umd.min.js +1 -1
- package/bundles/universis-ngx-tables.umd.min.js.map +1 -1
- package/esm2015/lib/components/advanced-table/advanced-table.component.js +2 -2
- package/esm5/lib/components/advanced-table/advanced-table.component.js +2 -2
- package/fesm2015/universis-ngx-tables.js +3 -3
- package/fesm2015/universis-ngx-tables.js.map +1 -1
- package/fesm5/universis-ngx-tables.js +3 -3
- package/fesm5/universis-ngx-tables.js.map +1 -1
- package/package.json +1 -1
|
@@ -2655,7 +2655,7 @@
|
|
|
2655
2655
|
/** @type {?} */
|
|
2656
2656
|
var columnDefinition = {
|
|
2657
2657
|
data: column.property || column.name,
|
|
2658
|
-
defaultContent: column.
|
|
2658
|
+
defaultContent: column.defaultContent != null ? column.defaultContent : '',
|
|
2659
2659
|
title: _this.translator.transform(column.title),
|
|
2660
2660
|
sortable: column.hasOwnProperty('sortable') ? column.sortable : true,
|
|
2661
2661
|
visible: column.hasOwnProperty('hidden') ? !column.hidden : true,
|
|
@@ -8158,4 +8158,4 @@
|
|
|
8158
8158
|
|
|
8159
8159
|
})));
|
|
8160
8160
|
|
|
8161
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2lzLW5neC10YWJsZXMudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvY29sdW1uLXNlbGVjdG9yL2NvbHVtbi1zZWxlY3Rvci5zZXJ2aWNlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2J0bmV4cC5kaXJlY3RpdmUudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1saXN0L2FkdmFuY2VkLWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtcm93LWFjdGlvbi9hZHZhbmNlZC1yb3ctYWN0aW9uLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC1iYXNlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VhcmNoLWZvcm0vYWR2YW5jZWQtc2VhcmNoLWZvcm0uY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXNlbGVjdC9hZHZhbmNlZC1zZWxlY3Quc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXJlc29sdmVycy50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNldHRpbmdzLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL3RhYmxlLXNpbXBsZS1oZWFkZXIvdGFibGUtc2ltcGxlLWhlYWRlci5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9hZHZhbmNlZC10YWJsZS1lZGl0b3IuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3NlcnZpY2VzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5zZXJ2aWNlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtYWdncmVnYXRvci9hZHZhbmNlZC1hZ2dyZWdhdG9yLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdC9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWRkLWl0ZW1zL2FkZC1pdGVtcy5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvcGlwZXMvYWR2YW5jZWQtYWdncmVnYXRvci5waXBlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3BpcGVzL2FkdmFuc2VkLWFnZ3JlZ2F0b3ItbGlzdC10aXRsZS1wYXJzZS5waXBlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2kxOG4vdGFibGVzLmVsLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2kxOG4vdGFibGVzLmVuLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2FjdGlvbnMvdGFibGUuYWN0aW9ucy50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9yZWR1Y2Vycy9pbmRleC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2UtdGFibGUtc3RhdGUuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2RpcmVjdGl2ZXMvYWR2YW5jZS1zZWFyY2gtc3RhdGUuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2RpcmVjdGl2ZXMvYWR2YW5jZWQtc2VhcmNoLXJvdXRlci1zdGF0ZS5kaXJlY3RpdmUudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvdGFibGVzLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IHlbb3BbMF0gJiAyID8gXCJyZXR1cm5cIiA6IG9wWzBdID8gXCJ0aHJvd1wiIDogXCJuZXh0XCJdKSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFswLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAoIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyAgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKG9bbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH07IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl07XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiaW1wb3J0IHsgdGVtcGxhdGUsIGF0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0ICogYXMgSVNPNjM5MSBmcm9tICdpc28tNjM5LTEvYnVpbGQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciBpbXBsZW1lbnRzIFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB7XG5cbiAgcHVibGljIHN0YXRpYyB0ZW1wbGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIChkYXRhOiBhbnkpID0+IHN0cmluZz4oKTtcblxuICBwcm90ZWN0ZWQgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgcHVibGljIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcHVibGljIGRlZmF1bHRDb250ZW50Pzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0U3RyaW5nPzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0dGVyPzogc3RyaW5nO1xuICBwdWJsaWMgaGlkZGVuPzogYm9vbGVhbjtcbiAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyBvcmRlcj86IHN0cmluZztcbiAgcHVibGljIHByb3BlcnR5Pzogc3RyaW5nO1xuICBwdWJsaWMgc29ydGFibGU/OiBib29sZWFuO1xuICBwdWJsaWMgdGl0bGUgPSAnJztcbiAgcHVibGljIGZvcm1hdE9wdGlvbnM/OiBhbnk7XG4gIHB1YmxpYyBhY3Rpb25zPzogQXJyYXk8YW55PjtcblxuICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlKGV4cHI6IHN0cmluZyk6IChkYXRhOiBhbnkpID0+IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlQ2FjaGUuZ2V0KGV4cHIpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXN1bHQgPSB0ZW1wbGF0ZShleHByKTtcbiAgICBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZUNhY2hlLnNldChleHByLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55O1xuXG4gIHByb3RlY3RlZCBjcmVhdGVVcmxUcmVlKGRhdGE6IGFueSwgb3B0aW9uczogeyBjb21tYW5kczogYW55W10sIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzIH0pOiBVcmxUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmNvbW1hbmRzKSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSB0aGlzLmluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICBjb25zdCByb3V0ZXI6IFJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICBjb25zdCBjb21tYW5kcyA9IG9wdGlvbnMuY29tbWFuZHMubWFwKChjb21tYW5kKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoY29tbWFuZCkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQub3V0bGV0cykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmRPdXRsZXRzID0ge307XG4gICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZC5vdXRsZXRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29tbWFuZC5vdXRsZXRzLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG91dGxldCA9IGNvbW1hbmQub3V0bGV0c1trZXldO1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvdXRsZXQpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbW1hbmRPdXRsZXRzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBvdXRsZXQubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4KShkYXRhKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21tYW5kT3V0bGV0cywga2V5LCB7XG4gICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogb3V0bGV0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGxldHM6IGNvbW1hbmRPdXRsZXRzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICBsZXQgcmVwbGFjZVVybCA9IHRydWU7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtRXh0cmFzID0gb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzICYmIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5xdWVyeVBhcmFtcztcbiAgICAgIGlmIChxdWVyeVBhcmFtRXh0cmFzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1FeHRyYXMpLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHF1ZXJ5UGFyYW1FeHRyYXNba2V5XTtcbiAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGV4dCkoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLnJlcGxhY2VVcmwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJlcGxhY2VVcmwgPSBvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMucmVwbGFjZVVybDtcbiAgICAgIH1cbiAgICAgIGxldCBza2lwTG9jYXRpb25DaGFuZ2UgPSBmYWxzZTtcbiAgICAgIGlmIChvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMgJiYgdHlwZW9mIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZSA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2U7XG4gICAgICB9XG5cbiAgICAgIGxldCBmcmFnbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLmZyYWdtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmcmFnbWVudCA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5mcmFnbWVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLFxuICAgICAgICB7XG4gICAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2UsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25BZHZhbmNlZENvbHVtbkFmdGVyUmVuZGVyIHtcbiAgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICByZXR1cm4gYXQocm93LCBjb2x1bW4uZGF0YS5yZXBsYWNlKC9cXC8vZywgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1dHRvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsIHx8IHRoaXMuaW5qZWN0b3IgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyBnZXQgZm9ybWF0IG9wdGlvbnNcbiAgICBjb25zdCBmb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBidXR0b25DbGFzczogJ2J0biBidG4tZGVmYXVsdCcsXG4gICAgfSwgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAvLyBnZXQgdGV4dCBjb250ZW50XG4gICAgbGV0IGJ1dHRvblRleHQ6IHN0cmluZztcbiAgICBsZXQgYnV0dG9uVGl0bGUgPSAnJztcbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICBidXR0b25UZXh0ID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChmb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidXR0b25UZXh0ID0gZm9ybWF0T3B0aW9ucy5idXR0b25Db250ZW50O1xuICAgIH1cbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UaXRsZSkge1xuICAgICAgYnV0dG9uVGl0bGUgPSB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KGZvcm1hdE9wdGlvbnMuYnV0dG9uVGl0bGUpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvcm1hdE9wdGlvbnMuY29tbWFuZHMpKSB7XG4gICAgICBjb25zdCByb3V0ZXJMaW5rID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIjJHtyb3V0ZXJMaW5rfVwiPiR7YnV0dG9uVGV4dH08L2E+YDtcbiAgICB9XG4gICAgLy8gYW5kIHJldHVybiBidXR0b25cbiAgICBjb25zdCBocmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpO1xuICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIke2hyZWZ9XCI+JHtidXR0b25UZXh0fTwvYT5gO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHsoQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpKX1cIj4ke2RhdGF9PC9hPmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkxpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlclxuICBpbXBsZW1lbnRzIE9uQWR2YW5jZWRDb2x1bW5BZnRlclJlbmRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nIGRhdGEtdHlwZT0nc3R1ZGVudCcgPlxuICAgICAgICAgICAgICAgICAgICA8YSBpZD1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhLTJ4IHRleHQtZG90c1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCI+XG4gICAgICAgICAgICAgICAgICAgICAke2FjdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4LnR5cGUgPT09ICdkaXZpZGVyJykge1xuICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4LmZvcm1hdE9wdGlvbnMgJiYgeC5mb3JtYXRPcHRpb25zLmNvbW1hbmRzKSB7XG4gICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuY3JlYXRlVXJsVHJlZShyb3csIHguZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIke0FkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKHguaHJlZikocm93KX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+YDtcbiAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gYXNzaWduIGJvb3RzdHJhcCBkcm9wZG93biAoPylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIGxldCBidXR0b25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICAgIC8vIGlmIGJ1dHRvbiB0ZXh0IGlzIGEgbGl0ZXJhbCBleHByZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dC5pbmNsdWRlcygnJHsnKSkge1xuICAgICAgICAgIC8vIHVzZSB0ZW1wbGF0ZVxuICAgICAgICAgIGJ1dHRvblRleHQgPSBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dCkocm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UgdHJhbnNsYXRlIGl0XG4gICAgICAgICAgYnV0dG9uVGV4dCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQodGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYnV0dG9uVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMgJiYgdGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRpdGxlKSB7XG4gICAgICAgIGJ1dHRvblRpdGxlID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGJ1dHRvblRpdGxlZXh0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJ1dHRvbkNsYXNzID0gKHRoaXMuZm9ybWF0T3B0aW9ucyAmJiB0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3MpIHx8ICdidG4gYnRuLWxpZ2h0JztcbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9IGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiJHtidXR0b25UaXRsZX1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25NZW51QnV0dG9uLSR7ZGF0YX1cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2J1dHRvblRleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50eXBlID09PSAnZGl2aWRlcicpIHtcbiAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeC5jb21tYW5kcykge1xuICAgICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmNyZWF0ZVVybFRyZWUocm93LCB4KTtcbiAgICAgICAgICByZXR1cm4gYDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiJHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4LmhyZWYpKHJvdyl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5pbmplY3RvciAmJiB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KHgudGl0bGUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICB9KVxuICAgICAgICAgIC5qb2luKCcnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihjZWxsOiBhbnksIGNlbGxEYXRhOiBhbnksIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIGFzc2lnbiBib290c3RyYXAgZHJvcGRvd24gKD8pXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucyB8fCBbXTtcbiAgICAgIGxldCBpbmRleCA9IDE7XG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aW9uLCB7XG4gICAgICAgICAgbmFtZTogYWN0aW9uLm5hbWUgfHwgYGFjdGlvbiR7aW5kZXh9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYnV0dG9uQ2xhc3MgPSAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25DbGFzcykgfHwgJ2J0biBidG4tbGlnaHQnO1xuICAgICAgLy8gcmV0dXJuIHRoZSBkcm9wZG93biBtZW51IHdpdGggMyBkb3RzXG4gICAgICBjb25zdCBkZWZhdWx0QWN0aW9uID0gYWN0aW9uc1swXTtcbiAgICAgIGxldCBkZWZhdWx0QWN0aW9uSHJlZjogc3RyaW5nO1xuICAgICAgaWYgKGRlZmF1bHRBY3Rpb24gJiYgZGVmYXVsdEFjdGlvbi5jb21tYW5kcykge1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgZGVmYXVsdEFjdGlvbik7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gJyMnICsgKHVybFRyZWUgJiYgdXJsVHJlZS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoZGVmYXVsdEFjdGlvbi5ocmVmKShyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9XCIgaHJlZj1cIiR7ZGVmYXVsdEFjdGlvbkhyZWZ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoZGVmYXVsdEFjdGlvbi50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCIke2J1dHRvbkNsYXNzfSBkcm9wZG93bi10b2dnbGUgZHJvcGRvd24tdG9nZ2xlLXNwbGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4ke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVG9nZ2xlIERyb3Bkb3duJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50aXRsZSA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHguY29tbWFuZHMpIHtcbiAgICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgeCk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiIyR7dXJsVHJlZSAmJiB1cmxUcmVlLnRvU3RyaW5nKCl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiR7QWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoeC5ocmVmKShyb3cpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgfSlcbiAgICAgICAgICAuam9pbignJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhc3NpZ24gYm9vdHN0cmFwIGRyb3Bkb3duICg/KVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3RSb3dGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBfdHBsID0gYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lXCIgdHlwZT1cImNoZWNrYm94XCJcbiBpZD1cInMtJHttZXRhLnJvd31cIiAvPjxsYWJlbCBmb3I9XCJzLSR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5gO1xuICAgICAgcmV0dXJuIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKF90cGwpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdFN0cmluZyBhcyBzdHJpbmcpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRydWVGYWxzZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcblxuICBwdWJsaWMgcmVuZGVyKGRhdGEsIHR5cGUsIHJvdywgbWV0YSkge1xuICAgIHJldHVybiBkYXRhID8gKHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVHJ1ZUZhbHNlLmxvbmcuWWVzJykpIDpcbiAgICAgICh0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoJ1RydWVGYWxzZS5sb25nLk5vJykpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5kZWNsYXJlIGludGVyZmFjZSBUcmFuc2xhdGlvbkZvcm1hdHRlclRlbXBsYXRlIHtcbiAgdHJhbnNsYXRlVGVtcGxhdGU/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgcm93OiBhbnksIG1ldGE6IGFueSk6IGFueSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbjogVHJhbnNsYXRpb25Gb3JtYXR0ZXJUZW1wbGF0ZSA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGRhdGEgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChcbiAgICAgICAgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKSh7XG4gICAgICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVW5rbm93bicpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEgJiYgdGhpcy5pbmplY3Rvcikge1xuICAgICAgY29uc3QgZGF0ZVBpcGU6IERhdGVQaXBlID0gbmV3IERhdGVQaXBlKHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmN1cnJlbnRMYW5nKTtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVxcK1xcZHsyfSQvLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShuZXcgRGF0ZShkYXRhICsgJzowMCcpLCB0aGlzLmZvcm1hdFN0cmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGEsIHRoaXMuZm9ybWF0U3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmdDbGFzc0Zvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIC8vIGdldCBmb3JtYXRPcHRpb25zXG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG5nQ2xhc3MgPSB0aGlzLmZvcm1hdE9wdGlvbnMubmdDbGFzcztcbiAgICAgICAgLy8gY2hlY2sgY29uZGl0aW9uIGZvciBlYWNoIGtleVxuICAgICAgICBjb2x1bW4ubmdDbGFzc1RlbXBsYXRlcyA9IGNvbHVtbi5uZ0NsYXNzVGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZ0NsYXNzKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKG5nQ2xhc3Nba2V5XSkocm93KTtcbiAgICAgICAgICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbihgcmV0dXJuICR7cmVzdWx0fTtgKTtcbiAgICAgICAgICAvLyBpZiBjb25kaXRpb24gcmV0dXJucyB0cnVlIGFkZCBjbGFzc1xuICAgICAgICAgIGlmIChmbigpID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHtrZXl9XCI+JHtkYXRhfTwvc3Bhbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgcmV0dXJuIElTTzYzOTEuZ2V0TmF0aXZlTmFtZShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIge1xuXG4gIHB1YmxpYyB2YWx1ZXMgPSB7IH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVQaXBlKCk7XG4gIH1cblxuICBidWlsZEZpbHRlcihmaWx0ZXIpIHtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKGZpbHRlciwgdGhpcy52YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFzeW5jQnVpbGRGaWx0ZXIoZmlsdGVyKSB7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShmaWx0ZXIsIGF3YWl0IHRoaXMuZ2V0VmFsdWVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cblxufVxuIiwiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWNvbHVtbi1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgIC5mb3JtLXNlbGVjdCB7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgfVxuICAgIC5mb3JtLXNlbGVjdCAqIHtcbiAgICAgICAgcGFkZGluZzogNXB4IDVweDtcbiAgICB9XG4gICAgLmJ0bi5kaXNhYmxlZCwgLmJ0bjpkaXNhYmxlZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbHVtblNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgY29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdO1xuICAgIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfVtdO1xuXG4gICAgQFZpZXdDaGlsZCgnbW92ZVVwQnV0dG9uJykgbW92ZVVwQnV0dG9uPzogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdtb3ZlRG93bkJ1dHRvbicpIG1vdmVEb3duQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICAgIGF2YWlsYWJsZUNvbHVtbnNDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgc2VsZWN0ZWRDb2x1bW5zQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuXG4gICAgcHVibGljIGNoYW5naW5nID0gZmFsc2U7XG5cbiAgICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUNoYW5nZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ29rJyk7XG4gICAgfVxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9tb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52aXNpYmxlO1xuICAgICAgICAgICAgfSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4IDwgYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4ID4gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBsZXQgbW92ZUluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IGNvbHVtbi5rZXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IG1vdmVJbmRleDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IGZpbmRJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgY29sdW1uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuYXZhaWxhYmxlQ29sdW1uc0NvbnRyb2wudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmluZENvbHVtbi5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaW5kQ29sdW1uLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgbGFzdCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWRJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBzZWxlY3RlZFtzZWxlY3RlZC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyByZXNldCBjb250cm9sXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5yZXNldCgpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRJbmRleCA+IC0xICYmIGxhc3RTZWxlY3RlZEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5wYXRjaFZhbHVlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tsYXN0U2VsZWN0ZWRJbmRleCArIDFdLmtleVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlVXAoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbZmluZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCAtIDEgLCAwLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZURvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVEb3duQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVEb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuY29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCAmJiBmaW5kSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ZpbmRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXggKyAxICwgMCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlRG93bkJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlRG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZWxlY3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAvL1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH0pOlxuICAgIFByb21pc2U8e3Jlc3VsdDogc3RyaW5nLCBjb2x1bW5zPzogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyxcbiAgICAgIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdfT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuX21vZGFsLm9wZW5Nb2RhbENvbXBvbmVudChDb2x1bW5TZWxlY3RvckNvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtbGcgbW9kYWwtdGFibGUnLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29sdW1uU2VsZWN0b3JDb21wb25lbnQgPSBtb2RhbFJlZi5jb250ZW50O1xuICAgICAgICBjb21wb25lbnRSZWYuZGlzbWlzcy5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgY29sdW1uczogY29tcG9uZW50UmVmLmNvbHVtbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkVGFibGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9hY3RpdmVUYWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsYXN0IHRhYmxlIHRoYXQgd2FzIHNldCBhcyBhY3RpdmVcclxuICAgKiBOb3RlOiBFbWl0dGVkIHZhbHVlIG1heSBiZSB1bmRlZmluZWQgKGUuZy4gcmVzZXQgb24gcm91dGUgY2hhbmdlcylcclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgbGFzdEFjdGl2ZVRhYmxlOlxyXG4gICAgQmVoYXZpb3JTdWJqZWN0PEFkdmFuY2VkVGFibGVDb21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICAqIE9taXQgdGhlIGxhc3QgZW1pdHRlZCB2YWx1ZSB0byBvYnNlcnZlIG9ubHkgbmV3IGFjdGl2ZSB0YWJsZSBjaGFuZ2VzXHJcbiAgICogTm90ZTogRW1pdHRlZCB2YWx1ZSBtYXkgYmUgdW5kZWZpbmVkIChlLmcuIHJlc2V0IG9uIHJvdXRlIGNoYW5nZXMpXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IG5leHRBY3RpdmVUYWJsZTpcclxuICAgIE9ic2VydmFibGU8QWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZD4gPSB0aGlzLmxhc3RBY3RpdmVUYWJsZS5waXBlKHNraXAoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICBfcm91dGVyLmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBhY3RpdmVUYWJsZSgpOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVUYWJsZTtcclxuICB9XHJcblxyXG4gIHNldCBhY3RpdmVUYWJsZSh0YWJsZUNvbXBvbmVudDogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYWN0aXZlVGFibGUgPSB0YWJsZUNvbXBvbmVudDtcclxuICAgIC8vIHByb3ZpZGUgY2hhbmdlIHRvIG9ic2VydmVyc1xyXG4gICAgdGhpcy5sYXN0QWN0aXZlVGFibGUubmV4dCh0aGlzLl9hY3RpdmVUYWJsZSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclNlcnZpY2UsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDbGllbnREYXRhUXVlcnlhYmxlLCBSZXNwb25zZUVycm9yfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IE1BWF9FWFBPUlRfSVRFTVMgPSA1MDA7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb24ge1xuICB0YWJsZXM/OiB7XG4gICAgZXhwb3J0TGltaXQ/OiBudW1iZXJcbiAgfTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICcudW5pdmVyc2lzLWJ0bi1leHBvcnQnXG59KVxuZXhwb3J0IGNsYXNzIEJ0bkV4cERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlnOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGNsaWNrRXZlbnQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmV4cG9ydFZpZXcoKTtcbiAgICAgIC8qXG4gICAgICBjb25zdCBsYXN0UXVlcnkgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5sYXN0UXVlcnk7XG4gICAgICBjb25zdCB0YWJsZUNvbmZpZyA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmNvbmZpZztcbiAgICAgIGNvbnN0IHNlcnZpY2VIZWFkZXJzID0gdGhpcy5fY29udGV4dC5nZXRTZXJ2aWNlKCkuZ2V0SGVhZGVycygpO1xuICAgICAgY29uc3QgcXVlcnlNb2RlbCA9IGxhc3RRdWVyeS5nZXRNb2RlbCgpO1xuICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbChxdWVyeU1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBsYXN0UXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICBxdWVyeSA9IHRoaXMuY29uc3RydWN0UXVlcnkocXVlcnksIHF1ZXJ5UGFyYW1zLCB0YWJsZUNvbmZpZywgc2VydmljZUhlYWRlcnMpO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBzZXR0aW5nc1xuICAgICAgY29uc3QgZXhwb3J0U2V0dGluZ3MgPSB0aGlzLl9jb25maWcuc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgbWF4RXhwb3J0SXRlbXMgPSBleHBvcnRTZXR0aW5ncyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0O1xuICAgICAgaWYgKG1heEV4cG9ydEl0ZW1zICYmIHR5cGVvZiBtYXhFeHBvcnRJdGVtcyA9PT0gJ251bWJlcicgJiYgbWF4RXhwb3J0SXRlbXMgPiAwKSB7XG4gICAgICAgIHF1ZXJ5LnNraXAoMCkudGFrZShtYXhFeHBvcnRJdGVtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeS5za2lwKDApLnRha2UoTUFYX0VYUE9SVF9JVEVNUyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdHMgdGhlIFVSSSBiYXNlZCBvbiB0aGUgd2F5IEB0aGVtb3N0IGRvZXNcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uc3RydWN0VVJMKHF1ZXJ5KTtcbiAgICAgIHRoaXMuZG93bmxvYWRGaWxlKHVybCwgcXVlcnkuZ2V0U2VydmljZSgpLmdldEhlYWRlcnMoKSwgcXVlcnkuZ2V0TW9kZWwoKSk7ICovXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHF1ZXJ5IGJhc2VkIG9uXG4gICAqIHRoZSBhY3RpdmUgZmlsdGVycyBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gcGFyYW1zOiBUaGUgZmlsdGVycyBvZiB0aGUgbGFzdCBxdWVyeSBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEByZXR1cm4gQ2xpZW50RGF0YVF1ZXJ5YWJsZVxuICAgKi9cbiAgc2V0UGFyYW1zKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBwYXJhbXMpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBpZiAocGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBxdWVyeS5zZXRQYXJhbShrZXksIHBhcmFtc1trZXldKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaGVhZGVycyB0byB0aGUgcXVlcnkgYmFzZWQgb25cbiAgICogdGhlIGRlZmF1bHQgaGVhZGVycyBvZiB0aGUgRGF0YUNvbnRleHRcbiAgICogYW5kIGFwcGVuZGluZyB0aGUgYWNjZXB0IGhlYWRlciB0byBnZXRcbiAgICogYW4geGxzeCBmaWxlIGZyb20gdGhlIEFQSVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBzZXRIZWFkZXJzKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBoZWFkZXJzOiBIZWFkZXJzKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHF1ZXJ5LmdldFNlcnZpY2UoKS5zZXRIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNldHMgYSBoZWFkZXIgdG8gYWNjZXB0IHhsc3ggZmlsZXNcbiAgICBxdWVyeS5nZXRTZXJ2aWNlKCkuc2V0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgc2VsZWN0IHBhcmFtZXRlciBvZiB0aGVcbiAgICogQ2xpZW50RGF0YVF1ZXJ5IGJ5IHJlcGxhY2luZyB0aGUgdGFyZ2V0IG5hbWVcbiAgICogb2YgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBsb2NhbGl6ZWQgdHJhbnNsYXRpb25cbiAgICogb2YgdGhhdCBwcm9wZXJ0eSBvbiB0aGUgYWR2YW5jZWQgdGFibGVkXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeVBhcmFtKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCB0YWJsZUNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgbGV0IHNlbGVjdFF1ZXJ5ID0gcXVlcnkuZ2V0UGFyYW1zKCkuJHNlbGVjdDtcbiAgICBsZXQgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5LnNwbGl0KCcsJyk7XG4gICAgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5QXJyYXkubWFwKChzZWxlY3QpID0+IHtcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VsZWN0LnNwbGl0KCcgJyk7XG4gICAgICBpZiAod29yZHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICh0YWJsZUNvbmZpZyAmJiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSA9PT0gd29yZHNbMl0gJiYgY29sdW1uLnRpdGxlKSB7XG4gICAgICAgICAgICAgIHdvcmRzWzJdID0gYFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4udGl0bGUpfVwiYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnByb3BlcnR5ID09PSB3b3Jkc1syXSkge1xuICAgICAgICAgICAgICB3b3Jkc1syXSA9IGBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMl0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKHRhYmxlQ29uZmlnICYmIHRhYmxlQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHdvcmRzWzBdICYmIGNvbHVtbi50aXRsZSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLnRpdGxlKX1cImA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ubmFtZSA9PT0gd29yZHNbMF0gJiYgY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIHdvcmRzWzBdID0gYCR7d29yZHNbMF19IGFzIFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4ucHJvcGVydHkpfVwiYDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmRzWzBdID09PSBjb2x1bW4ubmFtZSAmJiB3b3Jkc1swXSA9PT0gJ2lkJyAmJiBjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29yZHNbMF0gPT0gY29sdW1uLm5hbWUgfHwgd29yZHNbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMF0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgICB9KTtcbiAgICBzZWxlY3RRdWVyeSA9IHNlbGVjdFF1ZXJ5QXJyYXkuam9pbignLCcpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0Jywgc2VsZWN0UXVlcnkgKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZmV0Y2ggVVJMIGJhc2VkIHRoZSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcmV0dXJuIFN0cmluZ1xuICAgKi9cbiAgY29uc3RydWN0VVJMKHF1ZXJ5KTogU3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVVJMID0gcXVlcnkuZ2V0U2VydmljZSgpLmdldEJhc2UoKTtcbiAgICBsZXQgdXJsID0gYmFzZVVSTC5lbmRzV2l0aCgnLycpID8gKGJhc2VVUkwgKyBxdWVyeS5nZXRNb2RlbCgpICsgJz8nKSA6IChiYXNlVVJMICsgJy8nICsgcXVlcnkuZ2V0TW9kZWwoKSArICc/Jyk7XG4gICAgT2JqZWN0LmtleXMocXVlcnkuZ2V0UGFyYW1zKCkpLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICB1cmwgKz0ga2V5ICsgJz0nICsgcXVlcnkuZ2V0UGFyYW1zKClba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCArPSAnJicgKyBrZXkgKyAnPScgKyBxdWVyeS5nZXRQYXJhbXMoKVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgcXVlcnkgYnkgc2V0dGluZyB0aGUgcGFyYW1ldGVycyBvZiB0aGVcbiAgICogYWR2YW5jZWQgdGFibGUncyBhY3RpdmUgZmlsdGVycywgc2V0cyB0aGUgbmVjZXNzYXJ5IGhlYWRlcnNcbiAgICogYW5kIGJ1aWxkIHRoZSBzZWxlY3QgcGFyYW1ldGVyIG9mIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIHBhcmFtczogVGhlIGZpbHRlcnMgb2YgdGhlIGxhc3QgcXVlcnkgb2YgdGhlIGFjdGl2YXRlZCB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeShxdWVyeSwgcGFyYW1zLCB0YWJsZUNvbmZpZywgaGVhZGVyczogSGVhZGVycykge1xuICAgIGxldCBfcXVlcnkgPSB0aGlzLnNldFBhcmFtcyhxdWVyeSwgcGFyYW1zKTtcbiAgICBfcXVlcnkgPSB0aGlzLnNldEhlYWRlcnMoX3F1ZXJ5LCBoZWFkZXJzKTtcbiAgICBfcXVlcnkgPSB0aGlzLmNvbnN0cnVjdFF1ZXJ5UGFyYW0oX3F1ZXJ5LCB0YWJsZUNvbmZpZyk7XG4gICAgcmV0dXJuIF9xdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCBzYXZlcyB0aGUgeGxzeCBmaWxlXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIHNlcnZpY2VIZWFkZXJzOiBUaGUgaGVhZGVycyB0byBhcHBlbmQgdG8gdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSBtb2RlbE5hbWU6IFRoZSBtb2RlbCBuYW1lIG9mIHRoZSBhZHZhbmNlZCB0YWJsZVxuICAgKi9cbiAgZG93bmxvYWRGaWxlKHVybCwgc2VydmljZUhlYWRlcnM6IEhlYWRlcnMsIG1vZGVsTmFtZSkge1xuICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgZmV0Y2goZW5jb2RlVVJJKHVybCksIHtcbiAgICAgIGhlYWRlcnM6IHNlcnZpY2VIZWFkZXJzLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJ1xuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbiAgICB9KS50aGVuKGJsb2IgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0VXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICBhLmhyZWYgPSBvYmplY3RVcmw7XG4gICAgICBjb25zdCBkb3dubG9hZE5hbWUgPSBgJHttb2RlbE5hbWV9Lnhsc3hgO1xuICAgICAgYS5kb3dubG9hZCA9IGRvd25sb2FkTmFtZTtcbiAgICAgIC8vIHRoaXMgYWRkcyBzdXBwb3J0IGZvciBJRSBhbmQgTVMgRWRnZSAodXAgdG8gdmVyc2lvbiA0NC4xOTA0MSlcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yICYmICh3aW5kb3cubmF2aWdhdG9yIGFzIGFueSkubXNTYXZlT3JPcGVuQmxvYikge1xuICAgICAgICAod2luZG93Lm5hdmlnYXRvciBhcyBhbnkpLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgZG93bmxvYWROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgfVxuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcbiAgICAgIGEucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbiIsImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlLCBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgRXJyb3JTZXJ2aWNlLCBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7SUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcbi8vIGltcG9ydGFudCBub3RlOiB1c2UgdGhpcyBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldCc7XG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1zY3JvbGxlcic7XG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWNvbHJlb3JkZXInO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1idXR0b25zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uLCBNQVhfRVhQT1JUX0lURU1TIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcblxuLy8gcmVzdG9yZSBqcXVlcnkgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IHtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyO1xuICBkYXRhOiBBcnJheTxhbnk+O1xufVxuXG5jb25zdCBEYXRhVGFibGVzQXBpOiBhbnkgPSBqUXVlcnkuZm4uZGF0YVRhYmxlLkFwaTtcbkRhdGFUYWJsZXNBcGkucmVnaXN0ZXIoICdwcm9jZXNzaW5nKCknLCBmdW5jdGlvbiggc2hvdzogYW55ICkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCd0YWJsZScsICggY3R4OiBhbnkgKSA9PiB7XG4gICAgICAgIGN0eC5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5KCBjdHgsIHNob3cgKTtcbiAgICB9ICk7XG59KTtcblxuY29uc3QgRU1QVFlfREFUQVNFVCA9IHtcbiAgcmVjb3Jkc1RvdGFsOiAwLFxuICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gIGRhdGE6IFtdLFxufTtcblxuY2xhc3MgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBwdWJsaWMgY2hlY2tOb0NoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0YWNoKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlYXR0YWNoKCk6IHZvaWQge1xuICB9XG5cbn1cblxuZXhwb3J0IGxldCBDT0xVTU5fRk9STUFUVEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignY29sdW1uLmZvcm1hdHRlcnMnKTtcblxuZXhwb3J0IGNsYXNzIEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIFJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yJztcbiAgfVxufVxuXG5jbGFzcyBDb2x1bW5Gb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGNsYXNzPzogc3RyaW5nO1xuICBwdWJsaWMgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXRTdHJpbmc/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXR0ZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW4/OiBib29sZWFuO1xuICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgcHVibGljIG9yZGVyPzogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk/OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0YWJsZT86IGJvb2xlYW47XG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBhbnksIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAvL1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlQ2FzdDxUPihpbnB1dDogYW55KTogVCB7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBjYXN0KGlucHV0OiBhbnksIGNsb25lPzogYm9vbGVhbik6IFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYW5kb21JZGVudGlmaWVyKCkge1xuICByZXR1cm4gKFxuICAgIE51bWJlcihTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMikpXG4gICkudG9TdHJpbmcoMzYpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0YWJsZSAjdGFibGUgY2xhc3M9XCJkYXRhVGFibGVcIj5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjZXJyb3JUZW1wbGF0ZSBjbGFzcz1cImQtbm9uZSBlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZGFuZ2VyIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LXNlY29uZGFyeVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgbWItMVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtc2Vjb25kYXJ5IGVycm9yLWlubmVyLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxzbWFsbD48L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIHByaXZhdGUgX3F1ZXJ5PzogQ2xpZW50RGF0YVF1ZXJ5YWJsZTtcbiAgcHJpdmF0ZSBfY29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dIZWFkZXIgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93UGFnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2lkID0gZ2V0UmFuZG9tSWRlbnRpZmllcigpO1xuICBwdWJsaWMgc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgcHVibGljIGNvbmZpZ0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnKSBwdWJsaWMgdGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgcHVibGljIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlcnJvclRlbXBsYXRlJykgcHVibGljIGVycm9yVGVtcGxhdGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlPzogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNob3dBY3Rpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQE91dHB1dCgnbG9hZCcpIHB1YmxpYyBsb2FkOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4oKTtcbiAgQE91dHB1dCgnaW5pdCcpIHB1YmxpYyBpbml0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoJ3JlbG9hZCcpIHB1YmxpYyByZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdCcpIHB1YmxpYyBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2RyYXcnKSBwdWJsaWMgZHJhdzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgncGFnZScpIHB1YmxpYyBwYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdvcmRlcicpIHB1YmxpYyBvcmRlcjogRXZlbnRFbWl0dGVyPGFueVtdW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXVtdPigpO1xuICBAT3V0cHV0KCdzY3JvbGwnKSBwdWJsaWMgc2Nyb2xsOiBFdmVudEVtaXR0ZXI8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0ZWRJdGVtcycpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdsb2FkaW5nJykgcHVibGljIGxvYWRpbmc6IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+KCk7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VydmVyU2lkZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBsZW5ndGhNZW51ID0gWzUwLCAxMDAsIDIwMCwgNTAwXTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2luZyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5PcmRlcmluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVTYXZlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZUxvYWRDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBjYWxsYmFjazogKHN0YXRlOiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmVDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBzdGF0ZTogYW55KSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxZID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIHJvdyBzZWxlY3Rpb24uIFRoZSBkZWZhdWxyIHZhbHVlIGlzIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlIG11bHRpcGxlIHNlbGVjdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyBjdXN0b20gc2VsZWN0aW9uIGFuZCBoaWRlcyBzZWxlY3QgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgdW5zZWxlY3RlZDogYW55W10gPSBbXTtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIFVSTCB0byBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gZnJvbVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNvbmZpZ1NyYz86IHN0cmluZztcbiAgcHVibGljIGxhc3RFcnJvcjogYW55O1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGFibGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogVGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gICAgLy8gcmFpc2Ugc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5jb25maWdDaGFuZ2VzLm5leHQodGhpcy5fY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgVGFibGVDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBsYXN0UXVlcnlUb3RhbEl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dGb290ZXInKVxuICBwdWJsaWMgc2V0IHNob3dGb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Rm9vdGVyID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Rm9vdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICAgQElucHV0KCdzaG93SGVhZGVyJylcbiAgIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsdWU7XG4gICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgaWYgKGRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgICB9XG4gICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gYWRkIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKCdtdC0yJyk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICAvLyByZW1vdmUgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldCBzaG93SGVhZGVyKCkge1xuICAgICByZXR1cm4gdGhpcy5fc2hvd0hlYWRlcjtcbiAgIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcGFnaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd1BhZ2luZycpXG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dQYWdpbmcgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19wYWdpbmF0ZScpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93UGFnaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93UGFnaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBhY3RpdmUgcXVlcnkgZm9yIHRoaXMgdGFibGVcbiAgICovXG4gIEBJbnB1dCgncXVlcnknKVxuICBwdWJsaWMgc2V0IHF1ZXJ5KHZhbHVlOiBDbGllbnREYXRhUXVlcnlhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcXVlcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5IGFzIENsaWVudERhdGFRdWVyeWFibGU7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRlUGlwZTtcbiAgcHVibGljIGRhdGFUYWJsZTogYW55O1xuICBwdWJsaWMgZHRPcHRpb25zOiBhbnk7XG4gIHByaXZhdGUgbGFzdFF1ZXJ5UGFyYW1zPzogRGF0YVNlcnZpY2VRdWVyeVBhcmFtcztcbiAgcHJpdmF0ZSBfbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBASW5qZWN0KENPTFVNTl9GT1JNQVRURVJTKSBwcml2YXRlIF9jb2x1bW5Gb3JtYXR0ZXJzOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZzogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbHVtblNlbGVjdG9yOiBDb2x1bW5TZWxlY3RvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9leHBvcnRTcHJlYWRzaGVldDogRXhwb3J0U3ByZWFkc2hlZXRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UpIHtcbiAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlXG4gICAgdGhpcy50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0ZVBpcGUodGhpcy5fdHJhbnNsYXRlU2VydmljZSwgbmV3IFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpKTtcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uID0gJ2J0bic7XG4gICAgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHQuY2xhc3Nlcy5zUGFnZUJ1dHRvbkFjdGl2ZSA9ICdidG4gYnRuLWxpZ2h0JztcbiAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2ltcGxlIHNlYXJjaFxuICBwdWJsaWMgc2VhcmNoKHNlYXJjaFRleHQpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGUpIHtcbiAgICAgIGlmIChzZWFyY2hUZXh0ICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgICB0ZXh0OiBzZWFyY2hUZXh0LnJlcGxhY2UoL15cInxcIiQvZywgJycpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVGV4dC5zcGxpdCgnICcpO1xuICAgICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKCh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uKSBhcyBzdHJpbmcsIHtcbiAgICAgICAgICAgICAgdGV4dDogd29yZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XG4gICAgICAgICAgLy8gc2V0IGZpbHRlclxuICAgICAgICAgIHRoaXMucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuc3VyZSBlbXB0eSB0YWJsZSBsYXlvdXRcbiAgICAgIHRoaXMucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAvLyBzZWFyY2ggbG9jYWxseVxuICAgICAgdGhpcy5kYXRhVGFibGUuc2VhcmNoKHNlYXJjaFRleHQudHJpbSgpKS5kcmF3KCk7XG4gICAgICAvLyBnZXQgaW5kZXhlcyBvZiBmaWx0ZXJlZCByb3dzXG4gICAgICBjb25zdCBpbmRleGVzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSk7XG4gICAgICAvLyBzZXQgcmVjb3Jkc0ZpbHRlcmVkXG4gICAgICBjb25zdCByZWNvcmRzRmlsdGVyZWQgPSBpbmRleGVzLmxlbmd0aDtcbiAgICAgIC8vIHNldCByZWNvcmRzVG90YWxcbiAgICAgIGNvbnN0IHJlY29yZHNUb3RhbCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gcmV0cmlldmUgZGF0YSBmcm9tIGluZGV4ZXNcbiAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgICAgY29uc3QgZGF0YSA9IGluZGV4ZXMubWFwKGluZGV4ID0+IHJvd3NbPG51bWJlcj5pbmRleF0pO1xuICAgICAgLy8gZW1pdCByZXN1bHRzIHRvIGxvYWQgb3V0cHV0XG4gICAgICB0aGlzLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogcmVjb3Jkc0ZpbHRlcmVkLFxuICAgICAgICByZWNvcmRzVG90YWw6IHJlY29yZHNUb3RhbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZldGNoKGNsZWFyU2VsZWN0ZWQ/OiBib29sZWFuKSB7XG4gICAgLy8gaWYgZGF0YSB0YWJsZSBpcyBudWxsXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgcmV0dXJuIHRoaXMubmdPbkluaXQoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgc2VsZWN0aW9uIGlmIHBhcmFtZXRlciBpcyBub3QgZGVjbGFyZWQgb3IgaXQncyB0cnVlXG4gICAgaWYgKGNsZWFyU2VsZWN0ZWQgPT0gbnVsbCB8fCBjbGVhclNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBsb2FkIGRhdGEgb25seVxuICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnRhYmxlKSB7XG4gICAgICAgIGpRdWVyeSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpLmVtcHR5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IG51bGw7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvd1xuICAgKi9cbiAgcHVibGljIHNlbGVjdFJvdyhyb3c6IGFueSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIC8vIGdldCByb3dcbiAgICAgIGNvbnN0IHJvd05vZGUgPSByb3cubm9kZSgpO1xuICAgICAgLy8gaWYgbXVsdGlwbGUgc2VsZWN0IGlzIGZhbHNlXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIGVudW1lcmF0ZSByb3dcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoJy5zZWxlY3RlZCcpLm5vZGVzKCkuZWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZSAhPT0gcm93Tm9kZSkge1xuICAgICAgICAgICAgICBqUXVlcnkobm9kZSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgc2VsZWN0ZWRcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Tm9kZSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgcm93IGRhdGFcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBzZWFyY2ggc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgIC8vIHZhbGlkYXRlIHVuc2VsZWN0ZWQgZGF0YVxuICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3RzIHRoZSBzcGVjaWZpZWQgZGF0YSByb3cgaWYgaXQncyBzZWxlY3RlZFxuICAgKi9cbiAgcHVibGljIHVuU2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgY2xhc3NcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiBrZXlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICBjb25zdCBpZCA9IGRhdGFba2V5XTtcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgLy8gYWRkIHRoaXMgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIGZpbmRJbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QW55KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IHRydWU7XG4gICAgICAvLyBzZWxlY3QgYW55IHJvd1xuICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLmV2ZXJ5KChpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyggaW5kZXggKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3ROb25lKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIGVtaXQgc2VsZWN0aW9uIGV2ZW50XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICAvLyBnZXQgaWRcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgLy8gZmluZCBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGlzIHNlbGVjdGVkXG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gdW5zZWxlY3RcbiAgICAgICAgdGhpcy51blNlbGVjdFJvdyhyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuICAvKipcbiAgICogRGF0YXRhYmxlcyBjb2x1bW4gcmVuZGVyZXIgZm9yIHNlbGVjdCBjaGVja2JveFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBtZXRhXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJTZWxlY3QoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHtcbiAgICAgICAgc2VsZWN0VGVtcGxhdGU6IHRlbXBsYXRlKGA8aW5wdXQgY2xhc3M9XCJjaGVja2JveCBjaGVja2JveC10aGVtZSBzLXJvd1wiIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGlkPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCIgZGF0YS1pZD1cIlxcJHtkYXRhfVwiIC8+PGxhYmVsIGZvcj1cInMtJHt0aGlzLl9pZH0tXFwke21ldGEucm93fVwiPiZuYnNwOzwvbGFiZWw+XG4gICAgICAgIGApLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHJlbmRlciB0ZW1wbGF0ZVxuICAgIHJldHVybiBjb2x1bW4uc2VsZWN0VGVtcGxhdGUoe1xuICAgICAgbWV0YSxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICAvLyBwYXJzZSBwcm9wZXJ0aWVzXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnc2VsZWN0YWJsZScpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZSA9IHRoaXMuY29uZmlnLnNlbGVjdGFibGU7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnbXVsdGlwbGVTZWxlY3QnKSkge1xuICAgICAgICB0aGlzLm11bHRpcGxlU2VsZWN0ID0gdGhpcy5jb25maWcubXVsdGlwbGVTZWxlY3Q7XG4gICAgICB9XG4gICAgICAvLyBwcmVwYXJlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbHVtbnNcbiAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtbnNcbiAgICAgICAgLy8gZmlsdGVyIGFjdGlvbiBsaW5rIGNvbHVtblxuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4uZm9ybWF0dGVyID09PSAnQWN0aW9uTGlua0Zvcm1hdHRlcicgJiYgdGhpcy5zaG93QWN0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgLy8gY29udmVydCBjb2x1bW4gdG8gYWR2YW5jZSB0YWJsZSBjb2x1bW5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQ29sdW1uRm9ybWF0dGVyKHRoaXMuX2luamVjdG9yKSwgY29sdW1uKTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnQ6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdENvbnRlbnQnKSA/IGNvbHVtbi5kZWZhdWx0Q29udGVudCA6ICcnLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRvci50cmFuc2Zvcm0oY29sdW1uLnRpdGxlKSxcbiAgICAgICAgICAgIHNvcnRhYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ3NvcnRhYmxlJykgPyBjb2x1bW4uc29ydGFibGUgOiB0cnVlLFxuICAgICAgICAgICAgdmlzaWJsZTogY29sdW1uLmhhc093blByb3BlcnR5KCdoaWRkZW4nKSA/ICFjb2x1bW4uaGlkZGVuIDogdHJ1ZSxcbiAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoY29sdW1uLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogY29sdW1uLmNsYXNzTmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVycykge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgcm93OiBhbnksIG1ldGE6IGFueSkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBkYXRhO1xuICAgICAgICAgICAgICAgIChjb2x1bW4uZm9ybWF0dGVycyBhcyBhbnlbXSkuZm9yRWFjaCgoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0U3RyaW5nID0gY29sdW1uRm9ybWF0dGVyLmZvcm1hdFN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdE9wdGlvbnMgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pKHJlc3VsdCwgdHlwZSwgcm93LCBtZXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgY29sdW1uLmZvcm1hdFN0cmluZztcbiAgICAgICAgICAgICAgICBkZWxldGUgY29sdW1uLmZvcm1hdE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgY29sdW1uIGZvcm1hdHRlcnMgZXhwb3J0IGNyZWF0ZWRDZWxsIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IGNvbHVtbi5mb3JtYXR0ZXJzLmZpbHRlcigoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjb2x1bW5Gb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIGNyZWF0ZWRDZWxsKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0dGVyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyLmFmdGVyUmVuZGVyLmJpbmQoY29sdW1uKShjZWxsLCBjZWxsRGF0YSwgcm93RGF0YSwgcm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbi5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICByZW5kZXI6IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICByZW5kZXI6IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGw6IGZvcm1hdHRlci5hZnRlclJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29sdW1uRGVmaW5pdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAvLyBnZXQgdGFibGUgZWxlbWVudFxuICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0galF1ZXJ5KHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sdW1ucy5hZGp1c3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSk7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXNoYWRvd2VkLXZhcmlhYmxlXG4gICAgICB0YWJsZUVsZW1lbnQub24oJ3Byb2Nlc3NpbmcuZHQnLCAoZXZlbnQsIHNldHRpbmdzLCBwcm9jZXNzaW5nKSA9PiB7XG4gICAgICAgIGlmIChwcm9jZXNzaW5nKSB7XG4gICAgICAgICAgLy8gY2xlYXIgZW1wdHkgdGFibGUgZWxlbWVudFxuICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCcuZGF0YVRhYmxlc19lbXB0eScpLmh0bWwoJycpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGFibGVFbGVtZW50LmFkZENsYXNzKCdwcm9jZXNzaW5nJyk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3Byb2Nlc3NpbmcnKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsZXQgZHJhd0luZGV4ID0gMTtcbiAgICAgIHRhYmxlRWxlbWVudC5vbignb3JkZXIuZHQnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICBjb25zdCBvcmRlciA9IHRoaXMuZGF0YVRhYmxlLm9yZGVyKCk7XG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlQ29sdW1ucztcbiAgICAgICAgICBpZiAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9yZGVyLmVtaXQob3JkZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkub24oJ2RyYXcuZHQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5kcmF3LmVtaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgY29uc3QgaW5mbzogeyBwYWdlOiBudW1iZXI7IHBhZ2VzOiBudW1iZXIgfSA9IHRoaXMuZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgICAgIHRoaXMucGFnZS5lbWl0KGluZm8pO1xuICAgICAgICAgIGlmIChkcmF3SW5kZXggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkcmF3SW5kZXgrKztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3RoaXMuZGF0YVRhYmxlLmNvbHVtbnMuYWRqdXN0KCk7IH0sIDEpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRVJST1InLCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgYWRqdXN0aW5nIHRhYmxlIGNvbHVtbnMnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBhbGxvdyBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiAoYXMgcm93IHByaW1hcnkga2V5KVxuICAgICAgICAvLyB0b2RvOjphbGxvdyByb3cgcHJpbWFyeSBrZXkgY29uZmlndXJhdGlvblxuICAgICAgICBjb25zdCBmaXJzdENvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF07XG4gICAgICAgIC8vIGFkZCBzZWxlY3QgY29sdW1uXG4gICAgICAgIGNvbnN0IHNlbGVjdENvbHVtbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAndGV4dC1jZW50ZXIgcGwtNCBwci0wJyxcbiAgICAgICAgICBkYXRhOiBmaXJzdENvbHVtbi5wcm9wZXJ0eSB8fCBmaXJzdENvbHVtbi5uYW1lLFxuICAgICAgICAgIGRlZmF1bHRDb250ZW50OiAnJyxcbiAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgIHZpc2libGU6ICF0aGlzLmN1c3RvbVNlbGVjdCxcbiAgICAgICAgICBuYW1lOiBmaXJzdENvbHVtbi5uYW1lLFxuICAgICAgICB9O1xuICAgICAgICAvLyBhc3NpZ24gcmVuZGVyZXJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxlY3RDb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgcmVuZGVyOiB0aGlzLl9yZW5kZXJTZWxlY3QuYmluZCh0aGlzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCBmaW5hbGx5IGFkZCBjb2x1bW5cbiAgICAgICAgdGFibGVDb2x1bW5zLnVuc2hpZnQoc2VsZWN0Q29sdW1uRGVmaW5pdGlvbik7XG4gICAgICAgIC8vIHVzZXIgaW50ZXJmYWNlIGFkZGl0aW9uc1xuICAgICAgICAvLyBoYW5kbGUgcGFnZSBjaGFuZ2UgZXZlbnQgKGEgdHJpY2sgZm9yIGZpcmluZyBkcmF3LmR0IGV2ZW50cylcbiAgICAgICAgdGFibGVFbGVtZW50XG4gICAgICAgICAgLy8gaGFuZGxlIGRyYXcgZXZlbnRzXG4gICAgICAgICAgLm9uKCdkcmF3LmR0JywgKCkgPT4ge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QpIHtcbiAgICAgICAgICAgICAgLy8gZW5hYmxlIHJvdyBzZWxlY3Rpb24gZXZlbnRcbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ3Rib2R5Jykub24oJ2NsaWNrJywgJ3RyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHNlbGYuZGF0YVRhYmxlLnJvdyh0aGlzKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgcm93XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3QuZW1pdChyb3cpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0LnMtcm93Jyk7XG4gICAgICAgICAgICBlbGVtZW50cy5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIG1ha2Ugc2VsZWN0aW9uIG9uIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gZW51bWVyYXRlIHNlbGVjdGVkIGl0ZW1zXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgcm93IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1ba2V5XTtcbiAgICAgICAgICAgICAgICAvLyBpZiBpZGVudGlmaWVyIGlzIGRlZmluZWRcbiAgICAgICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgY2hlY2sgZWxlbWVudCB3aXRoIHRoaXMgaWRlbnRpZmllciBpbiBhdHRyaWJ1dGUgZGF0YS1pZFxuICAgICAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoYGlucHV0W2RhdGEtaWQ9JyR7aWR9J11gKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAgIC8vIHNlbGVjdCByb3dzIHRoYXQgYXJlIG5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAvLyBhbmQgZG8gbm90IGluY2x1ZGVkIGluIHVuc2VsZWN0ZWQgY29sbGVjdGlvblxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGdldCBkYXRhIGlkXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgICAgICAgICByZXR1cm4geFtrZXldID09IGpRdWVyeShlbGVtZW50KS5hdHRyKCdkYXRhLWlkJyk7XG4gICAgICAgICAgICAgICAgfSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyh0aGlzLmRhdGFUYWJsZS5yb3coaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gaW5pdGlhbGl6ZSBkYXRhIHRhYmxlXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICAgICAgLy8gc2V0IGxlbmd0aCBtZW51XG4gICAgICAgIGxlbmd0aE1lbnU6IFs1LCAxMCwgNTAsIDEwMCwgMjAwLCA1MDBdLFxuICAgICAgICAvLyBoaWRlIGxlbmd0aCBtZW51XG4gICAgICAgIGxlbmd0aENoYW5nZTogZmFsc2UsXG4gICAgICAgIC8vIGVuYWJsZSBzZWFyY2ggYnV0IGhpZGUgc2VhcmNoIGJveCAoY3NzKVxuICAgICAgICBzZWFyY2hpbmc6IHRydWUsXG4gICAgICAgIC8vIGVuYWJsZSBkYXRhIHByb2Nlc3NpbmdcbiAgICAgICAgcHJvY2Vzc2luZzogdHJ1ZSxcbiAgICAgICAgLy8gZW5hYmxlIGdldHRpbmcgc2VydmVyIHNpZGUgZGF0YVxuICAgICAgICBzZXJ2ZXJTaWRlOiB0aGlzLnNlcnZlclNpZGUsXG4gICAgICAgIC8vIGVudW1lcmF0ZSB0YWJsZSBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnM6IHRhYmxlQ29sdW1ucyxcbiAgICAgICAgY29sUmVvcmRlcjogIHRoaXMuY29sdW1uT3JkZXJpbmcsXG4gICAgICAgIG9yZGVyOiBbXSxcbiAgICAgICAgLy8gc2V0IHNjcm9sbCB4XG4gICAgICAgIHNjcm9sbFg6IHRoaXMuc2Nyb2xsWCxcbiAgICAgICAgZG9tOiAnQmZydGlwJyxcbiAgICAgICAgYXV0b1dpZHRoOiBmYWxzZSxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4dGVuZDogJ2V4Y2VsJyxcbiAgICAgICAgICAgIGZpbGVuYW1lOiB0aGlzLmNvbmZpZy50aXRsZSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Qtbm9uZScsXG4gICAgICAgICAgICBleHBvcnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgIGNvbHVtbnM6ICd0aDpub3QoOmZpcnN0LWNoaWxkKScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGRlZmluZSBzZXJ2ZXIgZGF0YSBjYWxsYmFja1xuICAgICAgICBmblNlcnZlckRhdGEoc1NvdXJjZTogYW55LCBhb0RhdGE6IGFueSwgZm5DYWxsYmFjazogYW55LCBvU2V0dGluZ3M6IGFueSkge1xuICAgICAgICAgIC8vIGlmIG1ldGhvZCBpcyBpbnZva2VkIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAgIGlmIChzZWxmLl9maXJzdExvYWQpIHtcbiAgICAgICAgICAgIC8vIGRpc2FibGVkIGZpcnN0IGxvYWQgZmxhZ1xuICAgICAgICAgICAgc2VsZi5fZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBpZiBhdXRvIGxvYWQgaXMgZGlzYWJsZWRcbiAgICAgICAgICAgIGlmIChzZWxmLmF1dG9Mb2FkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBjb25zdCBlbXB0eURhdGFTZXQgPSB7XG4gICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiAwLFxuICAgICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogMCxcbiAgICAgICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgc2VsZi5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gICAgICAgICAgICAgIC8vIGVtaXQgZW1wdHkgZGF0YVxuICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChlbXB0eURhdGFTZXQpO1xuICAgICAgICAgICAgICAvLyByZXR1cm4gZW1wdHkgZGF0YVxuICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhlbXB0eURhdGFTZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyByZXNldCBlcnJvclxuICAgICAgICAgIHNlbGYudG9nZ2xlRXJyb3IoKTtcbiAgICAgICAgICAvLyBnZXQgYWN0aXZhdGVkIHJvdXRlIHBhcmFtc1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gc2VsZi5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XG4gICAgICAgICAgLy8gZ2V0IGNvbHVtbnNcbiAgICAgICAgICBjb25zdCBjb2x1bW5zID0gYW9EYXRhWzFdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBvcmRlciBleHByZXNzaW9uXG4gICAgICAgICAgY29uc3Qgb3JkZXIgPSBhb0RhdGFbMl0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IHNraXAgcmVjb3JkcyBwYXJhbVxuICAgICAgICAgIGNvbnN0IHNraXAgPSBhb0RhdGFbM10udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IHBhZ2Ugc2l6ZSBwYXJhbVxuICAgICAgICAgIGNvbnN0IHRvcCA9IGFvRGF0YVs0XS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2VhcmNoIHZhbHVlXG4gICAgICAgICAgY29uc3Qgc2VhcmNoID0gYW9EYXRhWzVdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBkYXRhIHF1ZXJ5YWJsZVxuICAgICAgICAgIGNvbnN0IHEgPSBzZWxmLl9xdWVyeSBpbnN0YW5jZW9mIENsaWVudERhdGFRdWVyeWFibGUgPyBzZWxmLl9xdWVyeSA6IHNlbGYuX2NvbnRleHQubW9kZWwoc2VsZi5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgICAgLy8gYXBwbHkgcGFnaW5nIHBhcmFtc1xuICAgICAgICAgIGlmICh0b3ApIHtcbiAgICAgICAgICAgIHEudGFrZSh0b3ApLnNraXAoc2tpcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFwcGx5IG9yZGVyIHBhcmFtc1xuICAgICAgICAgIGlmIChvcmRlciAmJiBvcmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGdldCBvcmRlciBxdWVyeSBleHByZXNzaW9uXG4gICAgICAgICAgICBjb25zdCBvcmRlckJ5U3RyID0gb3JkZXIubWFwKChleHByOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGNvbHVtbkluZGV4OiBudW1iZXI7XG4gICAgICAgICAgICAgIGlmIChzZWxmLmNvbHVtbk9yZGVyaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4ID0gZXhwci5jb2x1bW47XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IGNvbHVtbiBvcmRlciAoZnJvbSBjb2xSZW9yZGVyKVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbk9yZGVyOiBudW1iZXJbXSA9IHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoKTtcbiAgICAgICAgICAgICAgICAvLyBhbmQgbWF0Y2ggdGhlIGRhdGFUYWJsZSBpbmRleCB0byB0aGUgY29uZmlnIGNvbHVtbnMgaW5kZXhcbiAgICAgICAgICAgICAgICAvLyBleHByLmNvbHVtbiBzaG91bGQgYWx3YXlzIGJlIHZhbGlkIChlLmcuIGluIHJhbmdlKSwgYnV0IHBlcmZvcm0gYSBtaW5vciB2YWxpZGF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIuY29sdW1uID49IDAgJiYgZXhwci5jb2x1bW4gPCBjb2x1bW5PcmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4ID0gY29sdW1uT3JkZXJbZXhwci5jb2x1bW5dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIGZpcnN0IGNvbHVtbiBhcyBhIGZhbGxiYWNrICh3b24ndCBoYXBwZW4sIGp1c3QgZm9yIHNhZmV0eSlcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ29sdW1uc1tjb2x1bW5JbmRleF0ubmFtZSArICcgJyArIGV4cHIuZGlyIHx8ICdhc2MnO1xuICAgICAgICAgICAgfSkuam9pbignLCcpO1xuICAgICAgICAgICAgLy8gc2V0IG9yZGVyXG4gICAgICAgICAgICBxLnNldFBhcmFtKCckb3JkZXJieScsIG9yZGVyQnlTdHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlbnN1cmUgc2VsZi5zdGF0ZUxvYWRDYWxsYmFja1xuICAgICAgICAgIGlmIChzZWxmLnN0YXRlTG9hZENhbGxiYWNrID09IG51bGwpIHtcbiAgICAgICAgICAgIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2sgPSAoKF8sIGNhbGxiYWNrKSAgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5zdGF0ZUxvYWRDYWxsYmFjayhudWxsLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIC8vIGNvbmZpZ3VyZSAkc2VsZWN0IHBhcmFtZXRlclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gc2VsZi5jb25maWcuY29sdW1ucy5maWx0ZXIoIChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi52aXJ0dWFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4ub3B0aW9uYWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUuY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0YWJsZUNvbHVtbnMuZmluZEluZGV4KCh0YWJsZUNvbHVtbikgPT4gdGFibGVDb2x1bW4ubmFtZSA9PT0gY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmNvbHVtbnNbaW5kZXhdLnZpc2libGU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4ucHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm5hbWUgKyAnIGFzICcgKyBjb2x1bW4ucHJvcGVydHk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHEuc2VsZWN0LmFwcGx5KHEsIHNlbGVjdCk7XG4gICAgICAgICAgICAvLyBjb25maWd1cmUgJGZpbHRlclxuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLiRmaWx0ZXIgJiYgcXVlcnlQYXJhbXMuJGZpbHRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IHJvdXRlIGZpbHRlclxuICAgICAgICAgICAgICBjb25zdCBxUGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IFsgcXVlcnlQYXJhbXMuJGZpbHRlciBdO1xuICAgICAgICAgICAgICBpZiAocVBhcmFtcy4kZmlsdGVyKSB7IGV4cHJlc3Npb25zLnB1c2goJygnICsgcVBhcmFtcy4kZmlsdGVyICsgJyknICk7IH1cbiAgICAgICAgICAgICAgcS5maWx0ZXIoZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBxdWVyeSBwYXJhbWV0ZXJzIGNvbnRhaW4gZmlsdGVyXG4gICAgICAgICAgICBpZiAocXVlcnlQYXJhbXMuJGV4cGFuZCAmJiBxdWVyeVBhcmFtcy4kZXhwYW5kLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBzZXQgcm91dGUgJGV4cGFuZFxuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckZXhwYW5kJywgcXVlcnlQYXJhbXMuJGV4cGFuZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmV4cGFuZCkge1xuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckZXhwYW5kJywgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcS5nZXRQYXJhbXMoKVsnJG9yZGVyYnknXSAmJiBzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5vcmRlckJ5KSB7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRvcmRlcmJ5Jywgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZ3JvdXBCeSkge1xuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckZ3JvdXBieScsIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXBwZW5kIGRlZmF1bHQgZmlsdGVyXG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWxmLl9hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIuYXN5bmNCdWlsZEZpbHRlcihzZWxmLmNvbmZpZy5kZWZhdWx0cy5maWx0ZXIpLnRoZW4oKGRlZmF1bHRGaWx0ZXJTdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdEZpbHRlclN0cmluZykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgICBxLnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IFsgZGVmYXVsdEZpbHRlclN0cmluZyBdO1xuICAgICAgICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICAgICAgICBxLmZpbHRlcihleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5sYXN0UXVlcnlQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICAgIHJldHVybiBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IGl0ZW1zLnRvdGFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMudG90YWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc2V0RW1wdHlUYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGVtaXQgbG9hZCBldmVudFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChkYXRhU2V0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZGF0YVNldCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBsb2cgZXJyb3IgdG8gY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsIGVycik7XG4gICAgICAgICAgICAgICAgLy8gc2hvdyBlcnJvclxuICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gMDtcbiAgICAgICAgICAgICAgICAvLyBieSByZXR1cm5pbmcgZW1wdHkgZGF0YXNldFxuICAgICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KEVNUFRZX0RBVEFTRVQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKEVNUFRZX0RBVEFTRVQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYubGFzdFF1ZXJ5UGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgIHEuZ2V0TGlzdCgpLnRoZW4oKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSB7XG4gICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLnZhbHVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gaXRlbXMudG90YWw7XG4gICAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZW1pdCBsb2FkIGV2ZW50XG4gICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAvLyByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhkYXRhU2V0KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgLy8gbG9nIGVycm9yIHRvIGNvbnNvbGVcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgZXJyKTtcbiAgICAgICAgICAgICAgLy8gc2hvdyBlcnJvclxuICAgICAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgIC8vIGJ5IHJldHVybmluZyBlbXB0eSBkYXRhc2V0XG4gICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KEVNUFRZX0RBVEFTRVQpO1xuICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsYW5ndWFnZTogT2JqZWN0LmFzc2lnbih7IH0sIHNlbGYudHJhbnNsYXRvci50cmFuc2Zvcm0oJ1RhYmxlcy5EYXRhVGFibGUnKSxcbiAgICAgICAgICB7ZW1wdHlUYWJsZTogJyAnIH0pLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc3RhdGVTZXR0aW5ncyA9IHtcbiAgICAgICAgc3RhdGVTYXZlOiB0aGlzLnN0YXRlU2F2ZVxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLnN0YXRlTG9hZENhbGxiYWNrKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGVTZXR0aW5ncywge1xuICAgICAgICAgIHN0YXRlTG9hZENhbGxiYWNrOiB0aGlzLnN0YXRlTG9hZENhbGxiYWNrXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhdGVTYXZlQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVTYXZlQ2FsbGJhY2s6IHRoaXMuc3RhdGVTYXZlQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCBzdGF0ZVNldHRpbmdzKTtcblxuICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICAvLyBzZXQgY29udGludW91cyBzY3JvbGxpbmdcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcbiAgICAgICAgICBzY3JvbGxDb2xsYXBzZTogZmFsc2UsXG4gICAgICAgICAgc2Nyb2xsZXI6IHtcbiAgICAgICAgICAgIGxvYWRpbmdJbmRpY2F0b3I6IGZhbHNlLFxuICAgICAgICAgICAgZGlzcGxheUJ1ZmZlcjogMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHBhZ2luZzogdGhpcy5wYWdpbmcsXG4gICAgICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdlTGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcblxuICAgICAgfVxuICAgICAgLy8gaGFuZGxlIGluaXQuZHQgZXZlbnQgYW5kIGVtaXQgbG9jYWwgZXZlbnRcbiAgICAgIHRoaXMuZGF0YVRhYmxlID0gdGFibGVFbGVtZW50Lm9uKCdpbml0LmR0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGVyID0galF1ZXJ5KGV2ZW50LnRhcmdldCkucGFyZW50KCk7XG4gICAgICAgIC8vIGhhbmRsZSBzY3JvbGxpbmdcbiAgICAgICAgc2Nyb2xsZXIub24oJ3Njcm9sbCcsIChzY3JvbGxFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGpRdWVyeShzY3JvbGxFdmVudC50YXJnZXQpO1xuICAgICAgICAgIGNvbnN0IHRvcCA9IHRhcmdldC5zY3JvbGxUb3AoKSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0KCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGwuZW1pdCh7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgbGVmdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pLkRhdGFUYWJsZShzZXR0aW5ncyk7XG4gICAgICB0aGlzLmluaXQuZW1pdCgpO1xuICAgICAgLy8gc2hvdyBvciBoaWRlIGhlYWRlclxuICAgICAgaWYgKCF0aGlzLnNob3dIZWFkZXIgJiYgdGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaGlkZVNlbGVjdG9yID0gKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZT50aGVhZCcpO1xuICAgICAgICBpZiAoaGlkZVNlbGVjdG9yKSB7XG4gICAgICAgICAgaGlkZVNlbGVjdG9yLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFkanVzdFNlbGVjdG9yID0gICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGUnKTtcbiAgICAgICAgaWYgKGFkanVzdFNlbGVjdG9yKSB7XG4gICAgICAgICAgYWRqdXN0U2VsZWN0b3IuY2xhc3NMaXN0LmFkZCgnbXQtMicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgICBpZiAoIXRoaXMuc2hvd0Zvb3RlciAmJiB0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBpbmZvU2VsZWN0b3IgPSAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19pbmZvJyk7XG4gICAgICAgIGlmIChpbmZvU2VsZWN0b3IpIHtcbiAgICAgICAgICBpbmZvU2VsZWN0b3IuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHNob3cgb3IgaGlkZSBwYWdlclxuICAgICAgaWYgKHRoaXMuc2hvd1BhZ2luZykge1xuICAgICAgICB0aGlzLnNob3dQYWdpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5wYXJlbnQoKS5zY3JvbGxUb3AodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbExlZnQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUucGFyZW50KCkuc2Nyb2xsTGVmdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxhc3RRdWVyeSgpOiBDbGllbnREYXRhUXVlcnlhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5jb25maWcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBxID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmxhc3RRdWVyeVBhcmFtcykuZm9yRWFjaCggKGtleSkgPT4ge1xuICAgICAgcS5zZXRQYXJhbShrZXksIHRoaXMubGFzdFF1ZXJ5UGFyYW1zICYmIHRoaXMubGFzdFF1ZXJ5UGFyYW1zW2tleV0pO1xuICAgIH0pO1xuICAgIC8vIHJldHVybiBxdWVyeVxuICAgIHJldHVybiBxO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgYW5kIHVwZGF0ZXMgYSBzaW5nbGUgcm93XG4gICAqIEBwYXJhbSBmaW5kIC0gQW55IG9iamVjdCB3aGljaCBpcyBiZWluZyBjb252ZXJ0ZWQgdG8gYSBxdWVyeVxuICAgKi9cbiAgcHVibGljIGZldGNoT25lKGZpbmQ6IGFueSkge1xuICAgIGlmIChmaW5kID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBnZXQgcm93c1xuICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoKSB7XG4gICAgICAvLyBmaW5kIHJlc3VsdFxuICAgICAgY29uc3QgZmluZEtleXMgPSBPYmplY3Qua2V5cyhmaW5kKTtcbiAgICAgIGlmIChmaW5kS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBmaW5kIHJvdyBpbmRleCBieSBzZWFyY2hpbmcgZWFjaCBwcm9wZXJ0eVxuICAgICAgY29uc3Qgcm93SW5kZXggPSByb3dzLmZpbmRJbmRleCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbmRLZXlzLm1hcCggKGtleSkgPT4ge1xuICAgICAgICAgIHJldHVybiByb3dba2V5XSA9PT0gZmluZFtrZXldO1xuICAgICAgICB9KS5maWx0ZXIoIChyZXMpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzID09PSBmYWxzZTtcbiAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgfSk7XG4gICAgICAvLyBpZiByb3cgaGFzIGJlZW4gZm91bmRcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgLy8gc2VsZWN0IGF0dHJpYnV0ZXNcbiAgICAgICAgcXVlcnkuc2V0UGFyYW0oJyRzZWxlY3QnLCB0aGlzLmxhc3RRdWVyeVBhcmFtcy4kc2VsZWN0KTtcbiAgICAgICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRleHBhbmQpIHtcbiAgICAgICAgICAvLyBhcHBseSBleHBhbmQgYXR0cmlidXRlc1xuICAgICAgICAgIHF1ZXJ5LnNldFBhcmFtKCckZXhwYW5kJywgdGhpcy5sYXN0UXVlcnlQYXJhbXMuJGV4cGFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwbHkgZmlsdGVyIGZvciByb3dcbiAgICAgICAgZmluZEtleXMuZm9yRWFjaCggKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZCggKGNvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbC5wcm9wZXJ0eSA9PT0ga2V5IHx8IGNvbC5uYW1lID09PSBrZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgLy8gZ2V0IHByb3BlcnR5IG9yIG5hbWVcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lO1xuICAgICAgICAgICAgcXVlcnkuYW5kKHByb3BlcnR5IGFzIHN0cmluZykuZXF1YWwoZmluZFtrZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnkuYW5kKGtleSkuZXF1YWwoZmluZFtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgZmluYWxseSBnZXQgaXRlbVxuICAgICAgICByZXR1cm4gcXVlcnkuZ2V0SXRlbSgpLnRoZW4oIChpdGVtKSA9PiB7XG4gICAgICAgICAgLy8gaWYgaXRlbSBleGlzdHNcbiAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3cocm93SW5kZXgpO1xuICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcpO1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAvLyByZWRyYXcgcm93XG4gICAgICAgICAgICByb3cuZGF0YShpdGVtKTtcbiAgICAgICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIGlmIHJvdyBpcyBhbHJlYWR5IHNlbGVjdGVkXG4gICAgICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VsZWN0aW9uIGNoYW5nZVxuICAgKiBAcGFyYW0gJGV2ZW50XG4gICAqL1xuICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KSB7XG4gICAgY29uc3QgaW5wdXQgPSAgJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGV4ZWNSZWdleCA9IC8tKFxcZCspJC9nLmV4ZWMoaW5wdXQuaWQpO1xuICAgIC8vIGdldCByb3cgZnJvbSBpZFxuICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQoKGV4ZWNSZWdleCAmJiBleGVjUmVnZXhbMV0pIGFzIHN0cmluZywgMTApO1xuICAgIC8vIGdldCByb3dcbiAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3cocm93SW5kZXgpLmRhdGEoKTtcbiAgICAvLyBnZXQgcm93IGlkZW50aWZpZXJcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8ICcnO1xuICAgICAgY29uc3QgaWQgPSByb3dba2V5XTtcbiAgICAgIGxldCBmaW5kSXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gaWQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChpbnB1dC5jaGVja2VkKSB7XG4gICAgICAgIGlmIChmaW5kSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgIC8vIGFkZCByb3cgdG8gc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA+PSAwKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHNlbGVjdGVkIGl0ZW1cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShmaW5kSXRlbUluZGV4LCAxKTtcbiAgICAgICAgICBpZiAodGhpcy5zbWFydFNlbGVjdCkge1xuICAgICAgICAgICAgLy8gYWRkIHJvdyB0byB1bnNlbGVjdGVkIHJvd3NcbiAgICAgICAgICAgIGZpbmRJdGVtSW5kZXggPSB0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IGlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdGVkLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEVtcHR5VGFibGUoKSB7XG4gICAgLy8gdGhpcyBvcGVyYXRpb24gaXMgaW1wb3J0YW50XG4gICAgLy8gZHVlIHRvIG5nIGRhdGEgYmluZGluZ1xuICAgIC8vIGVtcHR5IHRhYmxlIHRlbXBsYXRlIGhhcyBubyB0cmFuc2xhdGVkIHRleHQgZHVyaW5nIG5nT25Jbml0KClcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPVxuICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gdGhpcy5lbXB0eVRhYmxlICYmIHRoaXMuZW1wdHlUYWJsZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUVycm9yKGVycj86IGFueSkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKHRoaXMuZXJyb3JUZW1wbGF0ZSAmJiB0aGlzLmVycm9yVGVtcGxhdGUubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCk7XG4gICAgICBsZXQgaW5uZXJNZXNzYWdlOiBhbnk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBpbm5lck1lc3NhZ2UgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzbWFsbCcpLml0ZW0oMCk7XG4gICAgICB9XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgICBpZiAoaW5uZXJNZXNzYWdlKSB7XG4gICAgICAgICAgaW5uZXJNZXNzYWdlLmlubmVySFRNTCA9IGVyci5lcnJvciAmJiBlcnIuZXJyb3IubWVzc2FnZSA/IGVyci5lcnJvci5tZXNzYWdlIDogZXJyLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSB0aGlzLmVycm9yVGVtcGxhdGUgJiYgdGhpcy5lcnJvclRlbXBsYXRlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlubmVyTWVzc2FnZSkge1xuICAgICAgICAgIGlubmVyTWVzc2FnZS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJFbXB0eVRhYmxlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBvcnQoKSB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHQtYnV0dG9ucyAuYnV0dG9ucy1leGNlbCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDb2x1bW5zKGNvbHVtbnNUb1Nob3cpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZGF0YVRhYmxlO1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc2xpY2UoMSkuZm9yRWFjaCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgaWYgKGNvbHVtbnNUb1Nob3cuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICAgICAgdGFibGUuY29sdW1uKGNvbHVtbi5uYW1lICsgJzpuYW1lJykudmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb25maWdTcmMnKSkge1xuICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjICE9IG51bGwpIHtcbiAgICAgICAgLy8gbG9hZCB0YWJsZSBjb25maWd1cmF0aW9uIG9uIGNoYW5nZVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRyaXBsZS1lcXVhbHNcbiAgICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSAmJiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuY29uZmlnU3JjLnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5faHR0cC5nZXQoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChjb25maWc6IFRhYmxlQ29uZmlndXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICAvLyBmZXRjaCBhbmQgcmVkcmF3XG4gICAgICAgICAgICB0aGlzLmZldGNoKCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgdGFibGUgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldChsb2FkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMucXVlcnkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5hdXRvTG9hZCA9ICEhbG9hZDtcbiAgICB0aGlzLm5nT25Jbml0KCk7XG4gIH1cblxuICBzZWxlY3RDb2x1bW5zKCkge1xuICAgIC8vIGdldCBjb2x1bW4gb3JkZXIgZS5nLiBbMCwgNCwgMSwgMiwgM11cbiAgICBjb25zdCBjb2x1bW5PcmRlcjogbnVtYmVyW10gPSB0aGlzLmRhdGFUYWJsZS5jb2xSZW9yZGVyLm9yZGVyKCk7XG4gICAgLy8gZ2V0IGNvbHVtbiBkZWZpbml0aW9uc1xuICAgIGNvbnN0IGNvbHVtbkRlZnMgPSB0aGlzLmRhdGFUYWJsZS5zZXR0aW5ncygpLmluaXQoKS5jb2x1bW5zO1xuICAgIGNvbnN0IGNvbHVtbnMgPSBjb2x1bW5EZWZzLm1hcCgoXG4gICAgICBjb2x1bW5EZWY6IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHZpc2libGU6IGJvb2xlYW4sXG4gICAgICAgIHNvcnRhYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH0sIGk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYGNvbHVtbi0ke2l9YDtcbiAgICAgIGxldCB0aXRsZSA9IGNvbHVtbkRlZi50aXRsZTtcbiAgICAgIC8vIGdldCBjb2x1bW4gaW5kZXhcbiAgICAgIGNvbnN0IGluZGV4ID0gIGNvbHVtbk9yZGVyLmluZGV4T2YoaSk7XG4gICAgICBjb25zdCB2aXNpYmxlID0gdGhpcy5kYXRhVGFibGUuY29sdW1uKGluZGV4KS52aXNpYmxlKCk7XG4gICAgICAvLyBzZXQgdGl0bGUgZm9yIHNlbGVjdCBjb2x1bW5cbiAgICAgIGlmIChpID09PSAwICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICB0aXRsZSA9ICc8JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlNlbGVjdENvbHVtbicpICsgJz4nO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGNvbHVtbiB0aXRsZVxuICAgICAgaWYgKHRpdGxlICE9IG51bGwgJiYgdGl0bGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRpdGxlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHRpdGxlID09IG51bGwpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgY29sdW1uIHBsYWNlaG9sZGVyXG4gICAgICAgIGxldCBwbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlciA9IHRoaXMuY29uZmlnLmNvbHVtbnNbaSAtIDFdLnBsYWNlaG9sZGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IHRoaXMuY29uZmlnLmNvbHVtbnNbaV0ucGxhY2Vob2xkZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlaG9sZGVyICE9IG51bGwpIHtcbiAgICAgICAgICB0aXRsZSA9ICc8JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChwbGFjZWhvbGRlcikgKyAnPic7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aXRsZSA9PSBudWxsKSB7XG4gICAgICAgIHRpdGxlID0gJzwnICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuVW5rbm93bkNvbHVtbicpICsgJz4nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5LFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgaW5kZXhcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5fY29sdW1uU2VsZWN0b3Iuc2VsZWN0Q29sdW1ucyhjb2x1bW5zKS50aGVuKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICBjb25zdCBzb3J0ZWQgPSAoZXZlbnQuY29sdW1ucyBhcyBhbnlbXSlcbiAgICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGtleTogY29sLmtleSxcbiAgICAgICAgICAgICAgaW5kZXg6IGNvbC5pbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG4gICAgICAgIC8vIGdldCBjb2x1bW4gb3JkZXIgZS5nLiBbMywgMSwgMiwgMCwgNF1cbiAgICAgICAgY29uc3QgaW5kZXhlcyA9IHNvcnRlZFxuICAgICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChldmVudC5jb2x1bW5zIGFzIGFueVtdKS5maW5kSW5kZXgoKG5leHQpID0+IGl0ZW0ua2V5ID09PSBuZXh0LmtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyByZXNldCBjb2x1bW4gdmlzaWJpbHR5XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAoZXZlbnQuY29sdW1ucyBhcyBhbnlbXSkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IChldmVudC5jb2x1bW5zIGFzIGFueVtdKVtpbmRleF07XG4gICAgICAgICAgY29uc3QgY29sSW5kZXggPSBjb2x1bW5PcmRlci5pbmRleE9mKGluZGV4KTtcbiAgICAgICAgICAvLyBzZXQgdmlzaWJpbHR5IHdpdGggcmVkcmF3ICg9dHJ1ZSlcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb2x1bW4oY29sSW5kZXgpLnZpc2libGUoZWxlbWVudC52aXNpYmxlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5hbGx5IGFwcGx5IGNvbHVtbiBvcmRlclxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb2xSZW9yZGVyLm9yZGVyKGluZGV4ZXMsIHRydWUpO1xuICAgICAgICAvLyBzaW1wbHkgcmVkcmF3IHRoZSB0YWJsZVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgdG8gcGFzcyBhbiBlcnJvckhhbmRsZXIgY2FsbGJhY2ssIGlmIGRlc2lyZWRcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV4cG9ydFZpZXcob3B0aW9ucz86IHtlcnJvckhhbmRsZXI/OiAocmVhc29uPzogYW55KSA9PiBhbnl9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmcuc2hvd0xvYWRpbmcoKTtcbiAgICAgIC8vIHZhbGlkYXRlIHF1ZXJ5IGl0ZW1zIGFuZCBjb25maWdcbiAgICAgIGlmICghKHRoaXMubGFzdFF1ZXJ5ICYmIHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMgJiYgdGhpcy5jb25maWcpKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGV4cG9ydCBzZXR0aW5nc1xuICAgICAgY29uc3QgZXhwb3J0U2V0dGluZ3MgPSB0aGlzLl9jb25maWd1cmF0aW9uLnNldHRpbmdzIGFzIEV4cG9ydExpbWl0Q29uZmlndXJhdGlvbjtcbiAgICAgIC8vIGFuZCBleHBvcnQgbGltaXRcbiAgICAgIGNvbnN0IGV4cG9ydExpbWl0ID1cbiAgICAgICAgKGV4cG9ydFNldHRpbmdzICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMuZXhwb3J0TGltaXQgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0ID4gMClcbiAgICAgICAgPyBleHBvcnRTZXR0aW5ncy50YWJsZXMuZXhwb3J0TGltaXQgOiBNQVhfRVhQT1JUX0lURU1TO1xuICAgICAgLy8gYW5kIHZhbGlkYXRlIGl0XG4gICAgICBpZiAodGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA+IGV4cG9ydExpbWl0KSB7XG4gICAgICAgIC8vIGNhbGwgZXJyb3IgaGFuZGxlclxuICAgICAgICAvLyBwcm92aWRlIGEgcmVjb2duaXppYmxlIGVycm9yIHR5cGVcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lcnJvckhhbmRsZXIpIHtcbiAgICAgICAgICBvcHRpb25zLmVycm9ySGFuZGxlcihuZXcgRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yKCdFeHBvcnQgbGltaXQgZXhjZWVkZWQnKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9yIHNob3cgd2FybmluZyBtb2RhbCBhbmQgZXhpdFxuICAgICAgICB0aGlzLl9tb2RhbFNlcnZpY2Uuc2hvd1dhcm5pbmdEaWFsb2codGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuRXhwb3J0TGlzdCcpLFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLkV4cG9ydExpbWl0RXhjZWVkZWQnLFxuICAgICAgICAgICAge2RhdGFMZW5ndGg6IHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMsIGV4cG9ydExpbWl0fSksIERJQUxPR19CVVRUT05TLk9rKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IHRvdGFsIGRpc3BsYXllZCBpdGVtc1xuICAgICAgY29uc3QgdG90YWxEaXNwbGF5ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5haURpc3BsYXkpLmxlbmd0aDtcbiAgICAgIC8vIGlmIHRoZXkgYWxyZWFkeSBzYXRpc2Z5IHRoZSBsYXN0IHF1ZXJ5IHRvdGFsXG4gICAgICBpZiAodG90YWxEaXNwbGF5ZWRJdGVtcyA9PT0gdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcykge1xuICAgICAgICAvLyBwcmVwYXJlIGV4Y2VsIGRhdGEgaW1tZWRpYXRlbHlcbiAgICAgICAgY29uc3Qge2JvZHksIGhlYWRlcn0gPSB0aGlzLmdldEV4cG9ydGFibGVEYXRhKCk7XG4gICAgICAgIC8vIGFuZCBleHBvcnQgdGhlbSB0byBleGNlbFxuICAgICAgICB0aGlzLl9leHBvcnRTcHJlYWRzaGVldC5leHBvcnQoYm9keSwgYCR7dGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLnRpdGxlIHx8ICdUYWJsZXMuRXhwb3J0UmVzdWx0cycpfS54bHN4YCwge1xuICAgICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICAgc2tpcEhlYWRlcjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBtb3JlIGRhdGEgbmVlZCB0byBiZSBmZXRjaGVkXG4gICAgICAgIC8vIGhvbGQgcHJldmlvdXMgZGF0YSBzdGF0ZVxuICAgICAgICBjb25zdCBwcmV2aW91c0RhdGFTdGF0ZSA9IHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkudG9BcnJheSgpO1xuICAgICAgICAvLyBnZXQgdGFyZ2V0IGRhdGEgc3RhdGUgYnkgZXhlY3V0aW5nIHRoZSBsYXN0IHF1ZXJ5XG4gICAgICAgIC8vIG5vdGU6IHRha2luZyB0aGUgZXhwb3J0TGltaXQgYW1vdW50IG9mIGl0ZW1zIHdpbGwgYWx3YXlzIHNhdGlzZnkgdGhlIHJlc3VsdHMsXG4gICAgICAgIC8vIGJlY2F1c2UgaXQgaGFzIGJlZW4gdmFsaWRhdGVkXG4gICAgICAgIGNvbnN0IHRhcmdldERhdGFTdGF0ZSA9IGF3YWl0IHRoaXMubGFzdFF1ZXJ5LnRha2UoZXhwb3J0TGltaXQpLmdldEl0ZW1zKCk7XG4gICAgICAgIC8vIGNoYW5nZSB0YWJsZSBkYXRhIG9uIHRoZSBmbHksIGJ1dCBkbyBub3QgcmVkcmF3XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNsZWFyKCkucm93cy5hZGQodGFyZ2V0RGF0YVN0YXRlKTtcbiAgICAgICAgLy8gcHJlcGFyZSBleGNlbCBkYXRhXG4gICAgICAgIGNvbnN0IHtib2R5LCBoZWFkZXJ9ID0gdGhpcy5nZXRFeHBvcnRhYmxlRGF0YSgpO1xuICAgICAgICAvLyByZXNldCB0YWJsZSBkYXRhXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNsZWFyKCkucm93cy5hZGQocHJldmlvdXNEYXRhU3RhdGUpO1xuICAgICAgICAvLyBhbmQgZXhwb3J0IHRhcmdldCBkYXRhIHRvIGV4Y2VsXG4gICAgICAgIHRoaXMuX2V4cG9ydFNwcmVhZHNoZWV0LmV4cG9ydChib2R5LCBgJHt0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jb25maWcudGl0bGUgfHwgJ1RhYmxlcy5FeHBvcnRSZXN1bHRzJyl9Lnhsc3hgLCB7XG4gICAgICAgICAgICBoZWFkZXIsXG4gICAgICAgICAgICBza2lwSGVhZGVyOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4aXRcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGxvZyBlcnJvclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgLy8gY2FsbCBlcnJvciBoYW5kbGVyLCBpZiBkZWZpbmVkXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVycm9ySGFuZGxlcikge1xuICAgICAgICBvcHRpb25zLmVycm9ySGFuZGxlcihlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXNlIGRlZmF1bHQgZXJyb3Igc2VydmljZVxuICAgICAgICB0aGlzLl9lcnJvclNlcnZpY2Uuc2hvd0Vycm9yKGVyciwge1xuICAgICAgICAgIGNvbnRpbnVlTGluazogJy4nXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9sb2FkaW5nLmhpZGVMb2FkaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEV4cG9ydGFibGVEYXRhKCk6IHtib2R5OiBhbnlbXSwgaGVhZGVyOiBhbnlbXX0ge1xuICAgIGlmICghKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnNcbiAgICAgICYmIHR5cGVvZiB0aGlzLmRhdGFUYWJsZS5idXR0b25zLmV4cG9ydERhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5jb25maWcpKSB7XG4gICAgICByZXR1cm4ge2JvZHk6IFtdLCBoZWFkZXI6IFtdfTtcbiAgICB9XG4gICAgLy8gZmV0Y2ggZXhwb3J0YWJsZSBleGNlbCBkYXRhXG4gICAgbGV0IHtib2R5LCBoZWFkZXJ9ID0gdGhpcy5kYXRhVGFibGUuYnV0dG9ucy5leHBvcnREYXRhKCk7XG4gICAgY29uc3QgY2xlYW51cEluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgLy8gY2xlYW4gdXAgaGVhZGVyc1xuICAgIGhlYWRlciA9IGhlYWRlci5maWx0ZXIoKGhlYWRlckl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgLy8gZXhjbHVkZSBlbXB0eSBoZWFkZXJzXG4gICAgICBpZiAoaGVhZGVySXRlbS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNsZWFudXBJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBleGNsdWRlIGhpZGRlbiBjb2x1bW5zXG4gICAgICAvLyBub3RlOiB1c2UgdGhlIGRhdGF0YWJsZSB2aXNpYmxlKCkgZnVuY3Rpb25cbiAgICAgIC8vIGluc3RlYWQgb2YgdGhlIGhpZGRlbiBjb25maWcgcHJvcGVydHksIHRvIHNhdGlzZnkgdGhlIGNvbHVtbiBzZWxlY3RvclxuICAgICAgaWYgKCF0aGlzLmRhdGFUYWJsZS5jb2x1bW4oaW5kZXgpLnZpc2libGUoKSkge1xuICAgICAgICBjbGVhbnVwSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgLy8gY2xlYW4gdXAgYm9keVxuICAgIGJvZHkgPSBib2R5Lm1hcCgocm93OiBhbnkgW10pID0+IHtcbiAgICAgIHJldHVybiByb3cuZmlsdGVyKChfLCByb3dJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBjbGVhbnVwSW5kZXhlcy5pbmRleE9mKHJvd0luZGV4KSA9PT0gLTE7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge2JvZHksIGhlYWRlcn07XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIE9uRGVzdHJveSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCwgQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQsIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVycm9yU2VydmljZSwgRElBTE9HX0JVVFRPTlMsIE1vZGFsU2VydmljZSwgVXNlckFjdGl2aXR5U2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IFJlc3BvbnNlRXJyb3IgfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyByZWNvcmRzVG90YWw/OiBudW1iZXI7XG4gIHB1YmxpYyBjb25maWc/OiBUYWJsZUNvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGRhdGFTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBASW5wdXQoJ2VudGl0eVNldCcpIGVudGl0eVNldD86IHN0cmluZztcbiAgQElucHV0KCdjYXRlZ29yeScpIGNhdGVnb3J5Pzogc3RyaW5nO1xuICBASW5wdXQoJ2Rlc2NyaXB0aW9uJykgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgnbG9uZ0Rlc2NyaXB0aW9uJykgbG9uZ0Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBASW5wdXQoJ3RhYmxlQ29uZmlndXJhdGlvbicpIHRhYmxlQ29uZmlndXJhdGlvbjogYW55O1xuICBASW5wdXQoJ3NlYXJjaENvbmZpZ3VyYXRpb24nKSBzZWFyY2hDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGU/OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50O1xuICBASW5wdXQoJ2FsbG93U2F2ZU9wdGlvbicpIGFsbG93U2F2ZU9wdGlvbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3VzZXJBY3Rpdml0eVNlcnZpY2U6IFVzZXJBY3Rpdml0eVNlcnZpY2VcbiAgICApIHsgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlO1xuICAgICAgLy8gZ2V0IG1ldGFkYXRhXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuX2NvbnRleHQuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIC8vIGdldCByb3V0ZSBkYXRhXG4gICAgICB0aGlzLmRhdGFTdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSggcm91dGVEYXRhID0+IHtcbiAgICAgICAgLy8gZ2V0IGVudGl0eVR5cGVcbiAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGBeJHtyb3V0ZURhdGEubW9kZWx9JGAsICdpZycpO1xuICAgICAgICBjb25zdCBlbnRpdHlTZXQgPSBtZXRhZGF0YS5FbnRpdHlDb250YWluZXIuRW50aXR5U2V0LmZpbmQoIHggPT4ge1xuICAgICAgICAgIHJldHVybiByZS50ZXN0KHguTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpZiBlbnRpdHkgdHlwZSBpcyBudWxsXG4gICAgICAgIGlmIChlbnRpdHlTZXQgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIG5hdmlnYXRlIHRvIGVycm9yXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yU2VydmljZS5uYXZpZ2F0ZVRvRXJyb3IobmV3IFJlc3BvbnNlRXJyb3IoJ0VudGl0eVNldCBOb3QgRm91bmQnLCA0MDQpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgZW50aXR5IHR5cGVcbiAgICAgICAgY29uc3QgZW50aXR5VHlwZSA9IG1ldGFkYXRhLkVudGl0eVR5cGUuZmluZCggeCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHguTmFtZSA9PT0gZW50aXR5U2V0LkVudGl0eVR5cGU7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZW50aXR5VHlwZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yU2VydmljZS5uYXZpZ2F0ZVRvRXJyb3IobmV3IFJlc3BvbnNlRXJyb3IoJ0VudGl0eVR5cGUgTm90IEZvdW5kJywgNDA0KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbiwgJ2FsbG93U2F2ZScpKSB7XG4gICAgICAgICAgICB0aGlzLmFsbG93U2F2ZU9wdGlvbiA9IHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uLmFsbG93U2F2ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZWFyY2hDb25maWd1cmF0aW9uID0gcm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS50YWJsZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICB0aGlzLnRhYmxlQ29uZmlndXJhdGlvbiA9IHJvdXRlRGF0YS50YWJsZUNvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocm91dGVEYXRhLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLmxvbmdEZXNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMubG9uZ0Rlc2NyaXB0aW9uID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHJvdXRlRGF0YS5sb25nRGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuY2F0ZWdvcnkpIHtcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5ID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHJvdXRlRGF0YS5jYXRlZ29yeSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xvbmUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb25maWd1cmF0aW9uID0gQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb24uY2FzdCh0aGlzLnRhYmxlQ29uZmlndXJhdGlvbiwgdHJ1ZSk7XG4gICAgICAgIC8vIGNvcnJlY3QgZWRpdCBidXR0b24gbGlua1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBkZWZhdWx0Q29uZmlndXJhdGlvbi5jb2x1bW5zLmZpbmQoIGNvbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5mb3JtYXR0ZXIgPT09ICdCdXR0b25Gb3JtYXR0ZXInICYmIGNvbC5mb3JtYXRTdHJpbmcgPT09ICcobW9kYWw6ZWRpdCknO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgIGNvbnN0IHVybDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhdGhGcm9tUm9vdC5mb3JFYWNoKCByb3V0ZSA9PiB7XG4gICAgICAgICAgICB1cmwucHVzaC5hcHBseSh1cmwsIHJvdXRlLnVybCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29sdW1uLmZvcm1hdFN0cmluZyA9IGAjLyR7dXJsLmpvaW4oJy8nKX0vKG1vZGFsOlxcJFxce2lkXFx9L2VkaXQpYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjcmVhdGUgbGlzdCBjb25maWd1cmF0aW9uIGJ5IGFzc2lnbmluZyBsaXN0IGVudGl0eSBzZXRcbiAgICAgICAgdGFibGUuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgbW9kZWw6IGVudGl0eVNldC5OYW1lXG4gICAgICAgIH0sIGRlZmF1bHRDb25maWd1cmF0aW9uKTtcbiAgICAgICAgLy8gZmV0Y2ggZGF0YVxuICAgICAgICB0YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgLy8gZG8gcmVsb2FkIGJ5IHVzaW5nIGhpZGRlbiBmcmFnbWVudCBlLmcuIC9jbGFzc2VzI3JlbG9hZFxuICAgICAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLmZyYWdtZW50LnN1YnNjcmliZShmcmFnbWVudCA9PiB7XG4gICAgICAgICAgaWYgKGZyYWdtZW50ICYmIGZyYWdtZW50ID09PSAncmVsb2FkJykge1xuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coXG4gICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gYXMgc3RyaW5nLFxuICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NldHRpbmdzLk9wZXJhdGlvbkNvbXBsZXRlZCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZmluYWxseSBhZGQgdXNlciBhY3Rpdml0eVxuICAgICAgICB0aGlzLl91c2VyQWN0aXZpdHlTZXJ2aWNlLnNldEl0ZW0oe1xuICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLmNhdGVnb3J5IGFzIHN0cmluZyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG4gICAgICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgZGF0ZUNyZWF0ZWQ6IG5ldyBEYXRlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIERhdGEgbG9hZCBldmVudCBoYW5kbGVyIG9mIGFkdmFuY2VkIHRhYmxlIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgb25EYXRhTG9hZChkYXRhOiBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCkge1xuICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHNlbGVjdGVkIGl0ZW1zXG4gICAqL1xuICByZW1vdmUoKSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlO1xuICAgIGlmICh0YWJsZSAmJiB0YWJsZS5zZWxlY3RlZCAmJiB0YWJsZS5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIC8vIGdldCBpdGVtcyB0byByZW1vdmVcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGFibGUuc2VsZWN0ZWQ7XG4gICAgICByZXR1cm4gdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtc1RpdGxlJyksXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlJlbW92ZUl0ZW1zTWVzc2FnZScpLFxuICAgICAgICBESUFMT0dfQlVUVE9OUy5Pa0NhbmNlbCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubW9kZWwodGFibGUuY29uZmlnLm1vZGVsKS5yZW1vdmUoaXRlbXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICsgJzonICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2UudGl0bGUnKSxcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoKGl0ZW1zLmxlbmd0aCA9PT0gMSA/XG4gICAgICAgICAgICAgICAgICAnVGFibGVzLlJlbW92ZUl0ZW1NZXNzYWdlLm9uZScgOiAnVGFibGVzLlJlbW92ZUl0ZW1NZXNzYWdlLm1hbnknKVxuICAgICAgICAgICAgICAgICAgLCB7IHZhbHVlOiBpdGVtcy5sZW5ndGggfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9lcnJvclNlcnZpY2Uuc2hvd0Vycm9yKGVyciwge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlTGluazogJy4nXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLCBBZnRlclZpZXdJbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0JztcbmltcG9ydCB7TW9kYWxTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1JvdXRlck1vZGFsT2tDYW5jZWx9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uL3JvdXRpbmcnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBZHZhbmNlZEZvcm1Db21wb25lbnR9IGZyb20gJ0B1bml2ZXJzaXMvZm9ybXMnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NiYXJDb21wb25lbnQgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Byb2dyZXNzYmFyJztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXJvdy1hY3Rpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1yb3ctYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAuZmEtMV81eCB7XG4gICAgICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgfVxuICAgICAgICAuZm9ybS1jb250cm9sOmRpc2FibGVkLCAuZm9ybS1jb250cm9sW3JlYWRvbmx5XSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICB9XG4gICAgICAgIC5mb3JtLWNoZWNrLmNoZWNrYm94IHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgICAgfVxuICAgICAgICBgXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICBpbnZhbGlkU3Vic2NyaXB0aW9uOiBhbnk7XG5cblxuICAgIEBJbnB1dCgpIGl0ZW1zOiBhbnk7XG4gICAgQElucHV0KCkgbW9kYWxJY29uID0gJ2ZhcyBmYS1wcm9qZWN0LWRpYWdyYW0nO1xuICAgIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZvcm1UZW1wbGF0ZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBwcm9ncmVzc1R5cGUgPSAnaW5kaWdvJztcbiAgICBAT3V0cHV0KCkgZGF0YTogYW55O1xuICAgIEBJbnB1dCgpIGFkZGl0aW9uYWxNZXNzYWdlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVycm9yTWVzc2FnZSA9ICdUYWJsZXMuQWN0aW9ucy5Db21wbGV0ZWRXaXRoRXJyb3JzJztcbiAgICBwdWJsaWMgbGFzdEVycm9yOiBhbnk7XG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgICBAVmlld0NoaWxkKCdwcm9ncmVzcycpIHByb2dyZXNzQ29tcG9uZW50PzogUHJvZ3Jlc3NiYXJDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgncHJvZ3Jlc3NDb250YWluZXInKSBwcm9ncmVzc0NvbnRhaW5lcj86IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnZm9ybUNvbXBvbmVudCcpIGZvcm1Db21wb25lbnQ/OiBBZHZhbmNlZEZvcm1Db21wb25lbnQ7XG4gICAgQElucHV0KCkgcmVmcmVzaDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQElucHV0KCkgZXhlY3V0ZT86IE9ic2VydmFibGU8YW55PjtcbiAgICBwcml2YXRlIHJlZnJlc2hTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBleGVjdXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIC8vIHNldCBtb2RhbCBzaXplXG4gICAgICAgIHRoaXMubW9kYWxDbGFzcyA9ICdtb2RhbC1sZyc7XG4gICAgICAgIC8vIHNldCBtb2RhbCB0aXRsZVxuICAgICAgICB0aGlzLm1vZGFsVGl0bGUgPSAnVGFibGVzLkFjdGlvbnMuTGFiZWwnO1xuICAgICAgICAvLyBkaXNhYmxlIG9rIGJ1dHRvblxuICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gc2V0IGJ1dHRvbiB0ZXh0XG4gICAgICAgIHRoaXMub2tCdXR0b25UZXh0ID0gJ1RhYmxlcy5BY3Rpb25zLlN0YXJ0JztcbiAgICB9XG5cbiAgICBnZXQgZm9ybSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJlZnJlc2hTdWJzY3JpcHRpb24gPSB0aGlzLnJlZnJlc2guc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NDb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGxldCBwcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnByb2dyZXNzIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5wcm9ncmVzcyA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IHZhbHVlLnByb2dyZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzQ29tcG9uZW50LnZhbHVlID0gcHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtKSB7XG4gICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52YWxpZFN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmNoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgJ2lzVmFsaWQnKSAmJiAoZXZlbnQuY2hhbmdlZCAhPSBudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSAhZXZlbnQuaXNWYWxpZDtcbiAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVmcmVzaFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW52YWxpZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNsb3NlXG4gICAgICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb2soKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5leGVjdXRlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCAmJiB0aGlzLmZvcm1Db21wb25lbnQuZm9ybSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pbyAmJiB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5mb3JtaW8uZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIHNldCBkYXRhXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkbyBhY3Rpb25cbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IDEwMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmVycm9ycyAmJiByZXN1bHQuZXJyb3JzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzaG93IG1lc3NhZ2UgZm9yIHBhcnRpYWwgc3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9ycyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBuZXcgRXJyb3IodGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuZXJyb3JNZXNzYWdlfS5EZXNjcmlwdGlvbi5PbmVgKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG5ldyBFcnJvcih0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuZXJyb3JNZXNzYWdlfS5EZXNjcmlwdGlvbi5NYW55YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2guZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlUHJvZ3Jlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93UHJvZ3Jlc3MoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlcGxhY2UoJ2ludmlzaWJsZScsICd2aXNpYmxlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlUHJvZ3Jlc3MoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlcGxhY2UoJ3Zpc2libGUnLCAnaW52aXNpYmxlJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlOiAnJ1xuICB9KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIF9maWx0ZXI6IGFueTtcbiAgICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgIGZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgICB9XG5cbiAgICBzZXQgZmlsdGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlciA9IHZhbHVlO1xuICAgIH1cblxuICAgIG9uS2V5RW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5fZmlsdGVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtaW9Db21wb25lbnQsIEZvcm1pb0Zvcm19IGZyb20gJ2FuZ3VsYXItZm9ybWlvJztcbmltcG9ydCB7QW5ndWxhckRhdGFDb250ZXh0fSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1NlcnZpY2VVcmxQcmVQcm9jZXNzb3IsIFRyYW5zbGF0ZVByZVByb2Nlc3Nvcn0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50fSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtc2VhcmNoLWZvcm0nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwLTRcIj5cbiAgICAgIDxmb3JtaW8gI2Zvcm1pb0NvbXBvbmVudCBjbGFzcz1cImZvcm1pby1zZWFyY2hcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleUVudGVyKCRldmVudClcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIiAoZm9ybUxvYWQpPVwib25Gb3JtTG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3JlZnJlc2hdPVwicmVmcmVzaEZvcm1cIiBbc3VibWlzc2lvbl09XCJzdWJtaXNzaW9uXCIgW2Zvcm1dPVwiZm9ybVwiPjwvZm9ybWlvPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlZC1zZWFyY2gtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoRm9ybUNvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG5cblxuICBAVmlld0NoaWxkKCdmb3JtaW9Db21wb25lbnQnKSBmb3JtQ29tcG9uZW50PzogRm9ybWlvQ29tcG9uZW50O1xuICBASW5wdXQoKSBmb3JtOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgZm9ybVNyYz86IHN0cmluZztcbiAgQE91dHB1dCgpIHJlZnJlc2hGb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBsb2FkaW5nID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRhcmdldDogQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50fT4oKTtcbiAgc3VibWlzc2lvbjogYW55ID0geyBkYXRhOiB7fSB9O1xuICBwcml2YXRlIGZpbHRlclN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNvbXBvbmVudExvYWRpbmcgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50XG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZm9ybScpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5mb3JtICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZm9ybS5jdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgIGNoYW5nZXMuZm9ybS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5mb3JtLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZm9ybVNyYycpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5mb3JtU3JjICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZm9ybVNyYy5jdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgIGNoYW5nZXMuZm9ybVNyYy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5mb3JtU3JjLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9odHRwLmdldChjaGFuZ2VzLmZvcm1TcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChmb3JtKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgZm9ybVxuICAgICAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICAgICAgICAgIC8vIGFuZCBpbml0XG4gICAgICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9hZGluZyBzZWFyY2ggY29uZmlndXJhdGlvbicpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2ZpbHRlcicpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5maWx0ZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN1Ym1pc3Npb24uZGF0YSA9IGNoYW5nZXMuZmlsdGVyLmN1cnJlbnRWYWx1ZSB8fCB7fTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtcbiAgICAgICAgICBzdWJtaXNzaW9uOiB0aGlzLnN1Ym1pc3Npb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgbmV3IFNlcnZpY2VVcmxQcmVQcm9jZXNzb3IodGhpcy5fY29udGV4dCkucGFyc2UodGhpcy5mb3JtKTtcbiAgICAgIG5ldyBUcmFuc2xhdGVQcmVQcm9jZXNzb3IodGhpcy5fdHJhbnNsYXRlU2VydmljZSkucGFyc2UodGhpcy5mb3JtKTtcbiAgICAgIHRoaXMuc3VibWlzc2lvbiA9IHtcbiAgICAgICAgZGF0YTogdGhpcy5maWx0ZXJcbiAgICAgIH07XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgICBmb3JtOiB0aGlzLmZvcm1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb21wb25lbnRMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyQ2hhbmdlLnN1YnNjcmliZSggZmlsdGVyID0+IHtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uLmRhdGEgPSBmaWx0ZXI7XG4gICAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh7XG4gICAgICAgICAgc3VibWlzc2lvbjogdGhpcy5zdWJtaXNzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2UoZXZlbnQ6IG9iamVjdCkge1xuICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmb3JtQ29tcG9uZW50ID0gdGhpcy5mb3JtQ29tcG9uZW50O1xuICAgIE9iamVjdC5rZXlzKGZvcm1Db21wb25lbnQuc3VibWlzc2lvbi5kYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1Db21wb25lbnQuc3VibWlzc2lvbi5kYXRhLCBrZXkpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGFba2V5XTtcbiAgICAgICAgLy8gdGhlIGZpbHRlciB3aXRoIHR5cGUgaXMgYSBzdHJpbmcgYW5kIGlzIG5vdCBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5U3RyaW5nID0gIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID09PSAwO1xuICAgICAgICAvLyBkbyBub3QgaW5jbHVkZSBlbXB0eSBvYmplY3RzIGluIGZpbHRlclxuICAgICAgICBjb25zdCBpc0VtcHR5T2JqZWN0ID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgICAvLyBtYWtlIGlzRW1wdHlTdHJpbmcsIGlzRW1wdHlPYmplY3QgbXV0ZXhcbiAgICAgICAgaWYgKCFpc0VtcHR5U3RyaW5nICYmICFpc0VtcHR5T2JqZWN0KSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuZmlsdGVyLCBrZXksIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZSA6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWUgOiB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcltrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkZvcm1Mb2FkKGZvcm06IEZvcm1pb0Zvcm0pIHtcbiAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudExhbmcgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nO1xuICAgIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtaW8uaTE4bmV4dC5vcHRpb25zLnJlc291cmNlc1tjdXJyZW50TGFuZ10gPSB7IHRyYW5zbGF0aW9uIDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBGb3Jtc2ApIH07XG4gICAgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm1pby5sYW5ndWFnZSA9IGN1cnJlbnRMYW5nO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWx0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBEb0NoZWNrIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlciB9IGZyb20gJy4vLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFBhZ2VJbmZvIHtcbiAgcGFnZTogbnVtYmVyO1xuICBwYWdlczogbnVtYmVyO1xuICBzdGFydDogbnVtYmVyO1xuICBlbmQ6IG51bWJlcjtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHJlY29yZHNUb3RhbDogbnVtYmVyO1xuICByZWNvcmRzRGlzcGxheTogbnVtYmVyO1xuICBzZXJ2ZXJTaWRlPzogYm9vbGVhbjtcbn1cblxuLy8gaW1wb3J0YW50OiBleHBvcnQgdGhpcyBjb25zdCBkdWUgdG8gQU9UIGNvbXBpbGF0aW9uIGVycm9yc1xuLy8gc2VlIG1vcmUgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL2FvdC1tZXRhZGF0YS1lcnJvcnMjb25seS1pbml0aWFsaXplZC12YXJpYWJsZXNcbmV4cG9ydCBjb25zdCBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlVGVtcGxhdGUgPSBgXG48ZGl2PlxuICAgIDwhLS0gc2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgIDxpbnB1dCBzcGVsbGNoZWNrPVwiZmFsc2VcIiB0eXBlPVwidGV4dFwiICNzZWFyY2hFbGVtZW50XG4gICAgICAgICAgICAgICAgIChrZXl1cCk9XCJvbktleVVwKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBiZy1ncmF5LTEwMCBib3JkZXItMFwiXG4gICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3snVGFibGVzLlNlYXJjaFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19XCIgYXJpYS1sYWJlbD1cIlNlYXJjaFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJiYXNpYy1hZGRvbjJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJnLWdyYXktMTAwIGJvcmRlci0wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblNlYXJjaCgpXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIHRleHQtc2Vjb25kYXJ5XCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICNlbXB0eVRhYmxlIGNsYXNzPVwiZC1ub25lXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBiZy1ncmF5LTMwMCBib3JkZXItZ3JheS0xMDBcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgPGg0IGNsYXNzPVwiZm9udC0zeGwgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVUaXRsZSdcIj48L2g0PlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLWxnLTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi10b29sYmFyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZ3JheS0xMDBcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2xpZGVycy1oIHByLTIgdGV4dC1zZWNvbmRhcnlcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+e3snVGFibGVzLkZpbHRlcnMnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2ICNkcm9wZG93bkZpbHRlciBjbGFzcz1cImRyb3Bkb3duIG1sLTNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyYXktMTAwIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBpZD1cImRyb3Bkb3duRGVmYXVsdEZpbHRlcnNcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgZHJvcGRvd25Ub2dnbGU+XG4gICAgICAgICAgICAgIHt7IHRoaXMuZGVmYXVsdEZpbHRlci5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25EZWZhdWx0RmlsdGVyc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGRlZmF1bHRGaWx0ZXJzXCIgKGNsaWNrKT1cIm9uRmlsdGVyU2VsZWN0KGZpbHRlcilcIj5cbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXIubmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbCB0ZXh0LWxnLXJpZ2h0IG10LTMgbXQtbGctMCBkLW5vbmVcIj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGNsYXNzPVwiYnRuIHJvdW5kZWQtcGlsbCBidG4tb3V0bGluZS10aGVtZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHItMiBmb250LWxnXCI+Kzwvc3Bhbj48c3BhbiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuQWRkSXRlbSdcIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIFtuZ0NsYXNzXT1cInsgJ2NvbXBvbmVudC1sb2FkaW5nJzogbG9hZGluZ31cIj5cbiAgICAgICAgPGFwcC1hZHZhbmNlZC10YWJsZSAjYWR2YW5jZWRUYWJsZSAoaW5pdCk9XCJvblRhYmxlSW5pdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9hZCk9XCJvbkRhdGFMb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsWF09XCJmYWxzZVwiIFtzY3JvbGxZXT1cIjMyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VMZW5ndGhdPVwicGFnZUxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwiZmFsc2VcIiBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dBY3Rpb25zXT1cImZhbHNlXCIgW2xlbmd0aE1lbnVdPVwibGVuZ3RoTWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ0YWJsZUNvbmZpZ1wiIFtjb25maWdTcmNdPVwidGFibGVDb25maWdTcmNcIj48L2FwcC1hZHZhbmNlZC10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMyB0YWJsZS1jdXN0b20tcGFnZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4XCIgKm5nSWY9XCJyZWNvcmRzVG90YWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgbWwtYXV0byBtci0zIHRleHQtc2Vjb25kYXJ5XCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLlJlY29yZHNQZXJQYWdlJ1wiPjwvZGl2PlxuICAgICAgICA8ZGl2ICNkcm9wZG93bkxlbmd0aCBjbGFzcz1cImRyb3Bkb3duIG1yLTNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1ncmF5LTEwMCBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGlkPVwiZHJvcGRvd25QYWdlU2l6ZVwiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgZHJvcGRvd25Ub2dnbGU+XG4gICAgICAgICAgICB7e3BhZ2VMZW5ndGh9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25QYWdlU2l6ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0TGVuZ3RoKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGRyb3Bkb3duLWl0ZW0tdGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGVuZ3RoTWVudVwiPnt7aXRlbX19PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBtci0yXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLlBhZ2VJbmZvJ1wiIFt0cmFuc2xhdGVQYXJhbXNdPVwicGFnZUluZm9cIj48L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZSA9PT0gMFwiIGNsYXNzPVwiYnRuIHRleHQtbm93cmFwXCIgKGNsaWNrKT1cImZpcnN0UGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZT09PTBcIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJwcmV2aW91c1BhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlPT09cGFnZUluZm8ucGFnZXMtMVwiIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cIm5leHRQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tcmlnaHQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInBhZ2VJbmZvICYmIHBhZ2VJbmZvLnBhZ2U9PT1wYWdlSW5mby5wYWdlcy0xXCIgY2xhc3M9XCJidG4gdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwibGFzdFBhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbmA7XG5cbi8qKlxuICpcbiAqIEEgc3BlY2lmaWMgdmFsdWUgZm9yIGEgY3JpdGVyaW9uXG4gKlxuICovXG5pbnRlcmZhY2UgU2VhcmNoSXRlbSB7XG4gIGZpbHRlcjogYW55O1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC10YWJsZS1tb2RhbCcsXG4gIHRlbXBsYXRlOiBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlVGVtcGxhdGUsXG4gIHN0eWxlczogW1xuICAgIGBcblxuICAgIGBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRWxlbWVudCAmJiB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9BTExfRklMVEVSID0ge1xuICAgIG5hbWU6ICdUYWJsZXMuQWxsJyxcbiAgICBmaWx0ZXI6IG51bGxcbiAgfTtcblxuICBAVmlld0NoaWxkKCdhZHZhbmNlZFRhYmxlJykgYWR2YW5jZWRUYWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2VtcHR5VGFibGUnKSBlbXB0eVRhYmxlPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25GaWx0ZXInKSBkcm9wZG93bkZpbHRlcj86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duTGVuZ3RoJykgZHJvcGRvd25MZW5ndGg/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzZWFyY2hFbGVtZW50Jykgc2VhcmNoRWxlbWVudDogYW55O1xuICBASW5wdXQoJ3RhYmxlQ29uZmlnJykgdGFibGVDb25maWc/OiBUYWJsZUNvbmZpZ3VyYXRpb247XG4gIEBJbnB1dCgndGFibGVDb25maWdTcmMnKSB0YWJsZUNvbmZpZ1NyYz86IHN0cmluZztcbiAgQElucHV0KCdwYWdlTGVuZ3RoJykgcGFnZUxlbmd0aCA9IDI1O1xuICBASW5wdXQoJ3NlYXJjaFRleHQnKSBzZWFyY2hUZXh0Pzogc3RyaW5nO1xuICBASW5wdXQoJ2xlbmd0aE1lbnUnKSBsZW5ndGhNZW51OiBBcnJheTxudW1iZXI+ID0gWzUsIDEwLCAyNSwgNTAsIDEwMF07XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgcmVjb3Jkc1RvdGFsID0gMDtcbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIHJlY29yZHNGaWx0ZXJlZCA9IDA7XG4gIHB1YmxpYyBkZWZhdWx0RmlsdGVyczogQXJyYXk8YW55PiA9IFtBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUl07XG4gIEBJbnB1dCgnZGVmYXVsdEZpbHRlcicpIGRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcblxuXG4gIHB1YmxpYyBwYWdlSW5mbyA9IDxQYWdlSW5mbz57XG4gICAgc2VydmVyU2lkZTogdHJ1ZVxuICB9O1xuICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlO1xuICBjb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgIHByb3RlY3RlZCBhZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICBwcm90ZWN0ZWQgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICkge1xuICAgIHN1cGVyKF9yb3V0ZXIsIF9hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5tb2RhbENsYXNzID0gJ21vZGFsLXhsIG1vZGFsLXRhYmxlJztcbiAgICB0aGlzLl90ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZVBpcGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldElucHV0cyhjb21wb25lbnRUeXBlKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgcHJvcHMgPSBjb21wb25lbnRUeXBlLl9fcHJvcF9fbWV0YWRhdGFfXztcbiAgICBjb25zdCBpbnB1dHM6IGFueVtdID0gW107XG4gICAgaWYgKHByb3BzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgY29uc3QgbWVtYmVyID0gcHJvcHNbcHJvcF1bMF07XG4gICAgICBpZiAobWVtYmVyLm5nTWV0YWRhdGFOYW1lID09PSAnSW5wdXQnKSB7XG4gICAgICAgIGlucHV0cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpbnB1dHMuc29ydCgpO1xuICB9XG5cbiAgcHVibGljIGhhc0lucHV0cygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMub2tCdXR0b25UZXh0ID0gJ1RhYmxlcy5BcHBseSc7XG4gICAgdGhpcy5jYW5jZWxCdXR0b25UZXh0ID0gJ1RhYmxlcy5DYW5jZWwnO1xuICAgIC8vIGdldCByb3V0ZSBkYXRhXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgLy8gc2V0IG1vZGFsIHRpdGxlIGlmIGFueVxuICAgICAgaWYgKGRhdGEudGl0bGUpIHtcbiAgICAgICAgdGhpcy5tb2RhbFRpdGxlID0gZGF0YS50aXRsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY29uZmlnKSB7XG4gICAgICAgIHRoaXMudGFibGVDb25maWcgPSBkYXRhLmNvbmZpZztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlcnMucHVzaC5hcHBseSh0aGlzLmRlZmF1bHRGaWx0ZXJzLCB0aGlzLnRhYmxlQ29uZmlnLnNlYXJjaGVzKTtcbiAgICAgIH1cbiAgICAgIC8vIGltcG9ydGFudDogdXNlIGhhc0lucHV0cyBkdWUgdG8gQU9UIGNvbXBpbGF0aW9uLiBNZXRhZGF0YSBwcm9wZXJ0aWVzIGNhbm5vdCBiZSB1c2VkIChlLmcuIEBJbnB1dCgpKVxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBhcmUgZW1wdHkgZHVyaW5nIHJ1bnRpbWVcbiAgICAgIC8vIHNvIHdlIG5lZWQgdG8gZGVmaW5lIG1hbnVhbGx5IGlucHV0IHByb3BlcnRpZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgYmluZCB0aHJvdWdoIHRoaXMgcHJvY2Vzc1xuICAgICAgLy8gYmluZCBhbGwgaW5wdXRzXG4gICAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmhhc0lucHV0cygpO1xuICAgICAgaW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGlucHV0KSkge1xuICAgICAgICAgIHRoaXNbaW5wdXRdID0gZGF0YVtpbnB1dF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgICB0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmFkdmFuY2VkVGFibGUuY29uZmlnQ2hhbmdlcy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICAgICAgICAvLyByZXNldCBkZWZhdWx0IGZpbHRlclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudC5ERUZBVUxUX0FMTF9GSUxURVI7XG4gICAgICAgICAgICAvLyBpbml0IGZpbHRlclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycyA9IFtBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUl07XG4gICAgICAgICAgICAvLyBhZGQgZXh0cmEgZmlsdGVyc1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycy5wdXNoLmFwcGx5KHRoaXMuZGVmYXVsdEZpbHRlcnMsIHRoaXMudGFibGVDb25maWcuc2VhcmNoZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgb2soKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0YUxvYWQoZGF0YTogQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQpIHtcbiAgICB0aGlzLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICAgIHRoaXMucmVjb3Jkc0ZpbHRlcmVkID0gZGF0YS5yZWNvcmRzRmlsdGVyZWQ7XG4gICAgLy8gZ2V0IGZpcnN0IHBhZ2UgaW5mbyAoYmVjYXVzZSBwYWdlIGlzIG5vdCBnb2luZyB0byBiZSBmaXJlZCBmb3IgZmlyc3QgcGFnZSlcbiAgICBpZiAoZGF0YS5yZWNvcmRzVG90YWwgPiAwICYmIHRoaXMucGFnZUluZm8ucmVjb3Jkc1RvdGFsID09PSAwKSB7XG4gICAgICB0aGlzLnBhZ2VJbmZvLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICAgIH1cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgfVxuXG4gIHByZXZpb3VzUGFnZSgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBnbyB0byBuZXh0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ3ByZXZpb3VzJykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIG5leHQgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgnbmV4dCcpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBvblRhYmxlSW5pdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBkYXRhVGFibGUgPSBzZWxmLmFkdmFuY2VkVGFibGUgJiYgc2VsZi5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZTtcbiAgICAvLyBnZXQgaW5pdGlhbCBwYWdlIGluZm9cbiAgICBjb25zdCBpbml0aWFsUGFnZUluZm8gPSA8UGFnZUluZm8+ZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgIGluaXRpYWxQYWdlSW5mby5zdGFydCArPSAxO1xuICAgIHNlbGYucGFnZUluZm8gPSBpbml0aWFsUGFnZUluZm87XG4gICAgLy8gY2hhbmdlIGVtcHR5VGFibGVNZXNzYWdlXG4gICAgZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5lbXB0eVRhYmxlICYmIHRoaXMuZW1wdHlUYWJsZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcbiAgICAvLyBiaW5kIHBhZ2UgY2hhbmdlIGV2ZW50XG4gICAgZGF0YVRhYmxlLm9uKCdwYWdlLmR0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFnZUluZm8gPSA8UGFnZUluZm8+ZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgcGFnZUluZm8uc3RhcnQgKz0gMTtcbiAgICAgIHNlbGYucGFnZUluZm8gPSBwYWdlSW5mbztcbiAgICB9KTtcbiAgICAvLyBiaW5kIGRyYXcgY2hhbmdlIGV2ZW50XG4gICAgZGF0YVRhYmxlLm9uKCdkcmF3LmR0JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZm9yIGZ1dHVyZSB1c2VcbiAgICAgIHNlbGYubG9hZGluZyA9IGZhbHNlO1xuICAgICAgY29uc3QgcGFnZUluZm8gPSA8UGFnZUluZm8+ZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgcGFnZUluZm8uc3RhcnQgKz0gMTtcbiAgICAgIHNlbGYucGFnZUluZm8gPSBwYWdlSW5mbztcbiAgICB9KTtcbiAgfVxuXG4gIGZpcnN0UGFnZSgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBnbyB0byBmaXJzdCBwYWdlXG4gICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCdmaXJzdCcpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBsYXN0UGFnZSgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBnbyB0byBsYXN0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ2xhc3QnKS5kcmF3KCdwYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICB0aGlzLnBhZ2VMZW5ndGggPSB2YWx1ZTtcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZS5sZW4odmFsdWUpLmRyYXcoKTtcbiAgICB9XG4gIH1cblxuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdSZXR1cm4nKSB7XG4gICAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAgIC8vIGxvYWRpbmdcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLnNlYXJjaCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2goKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgLy8gbG9hZGluZ1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5zZWFyY2godGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogUmVhZHMgdGhlIG1vZGFsIHRhYmxlIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBmaWx0ZXJzIHRvIHVzZSBpbiB0aGUgdGFibGVcbiAgICogcXVlcnkuXG4gICAqXG4gICAqIEBwYXJhbSB0YWJsZUNvbmZpZyB7b2JqZWN0fSBUaGUgdGFibGUgY29uZmlndXJhdGlvbiBmcm9tIGpzb24gZmlsZVxuICAgKiBAcGFyYW0gZGVmYXVsdEZpbHRlclZhbHVlcyB7b2JqZWN0fSBBIGxpc3Qgb2YgZGVmYXVsdCBmaWx0ZXJzXG4gICAqIEBwYXJhbSBzZWFyY2hJdGVtIFRoZSBzZWFyY2hJdGVtIHRvIHVzZVxuICAgKlxuICAgKi9cbiAgZ2V0RmlsdGVycyhcbiAgICB0YWJsZUNvbmZpZzogYW55LFxuICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSB7fSxcbiAgICBzZWFyY2hJdGVtOiBhbnlcbiAgKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgLy8gRG8gbm90aGluZyBpbiBhYnNlbmNlIG9mIGNvbmZpZ3VyYXRpb24uXG4gICAgaWYgKCF0YWJsZUNvbmZpZyB8fCAhQXJyYXkuaXNBcnJheSh0YWJsZUNvbmZpZy5jcml0ZXJpYSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoSXRlbS5maWx0ZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoZWRDcml0ZXJpb24gPSB0YWJsZUNvbmZpZy5jcml0ZXJpYS5maW5kKGNyaXRlcmlvbiA9PlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlYXJjaEl0ZW0uZmlsdGVyLCBjcml0ZXJpb24ubmFtZSlcbiAgICApO1xuXG4gICAgaWYgKG1hdGNoZWRDcml0ZXJpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gc2VhcmNoSXRlbS5maWx0ZXJbbWF0Y2hlZENyaXRlcmlvbi5uYW1lXTtcblxuICAgIGNvbnN0IGNyaXRlcmlvblNhZmVOYW1lID0gbWF0Y2hlZENyaXRlcmlvbi5uYW1lICE9PSBudWxsXG4gICAgICA/IG1hdGNoZWRDcml0ZXJpb24ubmFtZS50b1N0cmluZygpXG4gICAgICA6ICcnO1xuXG4gICAgbGV0IGFwcGxpY2FibGVGaWx0ZXI6IHN0cmluZztcblxuICAgIC8vIFJhdyBkYXRlcyBzaG91bGQgYmUgdHJhbnNmb3JtZWQgdG8gYSBzcGVjaWZpYyBmb3JtYXRcbiAgICBpZiAoY3JpdGVyaW9uU2FmZU5hbWUuaW5jbHVkZXMoJ0dNVCcpKSB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oY3JpdGVyaW9uU2FmZU5hbWUsICdNTS9kZC95eXl5Jyk7XG4gICAgICBhcHBsaWNhYmxlRmlsdGVyID0gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKG1hdGNoZWRDcml0ZXJpb24uZmlsdGVyLCB7XG4gICAgICAgIHZhbHVlOiBuZXdEYXRlXG4gICAgICB9KTtcblxuICAgIH0gZWxzZSBpZiAoY3JpdGVyaW9uU2FmZU5hbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBhcHBsaWNhYmxlRmlsdGVyID0gKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShtYXRjaGVkQ3JpdGVyaW9uLmZpbHRlciwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfSwgZGVmYXVsdEZpbHRlclZhbHVlcykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwbGljYWJsZUZpbHRlciA9ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBbYXBwbGljYWJsZUZpbHRlcl07XG4gIH1cblxuICBvbkZpbHRlclNlbGVjdCh2YWx1ZTogeyBmaWx0ZXI6IGFueTsgbmFtZTogc3RyaW5nIH0gfCBhbnkpIHtcbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBSdW5zIGEgZmlsdGVyIGFnYWluc3QgdGhlIG1vZGFsIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0byB1c2UgaW4gdGhlIHNlYXJjaFxuICAgKlxuICAgKi9cbiAgYXN5bmMgYWR2YW5jZWRTZWFyY2goZmlsdGVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBEbyBub3RoaW5nIGluIGFic2VuY2Ugb2YgY29uZmlndXJhdGlvbi5cbiAgICBpZiAoIXRoaXMudGFibGVDb25maWcgfHwgIUFycmF5LmlzQXJyYXkodGhpcy50YWJsZUNvbmZpZy5jcml0ZXJpYSkgfHwgIXRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgY29uc29sZS53YXJuKCdObyB0YWJsZSBjb25maWd1cmF0aW9uIGF2YWlsYWJsZScsIHRoaXMudGFibGVDb25maWcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFuIGFkdmFuY2VkIHRhYmxlIGhhcyBzb21lIGZpbHRlcnMgYnkgZGVmYXVsdFxuICAgIGxldCBkZWZhdWx0RmlsdGVyVmFsdWVzO1xuICAgIHRyeSB7XG4gICAgICBkZWZhdWx0RmlsdGVyVmFsdWVzID0gYXdhaXQgdGhpcy5hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIuZ2V0VmFsdWVzKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBkZWZhdWx0RmlsdGVyVmFsdWVzID0ge307XG4gICAgfVxuXG4gICAgY29uc3QgZXhwcmVzc2lvbnM6IGFueVtdID0gW107XG4gICAgbGV0IHByZWRlZmluZWRDcml0ZXJpYTtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICBwcmVkZWZpbmVkQ3JpdGVyaWEgPSB0aGlzLmdldEZpbHRlcnMoXG4gICAgICAgIHRoaXMudGFibGVDb25maWcsXG4gICAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMsXG4gICAgICAgIGZpbHRlclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRW1wdHkgYSBmYWxzeSBmaWx0ZXIgcmVzZXRzIHRoZSByZXN1bHRzXG4gICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcbiAgICB9XG5cbiAgICAvLyBzZWFyY2ggZmlsdGVyIGlzIGFwcGxpZWQgc2VwYXJhdGVseSwgdGhlcmUgaXMgbm8gbmVlZCB0byBhZGQgaGVyZS5cbiAgICBleHByZXNzaW9ucy5wdXNoKHByZWRlZmluZWRDcml0ZXJpYSk7XG5cbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5hZHZhbmNlZFRhYmxlLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICBxdWVyeS5zZXRQYXJhbSgnZmlsdGVyJywgZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSkucHJlcGFyZSgpO1xuICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5xdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5mZXRjaCgpO1xuICB9XG59XG5cbiIsImltcG9ydCB7IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS1tb2RhbC9hZHZhbmNlZC10YWJsZS1tb2RhbC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgLm1vZGFsLXRhYmxlIC5kYXRhVGFibGVzX3dyYXBwZXIge1xuICAgICAgaGVpZ2h0OiA1MHZoO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB9XG4gICAgYCxcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHVibGljIGRpc21pc3M6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKCdzZWFyY2hFbGVtZW50Jykgc2VhcmNoRWxlbWVudDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBjb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyOiBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsXG4gICAgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgX21vZGFsUmVmOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcihyb3V0ZXIsIGFjdGl2YXRlZFJvdXRlLCBjb250ZXh0LCBhZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsIGRhdGVQaXBlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEVsZW1lbnQgJiYgdGhpcy5zZWFyY2hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvaygpIHtcbiAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2FuY2VsKCkge1xuICAgIHRoaXMuX21vZGFsUmVmLmhpZGUoKTtcbiAgICB0aGlzLmRpc21pc3MuZW1pdCgnY2FuY2VsJyk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQnO1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VsZWN0U2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kYWw6IE1vZGFsU2VydmljZSkge1xuICAgIC8vXG4gIH1cblxuICBzZWxlY3QoaW5pdGlhbFN0YXRlOiBhbnkpOiBQcm9taXNlPHtyZXN1bHQ6IHN0cmluZywgaXRlbXM6IEFycmF5PGFueT59PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5fbW9kYWwub3Blbk1vZGFsQ29tcG9uZW50KEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LCB7XG4gICAgICAgICAgY2xhc3M6ICdtb2RhbC14bCBtb2RhbC10YWJsZScsXG4gICAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgICAgICBhbmltYXRlZDogdHJ1ZSxcbiAgICAgICAgICBpbml0aWFsU3RhdGU6IGluaXRpYWxTdGF0ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCA9IG1vZGFsUmVmLmNvbnRlbnQ7XG4gICAgICAgIGNvbXBvbmVudFJlZi5kaXNtaXNzLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgICBpdGVtczogKGNvbXBvbmVudFJlZi5hZHZhbmNlZFRhYmxlICYmIGNvbXBvbmVudFJlZi5hZHZhbmNlZFRhYmxlLnNlbGVjdGVkKSBhcyBhbnlbXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmUsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uUmVzb2x2ZXIgaW1wbGVtZW50cyBSZXNvbHZlPHN0cmluZz4ge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQpIHt9XG4gICAgcmVzb2x2ZShcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICAgKTogUHJvbWlzZTxhbnk+fGFueSB7XG4gICAgICAgIC8vIGdldCBsaXN0XG4gICAgICAgIGNvbnN0IGxpc3QgPSByb3V0ZS5kYXRhLmxpc3QgfHwgcm91dGUucGFyYW1zLmxpc3Q7XG4gICAgICAgIC8vIGdldCBtb2RlbFxuICAgICAgICBjb25zdCBtb2RlbCA9IHJvdXRlLmRhdGEubW9kZWwgfHwgcm91dGUucGFyYW1zLm1vZGVsO1xuICAgICAgICAvLyBnZXQgY29uZmlndXJhdGlvblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQoYGFzc2V0cy9saXN0cy8ke21vZGVsfS8ke2xpc3R9Lmpzb25gKS50b1Byb21pc2UoKTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaENvbmZpZ3VyYXRpb25SZXNvbHZlciBpbXBsZW1lbnRzIFJlc29sdmU8c3RyaW5nPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCkge31cbiAgICByZXNvbHZlKFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbiAgICApOiBQcm9taXNlPGFueT58YW55IHtcbiAgICAgICAgLy8gZ2V0IGxpc3RcbiAgICAgICAgY29uc3QgbGlzdCA9IHJvdXRlLmRhdGEubGlzdCB8fCByb3V0ZS5wYXJhbXMubGlzdDtcbiAgICAgICAgLy8gZ2V0IG1vZGVsXG4gICAgICAgIGNvbnN0IG1vZGVsID0gcm91dGUuZGF0YS5tb2RlbCB8fCByb3V0ZS5wYXJhbXMubW9kZWw7XG4gICAgICAgIC8vIGdldCBjb25maWd1cmF0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldChgYXNzZXRzL2xpc3RzLyR7bW9kZWx9L3NlYXJjaC4ke2xpc3R9Lmpzb25gKS50b1Byb21pc2UoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi90YWJsZXMuYWN0aXZhdGVkLXRhYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLXNldHRpbmdzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnbW9kYWxfc2V0dGluZ3NfdGVtcGxhdGUnKSBtb2RhbF9zZXR0aW5nc190ZW1wbGF0ZT86IEVsZW1lbnRSZWY7XHJcbiAgbW9kYWxSZWY/OiBCc01vZGFsUmVmO1xyXG4gIHN0b3JhZ2VLZXk6IGFueTtcclxuICBwYXJhbXM6IGFueSA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnBhcmFtcztcclxuICBwcml2YXRlIHNhdmVkVGFibGVTZXR0aW5nczogYW55O1xyXG4gIGZvcm0/OiBGb3JtR3JvdXA7XHJcbiAgY29sdW1uczogYW55W10gPSBbXTtcclxuICB0YWJsZUNvbHVtbnM6IGFueTtcclxuICBhY3RpdmVUYWJsZUNvbmZpZzogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcclxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU3RvcmFnZTogVXNlclN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UpIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlVGFibGVDb25maWcgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSAmJiB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5nZXRDb25maWcoKTtcclxuICAgIHRoaXMuc3RvcmFnZUtleSA9ICdyZWdpc3RyYXIvc2V0dGluZ3MvJyArIHRoaXMuYWN0aXZlVGFibGVDb25maWcudGl0bGUgKyAnL3RhYmxlL2NvbHVtbnMnO1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7Y29sdW1uczogbmV3IEZvcm1BcnJheShbXSwgdGhpcy5taW5TZWxlY3RlZENvbHVtbnMoMSkpfSk7XHJcbiAgICB0aGlzLnVzZXJTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLnNhdmVkVGFibGVTZXR0aW5ncykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmhhbmRsZUNvbHVtbnModGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZENoZWNrYm94ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYWRkQ2hlY2tib3hlcygpIHtcclxuICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy5hY3RpdmVUYWJsZUNvbmZpZy5jb2x1bW5zLnNsaWNlKDEpO1xyXG4gICAgdGhpcy50YWJsZUNvbHVtbnMuZm9yRWFjaCAoKGNvbHVtbiwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0ge1xyXG4gICAgICAgICAgaWQ6IGNvbHVtbi5uYW1lLFxyXG4gICAgICAgICAgbmFtZTogY29sdW1uLnRpdGxlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChjb250cm9sKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2ggKChjb2x1bW4sIGkpID0+IHtcclxuICAgICAgICBjb2x1bW4uY2hlY2sgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uY2hlY2sgPSB0aGlzLnNhdmVkVGFibGVTZXR0aW5ncy5pbmNsdWRlcyhjb2x1bW4uaWQpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChjb2x1bW4uY2hlY2spO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICAgICh0aGlzLmZvcm0uY29udHJvbHMuY29sdW1ucyBhcyBGb3JtQXJyYXkpLnB1c2goY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5UYWJsZVNldHRpbmdzKHRhYmxlX3NldHRpbmdzX21vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0YWJsZV9zZXR0aW5nc19tb2RhbCk7XHJcbiAgfVxyXG5cclxuICBzYXZlVGFibGVTZXR0aW5ncygpIHtcclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbnNJZHMgPSB0aGlzLmZvcm0udmFsdWUuY29sdW1uc1xyXG4gICAgICAubWFwKCh2LCBpKSA9PiB2ID8gdGhpcy5jb2x1bW5zW2ldLmlkIDogbnVsbClcclxuICAgICAgLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xyXG4gICAgdGhpcy51c2VyU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSwgc2VsZWN0ZWRDb2x1bW5zSWRzKTtcclxuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xyXG4gICAgICB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5oYW5kbGVDb2x1bW5zKHNlbGVjdGVkQ29sdW1uc0lkcyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xyXG4gICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc21pc3MoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xyXG4gICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1pblNlbGVjdGVkQ29sdW1ucyhtaW4gPSAxKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKGZvcm1BcnJheTogRm9ybUFycmF5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRvdGFsU2VsZWN0ZWQgPSBmb3JtQXJyYXkuY29udHJvbHNcclxuICAgICAgICAubWFwKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZSlcclxuICAgICAgICAucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBuZXh0ID8gcHJldiArIG5leHQgOiBwcmV2LCAwKTtcclxuXHJcbiAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkID49IG1pbiA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB2YWxpZGF0b3I7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgVGVtcGxhdGVSZWYsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFVzZXJTdG9yYWdlU2VydmljZSwgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUyB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlLCBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcn0gZnJvbSAnLi9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUtc2VhcmNoLWJhc2UnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGV9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGV4dFV0aWxzIH0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXMge1xuICBhZHZhbmNlZFZpZXc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRTZWFyY2hMaXN0IHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUtc2VhcmNoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kgIHtcblxuICBwcml2YXRlIHF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgQElucHV0KCkgcHVibGljIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgQElucHV0KCkgcHVibGljIGNvbGxhcHNlZCA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBhbGxvd1NhdmUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd01vcmUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgbWVyZ2VRdWVyeVBhcmFtcyA9IGZhbHNlO1xuICBAVmlld0NoaWxkKCdzZWFyY2hUZXh0JykgcHVibGljIHNlYXJjaFRleHQ6IGFueTtcbiAgQE91dHB1dCgndmlld0NoYW5nZScpIHB1YmxpYyB2aWV3Q2hhbmdlOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzPigpO1xuICBAT3V0cHV0KCdsaXN0Q2hhbmdlJykgcHVibGljIGxpc3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaExpc3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaExpc3Q+KCk7XG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zZWFyY2hUZXh0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuc2VhcmNoVGV4dCAmJiB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudCAmJiB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSkgYXMgc3RyaW5nO1xuICB9XG5cbiAgcHVibGljIG1vZGFsUmVmPzogQnNNb2RhbFJlZjtcbiAgcHVibGljIHN0b3JhZ2VLZXk6IGFueTtcbiAgcHVibGljIHN0b3JhZ2VWYWx1ZTogYW55O1xuICBwdWJsaWMgdXNlclNlYXJjaExpc3Q6IGFueSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRMaXN0OiBhbnkgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCBwcm90ZWN0ZWQgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgcHJvdGVjdGVkIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF91c2VyU3RvcmFnZTogVXNlclN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfYWR2YW5jZWRTZWFyY2hWYWx1ZVByb3ZpZGVyOiBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsXG4gICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbDogTW9kYWxTZXJ2aWNlKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlLmNvbmZpZ0NoYW5nZXMuc3Vic2NyaWJlKChjb25maWcpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxvYWQgdXNlciBzZWFyY2hlc1xuICAgICAgICB0aGlzLmxvYWRVc2VyU2VhcmNoTGlzdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIGlmIHNlYXJjaCBjb21wb25lbnQgbWVyZ2VzIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgIC8vICh1c2VzIHF1ZXJ5UGFyYW1zIHRvIGFwcGx5IGZpbHRlcilcbiAgICAgICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHF1ZXJ5UGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYXBwbHlRdWVyeVBhcmFtcyhxdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBxdWVyeSBnaXZlbiBieSB0aGUgcXVlcnlQYXJhbXMgb2YgdGhlIGFjdGl2YXRlZCByb3V0ZVxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcbiAgICovXG4gIHByaXZhdGUgYXBwbHlRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogYW55KSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGU7XG4gICAgdGhpcy5maWx0ZXIgPSB7fTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCAncScpKSB7XG4gICAgICAvLyBzZXQgY29sbGFwc2VkXG4gICAgICB0aGlzLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICAvLyBzZWFyY2ggdGV4dFxuICAgICAgdGhpcy50ZXh0ID0gcXVlcnlQYXJhbXMucTtcbiAgICAgIHJldHVybiB0YWJsZS5zZWFyY2godGhpcy50ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgfVxuXG4gICAgbGV0IGZpbHRlclBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5UGFyYW1zKTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsICdzJykpIHtcbiAgICAgIC8vIHNldCBjb2xsYXBzZWRcbiAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAvLyBmaW5kIHVzZXIgc2VhcmNoIGJ5IG5hbWVcbiAgICAgIGlmICh0aGlzLnVzZXJTZWFyY2hMaXN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PT0gcXVlcnlQYXJhbXMucztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTGlzdCkge1xuICAgICAgICAgIGZpbHRlclBhcmFtcyA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoZmlsdGVyUGFyYW1zKS5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgLy8gc2VhcmNoIGNyaXRlcmlhXG4gICAgICBpZiAodGFibGUuY29uZmlnICYmIHRhYmxlLmNvbmZpZy5jcml0ZXJpYSkge1xuICAgICAgICByZXR1cm4gdGFibGUuY29uZmlnLmNyaXRlcmlhLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBrZXk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZmlsdGVyUGFyYW1zW2tleV07XG4gICAgICBpZiAoVGV4dFV0aWxzLmlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQoZmlsdGVyUGFyYW1zW2tleV0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsdGVyW2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIC8vIHNldCB2YWx1ZVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5maWx0ZXIsIGtleSwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpbHRlcltrZXldICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGNhbGwgZmlsdGVyQ2hhbmdlIGV2ZW50IHRvIGFwcGx5IGNoYW5nZSB0byBhZHZhbmNlZCBzZWFyY2ggY2hpbGRyZW5cbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICAvLyBhcHBseSBxdWVyeVxuICAgIHRoaXMuZ2V0UXVlcnkoKS50aGVuKChxdWVyeSkgPT4ge1xuICAgICAgLy8gaWYgdGFibGUgcXVlcnkgaXMgbnVsbFxuICAgICAgaWYgKHRhYmxlLnF1ZXJ5ID09IG51bGwpIHtcbiAgICAgICAgLy8gc2V0IHF1ZXJ5XG4gICAgICAgIHRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocXVlcnkgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHF1ZXJ5LmdldFBhcmFtcygpO1xuICAgICAgICAgIC8vIG90aGVyd2lzZSBzZXQgZmlsdGVyIHBhcmFtc1xuICAgICAgICAgIHRhYmxlLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgcGFyYW1zLiRmaWx0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhYmxlLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGFuZCBmaW5hbGx5IGZldGNoIGRhdGFcbiAgICAgIHRhYmxlLmZldGNoKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgb25TZWFyY2hLZXlEb3duKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy50YWJsZSAmJiBldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgLy8gZ2V0IHNlYXJjaCB0ZXh0XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gKCBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAvLyBtZXJnZSBxdWVyeSBwYXJhbXMgP1xuICAgICAgaWYgKHRoaXMubWVyZ2VRdWVyeVBhcmFtcykge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICBxOiBzZWFyY2hUZXh0LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy50YWJsZS5jb25maWcgJiYgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0cnkgdG8gYXBwbHkgZmlsdGVyIGJ5IGFwcGVuZGluZyBxdWVyeSBwYXJhbXNcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHE6IHNlYXJjaFRleHRcbiAgICAgIH0pO1xuICAgICAgLy8gb3RoZXJ3aXNlIGRvIHNlYXJjaFxuICAgICAgdGhpcy50YWJsZS5zZWFyY2goc2VhcmNoVGV4dCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRyYW5zZm9ybURhdGUoZGF0ZSkge1xuICAgIGRhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnTU0vZGQveXl5eScpOyAvLyB3aGF0ZXZlciBmb3JtYXQgeW91IG5lZWQuXG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBwdWJsaWMgY29udmVydFRvU3RyaW5nKG5hbWVGaWx0ZXIpIHtcbiAgICBsZXQgbmFtZSA9ICcnO1xuICAgIGlmIChuYW1lRmlsdGVyICE9IG51bGwpIHtcbiAgICAgIG5hbWUgPSBuYW1lRmlsdGVyLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbi8vICBMb2FkIHNhdmVkIGNyaXRlcmlhIHNlYXJjaGVzIHVzZXIgaGFzIHN0b3JlZCBiZWZvcmVcbiAgcHJpdmF0ZSBsb2FkVXNlclNlYXJjaExpc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSAndGFibGVzLycgKyB0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCArICcvc2VhcmNoZXMnO1xuICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IGRhdGEudmFsdWUgfHwgW107XG4gICAgICAvLyBpZiB0YWJsZSBjb25maWd1cmF0aW9uIGhhcyBwcmUtZGVmaW5lZCBzZWFyY2hlc1xuICAgICAgaWYgKHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcuc2VhcmNoZXMgJiYgdGhpcy50YWJsZS5jb25maWcuc2VhcmNoZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGFkZCBwcmUtZGVmaW5lZCBsaXN0c1xuICAgICAgICBsaXN0LnB1c2guYXBwbHkobGlzdCwgdGhpcy50YWJsZS5jb25maWcuc2VhcmNoZXMubWFwICggKHgpID0+IHtcbiAgICAgICAgICB4LnJlYWRPbmx5ID0gdHJ1ZTsgLy8gYXMgcmVhZG9ubHlcbiAgICAgICAgICB4Lm5hbWUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh4Lm5hbWUpO1xuICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgdXNlciBzZWFyY2ggbGlzdFxuICAgICAgdGhpcy51c2VyU2VhcmNoTGlzdCA9IGxpc3Q7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgLy8gRE8gTk9UIFRIUk9XIEVSUk9SXG4gICAgICAvLyB0b2RvOiBub3RpZnkgY29tcG9uZW50IGZvciB0aGlzIGVycm9yIGluIG9yZGVyIHRvIGRpc2FibGUgc29tZSBhY3Rpb25zXG4gICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIHVzZXIgc2VhcmNoIGxpc3QnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFVzZXJTZWFyY2goZXZlbnQ6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRMaXN0ICYmIHRoaXMudGFibGUpIHtcbiAgICAgIGNvbnN0IGxpc3RGb3VuZCA9IHRoaXMuc2VhcmNoSW5MaXN0QnlOYW1lKHRoaXMuc2VsZWN0ZWRMaXN0Lm5hbWUpO1xuICAgICAgaWYgKGxpc3RGb3VuZCkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IHE6IG51bGwsIHM6IHRoaXMuc2VsZWN0ZWRMaXN0Lm5hbWUgfTtcbiAgICAgICAgICAvLyBjbGVhciBjcml0ZXJpYSBpZiBhbnlcbiAgICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAvLyBzZXQgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IGxpc3RGb3VuZDtcbiAgICAgICAgdGhpcy5maWx0ZXIgPSB0aGlzLnNlbGVjdGVkTGlzdC5maWx0ZXI7XG4gICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsgczogbnVsbCB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hJbkxpc3RCeU5hbWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIEFycmF5LmlzQXJyYXkodGhpcy51c2VyU2VhcmNoTGlzdCkgKSB7XG4gICAgICBjb25zdCBsaXN0Rm91bmQgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbmQoICh4KSA9PiB4Lm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCBsaXN0Rm91bmQgKSB7XG4gICAgICAgIHJldHVybiBsaXN0Rm91bmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbi8vICBVcGRhdGUgbGlzdCBpdGVtIGNvbnRlbnRzIHdpdGggZ2l2ZW4gY29udGVudCAoU2VhcmNoIGJ5IG9iamVjdCBuYW1lIHByb3BlcnR5KVxuICBwdWJsaWMgdXBkYXRlU2F2ZWRTZWFyY2hMaXN0SXRlbUJ5TmFtZSggbmFtZTogc3RyaW5nLCBuZXdJdGVtOiBhbnkgKSB7XG4gICAgY29uc3QgaXRlbUluTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmluZCggKHgpID0+IHgubmFtZSA9PT0gbmFtZSApO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5pbmRleE9mKGl0ZW1Jbkxpc3QpO1xuICAgIHRoaXMudXNlclNlYXJjaExpc3RbaW5kZXhdID0gbmV3SXRlbTtcbiAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3RbaW5kZXhdO1xuICB9XG5cbi8vICBVcGRhdGUgbGlzdCBpdGVtIGNvbnRlbnRzIHdpdGggZ2l2ZW4gY29udGVudCAoU2VhcmNoIGJ5IG9iamVjdClcbiAgcHVibGljIHVwZGF0ZVNhdmVkU2VhcmNoTGlzdEl0ZW1CeU9iamVjdCggaXRlbUluTGlzdDogYW55LCBuZXdJdGVtOiBhbnkgKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmluZGV4T2YoaXRlbUluTGlzdCk7XG4gICAgdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF0gPSBuZXdJdGVtO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF07XG4gIH1cblxuLy8gIERlbGV0ZSBsaXN0IGl0ZW0gZnJvbSBsaXN0XG4gIHB1YmxpYyBkZWxldGVJdGVtRnJvbVNhdmVkU2VhcmNoTGlzdEJ5T2JqZWN0KCBpdGVtSW5MaXN0OiBhbnkpIHtcbiAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IGl0ZW1Jbkxpc3QpO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2godHJ1ZSk7XG4gICAgdGhpcy51cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpO1xuICB9XG5cbi8vICBVc2VyIGNob3NlIHRvIHNhdmUgaXRzIGFkdmFuY2VkIGZvcm0gc2VhcmNoIGNyaXRlcmlhXG4gIHB1YmxpYyBzYXZlU2VhcmNoKCB0ZW1wbGF0ZVRvTG9hZDogVGVtcGxhdGVSZWY8YW55PiwgbmV3TGlzdDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCkge1xuLy8gICAgICBTZXQgdGhlIGNvcnJlc3BvbmRpbmcga2V5IHRvIGl0cyBsaXN0IGFuZCBzaG93IGEgY29uZmlybWF0aW9uIG1vZGFsIHdpbmRvd1xuICAgICAgdGhpcy5zdG9yYWdlS2V5ID0gYHRhYmxlcy8ke3RoaXMudGFibGUuY29uZmlnLm1vZGVsfS9zZWFyY2hlc2A7XG4gICAgICBpZiAodGhpcy5maWx0ZXIgJiYgT2JqZWN0LmtleXModGhpcy5maWx0ZXIpLmxlbmd0aCkge1xuLy8gICAgICBVc2VyIHdhbnRzIHRvIHNhdmUgYW4gZXhpc3RpbmcgbGlzdCBmcm9tIHRoZSBkcm9wZG93blxuICAgICAgICBpZiAoICFuZXdMaXN0ICYmIHRoaXMuc2VsZWN0ZWRMaXN0ICkge1xuICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7IG5hbWUgOiAgdGhpcy5zZWxlY3RlZExpc3QubmFtZSwgZmlsdGVyIDogeyAuLi4gdGhpcy5maWx0ZXIgfSB9O1xuICAgICAgICAgIHRoaXMudXBkYXRlU2F2ZWRTZWFyY2hMaXN0SXRlbUJ5T2JqZWN0ICggdGhpcy5zZWxlY3RlZExpc3QsIG5ld0l0ZW0gKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCk7XG4vLyAgICAgIFVzZXIgd2FudHMgdG8gc2F2ZSBhIG5ldyBsaXN0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMuX21vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlVG9Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbi8vICAgICAgICBVc2VyIGRpZCBub3QgZGVmaW5lIGFueSBjcml0ZXJpYVxuICAgICAgICB0aGlzLl9tb2RhbC5zaG93V2FybmluZ0RpYWxvZyhcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGUnKSxcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuRW1wdHlDcml0ZXJpYUxpc3QnKSxcbiAgICAgICAgICBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGFsLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZScpLFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5Ob0xpc3REZWZpbmVkJyksXG4gICAgICAgICAgRElBTE9HX0JVVFRPTlMuT2spO1xuICAgIH1cbiAgfVxuXG4vLyAgVXNlciBBY2NlcHRlZCA9PiBTYXZlIGxpc3QgYW5kIENsb3NlIG1vZGFsXG4gIHB1YmxpYyBjb25maXJtTW9kYWwoIHNhdmVGb3JtTmFtZSApOiB2b2lkIHtcbi8vICAgIG5hbWUgZ2l2ZW4gYW5kIGxpc3QgbmFtZSBpcyB1bmlxdWVcbiAgICBpZiAoIHNhdmVGb3JtTmFtZSAmJiAhKHRoaXMuc2VhcmNoSW5MaXN0QnlOYW1lKHNhdmVGb3JtTmFtZSkpICkge1xuICAgICAgY29uc3QgbmV3SW5zZXJ0ZWRWYWx1ZSA9IHsgbmFtZSA6ICBzYXZlRm9ybU5hbWUsIGZpbHRlciA6IHsgLi4uIHRoaXMuZmlsdGVyIH0gfTtcbiAgICAgIGlmICggdGhpcy51c2VyU2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTZWFyY2hMaXN0Lmxlbmd0aCAhPT0gMCApIHtcbiAgICAgICAgdGhpcy51c2VyU2VhcmNoTGlzdC5wdXNoKG5ld0luc2VydGVkVmFsdWUpO1xuICAgICAgICB0aGlzLnN0b3JhZ2VWYWx1ZSA9IHRoaXMudXNlclNlYXJjaExpc3Q7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbmV3SW5zZXJ0ZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZVZhbHVlID0gW25ld0luc2VydGVkVmFsdWVdO1xuICAgICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gdGhpcy5zdG9yYWdlVmFsdWU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbmV3SW5zZXJ0ZWRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKTtcbiAgICAgIGlmICh0aGlzLm1vZGFsUmVmKSB7XG4gICAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIHNhdmVGb3JtTmFtZSAmJiAodGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUoc2F2ZUZvcm1OYW1lKSkgKSB7XG4vLyAgICAgIFVzZXIgc2hvdWxkIGluc2VydCBhIGRpZmZlcmVudCBuYW1lIGNhdXNlIHRoaXMgb25lIGlzIGFscmVhZHkgaW4gdXNlXG4gICAgICBhbGVydCh0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGVPbkxpc3RBbHJlYWR5Q3JlYXRlZCcpKTtcbiAgICB9IGVsc2Uge1xuLy8gICAgICBVc2VyIGRpZCBub3QgaW5zZXJ0IGFueSB0ZXh0XG4gICAgICBhbGVydCh0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGVPblVzZXJFcnJvcicpKTtcbiAgICB9XG4gIH1cblxuLy8gIFVzZXIgZGVjbGluZWQgPT4gQ2xvc2UgbW9kYWxcbiAgcHVibGljIGNsb3NlTW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kYWxSZWYpIHtcbiAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4vLyAgVXBsb2FkIHVzZXIncyBjcml0ZXJpYSBvbiBVc2VyIFN0b3JhZ2VcbiAgcHVibGljIHVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCkge1xuICAgIHRoaXMuX3VzZXJTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LCB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbHRlcigoeCkgPT4ge1xuICAgICAgcmV0dXJuICF4LnJlYWRPbmx5O1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkLiBVc2Ugc2VhcmNoKCkgbWV0aG9kIGluc3RlYWQuXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFzeW5jQWR2YW5jZWRTZWFyY2goZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAoIHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gYXdhaXQgdGhpcy5nZXRRdWVyeSgpO1xuICAgICAgaWYgKHRoaXMubWVyZ2VRdWVyeVBhcmFtcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gT2JqZWN0LmFzc2lnbih7IHE6IG51bGwsIHM6IG51bGwgfSwgdGhpcy5maWx0ZXIpO1xuICAgICAgICAvLyBlbnVtZXJhdGUgY3JpdGVyaWFcbiAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBzZXQgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50YWJsZS5xdWVyeSkge1xuICAgICAgICB0aGlzLnRhYmxlLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgcXVlcnkuZ2V0UGFyYW1zKClbJyRmaWx0ZXInXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICAgIHRoaXMudGFibGUuZmV0Y2goKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmFzeW5jQWR2YW5jZWRTZWFyY2goKS50aGVuKCgpID0+IHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRRdWVyeSgpIHtcbiAgICAvLyBvbiBzaW1wbGUgc2VhcmNoIHJldHVybiBudWxsXG4gICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCB0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnICYmIEFycmF5LmlzQXJyYXkodGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEpKSB7XG4gICAgICBjb25zdCBleHByZXNzaW9uczogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IHRoaXMuX2FkdmFuY2VkU2VhcmNoVmFsdWVQcm92aWRlci5nZXRWYWx1ZXMoKTtcbiAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZpbHRlciwgeC5uYW1lKSkge1xuICAgICAgICAgIGNvbnN0IG5hbWVGaWx0ZXIgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLmZpbHRlclt4Lm5hbWVdKTtcbiAgICAgICAgICBpZiAobmFtZUZpbHRlci5pbmNsdWRlcygnR01UJykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLnRyYW5zZm9ybURhdGUodGhpcy5maWx0ZXJbeC5uYW1lXSk7XG4gICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh4LmZpbHRlciwge1xuICAgICAgICAgICAgICB2YWx1ZTogbmV3RGF0ZSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyW3gubmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh4LmZpbHRlciwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclt4Lm5hbWVdLFxuICAgICAgICAgICAgfSwgdmFsdWVzKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsZXQgcXVlcnk7XG4gICAgICBpZiAoZXhwcmVzc2lvbnMgJiYgZXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBjbGllbnQgcXVlcnlcbiAgICAgICAgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMudGFibGUuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgICBxdWVyeS5zZXRQYXJhbSgnZmlsdGVyJywgZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy50YWJsZS5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkdmFuY2VkU2VhcmNoKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0FkdmFuY2VkU2VhcmNoKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zICYmIHRoaXMudGFibGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgcTogbnVsbCwgczogbnVsbCB9O1xuICAgICAgICAvLyBlbnVtZXJhdGUgY3JpdGVyaWFcbiAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBzZXQgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgLy8gY2xlYXIgZmlsdGVyXG4gICAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgICAgLy8gY2xlYXIgbGlzdFxuICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgICAgLy8gcmFpc2UgZmlsdGVyIGNoYW5nZSBldmVudFxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZpZXcgc3RhdGUgb2Ygc2VhcmNoIGNvbnRyb2xcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlld1N0YXRlKCk6IEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkdmFuY2VkVmlldzogIXRoaXMuY29sbGFwc2VkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoZXMgdmlldyBiZXR3ZWVuIHNpbXBsZSBhbmQgYWR2YW5jZWQgc2VhcmNoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdG9nZ2xlVmlldygpIHtcbiAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDtcbiAgICAvLyBlbWl0IGV2ZW50IGZvciB2aWV3IHN0YXR1cyBjaGFuZ2VcbiAgICB0aGlzLnZpZXdDaGFuZ2UuZW1pdCh0aGlzLnZpZXdTdGF0ZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEFjdGlvbkxpbmtGb3JtYXR0ZXIsIEJ1dHRvbkZvcm1hdHRlciwgRGF0ZVRpbWVGb3JtYXR0ZXIsIExhbmd1YWdlRm9ybWF0dGVyLFxuICBMaW5rRm9ybWF0dGVyLFxuICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlciwgTmdDbGFzc0Zvcm1hdHRlciwgU2VsZWN0Um93Rm9ybWF0dGVyLFxuICBUZW1wbGF0ZUZvcm1hdHRlciwgVHJhbnNsYXRpb25Gb3JtYXR0ZXIsXG4gIFRydWVGYWxzZUZvcm1hdHRlciwgQWN0aW9uQnV0dG9uRm9ybWF0dGVyLCBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcixcbn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMge1xuICBBY3Rpb25MaW5rRm9ybWF0dGVyPzogQWN0aW9uTGlua0Zvcm1hdHRlcjtcbiAgQnV0dG9uRm9ybWF0dGVyPzogQnV0dG9uRm9ybWF0dGVyO1xuICBEYXRlVGltZUZvcm1hdHRlcj86IERhdGVUaW1lRm9ybWF0dGVyO1xuICBMYW5ndWFnZUZvcm1hdHRlcj86IExhbmd1YWdlRm9ybWF0dGVyO1xuICBMaW5rRm9ybWF0dGVyPzogTGlua0Zvcm1hdHRlcjtcbiAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI/OiBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcjtcbiAgTmdDbGFzc0Zvcm1hdHRlcj86IE5nQ2xhc3NGb3JtYXR0ZXI7XG4gIFNlbGVjdFJvd0Zvcm1hdHRlcj86IFNlbGVjdFJvd0Zvcm1hdHRlcjtcbiAgVGVtcGxhdGVGb3JtYXR0ZXI/OiBUZW1wbGF0ZUZvcm1hdHRlcjtcbiAgVHJhbnNsYXRpb25Gb3JtYXR0ZXI/OiBUcmFuc2xhdGlvbkZvcm1hdHRlcjtcbiAgVHJ1ZUZhbHNlRm9ybWF0dGVyPzogVHJ1ZUZhbHNlRm9ybWF0dGVyO1xuICBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI/OiBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI7XG4gIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyPzogQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXI7XG59XG5leHBvcnQgY29uc3QgRk9STUFUVEVSUzogSUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzID0ge1xuICAgICAgQWN0aW9uTGlua0Zvcm1hdHRlcjogbmV3IEFjdGlvbkxpbmtGb3JtYXR0ZXIoKSxcbiAgICAgIEJ1dHRvbkZvcm1hdHRlcjogbmV3IEJ1dHRvbkZvcm1hdHRlcigpLFxuICAgICAgRGF0ZVRpbWVGb3JtYXR0ZXI6IG5ldyBEYXRlVGltZUZvcm1hdHRlcigpLFxuICAgICAgTGFuZ3VhZ2VGb3JtYXR0ZXI6IG5ldyBMYW5ndWFnZUZvcm1hdHRlcigpLFxuICAgICAgTGlua0Zvcm1hdHRlcjogbmV3IExpbmtGb3JtYXR0ZXIoKSxcbiAgICAgIE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyOiBuZXcgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIoKSxcbiAgICAgIE5nQ2xhc3NGb3JtYXR0ZXI6IG5ldyBOZ0NsYXNzRm9ybWF0dGVyKCksXG4gICAgICBTZWxlY3RSb3dGb3JtYXR0ZXI6IG5ldyBTZWxlY3RSb3dGb3JtYXR0ZXIoKSxcbiAgICAgIFRlbXBsYXRlRm9ybWF0dGVyOiBuZXcgVGVtcGxhdGVGb3JtYXR0ZXIoKSxcbiAgICAgIFRyYW5zbGF0aW9uRm9ybWF0dGVyOiBuZXcgVHJhbnNsYXRpb25Gb3JtYXR0ZXIoKSxcbiAgICAgIFRydWVGYWxzZUZvcm1hdHRlcjogbmV3IFRydWVGYWxzZUZvcm1hdHRlcigpLFxuICAgICAgQWN0aW9uQnV0dG9uRm9ybWF0dGVyOiBuZXcgQWN0aW9uQnV0dG9uRm9ybWF0dGVyKCksXG4gICAgICBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcjogbmV3IEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyKCksXG59O1xuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCwgQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQgfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAndGFibGUtc2ltcGxlLWhlYWRlci10b29scycsXG4gIHRlbXBsYXRlOiBgXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgYCxcbiAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBTaW1wbGVIZWFkZXJUb29sc0NvbXBvbmVudCB7XG4gIC8vXG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLXRhYmxlLXNpbXBsZS1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtc2ltcGxlLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVTaW1wbGVIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRhYmxlKSB7XG4gICAgICBpZiAoY2hhbmdlcy50YWJsZS5jdXJyZW50VmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICBpZiAoY2hhbmdlcy50YWJsZS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy50YWJsZS5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24gPSBjaGFuZ2VzLnRhYmxlLmN1cnJlbnRWYWx1ZS5sb2FkLnN1YnNjcmliZSgoZGF0YTogQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQpID0+IHtcbiAgICAgICAgICB0aGlzLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIHB1YmxpYyByZWNvcmRzVG90YWw/OiBudW1iZXI7XG4gIHB1YmxpYyBkYXRhTG9hZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvL1xuICB9XG5cbn1cbiIsImltcG9ydCB7XG4gIERpcmVjdGl2ZSwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdBZHZhbmNlZCB0YWJsZSBjb21wb25lbnQgY2Fubm90IGJlIGVtcHR5IGF0IHRoaXMgY29udGV4dC4nKTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKFxuIHtcbiAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gICBzZWxlY3RvcjogJ1t0YWJsZUVkaXRvcl0nLFxuIH0sXG4pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUVkaXRvckRpcmVjdGl2ZSB7XG5cbiAgcHVibGljIGRpcnR5ID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBwdWJsaWMgZGlydHlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQpIHtcbiAgICAvL1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCByb3dzIHRvIHRhYmxlIGFuZCBtYXJrIHRoZW0gYXMgYWRkZWQgcm93c1xuICAgKi9cbiAgcHVibGljIGFkZCguLi5hZGRJdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyBkZWNvcmF0ZSBpdGVtc1xuICAgIGNvbnN0IGtleSA9IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhZGRJdGVtcykge1xuICAgICAgbGV0IHRyID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOmhhcyhpbnB1dFtkYXRhLWlkPVwiJyArIGVsZW1lbnRba2V5XSArICdcIl0pJykubm9kZXMoKS50byQoKTtcbiAgICAgIGlmICh0ci5oYXNDbGFzcygncmVtb3ZlZCcpKSB7XG4gICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cy5hZGQoW2VsZW1lbnRdKTtcbiAgICAgICAgdHIgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6aGFzKGlucHV0W2RhdGEtaWQ9XCInICsgZWxlbWVudFtrZXldICsgJ1wiXSknKS5ub2RlcygpLnRvJCgpO1xuICAgICAgICB0ci50b2dnbGVDbGFzcygnYWRkZWQgZm9udC13ZWlnaHQtYm9sZCB0ZXh0LXN1Y2Nlc3MnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuZHJhdygpO1xuICAgIC8vIGZpbmQgcmVtb3ZlZFxuICAgIGNvbnN0IHJlbW92ZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcucmVtb3ZlZCcpWzBdLmxlbmd0aDtcbiAgICAvLyBmaW5kIGFkZGVkXG4gICAgY29uc3QgYWRkZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcuYWRkZWQnKVswXS5sZW5ndGg7XG4gICAgLy8gYW5kIGVtaXQgZXZlbnRcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgfSk7XG4gICAgdGhpcy5kaXJ0eSA9IChyZW1vdmVkTGVuZ3RoID4gMCB8fCBhZGRlZExlbmd0aCA+IDApO1xuICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmRpcnR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyByb3dzIGFzIHJlbW92ZWQgcm93c1xuICAgKi9cbiAgcHVibGljIHJlbW92ZSguLi5yZW1vdmVJdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyBnZXQga2V5XG4gICAgY29uc3Qga2V5ID0gdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgLy8gbG9vcCBpdGVtc1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiByZW1vdmVJdGVtcykge1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpoYXMoaW5wdXRbZGF0YS1pZD1cIicgKyBlbGVtZW50W2tleV0gKyAnXCJdKScpLm5vZGVzKCkudG8kKCk7XG4gICAgICAgIC8vIGlmIHJvdyBpcyBtYXJrZWQgYXMgYWRkZWRcbiAgICAgICAgaWYgKHRyLmhhc0NsYXNzKCdhZGRlZCcpKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoaXMgZGlydHkgcm93XG4gICAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cyh0cikucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHVubWFya2VkIHJvd1xuICAgICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIGlmIGl0ZW0gaXMgc2VsZWN0ZWRcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMudGFibGUuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gZWxlbWVudFtrZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIHJlbW92ZSBpdCBmcm9tIHNlbGVjdGVkIGNvbGxlY3Rpb25cbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCkge1xuICAgICAgICAgIHRoaXMudGFibGUuc2VsZWN0ZWQuc3BsaWNlKHNlbGVjdGVkSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyByZS1kcmF3IHRhYmxlXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgLy8gZ2V0IG51bWJlciBvZiB0YWJsZSBpdGVtc1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICAgIC8vIGdldCBudW1iZXIgb2YgcmVtb3ZlZCBpdGVtc1xuICAgIGNvbnN0IHJlbW92ZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcucmVtb3ZlZCcpWzBdLmxlbmd0aDtcbiAgICAgIC8vIGdldCBudW1iZXIgb2YgYWRkZWQgaXRlbXNcbiAgICBjb25zdCBhZGRlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpWzBdLmxlbmd0aDtcbiAgICAgIC8vIHJlZnJlc2hcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICAgIH0pO1xuICAgIHRoaXMuZGlydHkgPSAocmVtb3ZlZExlbmd0aCA+IDAgfHwgYWRkZWRMZW5ndGggPiAwKTtcbiAgICB0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5kaXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgc2V0KGl0ZW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIGNsZWFyIHJvd3NcbiAgICB0aGlzLnRhYmxlLnNlbGVjdGVkID0gW107XG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuY2xlYXIoKTtcbiAgICAvLyBzZXQgaXRlbXNcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzLmFkZChpdGVtcykuZHJhdygpO1xuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy5sZW5ndGgsXG4gICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmRvIGNoYW5nZXNcbiAgICovXG4gIHB1YmxpYyB1bmRvKCkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIHJlc2V0IHJlbW92ZWQgcm93c1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5yZW1vdmVkJykubm9kZXMoKS50byQoKS50b2dnbGVDbGFzcygncmVtb3ZlZCB0ZXh0LWdyYXktNDAwIHRleHQtZGVjb3JhdGlvbi1saW5lLXRocm91Z2gnKTtcbiAgICAvLyByZW1vdmUgYWRkZWQgcm93c1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpLnJlbW92ZSgpO1xuICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgdGhpcy50YWJsZS5zZWxlY3RlZCA9IFtdO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5kaXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgcm93cygpIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6bm90KC5yZW1vdmVkKScpLmRhdGEoKSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBUZW1wbGF0ZVBpcGUgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEZvcm1hdHMgYW5kIGV4ZWN1dGVzIHRoZSBkYXRhIHF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbCBUaGUgdGFyZ2V0IG1vZGVsXG4gICAqIEBwYXJhbSBmaXhlZFBhcmFtcyBQYWlycyBvZiBwYXJhbWV0ZXJzIHRvIGFsd2F5cyBiZSBhcHBsaWVkXG4gICAqIEBwYXJhbSBxdWVyeVN0YXRlbWVudCBUaGUgZGVmYXVsdCBxdWVyeSB0byB1c2UgZm9yIGZldGNoaW5nIHRoZSBkYXRhIChlLmcuIGV4cGFuZHMgZXRjKVxuICAgKiBAcGFyYW0gZmlsdGVycyBBIGxpc3Qgb2YgZmlsdGVyIGV4cHJlc3Npb25zIHRvIGFwcGVuZCBhdCB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHNlYXJjaFRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSB0byB1c2UgZm9yIHNlYXJjaGluZyBleHByZXNzaW9uc1xuICAgKiBAcGFyYW0gc2VhcmNoVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSB1c2VyIHNlYXJjaFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVzcG9uc2Ugb2YgdGhlIHF1ZXJ5IGV4ZWN1dGlvblxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICBhc3luYyBmZXRjaERhdGEobW9kZWw6IHN0cmluZywgZml4ZWRQYXJhbXM6IG9iamVjdCwgcXVlcnlTdGF0ZW1lbnQ6IHN0cmluZyA9ICcnLCBmaWx0ZXJzOiBzdHJpbmdbXSwgc2VhcmNoVGVtcGxhdGU/OiBzdHJpbmcsIHNlYXJjaFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwobW9kZWwpLmFzUXVlcnlhYmxlKCk7XG5cbiAgICBpZiAoIWZpeGVkUGFyYW1zIHx8IHR5cGVvZiBmaXhlZFBhcmFtcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGZpeGVkUGFyYW1zID0ge307XG4gICAgfVxuXG4gICAgbGV0IGZpbHRlckV4cHJlc3Npb25zOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKGZpeGVkUGFyYW1zKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIE9iamVjdC5rZXlzKGZpeGVkUGFyYW1zKSkge1xuICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5wdXNoKGAke3BhcmFtfSBlcSAke2ZpeGVkUGFyYW1zW3BhcmFtXX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlsdGVycyAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMpKSB7XG4gICAgICBmaWx0ZXJFeHByZXNzaW9ucyA9IFtcbiAgICAgICAgLi4uZmlsdGVyRXhwcmVzc2lvbnMsXG4gICAgICAgIC4uLmZpbHRlcnNcbiAgICAgIF07XG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaFRlbXBsYXRlICYmIHNlYXJjaFZhbHVlKSB7XG4gICAgICBsZXQgZXZhbHVhdGVkU2VhcmNoO1xuICAgICAgaWYgKC9eXCIoLio/KVwiJC8udGVzdChzZWFyY2hWYWx1ZSkpIHsgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBldmFsdWF0ZWRTZWFyY2ggPSB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oc2VhcmNoVGVtcGxhdGUsIHtcbiAgICAgICAgICAuLi5maXhlZFBhcmFtcyxcbiAgICAgICAgICB0ZXh0OiBzZWFyY2hWYWx1ZS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICBjb25zdCB3b3JkcyA9IHNlYXJjaFZhbHVlLnNwbGl0KCcgJyk7XG4gICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgIGV2YWx1YXRlZFNlYXJjaCA9IHdvcmRzLm1hcCh3b3JkID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHNlYXJjaFRlbXBsYXRlLCB7XG4gICAgICAgICAgICAuLi5maXhlZFBhcmFtcyxcbiAgICAgICAgICAgIHRleHQ6IHdvcmRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkuam9pbignIGFuZCAnKTtcblxuICAgICAgfVxuICAgICAgZmlsdGVyRXhwcmVzc2lvbnMucHVzaChldmFsdWF0ZWRTZWFyY2gpO1xuICAgIH1cblxuICAgIHF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgZmlsdGVyRXhwcmVzc2lvbnMuam9pbignYW5kJykpO1xuICAgIHJldHVybiBxdWVyeS5leHBhbmQocXVlcnlTdGF0ZW1lbnQpLnRha2UoLTEpLmdldEl0ZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRm9ybWF0cyB0aGUgcmVjZWl2ZWQgZGF0YSB0byB1c2UgZmxhdCBrZXlzXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgVGhlIGFwcGxpZWQgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gZGF0YSBUaGUgcmF3IGRhdGFcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGZsYXQta2V5IG9iamVjdCBsaXN0XG4gICAqXG4gICAqL1xuICBmb3JtYXREYXRhKGNvbmZpZywgZGF0YSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZGF0YS5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5zdWJpdGVtcyAmJiBBcnJheS5pc0FycmF5KGVudHJ5LnN1Yml0ZW1zKSkge1xuICAgICAgICAgIGVudHJ5LnN1Yml0ZW1zID0gdGhpcy5mb3JtYXREYXRhKGNvbmZpZywgZW50cnkuc3ViaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVudHJ5T2JqZWN0ID0ge30gYXMgYW55O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IGNvbmZpZy5jb2x1bW5zW2ldLm5hbWUuc3BsaXQoJy8nKTtcbiAgICAgICAgICBsZXQgaGVscGVyT2JqZWN0ID0gZW50cnlba2V5c1swXV07XG5cbiAgICAgICAgICBpZiAoaGVscGVyT2JqZWN0ICYmIGtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXNoYWRvd2VkLXZhcmlhYmxlXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKGhlbHBlck9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IGhlbHBlck9iamVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhlbHBlck9iamVjdCA9IGhlbHBlck9iamVjdFtrZXlzW2ldXSAhPT0gdW5kZWZpbmVkICYmIGhlbHBlck9iamVjdFtrZXlzW2ldXSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBoZWxwZXJPYmplY3Rba2V5c1tpXV1cbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW50cnlPYmplY3RbY29uZmlnLmNvbHVtbnNbaV0ubmFtZV0gPSBoZWxwZXJPYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkuc3ViaXRlbXMpIHtcbiAgICAgICAgICBlbnRyeU9iamVjdC5zdWJpdGVtcyA9IGVudHJ5LnN1Yml0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVudHJ5T2JqZWN0O1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFkdmFuY2VkQWdncmVnYXRvckNvbmZpZywgQWR2YW5jZWRBZ2dyZWdhdG9yRmlsdGVycyB9IGZyb20gJy4uLy4uL2FkdmFuY2VkLWFnZ3JlZ2F0b3InO1xuaW1wb3J0IHsgTG9hZGluZ1NlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbi8qKlxuICpcbiAqIFxuICogIEBjbGFzc2Rlc2MgQW4gYWR2YW5jZWQgbGlzdCB3aXRoIHRoZSBjYXBhYmlsaXR5IG9mIGFnZ3JlZ2F0ZSBkYXRhIGJhc2VkIG9uIGNvbmZpZ3VyYWJsZSBmaWx0ZXJzXG4gKlxuICovXG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLWFnZ3JlZ2F0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtYWdncmVnYXRvci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfY29uZmlnPzogQWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnO1xuICBwcml2YXRlIF9hZ2dyZWdhdG9ycztcbiAgcHJpdmF0ZSBfcG9zdFByb2Nlc3NvcnM7XG5cbiAgcHVibGljIGJvZHk7XG4gIHB1YmxpYyBncm91cHM6IGFueVtdID0gW107XG5cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogQWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ2FnZ3JlZ2F0b3JzJylcbiAgcHVibGljIHNldCBhZ2dyZWdhdG9ycyh2YWx1ZSkge1xuICAgIHRoaXMuX2FnZ3JlZ2F0b3JzID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ3Bvc3RQcm9jZXNzb3JzJylcbiAgcHVibGljIHNldCBwb3N0UHJvY2Vzc29ycyh2YWx1ZSkge1xuICAgIHRoaXMuX3Bvc3RQcm9jZXNzb3JzID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ3BhcmFtcycpIHBhcmFtcztcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3NlbGVjdGVkR3JvdXBzJykgc2VsZWN0ZWRHcm91cHMkO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnZmlsdGVycycpIGZpbHRlcnMkO1xuICBASW5wdXQoJ3NlYXJjaEV4cHJlc3Npb24nKSBzZWFyY2hFeHByZXNzaW9uPzogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBldmVudEhhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2U6IEFkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlXG4gICkgeyB9XG5cbiAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZyBhcyBBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFnZ3JlZ2F0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9hZ2dyZWdhdG9ycztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcG9zdFByb2Nlc3NvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bvc3RQcm9jZXNzb3JzO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwcyQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmdyb3VwcyA9IGRhdGE7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmlsdGVycyQuc3Vic2NyaWJlKGFzeW5jIChmaWx0ZXJzOiBBZHZhbmNlZEFnZ3JlZ2F0b3JGaWx0ZXJzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmZldGNoKGZpbHRlcnMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5maWx0ZXJzJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJldHJpZXZlcyB0aGUgZGF0YVxuICAgKlxuICAgKi9cbiAgYXN5bmMgZmV0Y2goZmlsdGVyczogQWR2YW5jZWRBZ2dyZWdhdG9yRmlsdGVycykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5zaG93TG9hZGluZygpO1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLl9hZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlLmZldGNoRGF0YSh0aGlzLmNvbmZpZy5tb2RlbCxcbiAgICAgICAgdGhpcy5wYXJhbXMsXG4gICAgICAgIHRoaXMuY29uZmlnLnF1ZXJ5LFxuICAgICAgICBmaWx0ZXJzLmZpbHRlcnMsXG4gICAgICAgIHRoaXMuc2VhcmNoRXhwcmVzc2lvbixcbiAgICAgICAgZmlsdGVycy50ZXh0XG4gICAgICApO1xuXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICBpZiAodGhpcy5wb3N0UHJvY2Vzc29ycyAmJiBPYmplY3Qua2V5cyh0aGlzLnBvc3RQcm9jZXNzb3JzKS5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzICYmIHRoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5wb3N0UHJvY2Vzc29ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLnBvc3RQcm9jZXNzb3JzW3RoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzW2ldLm5hbWVdKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keSA9IHRoaXMuX2FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UuZm9ybWF0RGF0YSh0aGlzLmNvbmZpZywgZGF0YSk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UuaGlkZUxvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVHJpZ2dlcnMgdGhlIGV2ZW50IGhhbmRsZXIgZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBkYXRhXG4gICAqXG4gICAqL1xuICBvbkFjdGlvbkV2ZW50KGV2ZW50KSB7XG4gICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdChldmVudCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRlbXBsYXRlUGlwZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5lbnVtIExlbmd0aHMge1xuICBYTD0gJ3hsJyxcbiAgTEc9ICdsZycsXG4gIE1EPSAnbWQnLFxuICBTTT0gJ3NtJyxcbiAgWFM9ICd4cydcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtYWdncmVnYXRvci1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEFnZ3JlZ2F0b3JMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKipcbiAgICogQHByb3BlcnR5IHtBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWd9IGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gdXNlXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc6IGFueTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxhbnk+Pn0gYm9keSBUaGUgbGlzdCBvZiBkYXRhIGVudHJpZXMgdG8gc2hvdyBhcyB0aGUgbGlzdCBib2R5XG4gICAqL1xuICBASW5wdXQoKSBib2R5O1xuXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGUpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgIHgubGVuZ3RoID0gT2JqZWN0LnZhbHVlcyhMZW5ndGhzKS5pbmNsdWRlcyh4Lmxlbmd0aCkgPyB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oYHNpcy0tbGlzdC1ncm91cC1pdGVtXyR7eC5sZW5ndGh9X2NvbHVtbmAsIHggKSA6XG4gICAgICAgICF4Lmxlbmd0aCA/ICdzaXMtLWxpc3QtZ3JvdXAtaXRlbV9zbV9jb2x1bW4nIDogeC5sZW5ndGggO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFRyaWdnZXJzIHRoZSBvdXRwdXQgZXZlbnQgZW1pdHRlclxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgYXMgaXQncyBkZWNsYXJlZCBpbiB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gaXRlbSBUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgaXRlbVxuICAgKiB9XG4gICAqL1xuICBjYWxsQ2FsbGJhY2sodHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdCh7XG4gICAgICB0eXBlLFxuICAgICAgZGF0YVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJNb2RhbE9rQ2FuY2VsfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEZvcm1Db21wb25lbnR9IGZyb20gJ0B1bml2ZXJzaXMvZm9ybXMnO1xuaW1wb3J0IHtMb2FkaW5nU2VydmljZSwgTW9kYWxTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkZC1pdGVtcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtaXRlbXMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkZEl0ZW1zQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgbGFzdEVycm9yO1xuICBASW5wdXQoKSBleGVjdXRlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICBASW5wdXQoKSBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICBASW5wdXQoKSB0YXJnZXQ6IGFueTtcbiAgLy8gQElucHV0KCkgc2VsZWN0ZWQ6IGFueTtcbiAgQElucHV0KCkgdGFibGVDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIGZvcm1OYW1lOiBhbnk7XG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBBcnJheTxhbnk+ID0gW107XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1Db21wb25lbnQnKSBmb3JtQ29tcG9uZW50PzogQWR2YW5jZWRGb3JtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdzZWxlY3RDb21wb25lbnQnKSBzZWxlY3RDb21wb25lbnQ/OiBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50O1xuICBwcml2YXRlIGZvcm1Mb2FkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGZvcm1DaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc2VsZWN0ZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSkge1xuICAgIHN1cGVyKHJvdXRlciwgYWN0aXZhdGVkUm91dGUpO1xuICAgIC8vIHNldCBtb2RhbCBzaXplXG4gICAgdGhpcy5tb2RhbENsYXNzID0gJ21vZGFsLWxnJztcbiAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0Q29tcG9uZW50ICYmIHRoaXMuc2VsZWN0Q29tcG9uZW50LmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdENvbXBvbmVudC5hZHZhbmNlZFRhYmxlLnNlbGVjdGVkSXRlbXMuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtTmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gaXRlbXMubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9ybU5hbWUgIT0gbnVsbCAmJiB0aGlzLmZvcm1Db21wb25lbnQpIHtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmNoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgJ2lzVmFsaWQnKSkge1xuICAgICAgICAgIC8vIGVuYWJsZSBvciBkaXNhYmxlIGJ1dHRvbiBiYXNlZCBvbiBmb3JtIHN0YXR1c1xuICAgICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9ICghZXZlbnQuaXNWYWxpZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCk6IFByb21pc2U8YW55PiB7XG4gICAgdGhpcy5jbGVhck1lc3NhZ2VzKCk7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICAvLyBjbG9zZVxuICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYuaGlkZSgpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtTG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5mb3JtTG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZvcm1DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAgIC8vIGdldCBmb3JtIGRhdGFcbiAgcHJpdmF0ZSBleGVjdXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBnZXQgZm9ybURhdGEoKTogYW55IHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pby5kYXRhO1xuICAgIH1cblxuICAgIG9rKCk6IFByb21pc2U8YW55PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNsZWFyTWVzc2FnZXMoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0Q29tcG9uZW50ID09IG51bGwgfHwgdGhpcy5zZWxlY3RDb21wb25lbnQuYWR2YW5jZWRUYWJsZSA9PSBudWxsIHx8IHRoaXMuZXhlY3V0ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIC8vIHNldCBjb3Vyc2VzXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuc2VsZWN0Q29tcG9uZW50LmFkdmFuY2VkVGFibGUuc2VsZWN0ZWQ7XG4gICAgICAgICAgLy8gZXhlY3V0ZSBhZGRcbiAgICAgICAgICB0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24gPSB0aGlzLmV4ZWN1dGUuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNsb3NlIG1vZGFsXG4gICAgICAgICAgICBpZiAodGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmKSB7XG4gICAgICAgICAgICAgIHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IGxvYWRpbmcgaXMgaGlkZGVuXG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgICAgICAgLy8gc2V0IGxhc3QgZXJyb3JcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLmhpZGVMb2FkaW5nKCk7XG4gICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZSgkZXZlbnQ6IGFueSkge31cblxuICBjbGVhck1lc3NhZ2VzKCkge1xuICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcbiAgfVxuXG4gIG9uRmlsdGVyQ2hhbmdlKGV2ZW50OiAgeyBuYW1lOiBzdHJpbmcsIGVtaXQ6IGJvb2xlYW4gfSkge31cbn1cbiIsImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKlxuICpcbiAqIEBjbGFzc2Rlc2MgR2l2ZW4gYSBsaXN0IG9mIGl0ZW1zIHJ1bnMgYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gYWdhaW5zdCB0aGF0IGxpc3RcbiAqXG4gKi9cblxuQFBpcGUoe1xuICBuYW1lOiAnY2FsbEFnZ3JlZ2F0b3InXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAvKipcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyBUaGUgbGlzdCBvZiBpdGVtcyB0byBydW4gdGhlIGFnZ3JlZ2F0b3IgYWdhaW5zdFxuICAgKiBAcGFyYW0gZnVuY3Rpb25Qb29sIFRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIGxpc3QgY2FsbGVyXG4gICAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2hvdyBhdCB0aGUgVUlcbiAgICpcbiAgICovXG4gIHRyYW5zZm9ybShpdGVtczogYW55W10sIGZ1bmN0aW9uUG9vbDogYW55LCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpICYmIGZ1bmN0aW9uTmFtZSAmJiBmdW5jdGlvbk5hbWUgaW4gZnVuY3Rpb25Qb29sKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb25Qb29sW2Z1bmN0aW9uTmFtZV0oaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG4vKipcbiAqXG4gKiBcbiAqIEBjbGFzc2Rlc2MgR2l2ZW4gYSB0aXRsZSBvZiBhbiBhZ2dyZWdhdG9yIGxpc3QsIHRyYW5zbGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcGFyYW1ldGVyIGlmIGFueVxuICpcbiAqL1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdhZ2dyZWdhdG9yTGlzdFRpdGxlJ1xufSlcbmV4cG9ydCBjbGFzcyBQYXJzZVRpdGxlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgbGlzdFxuICAgKiBAcGFyYW0ga2V5IFRoZSBjdXJyZW50IGxpc3Qga2V5IHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgKlxuICAgKi9cbiAgdHJhbnNmb3JtKHRpdGxlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwgfHwga2V5ID09PSAndW5kZWZpbmVkJyB8fCBrZXkgPT09ICdudWxsJykge1xuICAgICAgICBrZXkgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5Ob3REZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGl0bGUuc3BsaXQoJyAnKVxuICAgICAgICAubWFwKChwYXJ0KSA9PiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocGFydCkpXG4gICAgICAgIC5tYXAoKHBhcnQpID0+IHBhcnQucmVwbGFjZSgnJHtwYXJhbX0nLCBrZXkpKVxuICAgICAgICAuam9pbignICcpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gdHNsaW50OmRpc2FibGU6IHF1b3RlbWFya1xuLy8gdHNsaW50OmRpc2FibGU6IG1heC1saW5lLWxlbmd0aFxuZXhwb3J0IGNvbnN0IFRBQkxFU19FTCA9IHtcbiAgICBcIlRhYmxlc1wiOiB7XG4gICAgICAgIFwiRXhwb3J0XCI6IFwizpXOvs6xzrPPic6zzq5cIixcbiAgICAgICAgXCJNb3JlXCI6IFwizqDOtc+BzrnPg8+Dz4zPhM61z4HOsVwiLFxuICAgICAgICBcIlNlYXJjaFwiOiBcIs6Rzr3Osc62zq7PhM63z4POt1wiLFxuICAgICAgICBcIlNlYXJjaFBsYWNlaG9sZGVyXCI6IFwizpHOvc6xzrbOrs+EzrfPg863Li4uXCIsXG4gICAgICAgIFwiR3JvdXBCeVwiOiBcIs6fzrzOsc60zr/PgM6/zq/Ot8+DzrcgzrHOvc6sXCIsXG4gICAgICAgIFwiTm90RGVmaW5lZFwiOiBcIs6czrcgz4DPgc6/z4POtM65zr/Pgc65z4POvM6tzr3Ov1wiLFxuICAgICAgICBcIkRhdGFUYWJsZVwiOiB7XG4gICAgICAgICAgICBcInBhZ2luYXRlXCI6IHtcbiAgICAgICAgICAgICAgICBcImZpcnN0XCI6IFwizqDPgc+Oz4TOtyDPg861zrvOr860zrFcIixcbiAgICAgICAgICAgICAgICBcImxhc3RcIjogXCLOpM61zrvOtc+EzrHOr86xIM+DzrXOu86vzrTOsVwiLFxuICAgICAgICAgICAgICAgIFwibmV4dFwiOiBcIs6Vz4DPjM68zrXOvc63XCIsXG4gICAgICAgICAgICAgICAgXCJwcmV2aW91c1wiOiBcIs6gz4HOv863zrPOv8+NzrzOtc69zrdcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiaW5mb1wiOiBcIs6VzrzPhs6szr3Ouc+DzrcgX1NUQVJUXyDOrc+Jz4IgX0VORF8gzrHPgM+MIF9UT1RBTF8gzrXOs86zz4HOsc+Gzq3PglwiLFxuICAgICAgICAgICAgXCJpbmZvRW1wdHlcIjogXCLOlM61zr0gzrLPgc6tzrjOt866zrHOvSDOtc6zzrPPgc6xz4bOrc+CXCIsXG4gICAgICAgICAgICBcImxvYWRpbmdcIjogXCLOlc68z4bOrM69zrnPg863IM60zrXOtM6/zrzOrc69z4nOvS4uLlwiLFxuICAgICAgICAgICAgXCJwcm9jZXNzaW5nXCI6IFwizqDOsc+BzrHOu86xzrLOriDOtM61zrTOv868zq3Ovc+Jzr0uLi5cIixcbiAgICAgICAgICAgIFwiZW1wdHlUYWJsZVwiOiBcIs6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsS5cIlxuICAgICAgICB9LFxuICAgICAgXCJDb2x1bW5EaXNwbGF5XCI6IFwizpXPgM65zrvOv86zzq4gzpXOvM+GzqzOvc65z4POt8+CIM+Dz4TOt867z47OvVwiLFxuICAgICAgXCJDb2x1bW5EaXNwbGF5SW5mb1wiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgz4TOuc+CIM+Dz4TOrs67zrXPgiDPgM6/z4UgzrjOrc67zrXPhM61IM69zrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65LlwiLFxuICAgICAgXCJTYXZlXCI6IFwizpXPhs6xz4HOvM6/zrPOrlwiLFxuICAgICAgXCJBcHBseVwiOiBcIs6Vz4bOsc+BzrzOv86zzq5cIixcbiAgICAgIFwiQ2FuY2VsXCI6IFwizpHOus+Nz4HPic+DzrdcIixcbiAgICAgIFwiUmVjb3Jkc1BlclBhZ2VcIjogXCLOlc6zzrPPgc6xz4bOrc+CIM6xzr3OrCDPg861zrvOr860zrFcIixcbiAgICAgIFwiUGFnZUluZm9cIjogXCJ7e3N0YXJ0fX0te3tlbmR9fSDOsc+Az4wge3tyZWNvcmRzVG90YWx9fVwiLFxuICAgICAgXCJTZWFyY2hMaXN0UGxhY2Vob2xkZXJcIjogXCLOkc69zrHOts63z4TOrs+Dz4TOtSDPg8+EzrcgzrvOr8+Dz4TOsS4uLlwiLFxuICAgICAgXCJGaWx0ZXJzXCI6IFwizqbOr867z4TPgc6xXCIsXG4gICAgICBcIkFsbFwiOiBcIs6MzrvOsVwiLFxuICAgICAgICBcIkFkZEl0ZW1cIjogXCLOoM+Bzr/Pg864zq7Ous63IM+Dz4TOv865z4fOtc6vzr/PhVwiLFxuICAgICAgICBcIkVtcHR5VGFibGVUaXRsZVwiOiBcIs6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsS5cIixcbiAgICAgICAgXCJFbXB0eVRhYmxlTWVzc2FnZVwiOiBcIs6gz4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4POtc+EzrUgzqzOu867zrXPgiDOu86tzr7Otc65z4IgzrrOu861zrnOtM65zqwuXCIsXG4gICAgICAgIFwiUmVtb3ZlSXRlbVwiOiBcIs6UzrnOsc6zz4HOsc+Gzq4gz4PPhM6/zrnPh861zq/Ov8+FXCIsXG4gICAgICAgIFwiSXRlbXNcIjogXCLPg8+Ezr/Ouc+HzrXOr86xXCIsXG4gICAgICAgIFwiSXRlbVwiOiBcIs+Dz4TOv865z4fOtc6vzr9cIixcbiAgICAgICAgXCJBZGRJdGVtTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IFwizqDPgc6/z4POuM6uzrrOtyDPg8+Ezr/Ouc+HzrXOr8+Jzr1cIixcbiAgICAgICAgICAgIFwib25lXCI6IFwizojOvc6xIM69zq3OvyDPg8+Ezr/Ouc+HzrXOr86/IM+Az4HOv8+Dz4TOrc64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIixcbiAgICAgICAgICAgIFwibWFueVwiOiBcInt7dmFsdWV9fSDOvc6tzrEgz4PPhM6/zrnPh861zq/OsSDPgM+Bzr/Pg8+Ezq3OuM63zrrOsc69IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgIFwiUmVtb3ZlSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIs6Rz4bOsc6vz4HOtc+Dzrcgz4PPhM6/zrnPh861zq/Pic69XCIsXG4gICAgICAgICAgICBcIm9uZVwiOiBcIs6Izr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM6xz4bOsc65z4HOrc64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIixcbiAgICAgICAgICAgIFwibWFueVwiOiBcInt7dmFsdWV9fSDPg8+Ezr/Ouc+HzrXOr86xIM6xz4bOsc65z4HOrc64zrfOus6xzr0gzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiUmVtb3ZlSXRlbXNUaXRsZVwiOiBcIs6UzrnOsc6zz4HOsc+Gzq4gz4PPhM6/zrnPh861zq/Ov8+FXCIsXG4gICAgICAgIFwiUmVtb3ZlSXRlbXNNZXNzYWdlXCI6IFwizqDPgc+MzrrOtc65z4TOsc65IM69zrEgzrTOuc6xzrPPgc6sz4jOtc+EzrUgzq3Ovc6xIM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrEgz4PPhM6/zrnPh861zq/OsS4gzpjOrc67zrXPhM61IM69zrEgz4DPgc6/z4fPic+Bzq7Pg861z4TOtT9cIixcbiAgICAgICAgXCJTZWxlY3RBbGxcIjogXCLOlc+AzrnOu86/zrPOriDPjM67z4nOvVwiLFxuICAgICAgICBcIkNsZWFyU2VsZWN0aW9uXCI6IFwizpHOvc6xzq/Pgc61z4POtyDOtc+AzrnOu86/zrPOrs+CXCIsXG4gICAgICBcIkFjdGlvbnNcIjoge1xuICAgICAgICBcIkxhYmVsXCI6IFwizpXPgM61zr7Otc+BzrPOsc+Dzq/OsVwiLFxuICAgICAgICBcIlN0YXJ0XCI6IFwizojOvc6xz4HOvs63XCIsXG4gICAgICAgIFwiQWN0aW9uTWVzc2FnZVwiOiB7XG4gICAgICAgICAgXCJOb25lXCI6IFwizpTOtc69IM6tz4fOtc+EzrUgzrXPgM65zrvOrc6+zrXOuSDOus6xzr3Orc69zrEgz4PPhM6/zrnPh861zq/OvyDPgM6/z4Ugzr3OsSDOsc66zr/Ou86/z4XOuM61zq8gz4TOuc+CIM+Az4HOv8+Lz4DOv864zq3Pg861zrnPgiDPhM63z4IgzrXOvc6tz4HOs861zrnOsc+CLlwiLFxuICAgICAgICAgIFwiT25lXCI6IFwizojPh861z4TOtSDOtc+AzrnOu86tzr7Otc65IM6tzr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM+Azr/PhSDOsc66zr/Ou86/z4XOuM61zq8gz4TOuc+CIM+Az4HOv8+Lz4DOv864zq3Pg861zrnPgiDPhM63z4IgzrXOvc6tz4HOs861zrnOsc+CLiDOoM6xz4TOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/IM6Izr3Osc+Bzr7OtyDOs865zrEgzr3OsSDOvs61zrrOuc69zq7Pg861zrkgzrcgzrTOuc6xzrTOuc66zrHPg86vzrEuXCIsXG4gICAgICAgICAgXCJNYW55XCI6IFwizojPh861z4TOtSDOtc+AzrnOu86tzr7Otc65IHt7bGVuZ3RofX0gz4PPhM6/zrnPh861zq/OsSDPgM6/z4UgzrHOus6/zrvOv8+FzrjOv8+Nzr0gz4TOuc+CIM+Az4HOv8+Lz4DOv864zq3Pg861zrnPgiDPhM63z4IgzrXOvc6tz4HOs861zrnOsc+CLiDOoM6xz4TOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/IM6Izr3Osc+Bzr7OtyDOs865zrEgzr3OsSDOvs61zrrOuc69zq7Pg861zrkgzrcgzrTOuc6xzrTOuc66zrHPg86vzrEuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJDb21wbGV0ZWRXaXRoRXJyb3JzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwizpcgzrTOuc6xzrTOuc66zrHPg86vzrEgzr/Ou86/zrrOu863z4HPjs64zrfOus61IM68zrUgz4PPhs6szrvOvM6xz4TOsS5cIixcbiAgICAgICAgICBcIkRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwiT25lXCI6IFwizojOvc6xIM+Dz4TOv865z4fOtc6vzr8gzrTOtc69IM6xzr3Osc69zrXPjs64zrfOus61IM67z4zOs8+JIM61zr3PjM+CIM+Dz4bOrM67zrzOsc+Ezr/PgiDPgM6/z4Ugz4PPhc69zq3Oss63IM66zrHPhM6sIM+EzrfOvSDOtc66z4TOrc67zrXPg863IM+EzrfPgiDOtM65zrHOtM65zrrOsc+Dzq/Osc+CLlwiLFxuICAgICAgICAgICAgXCJNYW55XCI6IFwie3tlcnJvcnN9fSDPg8+Ezr/Ouc+HzrXOr86xIM60zrXOvSDOsc69zrHOvc61z47OuM63zrrOsc69IM67z4zOs8+JIM61zr3PjM+CIM+Dz4bOrM67zrzOsc+Ezr/PgiDPgM6/z4Ugz4PPhc69zq3Oss63IM66zrHPhM6sIM+EzrfOvSDOtc66z4TOrc67zrXPg863IM+EzrfPgiDOtM65zrHOtM65zrrOsc+Dzq/Osc+CLlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIkNvbXBsZXRlZFdpdGhTdWNjZXNzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwizpcgzrTOuc6xzrTOuc66zrHPg86vzrEgzr/Ou86/zrrOu863z4HPjs64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJTZWxlY3RDb2x1bW5zXCI6IFwizpXPgM65zrvOv86zzq4gz4PPhM63zrvPjs69XCIsXG4gICAgICBcIk1vdmVVcFwiOiBcIs6Vz4DOrM69z4lcIixcbiAgICAgIFwiTW92ZURvd25cIjogXCLOms6sz4TPiVwiLFxuICAgICAgXCJBZGRDb2x1bW5cIjogXCLOlc+AzrnOu86/zrPOrlwiLFxuICAgICAgXCJSZW1vdmVDb2x1bW5cIjogXCLOkc+GzrHOr8+BzrXPg863XCIsXG4gICAgICBcIlNlbGVjdENvbHVtbkhlbHBcIjogXCLOlc+AzrnOu86tzr7PhM61IM68zq/OsSDOriDPgM61z4HOuc+Dz4PPjM+EzrXPgc61z4IgzrHPgM+MIM+EzrnPgiDOtM65zrHOuM6tz4POuc68zrXPgiDPg8+Ezq7Ou861z4IgzrrOsc65IM+AzrHPhM6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gJ86Vz4DOuc67zr/Os86uJyDOs865zrEgzr3OsSDPhM65z4IgzrXOvM+GzrHOvc6vz4POtc+EzrUuIM6nz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgz4TOvyDPgM67zq7Ous+Ez4HOvyAnzpHPhs6xzq/Pgc61z4POtycgzrPOuc6xIM69zrEgzrHPhs6xzrnPgc6tz4POtc+EzrUgz4TOuc+CIM61z4DOuc67zrXOs868zq3Ovc61z4Igz4PPhM6uzrvOtc+CLlwiLFxuICAgICAgXCJNb3ZlQ29sdW1uSGVscFwiOiBcIs6nz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgz4TOsSDPgM67zq7Ous+Ez4HOsSAnzpXPgM6szr3PiScgzrrOsc65ICfOms6sz4TPiScgzrPOuc6xIM69zrEgzrHOu867zqzOvs61z4TOtSDPhM63zr0gz4POtc65z4HOrCDOtc68z4bOrM69zrnPg863z4Igz4TPic69IM+Dz4TOt867z47OvSDPhM6/z4Ugz4DOr869zrHOus6xLlwiLFxuICAgICAgXCJVbmtub3duQ29sdW1uXCI6IFwizobOs869z4nPg8+Ezr9cIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uXCI6IFwizpXPgM65zrvOv86zzq5cIixcbiAgICAgIFwiQWN0aW9uTGlua0NvbHVtblwiOiBcIs6Vzr3Orc+BzrPOtc65zrXPglwiLFxuICAgICAgXCJEYXRhRXJyb3JcIjoge1xuICAgICAgICBcIlRpdGxlXCI6IFwizqPPhs6szrvOvM6xIM66zrHPhM6sIM+EzrfOvSDPgM6xz4HOsc67zrHOss6uIM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr1cIixcbiAgICAgICAgXCJNZXNzYWdlXCI6IFwizqPPhc69zq3Oss63IM+Dz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gz4DOsc+BzrHOu86xzrLOriDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69LiDOoM+Bzr/Pg8+AzrHOuM6uz4PPhM61IM6+zrHOvc6sIM6uIM+Ez4HOv8+Azr/PgM6/zrnOrs+Dz4TOtSDPhM6xIM+Dz4TOv865z4fOtc6vzrEgzrHOvc6xzrbOrs+EzrfPg863z4IuXCJcbiAgICAgIH0sXG4gICAgICBcIkV4cG9ydExpc3RcIjogXCLOlc6+zrHOs8+JzrPOriDOu86vz4PPhM6xz4JcIixcbiAgICAgIFwiRXhwb3J0TGltaXRFeGNlZWRlZFwiOiBcIs6kzr8gz4DOu86uzrjOv8+CIM+Ez4nOvSDPg8+Ezr/Ouc+HzrXOr8+Jzr0gz4DPgc6/z4IgzrXOvs6xzrPPic6zzq4gKHt7ZGF0YUxlbmd0aH19KSDOvs61z4DOtc+Bzr3OrM61zrkgz4TOvyDOvM6tzrPOuc+Dz4TOvyDOtc+AzrnPhM+BzrXPgM+Ez4wgKHt7ZXhwb3J0TGltaXR9fSkuIM6gzrHPgc6xzrrOsc67zr/Pjc68zrUgz4DPgc6/z4POsc+BzrzPjM+Dz4TOtSDPhM6xIM+Gzq/Ou8+Ez4HOsSDPhM63z4IgzrHOvc6xzrbOrs+EzrfPg863z4IgzrrOsc65IM+Az4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr7Osc69zqwuXCIsXG4gICAgICBcIkV4cG9ydFJlc3VsdHNcIjogXCLOlM61zrTOv868zq3Ovc6xIM67zq/Pg8+EzrHPglwiXG4gICAgfSxcbiAgICBcIlRydWVGYWxzZVwiOiB7XG4gICAgICAgIFwibG9uZ1wiOiB7XG4gICAgICAgICAgICBcIlllc1wiOiBcIs6dzrHOuVwiLFxuICAgICAgICAgICAgXCJOb1wiOiBcIs6Mz4fOuVwiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiU2V0dGluZ3NcIjoge1xuICAgICAgXCJPcGVyYXRpb25Db21wbGV0ZWRcIjogXCLOlyDOtM65zrHOtM65zrrOsc+Dzq/OsSDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgfSxcbiAgICBcIkFkdmFuY2VkU2VhcmNoXCI6IHtcbiAgICAgICAgXCJDaG9vc2VcIjogXCI8zpXPgM65zrvOrc6+z4TOtSDOvM65zrEgzrHOvc6xzrbOrs+EzrfPg863PlwiLFxuICAgICAgICBcIkNob29zZURhdGVcIjogXCLOlc+AzrnOu86/zrPOriDOt868zrXPgc6/zrzOt869zq/Osc+CXCIsXG4gICAgICAgIFwiU2F2ZWRTZWFyY2hlc1wiOiBcIs6Rz4DOv864zrfOus61z4XOvM6tzr3Otc+CIM6xzr3Osc62zrfPhM6uz4POtc65z4JcIixcbiAgICAgICAgXCJUb2dnbGVEcm9wZG93blwiIDogXCLOlc68z4bOrM69zrnPg863IM67zq/Pg8+EzrHPglwiLFxuICAgICAgICBcIlNhdmVDdXJyZW50U2VhcmNoXCI6IFwizpHPgM6/zrjOrs66zrXPhc+DzrcgzrHOvc6xzrbOrs+EzrfPg863z4JcIixcbiAgICAgICAgXCJTYXZlQXNcIiA6IFwizpHPgM6/zrjOrs66zrXPhc+Dzrcgz4nPglwiLFxuICAgICAgICBcIlNhdmVcIiA6IFwizpHPgM6/zrjOrs66zrXPhc+DzrdcIixcbiAgICAgICAgXCJEZWxldGVcIiA6IFwizpTOuc6xzrPPgc6xz4bOrlwiLFxuICAgICAgICBcIk1vcmVcIjogXCLOoM61z4HOuc+Dz4PPjM+EzrXPgc6xXCIsXG4gICAgICAgIFwiTGVzc1wiOiBcIs6bzrnOs8+Mz4TOtc+BzrFcIixcbiAgICAgICAgXCJNb2RhbFwiIDoge1xuICAgICAgICAgICAgXCJUaXRsZVwiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POtyDOus+BzrnPhM63z4HOr8+Jzr0gzrHOvc6xzrbOrs+EzrfPg863z4JcIixcbiAgICAgICAgICAgIFwiSGVscFwiIDogXCLOn8+Bzq/Pg8+EzrUgzq3Ovc6xzr0gz4TOr8+EzrvOvyDOs865zrEgz4TOsSDOtc+AzrnOu861zrPOvM6tzr3OsSDOus+BzrnPhM6uz4HOuc6xIM6xzr3Osc62zq7PhM63z4POt8+CLiDOkc+Fz4TPjM+CIM6/IM+Ezq/PhM67zr/PgiDOuM6xIM+DzrHPgiDOss6/zrfOuM6uz4POtc65IM69zrEgz4TOsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4POtc+EzrUgzr7Osc69zqwgz4PPhM6/IM68zq3Ou867zr/OvS5cIixcbiAgICAgICAgICAgIFwiVGl0bGVPblVzZXJFcnJvclwiIDogXCLOoM6xz4HOsc66zrHOu8+OIM61zrnPg86szrPOtc+EzrUgzq3Ovc6xzr0gz4TOr8+EzrvOv1wiLFxuICAgICAgICAgICAgXCJUaXRsZU9uTGlzdEFscmVhZHlDcmVhdGVkXCIgOiBcIs6kzr8gz4zOvc6/zrzOsSDOsc+Fz4TPjCDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq/PhM6xzrkgzq7OtM63LiDOlM65zrHOu86tzr7PhM61IM6tzr3OsSDOtM65zrHPhs6/z4HOtc+EzrnOus+MLlwiLFxuICAgICAgICAgICAgXCJOb0xpc3REZWZpbmVkXCIgOiBcIs6UzrXOvSDOrc+HzrXOuSDOv8+BzrnPg8+EzrXOryDPhM6/IM+DzrfOvM61zq/OvyDOsc+Azr/OuM6uzrrOtc+Fz4POt8+CIM+EzrfPgiDOu86vz4PPhM6xz4JcIixcbiAgICAgICAgICAgIFwiRW1wdHlDcml0ZXJpYUxpc3RcIiA6IFwizpTOtc69IM6tz4fOtc+EzrUgzrrOsc64zr/Pgc6vz4POtc65IM66zrHOvc6tzr3OsSDOus+BzrnPhM6uz4HOuc6/IM6zzrnOsSDOsc+Azr/OuM6uzrrOtc+Fz4POt1wiLFxuICAgICAgICAgICAgXCJTYXZlTmFtZUxhYmVsXCIgOiBcIs6fzr3Ov868zrHPg86vzrEgzrvOr8+Dz4TOsc+CXCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lUGxhY2Vob2xkZXJcIiA6IFwizpXOuc+DzqzOs861z4TOtSDOrc69zrHOvSDPhM6vz4TOu86/XCIsXG4gICAgICAgICAgICBcIkFjY2VwdFwiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POt1wiLFxuICAgICAgICAgICAgXCJEZWNsaW5lXCIgOiBcIs6Rz4DPjM+Bz4HOuc+IzrdcIixcbiAgICAgICAgICAgIFwiQ2xvc2VcIiA6IFwizprOu861zq/Pg865zrzOv1wiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiQWRkSXRlbXNcIiA6IHtcbiAgICAgIFwiU2VsZWN0SXRlbXNcIjogXCLOlc+AzrnOu86tzr7PhM61IM+Dz4TOv865z4fOtc6vzrFcIixcbiAgICB9XG59O1xuIiwiLy8gdHNsaW50OmRpc2FibGU6IHF1b3RlbWFya1xuLy8gdHNsaW50OmRpc2FibGU6IG1heC1saW5lLWxlbmd0aFxuZXhwb3J0IGNvbnN0IFRBQkxFU19FTiA9IHtcbiAgICBcIlRhYmxlc1wiOiB7XG4gICAgICBcIkV4cG9ydFwiOiBcIkV4cG9ydFwiLFxuICAgICAgICBcIk1vcmVcIjogXCJNb3JlXCIsXG4gICAgICAgIFwiU2VhcmNoXCI6IFwiU2VhcmNoXCIsXG4gICAgICAgIFwiU2VhcmNoUGxhY2Vob2xkZXJcIjogXCJTZWFyY2guLi5cIixcbiAgICAgICAgXCJHcm91cEJ5XCI6IFwiR3JvdXAgYnlcIixcbiAgICAgICAgXCJOb3REZWZpbmVkXCI6IFwiTm90IGRlZmluZWRcIixcbiAgICAgICAgXCJEYXRhVGFibGVcIjoge1xuICAgICAgICAgICAgXCJwYWdpbmF0ZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJmaXJzdFwiOiBcIkZpcnN0XCIsXG4gICAgICAgICAgICAgICAgXCJsYXN0XCI6IFwiTGFzdFwiLFxuICAgICAgICAgICAgICAgIFwibmV4dFwiOiBcIk5leHRcIixcbiAgICAgICAgICAgICAgICBcInByZXZpb3VzXCI6IFwiUHJldmlvdXNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiaW5mb1wiOiBcIlNob3dpbmcgX1NUQVJUXyB0byBfRU5EXyBvZiBfVE9UQUxfIGVudHJpZXNcIixcbiAgICAgICAgICAgIFwiaW5mb0VtcHR5XCI6IFwiU2hvd2luZyAwIHRvIDAgb2YgMCBlbnRyaWVzXCIsXG4gICAgICAgICAgICBcInByb2Nlc3NpbmdcIjogXCJQcm9jZXNzaW5nIGRhdGEuLi5cIixcbiAgICAgICAgICAgIFwiZW1wdHlUYWJsZVwiOiBcIlRoZXJlIGFyZSBubyBtYXRjaGluZyByZWNvcmRzLlwiXG4gICAgICAgIH0sXG4gICAgICBcIkNvbHVtbkRpc3BsYXlcIjogXCJDb2x1bW4gRGlzcGxheVwiLFxuICAgICAgXCJDb2x1bW5EaXNwbGF5SW5mb1wiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgz4TOuc+CIM+Dz4TOrs67zrXPgiDPgM6/z4UgzrjOrc67zrXPhM61IM69zrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65LlwiLFxuICAgICAgXCJTYXZlXCI6IFwiU2F2ZVwiLFxuICAgICAgXCJBcHBseVwiOiBcIkFwcGx5XCIsXG4gICAgICBcIkNhbmNlbFwiOiBcIkNhbmNlbFwiLFxuICAgICAgXCJSZWNvcmRzUGVyUGFnZVwiOiBcIkl0ZW1zIHBlciBwYWdlXCIsXG4gICAgICBcIlBhZ2VJbmZvXCI6IFwie3tzdGFydH19LXt7ZW5kfX0gb2Yge3tyZWNvcmRzVG90YWx9fVwiLFxuICAgICAgXCJTZWFyY2hMaXN0UGxhY2VIb2xkZXJcIjogXCJTZWFyY2ggaW4gbGlzdC4uLlwiLFxuICAgICAgXCJGaWx0ZXJzXCI6IFwiRmlsdGVyc1wiLFxuICAgICAgXCJBbGxcIjogXCJBbGxcIixcbiAgICAgIFwiQWRkSXRlbVwiOiBcIkFkZCBpdGVtXCIsXG4gICAgICBcIkVtcHR5VGFibGVUaXRsZVwiOiBcIlRoZXJlIGFyZSBubyBtYXRjaGluZyByZWNvcmRzLlwiLFxuICAgICAgXCJFbXB0eVRhYmxlTWVzc2FnZVwiOiBcIlBsZWFzZSB0cnkgdG8gdXNlIG90aGVyIGtleXdvcmRzIG9yIHNlYXJjaCBwYXJhbWV0ZXJzLlwiLFxuICAgICAgXCJSZW1vdmVJdGVtXCI6IFwiUmVtb3ZlIGl0ZW1cIixcbiAgICAgIFwiSXRlbXNcIjogXCJpdGVtc1wiLFxuICAgICAgXCJJdGVtXCI6IFwiaXRlbVwiLFxuICAgIFwiQWRkSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgXCJ0aXRsZVwiOiBcIkFkZCBpdGVtXCIsXG4gICAgICBcIm9uZVwiOiBcIkEgbmV3IGl0ZW0gaGFzIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5LlwiLFxuICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IG5ldyBpdGVtcyBoYXZlIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5LlwiXG4gICAgfSxcbiAgICBcIlJlbW92ZUl0ZW1NZXNzYWdlXCI6IHtcbiAgICAgIFwidGl0bGVcIjogXCJSZW1vdmUgaXRlbXNcIixcbiAgICAgIFwib25lXCI6IFwiQW4gaXRlbSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cIixcbiAgICAgIFwibWFueVwiOiBcInt7dmFsdWV9fSBpdGVtcyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuXCJcbiAgICB9LFxuICAgIFwiUmVtb3ZlSXRlbXNUaXRsZVwiOiBcIlJlbW92ZSBpdGVtc1wiLFxuICAgIFwiUmVtb3ZlSXRlbXNNZXNzYWdlXCI6IFwiWW91IGFyZSBnb2luZyB0byByZW1vdmUgb25lIG9yIG1vcmUgaW5zdHJ1Y3RvciBjb3Vyc2VzLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP1wiLFxuICAgICAgXCJTZWxlY3RBbGxcIjogXCJTZWxlY3QgYWxsXCIsXG4gICAgICBcIkNsZWFyU2VsZWN0aW9uXCI6IFwiQ2xlYXIgc2VsZWN0aW9uXCIsXG4gICAgICBcIkFjdGlvbnNcIjoge1xuICAgICAgICBcIkxhYmVsXCI6IFwiRWRpdFwiLFxuICAgICAgICBcIlN0YXJ0XCI6IFwiU3RhcnRcIixcbiAgICAgICAgXCJBY3Rpb25NZXNzYWdlXCI6IHtcbiAgICAgICAgICBcIk5vbmVcIjogXCJUaGVyZSBpcyBubyBzZWxlY3RlZCBpdGVtIHRoYXQgbWVldHMgYWN0aW9uIHJlcXVpcmVtZW50cy5cIixcbiAgICAgICAgICBcIk9uZVwiOiBcIllvdSBoYXZlIHNlbGVjdGVkIG9uZSBpdGVtIHRoYXQgbWVldHMgYWN0aW9uIHJlcXVpcmVtZW50cy5cIixcbiAgICAgICAgICBcIk1hbnlcIjogXCJZb3UgaGF2ZSBzZWxlY3RlZCB7e2xlbmd0aH19IGl0ZW1zIHRoYXQgbWVldCBhY3Rpb24gcmVxdWlyZW1lbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aEVycm9yc1wiOiB7XG4gICAgICAgICAgXCJUaXRsZVwiOiBcIlRoZSBvcGVyYXRpb24gd2FzIGNvbXBsZXRlZCB3aXRoIGVycm9ycy5cIixcbiAgICAgICAgICBcIkRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwiT25lXCI6IFwiT25lIGl0ZW0gaGFzIG5vdCBiZWVuIHVwZGF0ZWQgZHVlIHRvIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyBwcm9jZXNzLlwiLFxuICAgICAgICAgICAgXCJNYW55XCI6IFwie3tlcnJvcnN9fSBpdGVtcyBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQgZHVlIHRvIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyBwcm9jZXNzLlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIkNvbXBsZXRlZFdpdGhTdWNjZXNzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwiVGhlIG9wZXJhdGlvbiB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJTZWxlY3RDb2x1bW5zXCI6IFwiU2VsZWN0IGNvbHVtbnNcIixcbiAgICAgIFwiTW92ZVVwXCI6IFwiTW92ZSB1cFwiLFxuICAgICAgXCJNb3ZlRG93blwiOiBcIk1vdmUgZG93blwiLFxuICAgICAgXCJBZGRDb2x1bW5cIjogXCJBZGRcIixcbiAgICAgIFwiUmVtb3ZlQ29sdW1uXCI6IFwiUmVtb3ZlXCIsXG4gICAgICBcIlNlbGVjdENvbHVtbkhlbHBcIjogXCJTZWxlY3Qgb25lIG9yIG1vcmUgY29sdW1ucyBhbmQgcHJlc3MgJ0FkZCcgYnV0dG9uIHRvIGluY2x1ZGUgdGhlbSBpbiB0YWJsZS4gVXNlICdSZW1vdmUnIGJ1dHRvbiB0byBleGNsdWRlIG9uZSBvciBtb3JlIGNvbHVtbnMgZnJvbSB2aWV3LlwiLFxuICAgICAgXCJNb3ZlQ29sdW1uSGVscFwiOiBcIlVzZSAnTW92ZSB1cCcgYW5kICdNb3ZlIGRvd24nIGJ1dHRvbnMgdG8gY2hhbmdlIGNvbHVtbiBvcmRlci5cIixcbiAgICAgIFwiVW5rbm93bkNvbHVtblwiOiBcIlVua25vd25cIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uXCI6IFwiU2VsZWN0XCIsXG4gICAgICBcIkFjdGlvbkxpbmtDb2x1bW5cIjogXCJBY3Rpb25zXCIsXG4gICAgICBcIkRhdGFFcnJvclwiOiB7XG4gICAgICAgIFwiVGl0bGVcIjogXCJFcnJvciB3aGlsZSBnZXR0aW5nIGRhdGFcIixcbiAgICAgICAgXCJNZXNzYWdlXCI6IFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyBkYXRhLiBQbGVhc2UgdHJ5IGFnYWluIG9yIGNoYW5nZSB5b3VyIGNyaXRlcmlhLlwiXG4gICAgICB9LFxuICAgICAgXCJFeHBvcnRMaXN0XCI6IFwiRXhwb3J0IGxpc3RcIixcbiAgICAgIFwiRXhwb3J0TGltaXRFeGNlZWRlZFwiOiBcIlRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgdG8gYmUgZXhwb3J0ZWQgKHt7ZGF0YUxlbmd0aH19KSBleGNlZWRzIHRoZSBleHBvcnQgbGltaXQgKHt7ZXhwb3J0TGltaXR9fSkuIFBsZWFzZSBhcHBseSBtb3JlIHNwZWNpZmljIGZpbHRlcnMgdG8gdGhlIHNlYXJjaC5cIixcbiAgICAgIFwiRXhwb3J0UmVzdWx0c1wiOiBcIkV4cG9ydGVkIGxpc3RcIlxuICAgIH0sXG4gICAgXCJUcnVlRmFsc2VcIjoge1xuICAgICAgICBcImxvbmdcIjoge1xuICAgICAgICAgICAgXCJZZXNcIjogXCJZZXNcIixcbiAgICAgICAgICAgIFwiTm9cIjogXCJOb1wiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiU2V0dGluZ3NcIjoge1xuICAgICAgXCJPcGVyYXRpb25Db21wbGV0ZWRcIjogXCJUaGUgb3BlcmF0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiXG4gICAgfSxcbiAgICBcIkFkdmFuY2VkU2VhcmNoXCI6IHtcbiAgICAgICAgXCJDaG9vc2VcIjogXCI8U2VsZWN0IGEgc2F2ZWQgc2VhcmNoPlwiLFxuICAgICAgICBcIkNob29zZURhdGVcIjogXCJDaG9vc2UgZGF0ZVwiLFxuICAgICAgICBcIlNhdmVkU2VhcmNoZXNcIjogXCJTYXZlZCBzZWFyY2hlc1wiLFxuICAgICAgICBcIlRvZ2dsZURyb3Bkb3duXCIgOiBcIlRvZ2dsZSBEcm9wZG93blwiLFxuICAgICAgICBcIlNhdmVDdXJyZW50U2VhcmNoXCI6IFwiU2F2ZSBzZWFyY2hcIixcbiAgICAgICAgXCJTYXZlQXNcIiA6IFwiU2F2ZSBhcy4uLlwiLFxuICAgICAgICBcIlNhdmVcIiA6IFwiU2F2ZVwiLFxuICAgICAgICBcIkRlbGV0ZVwiIDogXCJSZW1vdmVcIixcbiAgICAgICAgXCJNb3JlXCI6IFwiTW9yZVwiLFxuICAgICAgICBcIkxlc3NcIjogXCJMZXNzXCIsXG4gICAgICAgIFwiTW9kYWxcIiA6IHtcbiAgICAgICAgICAgIFwiVGl0bGVcIiA6IFwiU2F2ZSBjdXJyZW50IHNlYXJjaCBjcml0ZXJpYVwiLFxuICAgICAgICAgICAgXCJIZWxwXCIgOiBcIlBsZWFzZSBhZGQgYSB0aXRsZSBmb3IgdGhlIGdpdmVuIHNlYXJjaCBjcml0ZXJpYS4gVGhpcyB0aXRsZSB3aWxsIGhlbHAgeW91IHRvIHVzZSB0aG9zZSBjcml0ZXJpYSBhZ2FpbiBpbiB0aGUgZnV0dXJlLlwiLFxuICAgICAgICAgICAgXCJUaXRsZU9uVXNlckVycm9yXCIgOiBcIlBsZWFzZSB1c2UgYSB2YWxpZCBuYW1lIGZvciB5b3VyIGxpc3RcIixcbiAgICAgICAgICAgIFwiVGl0bGVPbkxpc3RBbHJlYWR5Q3JlYXRlZFwiIDogXCJOYW1lIGFscmVhZHkgaW4gdXNlLiBQbGVhc2UgY2hvb3NlIGEgZGlmZmVyZW50IG9uZVwiLFxuICAgICAgICAgICAgXCJOb0xpc3REZWZpbmVkXCIgOiBcIkNhbm5vdCBkZWZpbmUgdXNlciBzdG9yYWdlIGtleS5cIixcbiAgICAgICAgICAgIFwiRW1wdHlDcml0ZXJpYUxpc3RcIiA6IFwiUGxlYXNlIGRlZmluZSBzZWFyY2ggY3JpdGVyaWEgYmVmb3JlIHNhdmUuXCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lTGFiZWxcIiA6IFwiTGlzdCBuYW1lXCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lUGxhY2Vob2xkZXJcIiA6IFwiVHlwZSBhIHRpdGxlIGhlcmUuLi5cIixcbiAgICAgICAgICAgIFwiQWNjZXB0XCIgOiBcIlNhdmVcIixcbiAgICAgICAgICAgIFwiRGVjbGluZVwiIDogXCJEZWNsaW5lXCIsXG4gICAgICAgICAgICBcIkNsb3NlXCIgOiBcIkNsb3NlXCJcbiAgICAgICAgfVxuICAgIH0sXG4gIFwiQWRkSXRlbXNcIiA6IHtcbiAgICBcIlNlbGVjdEl0ZW1zXCI6IFwiU2VsZWN0IGl0ZW1zXCIsXG4gIH1cbn07XG4iLCJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmV4cG9ydCBlbnVtIFRhYmxlQWN0aW9uVHlwZXMge1xuICBMb2FkRmlsdGVyID0gJ1tUYWJsZV0gTG9hZCBGaWx0ZXInLFxuICBBcHBlbmRGaWx0ZXIgPSAnW1RhYmxlXSBBcHBlbmQgRmlsdGVyJyxcbiAgQXBwZW5kU3RhdGUgPSAnW1RhYmxlXSBBcHBlbmQgU3RhdGUnXG59XG5cbmV4cG9ydCBjbGFzcyBMb2FkRmlsdGVyIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFRhYmxlQWN0aW9uVHlwZXMuTG9hZEZpbHRlcjtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBlbmRGaWx0ZXIgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gVGFibGVBY3Rpb25UeXBlcy5BcHBlbmRGaWx0ZXI7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyOiBhbnkpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBlbmRTdGF0ZSBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBUYWJsZUFjdGlvblR5cGVzLkFwcGVuZFN0YXRlO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueSkge31cbn1cblxuZXhwb3J0IHR5cGUgVGFibGVBY3Rpb25zID0gTG9hZEZpbHRlciB8IEFwcGVuZEZpbHRlciB8IEFwcGVuZFN0YXRlO1xuIiwiaW1wb3J0IHtcbiAgQWN0aW9uUmVkdWNlck1hcCxcbiAgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLFxuICBjcmVhdGVTZWxlY3Rvcixcbn0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlQWN0aW9ucywgVGFibGVBY3Rpb25UeXBlcyB9IGZyb20gJy4uL2FjdGlvbnMvdGFibGUuYWN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTdGF0ZSB7XG4gIGZpbHRlcj86IGFueTtcbiAgb3JkZXI/OiBhbnk7XG4gIHRhYmxlPzogYW55O1xufVxuXG5leHBvcnQgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xufTtcblxuZXhwb3J0IGNvbnN0IHRhYmxlSW5pdGlhbFN0YXRlOiBUYWJsZVN0YXRlID0ge1xuICBmaWx0ZXI6IHt9LFxuICBvcmRlcjogW11cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZVJlZHVjZXIoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogVGFibGVBY3Rpb25zKTogeyBbaWQ6IHN0cmluZ106IFRhYmxlU3RhdGU7IH0ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cbiAgICBjYXNlIFRhYmxlQWN0aW9uVHlwZXMuTG9hZEZpbHRlcjpcbiAgICAgIHJldHVybiBzdGF0ZVthY3Rpb24uaWRdO1xuICAgIGNhc2UgVGFibGVBY3Rpb25UeXBlcy5BcHBlbmRGaWx0ZXI6XG4gICAgICAgIHN0YXRlW2FjdGlvbi5pZF0gPSB7XG4gICAgICAgICAgLi4uc3RhdGVbYWN0aW9uLmlkXSxcbiAgICAgICAgICBmaWx0ZXI6IGNsb25lRGVlcChhY3Rpb24uZmlsdGVyKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc3RhdGU7XG5cbiAgICBjYXNlIFRhYmxlQWN0aW9uVHlwZXMuQXBwZW5kU3RhdGU6XG4gICAgICAgICAgc3RhdGVbYWN0aW9uLmlkXSA9IHtcbiAgICAgICAgICAgIC4uLnN0YXRlW2FjdGlvbi5pZF0sXG4gICAgICAgICAgICB0YWJsZTogYWN0aW9uLmRhdGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd4VGFibGVzU3RhdGUge1xuICB0YWJsZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IFRhYmxlU3RhdGU7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCB0YWJsZVJlZHVjZXJzOiBBY3Rpb25SZWR1Y2VyTWFwPE5neFRhYmxlc1N0YXRlPiA9IHtcbiAgdGFibGVzOiB0YWJsZVJlZHVjZXIsXG59O1xuXG5leHBvcnQgY29uc3QgZmVhdHVyZU5hbWUgPSAndGFibGVzJztcblxuZXhwb3J0IGNvbnN0IGdldFRhYmxlc1N0YXRlID0gY3JlYXRlRmVhdHVyZVNlbGVjdG9yKGZlYXR1cmVOYW1lKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFRhYmxlID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdldFRhYmxlc1N0YXRlLFxuICAoc3RhdGU6IE5neFRhYmxlc1N0YXRlLCBwcm9wczogeyBpZDogc3RyaW5nIH0pID0+IHtcbiAgICByZXR1cm4gc3RhdGUudGFibGVzW3Byb3BzLmlkXTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLCBPcHRpb25hbCwgSW5wdXQsIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgTmd4VGFibGVzU3RhdGUgfSBmcm9tICcuLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0ICogYXMgZnJvbVRhYmxlcyBmcm9tICcuLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwcGVuZFN0YXRlIH0gZnJvbSAnLi4vYWN0aW9ucy90YWJsZS5hY3Rpb25zJztcblxuQERpcmVjdGl2ZShcbiAgICB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgICAgIHNlbGVjdG9yOiAnW3RhYmxlU3RhdGVdJyxcbiAgICB9LFxuKVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU3RhdGUgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgdGFibGVTdGF0ZT86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgc3RvcmU6IFN0b3JlPE5neFRhYmxlc1N0YXRlPikge1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFibGUuc3RhdGVTYXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZUxvYWRDYWxsYmFjayA9IChzZXR0aW5ncywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucGlwZShzZWxlY3QoZnJvbVRhYmxlcy5zZWxlY3RUYWJsZSwgeyBpZDogdGhpcy50YWJsZVN0YXRlIGFzIHN0cmluZyB9KSwgZmlyc3QoKSkuc3Vic2NyaWJlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soc3RhdGUgJiYgc3RhdGUudGFibGUpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS50YWJsZSAmJiBzdGF0ZS50YWJsZS5Db2xSZW9yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoc3RhdGUudGFibGUuQ29sUmVvcmRlciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBmaXJzdERyYXcgPSB0cnVlO1xuICAgICAgICB0aGlzLnRhYmxlLmRyYXcuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChmaXJzdERyYXcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudGFibGUuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdERyYXcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRlU3RhdGVTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIG9TYXZlZFN0YXRlPzoge1xuICAgICAgICAgICAgICAgICAgICBDb2xSZW9yZGVyPzogbnVtYmVyW107XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BSb3c6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTY3JvbGxUb3A6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VSb3dUb3A6IG51bWJlclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnNldHRpbmdzKClbMF07XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlclNldHRpbmdzID0gbG9hZGVTdGF0ZVNldHRpbmdzLm9TYXZlZFN0YXRlICYmXG4gICAgICAgICAgICAgICAgbG9hZGVTdGF0ZVNldHRpbmdzLm9TYXZlZFN0YXRlLnNjcm9sbGVyO1xuICAgICAgICAgICAgaWYgKHNjcm9sbGVyU2V0dGluZ3MgJiYgc2Nyb2xsZXJTZXR0aW5ncy50b3BSb3cpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnNjcm9sbGVyKCk7XG4gICAgICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG9Sb3coc2Nyb2xsZXJTZXR0aW5ncy50b3BSb3csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVNhdmVDYWxsYmFjayA9IChzZXR0aW5ncywgZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQXBwZW5kU3RhdGUodGhpcy50YWJsZVN0YXRlIGFzIHN0cmluZywgZGF0YSkpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLCBPcHRpb25hbCwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95XG4gIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQXBwZW5kRmlsdGVyIH0gZnJvbSAnLi4vYWN0aW9ucy90YWJsZS5hY3Rpb25zJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd4VGFibGVzU3RhdGUsIHNlbGVjdFRhYmxlIH0gZnJvbSAnLi4vcmVkdWNlcnMnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU3RhdGUgfSBmcm9tICcuL2FkdmFuY2UtdGFibGUtc3RhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG4gIGV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50Tm90TnVsbCBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCdBZHZhbmNlZCB0YWJsZSBzZWFyY2ggY29tcG9uZW50IGNhbm5vdCBiZSBlbXB0eSBhdCB0aGlzIGNvbnRleHQuJyk7XG4gICAgfVxuICB9XG5cbiAgQERpcmVjdGl2ZShcbiAgIHtcbiAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICAgc2VsZWN0b3I6ICdbc2VhcmNoU3RhdGVdJyxcbiAgIH0sXG4gIClcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbiAgZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoU3RhdGUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBASW5wdXQoKSBzZWFyY2hTdGF0ZT86IHN0cmluZztcbiAgICBwcml2YXRlIGZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHRhYmxlSW5pdFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzZWFyY2g6IEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBzdG9yZTogU3RvcmU8Tmd4VGFibGVzU3RhdGU+KSB7XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuc3RvcmUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWFyY2ggPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50Tm90TnVsbCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VhcmNoLnRhYmxlKSB7XG4gICAgICAgICAgLy8gc2V0IGF1dG8gbG9hZCB0byBmYWxzZVxuICAgICAgICAgIHRoaXMuc2VhcmNoLnRhYmxlLmF1dG9Mb2FkID0gZmFsc2U7XG4gICAgICAgICAgLy8gaGFuZGxlIGZpbHRlcmluZ1xuICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2guZmlsdGVyQ2hhbmdlLnN1YnNjcmliZSgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoRmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gYXBwbHkgdGFibGUgc3RhdGVcbiAgICAgICAgICB0aGlzLmFwcGx5VGFibGVTdGF0ZSgpO1xuICAgICAgICAgIC8vIGhhbmRsZSB0YWJsZSBpbml0XG4gICAgICAgICAgdGhpcy50YWJsZUluaXRTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaC50YWJsZS5pbml0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vblRhYmxlSW5pdCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhcHBseVRhYmxlU3RhdGUoKSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgLy8gaGFuZGxlIHRhYmxlIHN0YXRlICh2aWEgZGlyZWN0aXZlKVxuICAgICAgICBjb25zdCB0YWJsZVN0YXRlID0gbmV3IEFkdmFuY2VkVGFibGVTdGF0ZSh0aGlzLnNlYXJjaC50YWJsZSwgdGhpcy5zdG9yZSk7XG4gICAgICAgIHRhYmxlU3RhdGUudGFibGVTdGF0ZSA9IHRoaXMuc2VhcmNoU3RhdGUgYXMgc3RyaW5nO1xuICAgICAgICB0YWJsZVN0YXRlLm5nT25Jbml0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFibGVJbml0KCkge1xuICAgICAgdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RUYWJsZSwgeyBpZDogdGhpcy5zZWFyY2hTdGF0ZSBhcyBzdHJpbmd9KSwgZmlyc3QoKSkuc3Vic2NyaWJlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIHVzZSBvcmRlclxuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUub3JkZXIgJiYgc3RhdGUub3JkZXIubGVuZ3RoICYmIHRoaXMuc2VhcmNoLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC50YWJsZS5kYXRhVGFibGUub3JkZXIoc3RhdGUub3JkZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB1c2UgdGV4dCBzZWFyY2hcbiAgICAgICAgICBpZiAoc3RhdGUuZmlsdGVyICYmIHN0YXRlLmZpbHRlci5xICYmIHRoaXMuc2VhcmNoLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC50ZXh0ID0gc3RhdGUuZmlsdGVyLnE7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoLnRhYmxlLnNlYXJjaCh0aGlzLnNlYXJjaC50ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdXNlIHByZWRlZmluZWQgc2VhcmNoXG4gICAgICAgICAgaWYgKHN0YXRlLmZpbHRlciAmJiBzdGF0ZS5maWx0ZXIucykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2guc2VsZWN0ZWRMaXN0ID0gdGhpcy5zZWFyY2gudXNlclNlYXJjaExpc3QuZmluZCgoaXRlbTogeyBuYW1lOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBzdGF0ZS5maWx0ZXIucztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoLnNlYXJjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhdGUuZmlsdGVyKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuZmlsdGVyKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IGNvbGxhcHNlZCB0byBmYWxzZSAoYWR2YW5jZWQgc2VhcmNoKVxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaC5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2guZmlsdGVyID0gc3RhdGUuZmlsdGVyO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2guc2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVuc3VyZSBlbXB0eSBmaWx0ZXIgYXQgdGhpcyBtb21lbnRcbiAgICAgICAgICAvLyBiZWNhdXNlIHNlYXJjaCgpIGZ1bmN0aW9uIHRyaWdnZXJzIGEgc3RvcmUgZGlzcGF0Y2hcbiAgICAgICAgICB0aGlzLnNlYXJjaC5maWx0ZXIgPSB7fTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2guc2VhcmNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWFyY2hGaWx0ZXIoZmlsdGVyOiBhbnkpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEFwcGVuZEZpbHRlcih0aGlzLnNlYXJjaFN0YXRlIGFzIHN0cmluZywgZmlsdGVyKSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRhYmxlSW5pdFN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnRhYmxlSW5pdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3hUYWJsZXNTdGF0ZSB9IGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7IEFkdmFuY2VkU2VhcmNoU3RhdGUgfSBmcm9tICcuL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tyb3V0ZXJTZWFyY2hTdGF0ZV0nXG59KVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlIGV4dGVuZHMgQWR2YW5jZWRTZWFyY2hTdGF0ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgcHJpdmF0ZSBfcm91dGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2VudGVyaW5nU3RhdGUgPSB0cnVlO1xuICBwcml2YXRlIF9hcHBseVN0YXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHNlYXJjaDogQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlPE5neFRhYmxlc1N0YXRlPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICAvLyBjYWxsIHN1cGVyIGNvbnN0cnVjdG9yXG4gICAgc3VwZXIoc2VhcmNoLCBzdG9yZSk7XG4gICAgLy8gc2V0IHNlYXJjaCBzdGF0ZSBkeW5hbWljYWxseSBhY2NvcmRpbmcgdG8gcm91dGVcbiAgICB0aGlzLl9yb3V0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLl9yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCB8fCBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCB8IE5hdmlnYXRpb25FbmQpID0+IHtcbiAgICAgICAgLy8gY2FwdHVyZSB1cmxzIHJlZ2FyZGluZyB0YWIgY2hhbmdpbmcgd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBhY3RpdmVcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0ICYmICF0aGlzLl9lbnRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgLy8gc2V0IHNlYXJjaCBzdGF0ZVxuICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGUgPSBldmVudC51cmw7XG4gICAgICAgICAgLy8gdG9vZ2xlIGFwcGx5U3RhdGVcbiAgICAgICAgICB0aGlzLl9hcHBseVN0YXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYXB0dXJlIHVybCBvZiB0aGUgZmlyc3QgYWN0aXZhdGlvbiBvZiB0aGUgY29tcG9uZW50IChlLmcuIGNvbWluZyBmcm9tIGFub3RoZXIgcm91dGUpXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgdGhpcy5fZW50ZXJpbmdTdGF0ZSkge1xuICAgICAgICAgIC8vIHNldCBzZWFyY2ggc3RhdGVcbiAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlID0gZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHM7XG4gICAgICAgICAgLy8gdG9nZ2xlIGVudGVyaW5nU3RhdGVcbiAgICAgICAgICB0aGlzLl9lbnRlcmluZ1N0YXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2FwcGx5U3RhdGUpIHtcbiAgICAgICAgICAvLyBhcHBseSBuZXcgdGFibGUgc3RhdGVcbiAgICAgICAgICBzdXBlci5hcHBseVRhYmxlU3RhdGUoKTtcbiAgICAgICAgICB0aGlzLl9hcHBseVN0YXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gZGVzdHJveSBvd24gc3Vic2NyaXB0aW9uc1xuICAgIGlmICh0aGlzLl9yb3V0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3JvdXRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvLyBkZXN0cm95IHBhcmVudCBzdWJzY3JpcHRpb25zXG4gICAgcmV0dXJuIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gIH1cbn1cbiIsImltcG9ydCB7TmdNb2R1bGUsIE9uSW5pdCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZUNvbXBvbmVudCwgQ09MVU1OX0ZPUk1BVFRFUlN9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtCdG5FeHBEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7U2hhcmVkTW9kdWxlLCBUZW1wbGF0ZVBpcGV9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtSb3V0ZXJNb2RhbE1vZHVsZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VhcmNoLWZvcm0vYWR2YW5jZWQtc2VhcmNoLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7QWR2YW5jZWRGb3Jtc01vZHVsZX0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQge0Zvcm1pb01vZHVsZX0gZnJvbSAnYW5ndWxhci1mb3JtaW8nO1xuaW1wb3J0IHsgQWR2YW5jZWRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLWxpc3QvYWR2YW5jZWQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIEFkdmFuY2VkU2VhcmNoQ29uZmlndXJhdGlvblJlc29sdmVyLFxuICAgIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXJlc29sdmVycyc7XG5pbXBvcnQge0FkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtcm93LWFjdGlvbi9hZHZhbmNlZC1yb3ctYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0ZPUk1BVFRFUlN9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZSc7XG5cbmltcG9ydCB7VEFCTEVTX0VMfSBmcm9tICcuL2kxOG4vdGFibGVzLmVsJztcbmltcG9ydCB7VEFCTEVTX0VOfSBmcm9tICcuL2kxOG4vdGFibGVzLmVuJztcbmltcG9ydCB7IFRhYmxlU2ltcGxlSGVhZGVyQ29tcG9uZW50LCBTaW1wbGVIZWFkZXJUb29sc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1zaW1wbGUtaGVhZGVyL3RhYmxlLXNpbXBsZS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE1vZGFsTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBQcm9ncmVzc2Jhck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXInO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VsZWN0L2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXNlbGVjdC9hZHZhbmNlZC1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2VkLXRhYmxlLWVkaXRvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHtBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3IuY29tcG9uZW50JztcbmltcG9ydCB7QWR2YW5jZWRBZ2dyZWdhdG9yTGlzdENvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdC9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7QWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3Iuc2VydmljZSc7XG5pbXBvcnQge0FkdmFuY2VkQWdncmVnYXRvclBpcGV9IGZyb20gJy4vcGlwZXMvYWR2YW5jZWQtYWdncmVnYXRvci5waXBlJztcbmltcG9ydCB7R3JvdXBCeVBpcGUsIE5nUGlwZXNNb2R1bGV9IGZyb20gJ25neC1waXBlcyc7XG5pbXBvcnQge1BhcnNlVGl0bGVQaXBlfSBmcm9tICcuL3BpcGVzL2FkdmFuc2VkLWFnZ3JlZ2F0b3ItbGlzdC10aXRsZS1wYXJzZS5waXBlJztcbmltcG9ydCB7QWRkSXRlbXNDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZGQtaXRlbXMvYWRkLWl0ZW1zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaFN0YXRlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU3RhdGUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvYWR2YW5jZS10YWJsZS1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hSb3V0ZXJTdGF0ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hZHZhbmNlZC1zZWFyY2gtcm91dGVyLXN0YXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2NvbXBvbmVudHMvY29sdW1uLXNlbGVjdG9yL2NvbHVtbi1zZWxlY3Rvci5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgU2hhcmVkTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZGFsTW9kdWxlLFxuICAgICAgICBGb3JtaW9Nb2R1bGUsXG4gICAgICAgIEFkdmFuY2VkRm9ybXNNb2R1bGUsXG4gICAgICAgIFNoYXJlZE1vZHVsZSxcbiAgICAgICAgTW9kYWxNb2R1bGUsXG4gICAgICAgIFByb2dyZXNzYmFyTW9kdWxlLFxuICAgICAgICBOZ1BpcGVzTW9kdWxlXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtEYXRlUGlwZSwgVGVtcGxhdGVQaXBlLFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBDT0xVTU5fRk9STUFUVEVSUyxcbiAgICAgICAgdXNlVmFsdWU6IEZPUk1BVFRFUlNcbiAgICAgIH0sXG5cbiAgICAgIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uUmVzb2x2ZXIsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoQ29uZmlndXJhdGlvblJlc29sdmVyLFxuICAgICAgICBBZHZhbmNlZFNlbGVjdFNlcnZpY2UsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UsXG4gICAgICAgIENvbHVtblNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgR3JvdXBCeVBpcGVcbiAgICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIEFkdmFuY2VkVGFibGVDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBCdG5FeHBEaXJlY3RpdmUsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZExpc3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50LFxuICAgICAgICBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgU2ltcGxlSGVhZGVyVG9vbHNDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlLFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvclBpcGUsXG4gICAgICAgIFBhcnNlVGl0bGVQaXBlLFxuICAgICAgICBBZGRJdGVtc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hTdGF0ZSxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVN0YXRlLFxuICAgICAgICBBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlLFxuICAgICAgICBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBCdG5FeHBEaXJlY3RpdmUsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZExpc3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50LFxuICAgICAgICBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgU2ltcGxlSGVhZGVyVG9vbHNDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlLFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnQsXG4gICAgICAgIEFkZEl0ZW1zQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlYXJjaFN0YXRlLFxuICAgICAgICBBZHZhbmNlZFRhYmxlU3RhdGUsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGUsXG4gICAgICAgIENvbHVtblNlbGVjdG9yQ29tcG9uZW50XG4gICAgXSxcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtcbiAgICAgICAgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQsXG4gICAgICAgIEFkZEl0ZW1zQ29tcG9uZW50LFxuICAgICAgICBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFxuICAgIF0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlc01vZHVsZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgICB0aGlzLm5nT25Jbml0KCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgdGFibGVzIG1vZHVsZScpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5zZXRUcmFuc2xhdGlvbignZW4nLCBUQUJMRVNfRU4sIHRydWUpO1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKCdlbCcsIFRBQkxFU19FTCwgdHJ1ZSk7XG4gICAgfVxuXG59XG4iXSwibmFtZXMiOlsidGVtcGxhdGUiLCJBY3RpdmF0ZWRSb3V0ZSIsIlJvdXRlciIsInRzbGliXzEuX19leHRlbmRzIiwiYXQiLCJUcmFuc2xhdGVTZXJ2aWNlIiwidHNsaWJfMS5fX3ZhbHVlcyIsIkRhdGVQaXBlIiwiSVNPNjM5MS5nZXROYXRpdmVOYW1lIiwiVGVtcGxhdGVQaXBlIiwiSW5qZWN0YWJsZSIsIkV2ZW50RW1pdHRlciIsIkZvcm1Db250cm9sIiwiQ29tcG9uZW50IiwiVmlld0VuY2Fwc3VsYXRpb24iLCJCc01vZGFsUmVmIiwiQ2hhbmdlRGV0ZWN0b3JSZWYiLCJJbnB1dCIsIlZpZXdDaGlsZCIsIlJvdXRlck1vZGFsT2tDYW5jZWwiLCJNb2RhbFNlcnZpY2UiLCJCZWhhdmlvclN1YmplY3QiLCJza2lwIiwiTmF2aWdhdGlvblN0YXJ0IiwiUmVzcG9uc2VFcnJvciIsIkRpcmVjdGl2ZSIsIkFuZ3VsYXJEYXRhQ29udGV4dCIsIkNvbmZpZ3VyYXRpb25TZXJ2aWNlIiwiTG9hZGluZ1NlcnZpY2UiLCJFcnJvclNlcnZpY2UiLCJIb3N0TGlzdGVuZXIiLCJJbmplY3Rpb25Ub2tlbiIsIlRyYW5zbGF0ZVBpcGUiLCJDbGllbnREYXRhUXVlcnlhYmxlIiwiRElBTE9HX0JVVFRPTlMiLCJJbmplY3QiLCJJbmplY3RvciIsIkVsZW1lbnRSZWYiLCJIdHRwQ2xpZW50IiwiRXhwb3J0U3ByZWFkc2hlZXRTZXJ2aWNlIiwiT3V0cHV0IiwiVG9hc3RTZXJ2aWNlIiwiVXNlckFjdGl2aXR5U2VydmljZSIsIlNlcnZpY2VVcmxQcmVQcm9jZXNzb3IiLCJUcmFuc2xhdGVQcmVQcm9jZXNzb3IiLCJGb3JtQXJyYXkiLCJCc01vZGFsU2VydmljZSIsIlVzZXJTdG9yYWdlU2VydmljZSIsIkZvcm1CdWlsZGVyIiwiVGV4dFV0aWxzIiwiQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kiLCJQaXBlIiwiY2xvbmVEZWVwIiwiY3JlYXRlRmVhdHVyZVNlbGVjdG9yIiwiY3JlYXRlU2VsZWN0b3IiLCJzdG9yZSIsInNlbGVjdCIsImZyb21UYWJsZXMuc2VsZWN0VGFibGUiLCJmaXJzdCIsIlN0b3JlIiwiT3B0aW9uYWwiLCJmaWx0ZXIiLCJOYXZpZ2F0aW9uRW5kIiwiTmdNb2R1bGUiLCJDb21tb25Nb2R1bGUiLCJTaGFyZWRNb2R1bGUiLCJUcmFuc2xhdGVNb2R1bGUiLCJGb3Jtc01vZHVsZSIsIlJlYWN0aXZlRm9ybXNNb2R1bGUiLCJSb3V0ZXJNb2R1bGUiLCJSb3V0ZXJNb2RhbE1vZHVsZSIsIkZvcm1pb01vZHVsZSIsIkFkdmFuY2VkRm9ybXNNb2R1bGUiLCJNb2RhbE1vZHVsZSIsIlByb2dyZXNzYmFyTW9kdWxlIiwiTmdQaXBlc01vZHVsZSIsIkdyb3VwQnlQaXBlIiwiQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBQUE7Ozs7Ozs7Ozs7Ozs7O0lBY0E7SUFFQSxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYztTQUNwQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RSxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUUvRSx1QkFBMEIsQ0FBQyxFQUFFLENBQUM7UUFDMUIsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQixnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUN2QyxD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LEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFBQyxTQUFTO3dCQUNqRCxLQUFLLENBQUM7NEJBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7NEJBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFBQyxTQUFTO3dCQUNqRDs0QkFDSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0NBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FBQyxTQUFTOzZCQUFFOzRCQUM1RyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQ0FBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FBQyxNQUFNOzZCQUFFOzRCQUN0RixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0NBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQ0FBQyxNQUFNOzZCQUFFOzRCQUNyRSxJQUFJLENBQUMsSUFB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
|
|
8161
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2lzLW5neC10YWJsZXMudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvY29sdW1uLXNlbGVjdG9yL2NvbHVtbi1zZWxlY3Rvci5zZXJ2aWNlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2J0bmV4cC5kaXJlY3RpdmUudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1saXN0L2FkdmFuY2VkLWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtcm93LWFjdGlvbi9hZHZhbmNlZC1yb3ctYWN0aW9uLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC1iYXNlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VhcmNoLWZvcm0vYWR2YW5jZWQtc2VhcmNoLWZvcm0uY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXNlbGVjdC9hZHZhbmNlZC1zZWxlY3Quc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXJlc29sdmVycy50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNldHRpbmdzLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL3RhYmxlLXNpbXBsZS1oZWFkZXIvdGFibGUtc2ltcGxlLWhlYWRlci5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9hZHZhbmNlZC10YWJsZS1lZGl0b3IuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3NlcnZpY2VzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5zZXJ2aWNlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtYWdncmVnYXRvci9hZHZhbmNlZC1hZ2dyZWdhdG9yLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdC9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWRkLWl0ZW1zL2FkZC1pdGVtcy5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvcGlwZXMvYWR2YW5jZWQtYWdncmVnYXRvci5waXBlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3BpcGVzL2FkdmFuc2VkLWFnZ3JlZ2F0b3ItbGlzdC10aXRsZS1wYXJzZS5waXBlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2kxOG4vdGFibGVzLmVsLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2kxOG4vdGFibGVzLmVuLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2FjdGlvbnMvdGFibGUuYWN0aW9ucy50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9yZWR1Y2Vycy9pbmRleC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2UtdGFibGUtc3RhdGUuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2RpcmVjdGl2ZXMvYWR2YW5jZS1zZWFyY2gtc3RhdGUuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2RpcmVjdGl2ZXMvYWR2YW5jZWQtc2VhcmNoLXJvdXRlci1zdGF0ZS5kaXJlY3RpdmUudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvdGFibGVzLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IHlbb3BbMF0gJiAyID8gXCJyZXR1cm5cIiA6IG9wWzBdID8gXCJ0aHJvd1wiIDogXCJuZXh0XCJdKSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFswLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAoIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyAgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKG9bbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH07IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl07XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiaW1wb3J0IHsgdGVtcGxhdGUsIGF0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0ICogYXMgSVNPNjM5MSBmcm9tICdpc28tNjM5LTEvYnVpbGQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciBpbXBsZW1lbnRzIFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB7XG5cbiAgcHVibGljIHN0YXRpYyB0ZW1wbGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIChkYXRhOiBhbnkpID0+IHN0cmluZz4oKTtcblxuICBwcm90ZWN0ZWQgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgcHVibGljIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcHVibGljIGRlZmF1bHRDb250ZW50Pzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0U3RyaW5nPzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0dGVyPzogc3RyaW5nO1xuICBwdWJsaWMgaGlkZGVuPzogYm9vbGVhbjtcbiAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyBvcmRlcj86IHN0cmluZztcbiAgcHVibGljIHByb3BlcnR5Pzogc3RyaW5nO1xuICBwdWJsaWMgc29ydGFibGU/OiBib29sZWFuO1xuICBwdWJsaWMgdGl0bGUgPSAnJztcbiAgcHVibGljIGZvcm1hdE9wdGlvbnM/OiBhbnk7XG4gIHB1YmxpYyBhY3Rpb25zPzogQXJyYXk8YW55PjtcblxuICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlKGV4cHI6IHN0cmluZyk6IChkYXRhOiBhbnkpID0+IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlQ2FjaGUuZ2V0KGV4cHIpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXN1bHQgPSB0ZW1wbGF0ZShleHByKTtcbiAgICBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZUNhY2hlLnNldChleHByLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55O1xuXG4gIHByb3RlY3RlZCBjcmVhdGVVcmxUcmVlKGRhdGE6IGFueSwgb3B0aW9uczogeyBjb21tYW5kczogYW55W10sIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzIH0pOiBVcmxUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmNvbW1hbmRzKSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSB0aGlzLmluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICBjb25zdCByb3V0ZXI6IFJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICBjb25zdCBjb21tYW5kcyA9IG9wdGlvbnMuY29tbWFuZHMubWFwKChjb21tYW5kKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoY29tbWFuZCkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQub3V0bGV0cykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmRPdXRsZXRzID0ge307XG4gICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZC5vdXRsZXRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29tbWFuZC5vdXRsZXRzLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG91dGxldCA9IGNvbW1hbmQub3V0bGV0c1trZXldO1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvdXRsZXQpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbW1hbmRPdXRsZXRzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBvdXRsZXQubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4KShkYXRhKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21tYW5kT3V0bGV0cywga2V5LCB7XG4gICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogb3V0bGV0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGxldHM6IGNvbW1hbmRPdXRsZXRzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICBsZXQgcmVwbGFjZVVybCA9IHRydWU7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtRXh0cmFzID0gb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzICYmIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5xdWVyeVBhcmFtcztcbiAgICAgIGlmIChxdWVyeVBhcmFtRXh0cmFzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1FeHRyYXMpLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHF1ZXJ5UGFyYW1FeHRyYXNba2V5XTtcbiAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGV4dCkoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLnJlcGxhY2VVcmwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJlcGxhY2VVcmwgPSBvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMucmVwbGFjZVVybDtcbiAgICAgIH1cbiAgICAgIGxldCBza2lwTG9jYXRpb25DaGFuZ2UgPSBmYWxzZTtcbiAgICAgIGlmIChvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMgJiYgdHlwZW9mIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZSA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2U7XG4gICAgICB9XG5cbiAgICAgIGxldCBmcmFnbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLmZyYWdtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmcmFnbWVudCA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5mcmFnbWVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLFxuICAgICAgICB7XG4gICAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2UsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25BZHZhbmNlZENvbHVtbkFmdGVyUmVuZGVyIHtcbiAgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICByZXR1cm4gYXQocm93LCBjb2x1bW4uZGF0YS5yZXBsYWNlKC9cXC8vZywgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1dHRvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsIHx8IHRoaXMuaW5qZWN0b3IgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyBnZXQgZm9ybWF0IG9wdGlvbnNcbiAgICBjb25zdCBmb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBidXR0b25DbGFzczogJ2J0biBidG4tZGVmYXVsdCcsXG4gICAgfSwgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAvLyBnZXQgdGV4dCBjb250ZW50XG4gICAgbGV0IGJ1dHRvblRleHQ6IHN0cmluZztcbiAgICBsZXQgYnV0dG9uVGl0bGUgPSAnJztcbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICBidXR0b25UZXh0ID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChmb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidXR0b25UZXh0ID0gZm9ybWF0T3B0aW9ucy5idXR0b25Db250ZW50O1xuICAgIH1cbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UaXRsZSkge1xuICAgICAgYnV0dG9uVGl0bGUgPSB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KGZvcm1hdE9wdGlvbnMuYnV0dG9uVGl0bGUpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvcm1hdE9wdGlvbnMuY29tbWFuZHMpKSB7XG4gICAgICBjb25zdCByb3V0ZXJMaW5rID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIjJHtyb3V0ZXJMaW5rfVwiPiR7YnV0dG9uVGV4dH08L2E+YDtcbiAgICB9XG4gICAgLy8gYW5kIHJldHVybiBidXR0b25cbiAgICBjb25zdCBocmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpO1xuICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIke2hyZWZ9XCI+JHtidXR0b25UZXh0fTwvYT5gO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHsoQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpKX1cIj4ke2RhdGF9PC9hPmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkxpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlclxuICBpbXBsZW1lbnRzIE9uQWR2YW5jZWRDb2x1bW5BZnRlclJlbmRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nIGRhdGEtdHlwZT0nc3R1ZGVudCcgPlxuICAgICAgICAgICAgICAgICAgICA8YSBpZD1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhLTJ4IHRleHQtZG90c1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCI+XG4gICAgICAgICAgICAgICAgICAgICAke2FjdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4LnR5cGUgPT09ICdkaXZpZGVyJykge1xuICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4LmZvcm1hdE9wdGlvbnMgJiYgeC5mb3JtYXRPcHRpb25zLmNvbW1hbmRzKSB7XG4gICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuY3JlYXRlVXJsVHJlZShyb3csIHguZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIke0FkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKHguaHJlZikocm93KX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+YDtcbiAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gYXNzaWduIGJvb3RzdHJhcCBkcm9wZG93biAoPylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIGxldCBidXR0b25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICAgIC8vIGlmIGJ1dHRvbiB0ZXh0IGlzIGEgbGl0ZXJhbCBleHByZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dC5pbmNsdWRlcygnJHsnKSkge1xuICAgICAgICAgIC8vIHVzZSB0ZW1wbGF0ZVxuICAgICAgICAgIGJ1dHRvblRleHQgPSBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dCkocm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UgdHJhbnNsYXRlIGl0XG4gICAgICAgICAgYnV0dG9uVGV4dCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQodGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYnV0dG9uVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMgJiYgdGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRpdGxlKSB7XG4gICAgICAgIGJ1dHRvblRpdGxlID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGJ1dHRvblRpdGxlZXh0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJ1dHRvbkNsYXNzID0gKHRoaXMuZm9ybWF0T3B0aW9ucyAmJiB0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3MpIHx8ICdidG4gYnRuLWxpZ2h0JztcbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9IGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiJHtidXR0b25UaXRsZX1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25NZW51QnV0dG9uLSR7ZGF0YX1cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2J1dHRvblRleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50eXBlID09PSAnZGl2aWRlcicpIHtcbiAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeC5jb21tYW5kcykge1xuICAgICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmNyZWF0ZVVybFRyZWUocm93LCB4KTtcbiAgICAgICAgICByZXR1cm4gYDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiJHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4LmhyZWYpKHJvdyl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5pbmplY3RvciAmJiB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KHgudGl0bGUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICB9KVxuICAgICAgICAgIC5qb2luKCcnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihjZWxsOiBhbnksIGNlbGxEYXRhOiBhbnksIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIGFzc2lnbiBib290c3RyYXAgZHJvcGRvd24gKD8pXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucyB8fCBbXTtcbiAgICAgIGxldCBpbmRleCA9IDE7XG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aW9uLCB7XG4gICAgICAgICAgbmFtZTogYWN0aW9uLm5hbWUgfHwgYGFjdGlvbiR7aW5kZXh9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYnV0dG9uQ2xhc3MgPSAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25DbGFzcykgfHwgJ2J0biBidG4tbGlnaHQnO1xuICAgICAgLy8gcmV0dXJuIHRoZSBkcm9wZG93biBtZW51IHdpdGggMyBkb3RzXG4gICAgICBjb25zdCBkZWZhdWx0QWN0aW9uID0gYWN0aW9uc1swXTtcbiAgICAgIGxldCBkZWZhdWx0QWN0aW9uSHJlZjogc3RyaW5nO1xuICAgICAgaWYgKGRlZmF1bHRBY3Rpb24gJiYgZGVmYXVsdEFjdGlvbi5jb21tYW5kcykge1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgZGVmYXVsdEFjdGlvbik7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gJyMnICsgKHVybFRyZWUgJiYgdXJsVHJlZS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoZGVmYXVsdEFjdGlvbi5ocmVmKShyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9XCIgaHJlZj1cIiR7ZGVmYXVsdEFjdGlvbkhyZWZ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoZGVmYXVsdEFjdGlvbi50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCIke2J1dHRvbkNsYXNzfSBkcm9wZG93bi10b2dnbGUgZHJvcGRvd24tdG9nZ2xlLXNwbGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4ke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVG9nZ2xlIERyb3Bkb3duJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50aXRsZSA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHguY29tbWFuZHMpIHtcbiAgICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgeCk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiIyR7dXJsVHJlZSAmJiB1cmxUcmVlLnRvU3RyaW5nKCl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiR7QWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoeC5ocmVmKShyb3cpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgfSlcbiAgICAgICAgICAuam9pbignJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhc3NpZ24gYm9vdHN0cmFwIGRyb3Bkb3duICg/KVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3RSb3dGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBfdHBsID0gYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lXCIgdHlwZT1cImNoZWNrYm94XCJcbiBpZD1cInMtJHttZXRhLnJvd31cIiAvPjxsYWJlbCBmb3I9XCJzLSR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5gO1xuICAgICAgcmV0dXJuIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKF90cGwpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdFN0cmluZyBhcyBzdHJpbmcpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRydWVGYWxzZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcblxuICBwdWJsaWMgcmVuZGVyKGRhdGEsIHR5cGUsIHJvdywgbWV0YSkge1xuICAgIHJldHVybiBkYXRhID8gKHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVHJ1ZUZhbHNlLmxvbmcuWWVzJykpIDpcbiAgICAgICh0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoJ1RydWVGYWxzZS5sb25nLk5vJykpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5kZWNsYXJlIGludGVyZmFjZSBUcmFuc2xhdGlvbkZvcm1hdHRlclRlbXBsYXRlIHtcbiAgdHJhbnNsYXRlVGVtcGxhdGU/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgcm93OiBhbnksIG1ldGE6IGFueSk6IGFueSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbjogVHJhbnNsYXRpb25Gb3JtYXR0ZXJUZW1wbGF0ZSA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGRhdGEgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChcbiAgICAgICAgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKSh7XG4gICAgICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVW5rbm93bicpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEgJiYgdGhpcy5pbmplY3Rvcikge1xuICAgICAgY29uc3QgZGF0ZVBpcGU6IERhdGVQaXBlID0gbmV3IERhdGVQaXBlKHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmN1cnJlbnRMYW5nKTtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVxcK1xcZHsyfSQvLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShuZXcgRGF0ZShkYXRhICsgJzowMCcpLCB0aGlzLmZvcm1hdFN0cmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGEsIHRoaXMuZm9ybWF0U3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmdDbGFzc0Zvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIC8vIGdldCBmb3JtYXRPcHRpb25zXG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG5nQ2xhc3MgPSB0aGlzLmZvcm1hdE9wdGlvbnMubmdDbGFzcztcbiAgICAgICAgLy8gY2hlY2sgY29uZGl0aW9uIGZvciBlYWNoIGtleVxuICAgICAgICBjb2x1bW4ubmdDbGFzc1RlbXBsYXRlcyA9IGNvbHVtbi5uZ0NsYXNzVGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZ0NsYXNzKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKG5nQ2xhc3Nba2V5XSkocm93KTtcbiAgICAgICAgICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbihgcmV0dXJuICR7cmVzdWx0fTtgKTtcbiAgICAgICAgICAvLyBpZiBjb25kaXRpb24gcmV0dXJucyB0cnVlIGFkZCBjbGFzc1xuICAgICAgICAgIGlmIChmbigpID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHtrZXl9XCI+JHtkYXRhfTwvc3Bhbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgcmV0dXJuIElTTzYzOTEuZ2V0TmF0aXZlTmFtZShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIge1xuXG4gIHB1YmxpYyB2YWx1ZXMgPSB7IH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVQaXBlKCk7XG4gIH1cblxuICBidWlsZEZpbHRlcihmaWx0ZXIpIHtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKGZpbHRlciwgdGhpcy52YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFzeW5jQnVpbGRGaWx0ZXIoZmlsdGVyKSB7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShmaWx0ZXIsIGF3YWl0IHRoaXMuZ2V0VmFsdWVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cblxufVxuIiwiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWNvbHVtbi1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgIC5mb3JtLXNlbGVjdCB7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgfVxuICAgIC5mb3JtLXNlbGVjdCAqIHtcbiAgICAgICAgcGFkZGluZzogNXB4IDVweDtcbiAgICB9XG4gICAgLmJ0bi5kaXNhYmxlZCwgLmJ0bjpkaXNhYmxlZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbHVtblNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgY29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdO1xuICAgIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfVtdO1xuXG4gICAgQFZpZXdDaGlsZCgnbW92ZVVwQnV0dG9uJykgbW92ZVVwQnV0dG9uPzogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdtb3ZlRG93bkJ1dHRvbicpIG1vdmVEb3duQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICAgIGF2YWlsYWJsZUNvbHVtbnNDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgc2VsZWN0ZWRDb2x1bW5zQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuXG4gICAgcHVibGljIGNoYW5naW5nID0gZmFsc2U7XG5cbiAgICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUNoYW5nZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ29rJyk7XG4gICAgfVxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9tb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52aXNpYmxlO1xuICAgICAgICAgICAgfSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4IDwgYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4ID4gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBsZXQgbW92ZUluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IGNvbHVtbi5rZXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IG1vdmVJbmRleDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IGZpbmRJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgY29sdW1uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuYXZhaWxhYmxlQ29sdW1uc0NvbnRyb2wudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmluZENvbHVtbi5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaW5kQ29sdW1uLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgbGFzdCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWRJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBzZWxlY3RlZFtzZWxlY3RlZC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyByZXNldCBjb250cm9sXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5yZXNldCgpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRJbmRleCA+IC0xICYmIGxhc3RTZWxlY3RlZEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5wYXRjaFZhbHVlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tsYXN0U2VsZWN0ZWRJbmRleCArIDFdLmtleVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlVXAoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbZmluZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCAtIDEgLCAwLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZURvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVEb3duQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVEb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuY29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCAmJiBmaW5kSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ZpbmRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXggKyAxICwgMCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlRG93bkJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlRG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZWxlY3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAvL1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH0pOlxuICAgIFByb21pc2U8e3Jlc3VsdDogc3RyaW5nLCBjb2x1bW5zPzogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyxcbiAgICAgIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdfT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuX21vZGFsLm9wZW5Nb2RhbENvbXBvbmVudChDb2x1bW5TZWxlY3RvckNvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtbGcgbW9kYWwtdGFibGUnLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29sdW1uU2VsZWN0b3JDb21wb25lbnQgPSBtb2RhbFJlZi5jb250ZW50O1xuICAgICAgICBjb21wb25lbnRSZWYuZGlzbWlzcy5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgY29sdW1uczogY29tcG9uZW50UmVmLmNvbHVtbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkVGFibGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9hY3RpdmVUYWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsYXN0IHRhYmxlIHRoYXQgd2FzIHNldCBhcyBhY3RpdmVcclxuICAgKiBOb3RlOiBFbWl0dGVkIHZhbHVlIG1heSBiZSB1bmRlZmluZWQgKGUuZy4gcmVzZXQgb24gcm91dGUgY2hhbmdlcylcclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgbGFzdEFjdGl2ZVRhYmxlOlxyXG4gICAgQmVoYXZpb3JTdWJqZWN0PEFkdmFuY2VkVGFibGVDb21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICAqIE9taXQgdGhlIGxhc3QgZW1pdHRlZCB2YWx1ZSB0byBvYnNlcnZlIG9ubHkgbmV3IGFjdGl2ZSB0YWJsZSBjaGFuZ2VzXHJcbiAgICogTm90ZTogRW1pdHRlZCB2YWx1ZSBtYXkgYmUgdW5kZWZpbmVkIChlLmcuIHJlc2V0IG9uIHJvdXRlIGNoYW5nZXMpXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IG5leHRBY3RpdmVUYWJsZTpcclxuICAgIE9ic2VydmFibGU8QWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZD4gPSB0aGlzLmxhc3RBY3RpdmVUYWJsZS5waXBlKHNraXAoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICBfcm91dGVyLmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBhY3RpdmVUYWJsZSgpOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVUYWJsZTtcclxuICB9XHJcblxyXG4gIHNldCBhY3RpdmVUYWJsZSh0YWJsZUNvbXBvbmVudDogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYWN0aXZlVGFibGUgPSB0YWJsZUNvbXBvbmVudDtcclxuICAgIC8vIHByb3ZpZGUgY2hhbmdlIHRvIG9ic2VydmVyc1xyXG4gICAgdGhpcy5sYXN0QWN0aXZlVGFibGUubmV4dCh0aGlzLl9hY3RpdmVUYWJsZSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclNlcnZpY2UsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDbGllbnREYXRhUXVlcnlhYmxlLCBSZXNwb25zZUVycm9yfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IE1BWF9FWFBPUlRfSVRFTVMgPSA1MDA7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb24ge1xuICB0YWJsZXM/OiB7XG4gICAgZXhwb3J0TGltaXQ/OiBudW1iZXJcbiAgfTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICcudW5pdmVyc2lzLWJ0bi1leHBvcnQnXG59KVxuZXhwb3J0IGNsYXNzIEJ0bkV4cERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlnOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGNsaWNrRXZlbnQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmV4cG9ydFZpZXcoKTtcbiAgICAgIC8qXG4gICAgICBjb25zdCBsYXN0UXVlcnkgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5sYXN0UXVlcnk7XG4gICAgICBjb25zdCB0YWJsZUNvbmZpZyA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmNvbmZpZztcbiAgICAgIGNvbnN0IHNlcnZpY2VIZWFkZXJzID0gdGhpcy5fY29udGV4dC5nZXRTZXJ2aWNlKCkuZ2V0SGVhZGVycygpO1xuICAgICAgY29uc3QgcXVlcnlNb2RlbCA9IGxhc3RRdWVyeS5nZXRNb2RlbCgpO1xuICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbChxdWVyeU1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBsYXN0UXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICBxdWVyeSA9IHRoaXMuY29uc3RydWN0UXVlcnkocXVlcnksIHF1ZXJ5UGFyYW1zLCB0YWJsZUNvbmZpZywgc2VydmljZUhlYWRlcnMpO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBzZXR0aW5nc1xuICAgICAgY29uc3QgZXhwb3J0U2V0dGluZ3MgPSB0aGlzLl9jb25maWcuc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgbWF4RXhwb3J0SXRlbXMgPSBleHBvcnRTZXR0aW5ncyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0O1xuICAgICAgaWYgKG1heEV4cG9ydEl0ZW1zICYmIHR5cGVvZiBtYXhFeHBvcnRJdGVtcyA9PT0gJ251bWJlcicgJiYgbWF4RXhwb3J0SXRlbXMgPiAwKSB7XG4gICAgICAgIHF1ZXJ5LnNraXAoMCkudGFrZShtYXhFeHBvcnRJdGVtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeS5za2lwKDApLnRha2UoTUFYX0VYUE9SVF9JVEVNUyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdHMgdGhlIFVSSSBiYXNlZCBvbiB0aGUgd2F5IEB0aGVtb3N0IGRvZXNcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uc3RydWN0VVJMKHF1ZXJ5KTtcbiAgICAgIHRoaXMuZG93bmxvYWRGaWxlKHVybCwgcXVlcnkuZ2V0U2VydmljZSgpLmdldEhlYWRlcnMoKSwgcXVlcnkuZ2V0TW9kZWwoKSk7ICovXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHF1ZXJ5IGJhc2VkIG9uXG4gICAqIHRoZSBhY3RpdmUgZmlsdGVycyBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gcGFyYW1zOiBUaGUgZmlsdGVycyBvZiB0aGUgbGFzdCBxdWVyeSBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEByZXR1cm4gQ2xpZW50RGF0YVF1ZXJ5YWJsZVxuICAgKi9cbiAgc2V0UGFyYW1zKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBwYXJhbXMpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBpZiAocGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBxdWVyeS5zZXRQYXJhbShrZXksIHBhcmFtc1trZXldKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaGVhZGVycyB0byB0aGUgcXVlcnkgYmFzZWQgb25cbiAgICogdGhlIGRlZmF1bHQgaGVhZGVycyBvZiB0aGUgRGF0YUNvbnRleHRcbiAgICogYW5kIGFwcGVuZGluZyB0aGUgYWNjZXB0IGhlYWRlciB0byBnZXRcbiAgICogYW4geGxzeCBmaWxlIGZyb20gdGhlIEFQSVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBzZXRIZWFkZXJzKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBoZWFkZXJzOiBIZWFkZXJzKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHF1ZXJ5LmdldFNlcnZpY2UoKS5zZXRIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNldHMgYSBoZWFkZXIgdG8gYWNjZXB0IHhsc3ggZmlsZXNcbiAgICBxdWVyeS5nZXRTZXJ2aWNlKCkuc2V0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgc2VsZWN0IHBhcmFtZXRlciBvZiB0aGVcbiAgICogQ2xpZW50RGF0YVF1ZXJ5IGJ5IHJlcGxhY2luZyB0aGUgdGFyZ2V0IG5hbWVcbiAgICogb2YgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBsb2NhbGl6ZWQgdHJhbnNsYXRpb25cbiAgICogb2YgdGhhdCBwcm9wZXJ0eSBvbiB0aGUgYWR2YW5jZWQgdGFibGVkXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeVBhcmFtKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCB0YWJsZUNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgbGV0IHNlbGVjdFF1ZXJ5ID0gcXVlcnkuZ2V0UGFyYW1zKCkuJHNlbGVjdDtcbiAgICBsZXQgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5LnNwbGl0KCcsJyk7XG4gICAgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5QXJyYXkubWFwKChzZWxlY3QpID0+IHtcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VsZWN0LnNwbGl0KCcgJyk7XG4gICAgICBpZiAod29yZHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICh0YWJsZUNvbmZpZyAmJiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSA9PT0gd29yZHNbMl0gJiYgY29sdW1uLnRpdGxlKSB7XG4gICAgICAgICAgICAgIHdvcmRzWzJdID0gYFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4udGl0bGUpfVwiYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnByb3BlcnR5ID09PSB3b3Jkc1syXSkge1xuICAgICAgICAgICAgICB3b3Jkc1syXSA9IGBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMl0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKHRhYmxlQ29uZmlnICYmIHRhYmxlQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHdvcmRzWzBdICYmIGNvbHVtbi50aXRsZSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLnRpdGxlKX1cImA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ubmFtZSA9PT0gd29yZHNbMF0gJiYgY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIHdvcmRzWzBdID0gYCR7d29yZHNbMF19IGFzIFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4ucHJvcGVydHkpfVwiYDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmRzWzBdID09PSBjb2x1bW4ubmFtZSAmJiB3b3Jkc1swXSA9PT0gJ2lkJyAmJiBjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29yZHNbMF0gPT0gY29sdW1uLm5hbWUgfHwgd29yZHNbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMF0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgICB9KTtcbiAgICBzZWxlY3RRdWVyeSA9IHNlbGVjdFF1ZXJ5QXJyYXkuam9pbignLCcpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0Jywgc2VsZWN0UXVlcnkgKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZmV0Y2ggVVJMIGJhc2VkIHRoZSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcmV0dXJuIFN0cmluZ1xuICAgKi9cbiAgY29uc3RydWN0VVJMKHF1ZXJ5KTogU3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVVJMID0gcXVlcnkuZ2V0U2VydmljZSgpLmdldEJhc2UoKTtcbiAgICBsZXQgdXJsID0gYmFzZVVSTC5lbmRzV2l0aCgnLycpID8gKGJhc2VVUkwgKyBxdWVyeS5nZXRNb2RlbCgpICsgJz8nKSA6IChiYXNlVVJMICsgJy8nICsgcXVlcnkuZ2V0TW9kZWwoKSArICc/Jyk7XG4gICAgT2JqZWN0LmtleXMocXVlcnkuZ2V0UGFyYW1zKCkpLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICB1cmwgKz0ga2V5ICsgJz0nICsgcXVlcnkuZ2V0UGFyYW1zKClba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCArPSAnJicgKyBrZXkgKyAnPScgKyBxdWVyeS5nZXRQYXJhbXMoKVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgcXVlcnkgYnkgc2V0dGluZyB0aGUgcGFyYW1ldGVycyBvZiB0aGVcbiAgICogYWR2YW5jZWQgdGFibGUncyBhY3RpdmUgZmlsdGVycywgc2V0cyB0aGUgbmVjZXNzYXJ5IGhlYWRlcnNcbiAgICogYW5kIGJ1aWxkIHRoZSBzZWxlY3QgcGFyYW1ldGVyIG9mIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIHBhcmFtczogVGhlIGZpbHRlcnMgb2YgdGhlIGxhc3QgcXVlcnkgb2YgdGhlIGFjdGl2YXRlZCB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeShxdWVyeSwgcGFyYW1zLCB0YWJsZUNvbmZpZywgaGVhZGVyczogSGVhZGVycykge1xuICAgIGxldCBfcXVlcnkgPSB0aGlzLnNldFBhcmFtcyhxdWVyeSwgcGFyYW1zKTtcbiAgICBfcXVlcnkgPSB0aGlzLnNldEhlYWRlcnMoX3F1ZXJ5LCBoZWFkZXJzKTtcbiAgICBfcXVlcnkgPSB0aGlzLmNvbnN0cnVjdFF1ZXJ5UGFyYW0oX3F1ZXJ5LCB0YWJsZUNvbmZpZyk7XG4gICAgcmV0dXJuIF9xdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCBzYXZlcyB0aGUgeGxzeCBmaWxlXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIHNlcnZpY2VIZWFkZXJzOiBUaGUgaGVhZGVycyB0byBhcHBlbmQgdG8gdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSBtb2RlbE5hbWU6IFRoZSBtb2RlbCBuYW1lIG9mIHRoZSBhZHZhbmNlZCB0YWJsZVxuICAgKi9cbiAgZG93bmxvYWRGaWxlKHVybCwgc2VydmljZUhlYWRlcnM6IEhlYWRlcnMsIG1vZGVsTmFtZSkge1xuICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgZmV0Y2goZW5jb2RlVVJJKHVybCksIHtcbiAgICAgIGhlYWRlcnM6IHNlcnZpY2VIZWFkZXJzLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJ1xuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbiAgICB9KS50aGVuKGJsb2IgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0VXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICBhLmhyZWYgPSBvYmplY3RVcmw7XG4gICAgICBjb25zdCBkb3dubG9hZE5hbWUgPSBgJHttb2RlbE5hbWV9Lnhsc3hgO1xuICAgICAgYS5kb3dubG9hZCA9IGRvd25sb2FkTmFtZTtcbiAgICAgIC8vIHRoaXMgYWRkcyBzdXBwb3J0IGZvciBJRSBhbmQgTVMgRWRnZSAodXAgdG8gdmVyc2lvbiA0NC4xOTA0MSlcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yICYmICh3aW5kb3cubmF2aWdhdG9yIGFzIGFueSkubXNTYXZlT3JPcGVuQmxvYikge1xuICAgICAgICAod2luZG93Lm5hdmlnYXRvciBhcyBhbnkpLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgZG93bmxvYWROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgfVxuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcbiAgICAgIGEucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbiIsImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlLCBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgRXJyb3JTZXJ2aWNlLCBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7SUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcbi8vIGltcG9ydGFudCBub3RlOiB1c2UgdGhpcyBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldCc7XG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1zY3JvbGxlcic7XG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWNvbHJlb3JkZXInO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1idXR0b25zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uLCBNQVhfRVhQT1JUX0lURU1TIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcblxuLy8gcmVzdG9yZSBqcXVlcnkgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IHtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyO1xuICBkYXRhOiBBcnJheTxhbnk+O1xufVxuXG5jb25zdCBEYXRhVGFibGVzQXBpOiBhbnkgPSBqUXVlcnkuZm4uZGF0YVRhYmxlLkFwaTtcbkRhdGFUYWJsZXNBcGkucmVnaXN0ZXIoICdwcm9jZXNzaW5nKCknLCBmdW5jdGlvbiggc2hvdzogYW55ICkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCd0YWJsZScsICggY3R4OiBhbnkgKSA9PiB7XG4gICAgICAgIGN0eC5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5KCBjdHgsIHNob3cgKTtcbiAgICB9ICk7XG59KTtcblxuY29uc3QgRU1QVFlfREFUQVNFVCA9IHtcbiAgcmVjb3Jkc1RvdGFsOiAwLFxuICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gIGRhdGE6IFtdLFxufTtcblxuY2xhc3MgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBwdWJsaWMgY2hlY2tOb0NoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0YWNoKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlYXR0YWNoKCk6IHZvaWQge1xuICB9XG5cbn1cblxuZXhwb3J0IGxldCBDT0xVTU5fRk9STUFUVEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignY29sdW1uLmZvcm1hdHRlcnMnKTtcblxuZXhwb3J0IGNsYXNzIEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIFJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yJztcbiAgfVxufVxuXG5jbGFzcyBDb2x1bW5Gb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGNsYXNzPzogc3RyaW5nO1xuICBwdWJsaWMgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXRTdHJpbmc/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXR0ZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW4/OiBib29sZWFuO1xuICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgcHVibGljIG9yZGVyPzogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk/OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0YWJsZT86IGJvb2xlYW47XG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBhbnksIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAvL1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlQ2FzdDxUPihpbnB1dDogYW55KTogVCB7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBjYXN0KGlucHV0OiBhbnksIGNsb25lPzogYm9vbGVhbik6IFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYW5kb21JZGVudGlmaWVyKCkge1xuICByZXR1cm4gKFxuICAgIE51bWJlcihTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMikpXG4gICkudG9TdHJpbmcoMzYpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0YWJsZSAjdGFibGUgY2xhc3M9XCJkYXRhVGFibGVcIj5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjZXJyb3JUZW1wbGF0ZSBjbGFzcz1cImQtbm9uZSBlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZGFuZ2VyIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LXNlY29uZGFyeVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgbWItMVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtc2Vjb25kYXJ5IGVycm9yLWlubmVyLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxzbWFsbD48L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIHByaXZhdGUgX3F1ZXJ5PzogQ2xpZW50RGF0YVF1ZXJ5YWJsZTtcbiAgcHJpdmF0ZSBfY29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dIZWFkZXIgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93UGFnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2lkID0gZ2V0UmFuZG9tSWRlbnRpZmllcigpO1xuICBwdWJsaWMgc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgcHVibGljIGNvbmZpZ0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnKSBwdWJsaWMgdGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgcHVibGljIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlcnJvclRlbXBsYXRlJykgcHVibGljIGVycm9yVGVtcGxhdGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlPzogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNob3dBY3Rpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQE91dHB1dCgnbG9hZCcpIHB1YmxpYyBsb2FkOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4oKTtcbiAgQE91dHB1dCgnaW5pdCcpIHB1YmxpYyBpbml0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoJ3JlbG9hZCcpIHB1YmxpYyByZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdCcpIHB1YmxpYyBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2RyYXcnKSBwdWJsaWMgZHJhdzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgncGFnZScpIHB1YmxpYyBwYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdvcmRlcicpIHB1YmxpYyBvcmRlcjogRXZlbnRFbWl0dGVyPGFueVtdW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXVtdPigpO1xuICBAT3V0cHV0KCdzY3JvbGwnKSBwdWJsaWMgc2Nyb2xsOiBFdmVudEVtaXR0ZXI8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0ZWRJdGVtcycpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdsb2FkaW5nJykgcHVibGljIGxvYWRpbmc6IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+KCk7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VydmVyU2lkZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBsZW5ndGhNZW51ID0gWzUwLCAxMDAsIDIwMCwgNTAwXTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2luZyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5PcmRlcmluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVTYXZlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZUxvYWRDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBjYWxsYmFjazogKHN0YXRlOiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmVDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBzdGF0ZTogYW55KSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxZID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIHJvdyBzZWxlY3Rpb24uIFRoZSBkZWZhdWxyIHZhbHVlIGlzIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlIG11bHRpcGxlIHNlbGVjdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyBjdXN0b20gc2VsZWN0aW9uIGFuZCBoaWRlcyBzZWxlY3QgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgdW5zZWxlY3RlZDogYW55W10gPSBbXTtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIFVSTCB0byBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gZnJvbVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNvbmZpZ1NyYz86IHN0cmluZztcbiAgcHVibGljIGxhc3RFcnJvcjogYW55O1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGFibGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogVGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gICAgLy8gcmFpc2Ugc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5jb25maWdDaGFuZ2VzLm5leHQodGhpcy5fY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgVGFibGVDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBsYXN0UXVlcnlUb3RhbEl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dGb290ZXInKVxuICBwdWJsaWMgc2V0IHNob3dGb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Rm9vdGVyID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Rm9vdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICAgQElucHV0KCdzaG93SGVhZGVyJylcbiAgIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsdWU7XG4gICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgaWYgKGRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgICB9XG4gICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gYWRkIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKCdtdC0yJyk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICAvLyByZW1vdmUgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldCBzaG93SGVhZGVyKCkge1xuICAgICByZXR1cm4gdGhpcy5fc2hvd0hlYWRlcjtcbiAgIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcGFnaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd1BhZ2luZycpXG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dQYWdpbmcgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19wYWdpbmF0ZScpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93UGFnaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93UGFnaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBhY3RpdmUgcXVlcnkgZm9yIHRoaXMgdGFibGVcbiAgICovXG4gIEBJbnB1dCgncXVlcnknKVxuICBwdWJsaWMgc2V0IHF1ZXJ5KHZhbHVlOiBDbGllbnREYXRhUXVlcnlhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcXVlcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5IGFzIENsaWVudERhdGFRdWVyeWFibGU7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRlUGlwZTtcbiAgcHVibGljIGRhdGFUYWJsZTogYW55O1xuICBwdWJsaWMgZHRPcHRpb25zOiBhbnk7XG4gIHByaXZhdGUgbGFzdFF1ZXJ5UGFyYW1zPzogRGF0YVNlcnZpY2VRdWVyeVBhcmFtcztcbiAgcHJpdmF0ZSBfbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBASW5qZWN0KENPTFVNTl9GT1JNQVRURVJTKSBwcml2YXRlIF9jb2x1bW5Gb3JtYXR0ZXJzOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZzogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbHVtblNlbGVjdG9yOiBDb2x1bW5TZWxlY3RvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9leHBvcnRTcHJlYWRzaGVldDogRXhwb3J0U3ByZWFkc2hlZXRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UpIHtcbiAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlXG4gICAgdGhpcy50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0ZVBpcGUodGhpcy5fdHJhbnNsYXRlU2VydmljZSwgbmV3IFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpKTtcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uID0gJ2J0bic7XG4gICAgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHQuY2xhc3Nlcy5zUGFnZUJ1dHRvbkFjdGl2ZSA9ICdidG4gYnRuLWxpZ2h0JztcbiAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2ltcGxlIHNlYXJjaFxuICBwdWJsaWMgc2VhcmNoKHNlYXJjaFRleHQpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGUpIHtcbiAgICAgIGlmIChzZWFyY2hUZXh0ICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgICB0ZXh0OiBzZWFyY2hUZXh0LnJlcGxhY2UoL15cInxcIiQvZywgJycpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVGV4dC5zcGxpdCgnICcpO1xuICAgICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKCh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uKSBhcyBzdHJpbmcsIHtcbiAgICAgICAgICAgICAgdGV4dDogd29yZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XG4gICAgICAgICAgLy8gc2V0IGZpbHRlclxuICAgICAgICAgIHRoaXMucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuc3VyZSBlbXB0eSB0YWJsZSBsYXlvdXRcbiAgICAgIHRoaXMucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAvLyBzZWFyY2ggbG9jYWxseVxuICAgICAgdGhpcy5kYXRhVGFibGUuc2VhcmNoKHNlYXJjaFRleHQudHJpbSgpKS5kcmF3KCk7XG4gICAgICAvLyBnZXQgaW5kZXhlcyBvZiBmaWx0ZXJlZCByb3dzXG4gICAgICBjb25zdCBpbmRleGVzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSk7XG4gICAgICAvLyBzZXQgcmVjb3Jkc0ZpbHRlcmVkXG4gICAgICBjb25zdCByZWNvcmRzRmlsdGVyZWQgPSBpbmRleGVzLmxlbmd0aDtcbiAgICAgIC8vIHNldCByZWNvcmRzVG90YWxcbiAgICAgIGNvbnN0IHJlY29yZHNUb3RhbCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gcmV0cmlldmUgZGF0YSBmcm9tIGluZGV4ZXNcbiAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgICAgY29uc3QgZGF0YSA9IGluZGV4ZXMubWFwKGluZGV4ID0+IHJvd3NbPG51bWJlcj5pbmRleF0pO1xuICAgICAgLy8gZW1pdCByZXN1bHRzIHRvIGxvYWQgb3V0cHV0XG4gICAgICB0aGlzLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogcmVjb3Jkc0ZpbHRlcmVkLFxuICAgICAgICByZWNvcmRzVG90YWw6IHJlY29yZHNUb3RhbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZldGNoKGNsZWFyU2VsZWN0ZWQ/OiBib29sZWFuKSB7XG4gICAgLy8gaWYgZGF0YSB0YWJsZSBpcyBudWxsXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgcmV0dXJuIHRoaXMubmdPbkluaXQoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgc2VsZWN0aW9uIGlmIHBhcmFtZXRlciBpcyBub3QgZGVjbGFyZWQgb3IgaXQncyB0cnVlXG4gICAgaWYgKGNsZWFyU2VsZWN0ZWQgPT0gbnVsbCB8fCBjbGVhclNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBsb2FkIGRhdGEgb25seVxuICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnRhYmxlKSB7XG4gICAgICAgIGpRdWVyeSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpLmVtcHR5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IG51bGw7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvd1xuICAgKi9cbiAgcHVibGljIHNlbGVjdFJvdyhyb3c6IGFueSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIC8vIGdldCByb3dcbiAgICAgIGNvbnN0IHJvd05vZGUgPSByb3cubm9kZSgpO1xuICAgICAgLy8gaWYgbXVsdGlwbGUgc2VsZWN0IGlzIGZhbHNlXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIGVudW1lcmF0ZSByb3dcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoJy5zZWxlY3RlZCcpLm5vZGVzKCkuZWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZSAhPT0gcm93Tm9kZSkge1xuICAgICAgICAgICAgICBqUXVlcnkobm9kZSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgc2VsZWN0ZWRcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Tm9kZSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgcm93IGRhdGFcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBzZWFyY2ggc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgIC8vIHZhbGlkYXRlIHVuc2VsZWN0ZWQgZGF0YVxuICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3RzIHRoZSBzcGVjaWZpZWQgZGF0YSByb3cgaWYgaXQncyBzZWxlY3RlZFxuICAgKi9cbiAgcHVibGljIHVuU2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgY2xhc3NcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiBrZXlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICBjb25zdCBpZCA9IGRhdGFba2V5XTtcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgLy8gYWRkIHRoaXMgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIGZpbmRJbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QW55KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IHRydWU7XG4gICAgICAvLyBzZWxlY3QgYW55IHJvd1xuICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLmV2ZXJ5KChpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyggaW5kZXggKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3ROb25lKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIGVtaXQgc2VsZWN0aW9uIGV2ZW50XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICAvLyBnZXQgaWRcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgLy8gZmluZCBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGlzIHNlbGVjdGVkXG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gdW5zZWxlY3RcbiAgICAgICAgdGhpcy51blNlbGVjdFJvdyhyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuICAvKipcbiAgICogRGF0YXRhYmxlcyBjb2x1bW4gcmVuZGVyZXIgZm9yIHNlbGVjdCBjaGVja2JveFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBtZXRhXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJTZWxlY3QoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHtcbiAgICAgICAgc2VsZWN0VGVtcGxhdGU6IHRlbXBsYXRlKGA8aW5wdXQgY2xhc3M9XCJjaGVja2JveCBjaGVja2JveC10aGVtZSBzLXJvd1wiIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGlkPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCIgZGF0YS1pZD1cIlxcJHtkYXRhfVwiIC8+PGxhYmVsIGZvcj1cInMtJHt0aGlzLl9pZH0tXFwke21ldGEucm93fVwiPiZuYnNwOzwvbGFiZWw+XG4gICAgICAgIGApLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHJlbmRlciB0ZW1wbGF0ZVxuICAgIHJldHVybiBjb2x1bW4uc2VsZWN0VGVtcGxhdGUoe1xuICAgICAgbWV0YSxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICAvLyBwYXJzZSBwcm9wZXJ0aWVzXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnc2VsZWN0YWJsZScpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZSA9IHRoaXMuY29uZmlnLnNlbGVjdGFibGU7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnbXVsdGlwbGVTZWxlY3QnKSkge1xuICAgICAgICB0aGlzLm11bHRpcGxlU2VsZWN0ID0gdGhpcy5jb25maWcubXVsdGlwbGVTZWxlY3Q7XG4gICAgICB9XG4gICAgICAvLyBwcmVwYXJlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbHVtbnNcbiAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtbnNcbiAgICAgICAgLy8gZmlsdGVyIGFjdGlvbiBsaW5rIGNvbHVtblxuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4uZm9ybWF0dGVyID09PSAnQWN0aW9uTGlua0Zvcm1hdHRlcicgJiYgdGhpcy5zaG93QWN0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgLy8gY29udmVydCBjb2x1bW4gdG8gYWR2YW5jZSB0YWJsZSBjb2x1bW5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQ29sdW1uRm9ybWF0dGVyKHRoaXMuX2luamVjdG9yKSwgY29sdW1uKTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnQ6IGNvbHVtbi5kZWZhdWx0Q29udGVudCAhPSBudWxsID8gY29sdW1uLmRlZmF1bHRDb250ZW50IDogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdG9yLnRyYW5zZm9ybShjb2x1bW4udGl0bGUpLFxuICAgICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnc29ydGFibGUnKSA/IGNvbHVtbi5zb3J0YWJsZSA6IHRydWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpID8gIWNvbHVtbi5oaWRkZW4gOiB0cnVlLFxuICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXJzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgKGNvbHVtbi5mb3JtYXR0ZXJzIGFzIGFueVtdKS5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl07XG4gICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRTdHJpbmcgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0T3B0aW9ucyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbikocmVzdWx0LCB0eXBlLCByb3csIG1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gZm9ybWF0dGVycyBleHBvcnQgY3JlYXRlZENlbGwgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gY29sdW1uLmZvcm1hdHRlcnMuZmlsdGVyKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGNvbHVtbkZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGwoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pKGNlbGwsIGNlbGxEYXRhLCByb3dEYXRhLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uLmZvcm1hdHRlcl07XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ2VsbDogZm9ybWF0dGVyLmFmdGVyUmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb2x1bW5EZWZpbml0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIC8vIGdldCB0YWJsZSBlbGVtZW50XG4gICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSBqUXVlcnkodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb2x1bW5zLmFkanVzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMSk7XG4gICAgICB9KTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgIHRhYmxlRWxlbWVudC5vbigncHJvY2Vzc2luZy5kdCcsIChldmVudCwgc2V0dGluZ3MsIHByb2Nlc3NpbmcpID0+IHtcbiAgICAgICAgaWYgKHByb2Nlc3NpbmcpIHtcbiAgICAgICAgICAvLyBjbGVhciBlbXB0eSB0YWJsZSBlbGVtZW50XG4gICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJy5kYXRhVGFibGVzX2VtcHR5JykuaHRtbCgnJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUVsZW1lbnQuYWRkQ2xhc3MoJ3Byb2Nlc3NpbmcnKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5yZW1vdmVDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBkcmF3SW5kZXggPSAxO1xuICAgICAgdGFibGVFbGVtZW50Lm9uKCdvcmRlci5kdCcsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5kYXRhVGFibGUub3JkZXIoKTtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGVDb2x1bW5zO1xuICAgICAgICAgIGlmIChvcmRlciAmJiBvcmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXIuZW1pdChvcmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KS5vbignZHJhdy5kdCcsIChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmRyYXcuZW1pdCgpO1xuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICBjb25zdCBpbmZvOiB7IHBhZ2U6IG51bWJlcjsgcGFnZXM6IG51bWJlciB9ID0gdGhpcy5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICAgICAgdGhpcy5wYWdlLmVtaXQoaW5mbyk7XG4gICAgICAgICAgaWYgKGRyYXdJbmRleCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRyYXdJbmRleCsrO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7dGhpcy5kYXRhVGFibGUuY29sdW1ucy5hZGp1c3QoKTsgfSwgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUicsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhZGp1c3RpbmcgdGFibGUgY29sdW1ucycpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGFsbG93IHNlbGVjdGlvblxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIChhcyByb3cgcHJpbWFyeSBrZXkpXG4gICAgICAgIC8vIHRvZG86OmFsbG93IHJvdyBwcmltYXJ5IGtleSBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGZpcnN0Q29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1swXTtcbiAgICAgICAgLy8gYWRkIHNlbGVjdCBjb2x1bW5cbiAgICAgICAgY29uc3Qgc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0ZXh0LWNlbnRlciBwbC00IHByLTAnLFxuICAgICAgICAgIGRhdGE6IGZpcnN0Q29sdW1uLnByb3BlcnR5IHx8IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgICAgZGVmYXVsdENvbnRlbnQ6ICcnLFxuICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmlzaWJsZTogIXRoaXMuY3VzdG9tU2VsZWN0LFxuICAgICAgICAgIG5hbWU6IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIC8vIGFzc2lnbiByZW5kZXJlclxuICAgICAgICBPYmplY3QuYXNzaWduKHNlbGVjdENvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICByZW5kZXI6IHRoaXMuX3JlbmRlclNlbGVjdC5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgYWRkIGNvbHVtblxuICAgICAgICB0YWJsZUNvbHVtbnMudW5zaGlmdChzZWxlY3RDb2x1bW5EZWZpbml0aW9uKTtcbiAgICAgICAgLy8gdXNlciBpbnRlcmZhY2UgYWRkaXRpb25zXG4gICAgICAgIC8vIGhhbmRsZSBwYWdlIGNoYW5nZSBldmVudCAoYSB0cmljayBmb3IgZmlyaW5nIGRyYXcuZHQgZXZlbnRzKVxuICAgICAgICB0YWJsZUVsZW1lbnRcbiAgICAgICAgICAvLyBoYW5kbGUgZHJhdyBldmVudHNcbiAgICAgICAgICAub24oJ2RyYXcuZHQnLCAoKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCkge1xuICAgICAgICAgICAgICAvLyBlbmFibGUgcm93IHNlbGVjdGlvbiBldmVudFxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgndGJvZHknKS5vbignY2xpY2snLCAndHInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gc2VsZi5kYXRhVGFibGUucm93KHRoaXMpO1xuICAgICAgICAgICAgICAgIC8vIGFkZCByb3dcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdC5lbWl0KHJvdyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXQucy1yb3cnKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLm9mZignY2xpY2snKS5vbignY2xpY2snLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgLy8gbWFrZSBzZWxlY3Rpb24gb24gY3VycmVudCBwYWdlXG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAvLyBlbnVtZXJhdGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCByb3cgaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgICAgIC8vIGlmIGlkZW50aWZpZXIgaXMgZGVmaW5lZFxuICAgICAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0cnkgdG8gZmluZCBjaGVjayBlbGVtZW50IHdpdGggdGhpcyBpZGVudGlmaWVyIGluIGF0dHJpYnV0ZSBkYXRhLWlkXG4gICAgICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZChgaW5wdXRbZGF0YS1pZD0nJHtpZH0nXWApLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd3MgdGhhdCBhcmUgbm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgIC8vIGFuZCBkbyBub3QgaW5jbHVkZWQgaW4gdW5zZWxlY3RlZCBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dFtkYXRhLWlkXScpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IGRhdGEgaWRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT0galF1ZXJ5KGVsZW1lbnQpLmF0dHIoJ2RhdGEtaWQnKTtcbiAgICAgICAgICAgICAgICB9KSA8IDApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHRoaXMuZGF0YVRhYmxlLnJvdyhpbmRleCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dFtkYXRhLWlkXScpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBpbml0aWFsaXplIGRhdGEgdGFibGVcbiAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICAvLyBzZXQgbGVuZ3RoIG1lbnVcbiAgICAgICAgbGVuZ3RoTWVudTogWzUsIDEwLCA1MCwgMTAwLCAyMDAsIDUwMF0sXG4gICAgICAgIC8vIGhpZGUgbGVuZ3RoIG1lbnVcbiAgICAgICAgbGVuZ3RoQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgLy8gZW5hYmxlIHNlYXJjaCBidXQgaGlkZSBzZWFyY2ggYm94IChjc3MpXG4gICAgICAgIHNlYXJjaGluZzogdHJ1ZSxcbiAgICAgICAgLy8gZW5hYmxlIGRhdGEgcHJvY2Vzc2luZ1xuICAgICAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZ2V0dGluZyBzZXJ2ZXIgc2lkZSBkYXRhXG4gICAgICAgIHNlcnZlclNpZGU6IHRoaXMuc2VydmVyU2lkZSxcbiAgICAgICAgLy8gZW51bWVyYXRlIHRhYmxlIGNvbHVtbnNcbiAgICAgICAgY29sdW1uczogdGFibGVDb2x1bW5zLFxuICAgICAgICBjb2xSZW9yZGVyOiAgdGhpcy5jb2x1bW5PcmRlcmluZyxcbiAgICAgICAgb3JkZXI6IFtdLFxuICAgICAgICAvLyBzZXQgc2Nyb2xsIHhcbiAgICAgICAgc2Nyb2xsWDogdGhpcy5zY3JvbGxYLFxuICAgICAgICBkb206ICdCZnJ0aXAnLFxuICAgICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXh0ZW5kOiAnZXhjZWwnLFxuICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29uZmlnLnRpdGxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZC1ub25lJyxcbiAgICAgICAgICAgIGV4cG9ydE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgY29sdW1uczogJ3RoOm5vdCg6Zmlyc3QtY2hpbGQpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gZGVmaW5lIHNlcnZlciBkYXRhIGNhbGxiYWNrXG4gICAgICAgIGZuU2VydmVyRGF0YShzU291cmNlOiBhbnksIGFvRGF0YTogYW55LCBmbkNhbGxiYWNrOiBhbnksIG9TZXR0aW5nczogYW55KSB7XG4gICAgICAgICAgLy8gaWYgbWV0aG9kIGlzIGludm9rZWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgaWYgKHNlbGYuX2ZpcnN0TG9hZCkge1xuICAgICAgICAgICAgLy8gZGlzYWJsZWQgZmlyc3QgbG9hZCBmbGFnXG4gICAgICAgICAgICBzZWxmLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGlmIGF1dG8gbG9hZCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKHNlbGYuYXV0b0xvYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVtcHR5RGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IDAsXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiAwLFxuICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gMDtcbiAgICAgICAgICAgICAgLy8gZW1pdCBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGVtcHR5RGF0YVNldCk7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGVtcHR5RGF0YVNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHJlc2V0IGVycm9yXG4gICAgICAgICAgc2VsZi50b2dnbGVFcnJvcigpO1xuICAgICAgICAgIC8vIGdldCBhY3RpdmF0ZWQgcm91dGUgcGFyYW1zXG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBzZWxmLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICAgICAgICAvLyBnZXQgY29sdW1uc1xuICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBhb0RhdGFbMV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IG9yZGVyIGV4cHJlc3Npb25cbiAgICAgICAgICBjb25zdCBvcmRlciA9IGFvRGF0YVsyXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2tpcCByZWNvcmRzIHBhcmFtXG4gICAgICAgICAgY29uc3Qgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgY29uc3QgdG9wID0gYW9EYXRhWzRdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBzZWFyY2ggdmFsdWVcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYXBwbHkgb3JkZXIgcGFyYW1zXG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZ2V0IG9yZGVyIHF1ZXJ5IGV4cHJlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IG9yZGVyQnlTdHIgPSBvcmRlci5tYXAoKGV4cHI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgY29sdW1uSW5kZXg6IG51bWJlcjtcbiAgICAgICAgICAgICAgaWYgKHNlbGYuY29sdW1uT3JkZXJpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBleHByLmNvbHVtbjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgY29sdW1uIG9yZGVyIChmcm9tIGNvbFJlb3JkZXIpXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gc2VsZi5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgICAgICAgICAgICAgIC8vIGFuZCBtYXRjaCB0aGUgZGF0YVRhYmxlIGluZGV4IHRvIHRoZSBjb25maWcgY29sdW1ucyBpbmRleFxuICAgICAgICAgICAgICAgIC8vIGV4cHIuY29sdW1uIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgKGUuZy4gaW4gcmFuZ2UpLCBidXQgcGVyZm9ybSBhIG1pbm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZXhwci5jb2x1bW4gPj0gMCAmJiBleHByLmNvbHVtbiA8IGNvbHVtbk9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBjb2x1bW5PcmRlcltleHByLmNvbHVtbl07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZmlyc3QgY29sdW1uIGFzIGEgZmFsbGJhY2sgKHdvbid0IGhhcHBlbiwganVzdCBmb3Igc2FmZXR5KVxuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdGFibGVDb2x1bW5zW2NvbHVtbkluZGV4XS5uYW1lICsgJyAnICsgZXhwci5kaXIgfHwgJ2FzYyc7XG4gICAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAvLyBzZXQgb3JkZXJcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRvcmRlcmJ5Jywgb3JkZXJCeVN0cik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVuc3VyZSBzZWxmLnN0YXRlTG9hZENhbGxiYWNrXG4gICAgICAgICAgaWYgKHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2sgPT0gbnVsbCkge1xuICAgICAgICAgICAgc2VsZi5zdGF0ZUxvYWRDYWxsYmFjayA9ICgoXywgY2FsbGJhY2spICA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLnN0YXRlTG9hZENhbGxiYWNrKG51bGwsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgLy8gY29uZmlndXJlICRzZWxlY3QgcGFyYW1ldGVyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBzZWxmLmNvbmZpZy5jb2x1bW5zLmZpbHRlciggKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnZpcnR1YWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5vcHRpb25hbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRhYmxlQ29sdW1ucy5maW5kSW5kZXgoKHRhYmxlQ29sdW1uKSA9PiB0YWJsZUNvbHVtbi5uYW1lID09PSBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuY29sdW1uc1tpbmRleF0udmlzaWJsZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubmFtZSArICcgYXMgJyArIGNvbHVtbi5wcm9wZXJ0eTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcS5zZWxlY3QuYXBwbHkocSwgc2VsZWN0KTtcbiAgICAgICAgICAgIC8vIGNvbmZpZ3VyZSAkZmlsdGVyXG4gICAgICAgICAgICBpZiAocXVlcnlQYXJhbXMuJGZpbHRlciAmJiBxdWVyeVBhcmFtcy4kZmlsdGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBzZXQgcm91dGUgZmlsdGVyXG4gICAgICAgICAgICAgIGNvbnN0IHFQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBxdWVyeVBhcmFtcy4kZmlsdGVyIF07XG4gICAgICAgICAgICAgIGlmIChxUGFyYW1zLiRmaWx0ZXIpIHsgZXhwcmVzc2lvbnMucHVzaCgnKCcgKyBxUGFyYW1zLiRmaWx0ZXIgKyAnKScgKTsgfVxuICAgICAgICAgICAgICBxLmZpbHRlcihleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHF1ZXJ5IHBhcmFtZXRlcnMgY29udGFpbiBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZXhwYW5kICYmIHF1ZXJ5UGFyYW1zLiRleHBhbmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHNldCByb3V0ZSAkZXhwYW5kXG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRleHBhbmQnLCBxdWVyeVBhcmFtcy4kZXhwYW5kKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKSB7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRleHBhbmQnLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFxLmdldFBhcmFtcygpWyckb3JkZXJieSddICYmIHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJG9yZGVyYnknLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5vcmRlckJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KSB7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRncm91cGJ5Jywgc2VsZi5jb25maWcuZGVmYXVsdHMuZ3JvdXBCeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlci5hc3luY0J1aWxkRmlsdGVyKHNlbGYuY29uZmlnLmRlZmF1bHRzLmZpbHRlcikudGhlbigoZGVmYXVsdEZpbHRlclN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0RmlsdGVyU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBxUGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBkZWZhdWx0RmlsdGVyU3RyaW5nIF07XG4gICAgICAgICAgICAgICAgICBpZiAocVBhcmFtcy4kZmlsdGVyKSB7IGV4cHJlc3Npb25zLnB1c2goJygnICsgcVBhcmFtcy4kZmlsdGVyICsgJyknICk7IH1cbiAgICAgICAgICAgICAgICAgIHEuZmlsdGVyKGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEuZ2V0TGlzdCgpLnRoZW4oKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gaXRlbXMudG90YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZW1pdCBsb2FkIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhkYXRhU2V0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGxvZyBlcnJvciB0byBjb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgZXJyKTtcbiAgICAgICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICAgICAgc2VsZi50b2dnbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAgIC8vIGJ5IHJldHVybmluZyBlbXB0eSBkYXRhc2V0XG4gICAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5sYXN0UXVlcnlQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSBpdGVtcy50b3RhbDtcbiAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZGF0YVNldCk7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAvLyBsb2cgZXJyb3IgdG8gY29uc29sZVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICAgIHNlbGYudG9nZ2xlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIGVtcHR5IGRhdGFzZXRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKEVNUFRZX0RBVEFTRVQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxhbmd1YWdlOiBPYmplY3QuYXNzaWduKHsgfSwgc2VsZi50cmFuc2xhdG9yLnRyYW5zZm9ybSgnVGFibGVzLkRhdGFUYWJsZScpLFxuICAgICAgICAgIHtlbXB0eVRhYmxlOiAnICcgfSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzdGF0ZVNldHRpbmdzID0ge1xuICAgICAgICBzdGF0ZVNhdmU6IHRoaXMuc3RhdGVTYXZlXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVMb2FkQ2FsbGJhY2s6IHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGF0ZVNhdmVDYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlU2V0dGluZ3MsIHtcbiAgICAgICAgICBzdGF0ZVNhdmVDYWxsYmFjazogdGhpcy5zdGF0ZVNhdmVDYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHN0YXRlU2V0dGluZ3MpO1xuXG4gICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgIC8vIHNldCBjb250aW51b3VzIHNjcm9sbGluZ1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHNjcm9sbENvbGxhcHNlOiBmYWxzZSxcbiAgICAgICAgICBzY3JvbGxlcjoge1xuICAgICAgICAgICAgbG9hZGluZ0luZGljYXRvcjogZmFsc2UsXG4gICAgICAgICAgICBkaXNwbGF5QnVmZmVyOiAxMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHtcbiAgICAgICAgICBzY3JvbGxZOiB0aGlzLnNjcm9sbFksXG4gICAgICAgICAgcGFnaW5nOiB0aGlzLnBhZ2luZyxcbiAgICAgICAgICBwYWdlTGVuZ3RoOiB0aGlzLnBhZ2VMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuXG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgaW5pdC5kdCBldmVudCBhbmQgZW1pdCBsb2NhbCBldmVudFxuICAgICAgdGhpcy5kYXRhVGFibGUgPSB0YWJsZUVsZW1lbnQub24oJ2luaXQuZHQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBqUXVlcnkoZXZlbnQudGFyZ2V0KS5wYXJlbnQoKTtcbiAgICAgICAgLy8gaGFuZGxlIHNjcm9sbGluZ1xuICAgICAgICBzY3JvbGxlci5vbignc2Nyb2xsJywgKHNjcm9sbEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0galF1ZXJ5KHNjcm9sbEV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gdGFyZ2V0LnNjcm9sbFRvcCgpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQoKSBhcyBudW1iZXI7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbC5lbWl0KHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBsZWZ0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSkuRGF0YVRhYmxlKHNldHRpbmdzKTtcbiAgICAgIHRoaXMuaW5pdC5lbWl0KCk7XG4gICAgICAvLyBzaG93IG9yIGhpZGUgaGVhZGVyXG4gICAgICBpZiAoIXRoaXMuc2hvd0hlYWRlciAmJiB0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBoaWRlU2VsZWN0b3IgPSAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlPnRoZWFkJyk7XG4gICAgICAgIGlmIChoaWRlU2VsZWN0b3IpIHtcbiAgICAgICAgICBoaWRlU2VsZWN0b3IuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWRqdXN0U2VsZWN0b3IgPSAgKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZScpO1xuICAgICAgICBpZiAoYWRqdXN0U2VsZWN0b3IpIHtcbiAgICAgICAgICBhZGp1c3RTZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdtdC0yJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgIGlmICghdGhpcy5zaG93Rm9vdGVyICYmIHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGluZm9TZWxlY3RvciA9ICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGVzX2luZm8nKTtcbiAgICAgICAgaWYgKGluZm9TZWxlY3Rvcikge1xuICAgICAgICAgIGluZm9TZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc2hvdyBvciBoaWRlIHBhZ2VyXG4gICAgICBpZiAodGhpcy5zaG93UGFnaW5nKSB7XG4gICAgICAgIHRoaXMuc2hvd1BhZ2luZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsVG9wKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnBhcmVudCgpLnNjcm9sbFRvcCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5wYXJlbnQoKS5zY3JvbGxMZWZ0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbGFzdFF1ZXJ5KCk6IENsaWVudERhdGFRdWVyeWFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmNvbmZpZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHEgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMubGFzdFF1ZXJ5UGFyYW1zKS5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICBxLnNldFBhcmFtKGtleSwgdGhpcy5sYXN0UXVlcnlQYXJhbXMgJiYgdGhpcy5sYXN0UXVlcnlQYXJhbXNba2V5XSk7XG4gICAgfSk7XG4gICAgLy8gcmV0dXJuIHF1ZXJ5XG4gICAgcmV0dXJuIHE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbmQgdXBkYXRlcyBhIHNpbmdsZSByb3dcbiAgICogQHBhcmFtIGZpbmQgLSBBbnkgb2JqZWN0IHdoaWNoIGlzIGJlaW5nIGNvbnZlcnRlZCB0byBhIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgZmV0Y2hPbmUoZmluZDogYW55KSB7XG4gICAgaWYgKGZpbmQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGdldCByb3dzXG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKSk7XG4gICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGgpIHtcbiAgICAgIC8vIGZpbmQgcmVzdWx0XG4gICAgICBjb25zdCBmaW5kS2V5cyA9IE9iamVjdC5rZXlzKGZpbmQpO1xuICAgICAgaWYgKGZpbmRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGZpbmQgcm93IGluZGV4IGJ5IHNlYXJjaGluZyBlYWNoIHByb3BlcnR5XG4gICAgICBjb25zdCByb3dJbmRleCA9IHJvd3MuZmluZEluZGV4KChyb3c6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gZmluZEtleXMubWFwKCAoa2V5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJvd1trZXldID09PSBmaW5kW2tleV07XG4gICAgICAgIH0pLmZpbHRlciggKHJlcykgPT4ge1xuICAgICAgICAgIHJldHVybiByZXMgPT09IGZhbHNlO1xuICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHJvdyBoYXMgYmVlbiBmb3VuZFxuICAgICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgICAvLyBzZWxlY3QgYXR0cmlidXRlc1xuICAgICAgICBxdWVyeS5zZXRQYXJhbSgnJHNlbGVjdCcsIHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRzZWxlY3QpO1xuICAgICAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMuJGV4cGFuZCkge1xuICAgICAgICAgIC8vIGFwcGx5IGV4cGFuZCBhdHRyaWJ1dGVzXG4gICAgICAgICAgcXVlcnkuc2V0UGFyYW0oJyRleHBhbmQnLCB0aGlzLmxhc3RRdWVyeVBhcmFtcy4kZXhwYW5kKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgZm9yIHJvd1xuICAgICAgICBmaW5kS2V5cy5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKCAoY29sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sLnByb3BlcnR5ID09PSBrZXkgfHwgY29sLm5hbWUgPT09IGtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICAvLyBnZXQgcHJvcGVydHkgb3IgbmFtZVxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWU7XG4gICAgICAgICAgICBxdWVyeS5hbmQocHJvcGVydHkgYXMgc3RyaW5nKS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVyeS5hbmQoa2V5KS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCBmaW5hbGx5IGdldCBpdGVtXG4gICAgICAgIHJldHVybiBxdWVyeS5nZXRJdGVtKCkudGhlbiggKGl0ZW0pID0+IHtcbiAgICAgICAgICAvLyBpZiBpdGVtIGV4aXN0c1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCk7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJyk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIC8vIHJlZHJhdyByb3dcbiAgICAgICAgICAgIHJvdy5kYXRhKGl0ZW0pO1xuICAgICAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLm9mZignY2xpY2snKS5vbignY2xpY2snLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgLy8gaWYgcm93IGlzIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzZWxlY3Rpb24gY2hhbmdlXG4gICAqIEBwYXJhbSAkZXZlbnRcbiAgICovXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9ICAkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZXhlY1JlZ2V4ID0gLy0oXFxkKykkL2cuZXhlYyhpbnB1dC5pZCk7XG4gICAgLy8gZ2V0IHJvdyBmcm9tIGlkXG4gICAgY29uc3Qgcm93SW5kZXggPSBwYXJzZUludCgoZXhlY1JlZ2V4ICYmIGV4ZWNSZWdleFsxXSkgYXMgc3RyaW5nLCAxMCk7XG4gICAgLy8gZ2V0IHJvd1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCkuZGF0YSgpO1xuICAgIC8vIGdldCByb3cgaWRlbnRpZmllclxuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgJyc7XG4gICAgICBjb25zdCBpZCA9IHJvd1trZXldO1xuICAgICAgbGV0IGZpbmRJdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gYWRkIHJvdyB0byBzZWxlY3RlZCByb3dzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaW5kSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyByZW1vdmUgc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJdGVtSW5kZXgsIDEpO1xuICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAvLyBhZGQgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgICAgZmluZEl0ZW1JbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaW5kSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RW1wdHlUYWJsZSgpIHtcbiAgICAvLyB0aGlzIG9wZXJhdGlvbiBpcyBpbXBvcnRhbnRcbiAgICAvLyBkdWUgdG8gbmcgZGF0YSBiaW5kaW5nXG4gICAgLy8gZW1wdHkgdGFibGUgdGVtcGxhdGUgaGFzIG5vIHRyYW5zbGF0ZWQgdGV4dCBkdXJpbmcgbmdPbkluaXQoKVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSB0aGlzLmVtcHR5VGFibGUgJiYgdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlRXJyb3IoZXJyPzogYW55KSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAodGhpcy5lcnJvclRlbXBsYXRlICYmIHRoaXMuZXJyb3JUZW1wbGF0ZS5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KTtcbiAgICAgIGxldCBpbm5lck1lc3NhZ2U6IGFueTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGlubmVyTWVzc2FnZSA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NtYWxsJykuaXRlbSgwKTtcbiAgICAgIH1cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgIGlmIChpbm5lck1lc3NhZ2UpIHtcbiAgICAgICAgICBpbm5lck1lc3NhZ2UuaW5uZXJIVE1MID0gZXJyLmVycm9yICYmIGVyci5lcnJvci5tZXNzYWdlID8gZXJyLmVycm9yLm1lc3NhZ2UgOiBlcnIubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9IHRoaXMuZXJyb3JUZW1wbGF0ZSAmJiB0aGlzLmVycm9yVGVtcGxhdGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW5uZXJNZXNzYWdlKSB7XG4gICAgICAgICAgaW5uZXJNZXNzYWdlLmlubmVySFRNTCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVtcHR5VGFibGUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGV4cG9ydCgpIHtcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kdC1idXR0b25zIC5idXR0b25zLWV4Y2VsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNvbHVtbnMoY29sdW1uc1RvU2hvdykge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5kYXRhVGFibGU7XG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5zbGljZSgxKS5mb3JFYWNoKChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGlmICghY29sdW1uLmhpZGRlbikge1xuICAgICAgICBpZiAoY29sdW1uc1RvU2hvdy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgICAgIHRhYmxlLmNvbHVtbihjb2x1bW4ubmFtZSArICc6bmFtZScpLnZpc2libGUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2NvbmZpZ1NyYycpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5jb25maWdTcmMgIT0gbnVsbCkge1xuICAgICAgICAvLyBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gb24gY2hhbmdlXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdHJpcGxlLWVxdWFsc1xuICAgICAgICBpZiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICYmIChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5jb25maWdTcmMucHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLl9odHRwLmdldChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUpLnRvUHJvbWlzZSgpLnRoZW4oKGNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIC8vIGZldGNoIGFuZCByZWRyYXdcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goKTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9hZGluZyB0YWJsZSBjb25maWd1cmF0aW9uLicpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0KGxvYWQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLmF1dG9Mb2FkID0gISFsb2FkO1xuICAgIHRoaXMubmdPbkluaXQoKTtcbiAgfVxuXG4gIHNlbGVjdENvbHVtbnMoKSB7XG4gICAgLy8gZ2V0IGNvbHVtbiBvcmRlciBlLmcuIFswLCA0LCAxLCAyLCAzXVxuICAgIGNvbnN0IGNvbHVtbk9yZGVyOiBudW1iZXJbXSA9IHRoaXMuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoKTtcbiAgICAvLyBnZXQgY29sdW1uIGRlZmluaXRpb25zXG4gICAgY29uc3QgY29sdW1uRGVmcyA9IHRoaXMuZGF0YVRhYmxlLnNldHRpbmdzKCkuaW5pdCgpLmNvbHVtbnM7XG4gICAgY29uc3QgY29sdW1ucyA9IGNvbHVtbkRlZnMubWFwKChcbiAgICAgIGNvbHVtbkRlZjogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdmlzaWJsZTogYm9vbGVhbixcbiAgICAgICAgc29ydGFibGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgY29sdW1uLSR7aX1gO1xuICAgICAgbGV0IHRpdGxlID0gY29sdW1uRGVmLnRpdGxlO1xuICAgICAgLy8gZ2V0IGNvbHVtbiBpbmRleFxuICAgICAgY29uc3QgaW5kZXggPSAgY29sdW1uT3JkZXIuaW5kZXhPZihpKTtcbiAgICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLmRhdGFUYWJsZS5jb2x1bW4oaW5kZXgpLnZpc2libGUoKTtcbiAgICAgIC8vIHNldCB0aXRsZSBmb3Igc2VsZWN0IGNvbHVtblxuICAgICAgaWYgKGkgPT09IDAgJiYgdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgIHRpdGxlID0gJzwnICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuU2VsZWN0Q29sdW1uJykgKyAnPic7XG4gICAgICB9XG4gICAgICAvLyBnZXQgY29sdW1uIHRpdGxlXG4gICAgICBpZiAodGl0bGUgIT0gbnVsbCAmJiB0aXRsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICAvLyB0cnkgdG8gZmluZCBjb2x1bW4gcGxhY2Vob2xkZXJcbiAgICAgICAgbGV0IHBsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5jb25maWcuY29sdW1uc1tpIC0gMV0ucGxhY2Vob2xkZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5jb25maWcuY29sdW1uc1tpXS5wbGFjZWhvbGRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgICAgIHRpdGxlID0gJzwnICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHBsYWNlaG9sZGVyKSArICc+JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRpdGxlID09IG51bGwpIHtcbiAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5Vbmtub3duQ29sdW1uJykgKyAnPic7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksXG4gICAgICAgIHRpdGxlLFxuICAgICAgICB2aXNpYmxlLFxuICAgICAgICBpbmRleFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLl9jb2x1bW5TZWxlY3Rvci5zZWxlY3RDb2x1bW5zKGNvbHVtbnMpLnRoZW4oKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQucmVzdWx0ID09PSAnb2snKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZCA9IChldmVudC5jb2x1bW5zIGFzIGFueVtdKVxuICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAga2V5OiBjb2wua2V5LFxuICAgICAgICAgICAgICBpbmRleDogY29sLmluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgICAgLy8gZ2V0IGNvbHVtbiBvcmRlciBlLmcuIFszLCAxLCAyLCAwLCA0XVxuICAgICAgICBjb25zdCBpbmRleGVzID0gc29ydGVkXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pLmZpbmRJbmRleCgobmV4dCkgPT4gaXRlbS5rZXkgPT09IG5leHQua2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlc2V0IGNvbHVtbiB2aXNpYmlsdHlcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IChldmVudC5jb2x1bW5zIGFzIGFueVtdKS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb2xJbmRleCA9IGNvbHVtbk9yZGVyLmluZGV4T2YoaW5kZXgpO1xuICAgICAgICAgIC8vIHNldCB2aXNpYmlsdHkgd2l0aCByZWRyYXcgKD10cnVlKVxuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbHVtbihjb2xJbmRleCkudmlzaWJsZShlbGVtZW50LnZpc2libGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmFsbHkgYXBwbHkgY29sdW1uIG9yZGVyXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoaW5kZXhlcywgdHJ1ZSk7XG4gICAgICAgIC8vIHNpbXBseSByZWRyYXcgdGhlIHRhYmxlXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0byBwYXNzIGFuIGVycm9ySGFuZGxlciBjYWxsYmFjaywgaWYgZGVzaXJlZFxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhwb3J0VmlldyhvcHRpb25zPzoge2Vycm9ySGFuZGxlcj86IChyZWFzb24/OiBhbnkpID0+IGFueX0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5fbG9hZGluZy5zaG93TG9hZGluZygpO1xuICAgICAgLy8gdmFsaWRhdGUgcXVlcnkgaXRlbXMgYW5kIGNvbmZpZ1xuICAgICAgaWYgKCEodGhpcy5sYXN0UXVlcnkgJiYgdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcyAmJiB0aGlzLmNvbmZpZykpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBnZXQgZXhwb3J0IHNldHRpbmdzXG4gICAgICBjb25zdCBleHBvcnRTZXR0aW5ncyA9IHRoaXMuX2NvbmZpZ3VyYXRpb24uc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gYW5kIGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgZXhwb3J0TGltaXQgPVxuICAgICAgICAoZXhwb3J0U2V0dGluZ3MgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMuZXhwb3J0TGltaXQgPiAwKVxuICAgICAgICA/IGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCA6IE1BWF9FWFBPUlRfSVRFTVM7XG4gICAgICAvLyBhbmQgdmFsaWRhdGUgaXRcbiAgICAgIGlmICh0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID4gZXhwb3J0TGltaXQpIHtcbiAgICAgICAgLy8gY2FsbCBlcnJvciBoYW5kbGVyXG4gICAgICAgIC8vIHByb3ZpZGUgYSByZWNvZ25pemlibGUgZXJyb3IgdHlwZVxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVycm9ySGFuZGxlcikge1xuICAgICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyKG5ldyBFeHBvcnRMaW1pdEV4Y2VlZGVkRXJyb3IoJ0V4cG9ydCBsaW1pdCBleGNlZWRlZCcpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3Igc2hvdyB3YXJuaW5nIG1vZGFsIGFuZCBleGl0XG4gICAgICAgIHRoaXMuX21vZGFsU2VydmljZS5zaG93V2FybmluZ0RpYWxvZyh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5FeHBvcnRMaXN0JyksXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuRXhwb3J0TGltaXRFeGNlZWRlZCcsXG4gICAgICAgICAgICB7ZGF0YUxlbmd0aDogdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcywgZXhwb3J0TGltaXR9KSwgRElBTE9HX0JVVFRPTlMuT2spO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBnZXQgdG90YWwgZGlzcGxheWVkIGl0ZW1zXG4gICAgICBjb25zdCB0b3RhbERpc3BsYXllZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSkubGVuZ3RoO1xuICAgICAgLy8gaWYgdGhleSBhbHJlYWR5IHNhdGlzZnkgdGhlIGxhc3QgcXVlcnkgdG90YWxcbiAgICAgIGlmICh0b3RhbERpc3BsYXllZEl0ZW1zID09PSB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zKSB7XG4gICAgICAgIC8vIHByZXBhcmUgZXhjZWwgZGF0YSBpbW1lZGlhdGVseVxuICAgICAgICBjb25zdCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZ2V0RXhwb3J0YWJsZURhdGEoKTtcbiAgICAgICAgLy8gYW5kIGV4cG9ydCB0aGVtIHRvIGV4Y2VsXG4gICAgICAgIHRoaXMuX2V4cG9ydFNwcmVhZHNoZWV0LmV4cG9ydChib2R5LCBgJHt0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jb25maWcudGl0bGUgfHwgJ1RhYmxlcy5FeHBvcnRSZXN1bHRzJyl9Lnhsc3hgLCB7XG4gICAgICAgICAgICBoZWFkZXIsXG4gICAgICAgICAgICBza2lwSGVhZGVyOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIG1vcmUgZGF0YSBuZWVkIHRvIGJlIGZldGNoZWRcbiAgICAgICAgLy8gaG9sZCBwcmV2aW91cyBkYXRhIHN0YXRlXG4gICAgICAgIGNvbnN0IHByZXZpb3VzRGF0YVN0YXRlID0gdGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKS50b0FycmF5KCk7XG4gICAgICAgIC8vIGdldCB0YXJnZXQgZGF0YSBzdGF0ZSBieSBleGVjdXRpbmcgdGhlIGxhc3QgcXVlcnlcbiAgICAgICAgLy8gbm90ZTogdGFraW5nIHRoZSBleHBvcnRMaW1pdCBhbW91bnQgb2YgaXRlbXMgd2lsbCBhbHdheXMgc2F0aXNmeSB0aGUgcmVzdWx0cyxcbiAgICAgICAgLy8gYmVjYXVzZSBpdCBoYXMgYmVlbiB2YWxpZGF0ZWRcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0YVN0YXRlID0gYXdhaXQgdGhpcy5sYXN0UXVlcnkudGFrZShleHBvcnRMaW1pdCkuZ2V0SXRlbXMoKTtcbiAgICAgICAgLy8gY2hhbmdlIHRhYmxlIGRhdGEgb24gdGhlIGZseSwgYnV0IGRvIG5vdCByZWRyYXdcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY2xlYXIoKS5yb3dzLmFkZCh0YXJnZXREYXRhU3RhdGUpO1xuICAgICAgICAvLyBwcmVwYXJlIGV4Y2VsIGRhdGFcbiAgICAgICAgY29uc3Qge2JvZHksIGhlYWRlcn0gPSB0aGlzLmdldEV4cG9ydGFibGVEYXRhKCk7XG4gICAgICAgIC8vIHJlc2V0IHRhYmxlIGRhdGFcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY2xlYXIoKS5yb3dzLmFkZChwcmV2aW91c0RhdGFTdGF0ZSk7XG4gICAgICAgIC8vIGFuZCBleHBvcnQgdGFyZ2V0IGRhdGEgdG8gZXhjZWxcbiAgICAgICAgdGhpcy5fZXhwb3J0U3ByZWFkc2hlZXQuZXhwb3J0KGJvZHksIGAke3RoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZy50aXRsZSB8fCAnVGFibGVzLkV4cG9ydFJlc3VsdHMnKX0ueGxzeGAsIHtcbiAgICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAgIHNraXBIZWFkZXI6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZXhpdFxuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gbG9nIGVycm9yXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAvLyBjYWxsIGVycm9yIGhhbmRsZXIsIGlmIGRlZmluZWRcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyKGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1c2UgZGVmYXVsdCBlcnJvciBzZXJ2aWNlXG4gICAgICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93RXJyb3IoZXJyLCB7XG4gICAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZUxvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwb3J0YWJsZURhdGEoKToge2JvZHk6IGFueVtdLCBoZWFkZXI6IGFueVtdfSB7XG4gICAgaWYgKCEodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuYnV0dG9uc1xuICAgICAgJiYgdHlwZW9mIHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnMuZXhwb3J0RGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzLmNvbmZpZykpIHtcbiAgICAgIHJldHVybiB7Ym9keTogW10sIGhlYWRlcjogW119O1xuICAgIH1cbiAgICAvLyBmZXRjaCBleHBvcnRhYmxlIGV4Y2VsIGRhdGFcbiAgICBsZXQge2JvZHksIGhlYWRlcn0gPSB0aGlzLmRhdGFUYWJsZS5idXR0b25zLmV4cG9ydERhdGEoKTtcbiAgICBjb25zdCBjbGVhbnVwSW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAvLyBjbGVhbiB1cCBoZWFkZXJzXG4gICAgaGVhZGVyID0gaGVhZGVyLmZpbHRlcigoaGVhZGVySXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyBleGNsdWRlIGVtcHR5IGhlYWRlcnNcbiAgICAgIGlmIChoZWFkZXJJdGVtLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2xlYW51cEluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIGV4Y2x1ZGUgaGlkZGVuIGNvbHVtbnNcbiAgICAgIC8vIG5vdGU6IHVzZSB0aGUgZGF0YXRhYmxlIHZpc2libGUoKSBmdW5jdGlvblxuICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgaGlkZGVuIGNvbmZpZyBwcm9wZXJ0eSwgdG8gc2F0aXNmeSB0aGUgY29sdW1uIHNlbGVjdG9yXG4gICAgICBpZiAoIXRoaXMuZGF0YVRhYmxlLmNvbHVtbihpbmRleCkudmlzaWJsZSgpKSB7XG4gICAgICAgIGNsZWFudXBJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICAvLyBjbGVhbiB1cCBib2R5XG4gICAgYm9keSA9IGJvZHkubWFwKChyb3c6IGFueSBbXSkgPT4ge1xuICAgICAgcmV0dXJuIHJvdy5maWx0ZXIoKF8sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGNsZWFudXBJbmRleGVzLmluZGV4T2Yocm93SW5kZXgpID09PSAtMTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7Ym9keSwgaGVhZGVyfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCwgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXJyb3JTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgTW9kYWxTZXJ2aWNlLCBVc2VyQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgUmVzcG9uc2VFcnJvciB9IGZyb20gJ0B0aGVtb3N0L2NsaWVudCc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIHJlY29yZHNUb3RhbD86IG51bWJlcjtcbiAgcHVibGljIGNvbmZpZz86IFRhYmxlQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZGF0YVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWxvYWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIEBJbnB1dCgnZW50aXR5U2V0JykgZW50aXR5U2V0Pzogc3RyaW5nO1xuICBASW5wdXQoJ2NhdGVnb3J5JykgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIEBJbnB1dCgnZGVzY3JpcHRpb24nKSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCdsb25nRGVzY3JpcHRpb24nKSBsb25nRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgndGFibGVDb25maWd1cmF0aW9uJykgdGFibGVDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBJbnB1dCgnc2VhcmNoQ29uZmlndXJhdGlvbicpIHNlYXJjaENvbmZpZ3VyYXRpb246IGFueTtcbiAgQFZpZXdDaGlsZCgndGFibGUnKSB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBJbnB1dCgnYWxsb3dTYXZlT3B0aW9uJykgYWxsb3dTYXZlT3B0aW9uID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdXNlckFjdGl2aXR5U2VydmljZTogVXNlckFjdGl2aXR5U2VydmljZVxuICAgICkgeyB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGU7XG4gICAgICAvLyBnZXQgbWV0YWRhdGFcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgdGhpcy5fY29udGV4dC5nZXRNZXRhZGF0YSgpO1xuICAgICAgLy8gZ2V0IHJvdXRlIGRhdGFcbiAgICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCByb3V0ZURhdGEgPT4ge1xuICAgICAgICAvLyBnZXQgZW50aXR5VHlwZVxuICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYF4ke3JvdXRlRGF0YS5tb2RlbH0kYCwgJ2lnJyk7XG4gICAgICAgIGNvbnN0IGVudGl0eVNldCA9IG1ldGFkYXRhLkVudGl0eUNvbnRhaW5lci5FbnRpdHlTZXQuZmluZCggeCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlLnRlc3QoeC5OYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGlmIGVudGl0eSB0eXBlIGlzIG51bGxcbiAgICAgICAgaWYgKGVudGl0eVNldCA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gbmF2aWdhdGUgdG8gZXJyb3JcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLm5hdmlnYXRlVG9FcnJvcihuZXcgUmVzcG9uc2VFcnJvcignRW50aXR5U2V0IE5vdCBGb3VuZCcsIDQwNCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBlbnRpdHkgdHlwZVxuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gbWV0YWRhdGEuRW50aXR5VHlwZS5maW5kKCB4ID0+IHtcbiAgICAgICAgICByZXR1cm4geC5OYW1lID09PSBlbnRpdHlTZXQuRW50aXR5VHlwZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChlbnRpdHlUeXBlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLm5hdmlnYXRlVG9FcnJvcihuZXcgUmVzcG9uc2VFcnJvcignRW50aXR5VHlwZSBOb3QgRm91bmQnLCA0MDQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uLCAnYWxsb3dTYXZlJykpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dTYXZlT3B0aW9uID0gcm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb24uYWxsb3dTYXZlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNlYXJjaENvbmZpZ3VyYXRpb24gPSByb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLnRhYmxlQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHRoaXMudGFibGVDb25maWd1cmF0aW9uID0gcm91dGVEYXRhLnRhYmxlQ29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEubG9uZ0Rlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sb25nRGVzY3JpcHRpb24gPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocm91dGVEYXRhLmxvbmdEZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5jYXRlZ29yeSkge1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnkgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocm91dGVEYXRhLmNhdGVnb3J5KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbG9uZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgZGVmYXVsdENvbmZpZ3VyYXRpb24gPSBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbi5jYXN0KHRoaXMudGFibGVDb25maWd1cmF0aW9uLCB0cnVlKTtcbiAgICAgICAgLy8gY29ycmVjdCBlZGl0IGJ1dHRvbiBsaW5rXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGRlZmF1bHRDb25maWd1cmF0aW9uLmNvbHVtbnMuZmluZCggY29sID0+IHtcbiAgICAgICAgICByZXR1cm4gY29sLmZvcm1hdHRlciA9PT0gJ0J1dHRvbkZvcm1hdHRlcicgJiYgY29sLmZvcm1hdFN0cmluZyA9PT0gJyhtb2RhbDplZGl0KSc7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgY29uc3QgdXJsOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGF0aEZyb21Sb290LmZvckVhY2goIHJvdXRlID0+IHtcbiAgICAgICAgICAgIHVybC5wdXNoLmFwcGx5KHVybCwgcm91dGUudXJsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb2x1bW4uZm9ybWF0U3RyaW5nID0gYCMvJHt1cmwuam9pbignLycpfS8obW9kYWw6XFwkXFx7aWRcXH0vZWRpdClgO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNyZWF0ZSBsaXN0IGNvbmZpZ3VyYXRpb24gYnkgYXNzaWduaW5nIGxpc3QgZW50aXR5IHNldFxuICAgICAgICB0YWJsZS5jb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICBtb2RlbDogZW50aXR5U2V0Lk5hbWVcbiAgICAgICAgfSwgZGVmYXVsdENvbmZpZ3VyYXRpb24pO1xuICAgICAgICAvLyBmZXRjaCBkYXRhXG4gICAgICAgIHRhYmxlLmZldGNoKHRydWUpO1xuICAgICAgICAvLyBkbyByZWxvYWQgYnkgdXNpbmcgaGlkZGVuIGZyYWdtZW50IGUuZy4gL2NsYXNzZXMjcmVsb2FkXG4gICAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuZnJhZ21lbnQuc3Vic2NyaWJlKGZyYWdtZW50ID0+IHtcbiAgICAgICAgICBpZiAoZnJhZ21lbnQgJiYgZnJhZ21lbnQgPT09ICdyZWxvYWQnKSB7XG4gICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhcbiAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2V0dGluZ3MuT3BlcmF0aW9uQ29tcGxldGVkJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBmaW5hbGx5IGFkZCB1c2VyIGFjdGl2aXR5XG4gICAgICAgIHRoaXMuX3VzZXJBY3Rpdml0eVNlcnZpY2Uuc2V0SXRlbSh7XG4gICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnkgYXMgc3RyaW5nLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uIGFzIHN0cmluZyxcbiAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKSxcbiAgICAgICAgICBkYXRlQ3JlYXRlZDogbmV3IERhdGVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2Uuc2hvd0Vycm9yKGVycik7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogRGF0YSBsb2FkIGV2ZW50IGhhbmRsZXIgb2YgYWR2YW5jZWQgdGFibGUgY29tcG9uZW50XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBvbkRhdGFMb2FkKGRhdGE6IEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0KSB7XG4gICAgdGhpcy5yZWNvcmRzVG90YWwgPSBkYXRhLnJlY29yZHNUb3RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgc2VsZWN0ZWQgaXRlbXNcbiAgICovXG4gIHJlbW92ZSgpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGU7XG4gICAgaWYgKHRhYmxlICYmIHRhYmxlLnNlbGVjdGVkICYmIHRhYmxlLnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgLy8gZ2V0IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAgY29uc3QgaXRlbXMgPSB0YWJsZS5zZWxlY3RlZDtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RhbFNlcnZpY2Uuc2hvd1dhcm5pbmdEaWFsb2coXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlJlbW92ZUl0ZW1zVGl0bGUnKSxcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuUmVtb3ZlSXRlbXNNZXNzYWdlJyksXG4gICAgICAgIERJQUxPR19CVVRUT05TLk9rQ2FuY2VsKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dC5tb2RlbCh0YWJsZS5jb25maWcubW9kZWwpLnJlbW92ZShpdGVtcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gKyAnOicgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtTWVzc2FnZS50aXRsZScpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgoaXRlbXMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2Uub25lJyA6ICdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2UubWFueScpXG4gICAgICAgICAgICAgICAgICAsIHsgdmFsdWU6IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93RXJyb3IoZXJyLCB7XG4gICAgICAgICAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCwgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIEFmdGVyVmlld0luaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL2NvbWJpbmVMYXRlc3QnO1xuaW1wb3J0IHtNb2RhbFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7Um91dGVyTW9kYWxPa0NhbmNlbH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FkdmFuY2VkRm9ybUNvbXBvbmVudH0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQgeyBQcm9ncmVzc2JhckNvbXBvbmVudCB9IGZyb20gJ25neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtcm93LWFjdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXJvdy1hY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgIC5mYS0xXzV4IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgICB9XG4gICAgICAgIC5mb3JtLWNvbnRyb2w6ZGlzYWJsZWQsIC5mb3JtLWNvbnRyb2xbcmVhZG9ubHldIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIH1cbiAgICAgICAgLmZvcm0tY2hlY2suY2hlY2tib3gge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgICB9XG4gICAgICAgIGBcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIGludmFsaWRTdWJzY3JpcHRpb246IGFueTtcblxuXG4gICAgQElucHV0KCkgaXRlbXM6IGFueTtcbiAgICBASW5wdXQoKSBtb2RhbEljb24gPSAnZmFzIGZhLXByb2plY3QtZGlhZ3JhbSc7XG4gICAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgZm9ybVRlbXBsYXRlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByb2dyZXNzVHlwZSA9ICdpbmRpZ28nO1xuICAgIEBPdXRwdXQoKSBkYXRhOiBhbnk7XG4gICAgQElucHV0KCkgYWRkaXRpb25hbE1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJ1RhYmxlcy5BY3Rpb25zLkNvbXBsZXRlZFdpdGhFcnJvcnMnO1xuICAgIHB1YmxpYyBsYXN0RXJyb3I6IGFueTtcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICAgIEBWaWV3Q2hpbGQoJ3Byb2dyZXNzJykgcHJvZ3Jlc3NDb21wb25lbnQ/OiBQcm9ncmVzc2JhckNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdwcm9ncmVzc0NvbnRhaW5lcicpIHByb2dyZXNzQ29udGFpbmVyPzogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdmb3JtQ29tcG9uZW50JykgZm9ybUNvbXBvbmVudD86IEFkdmFuY2VkRm9ybUNvbXBvbmVudDtcbiAgICBASW5wdXQoKSByZWZyZXNoOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBASW5wdXQoKSBleGVjdXRlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHByaXZhdGUgcmVmcmVzaFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGV4ZWN1dGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSkge1xuICAgICAgICBzdXBlcihyb3V0ZXIsIGFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgLy8gc2V0IG1vZGFsIHNpemVcbiAgICAgICAgdGhpcy5tb2RhbENsYXNzID0gJ21vZGFsLWxnJztcbiAgICAgICAgLy8gc2V0IG1vZGFsIHRpdGxlXG4gICAgICAgIHRoaXMubW9kYWxUaXRsZSA9ICdUYWJsZXMuQWN0aW9ucy5MYWJlbCc7XG4gICAgICAgIC8vIGRpc2FibGUgb2sgYnV0dG9uXG4gICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBzZXQgYnV0dG9uIHRleHRcbiAgICAgICAgdGhpcy5va0J1dHRvblRleHQgPSAnVGFibGVzLkFjdGlvbnMuU3RhcnQnO1xuICAgIH1cblxuICAgIGdldCBmb3JtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVmcmVzaC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0NvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUucHJvZ3Jlc3MgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnByb2dyZXNzID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gdmFsdWUucHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDb21wb25lbnQudmFsdWUgPSBwcm9ncmVzcztcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgJiYgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0pIHtcbiAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnZhbGlkU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uY2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV2ZW50LCAnaXNWYWxpZCcpICYmIChldmVudC5jaGFuZ2VkICE9IG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9ICFldmVudC5pc1ZhbGlkO1xuICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5yZWZyZXNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xvc2VcbiAgICAgICAgaWYgKHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZikge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBvaygpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4ZWN1dGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtICYmXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pby5kYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGRhdGFcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5mb3JtaW8uZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvIGFjdGlvblxuICAgICAgICAgICAgdGhpcy5leGVjdXRlLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMTAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZXJyb3JzICYmIHJlc3VsdC5lcnJvcnMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNob3cgbWVzc2FnZSBmb3IgcGFydGlhbCBzdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3JzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG5ldyBFcnJvcih0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5lcnJvck1lc3NhZ2V9LkRlc2NyaXB0aW9uLk9uZWApKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gbmV3IEVycm9yKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5lcnJvck1lc3NhZ2V9LkRlc2NyaXB0aW9uLk1hbnlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiAxXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVQcm9ncmVzcygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dQcm9ncmVzcygpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZSgnaW52aXNpYmxlJywgJ3Zpc2libGUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVQcm9ncmVzcygpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZSgndmlzaWJsZScsICdpbnZpc2libGUnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGU6ICcnXG4gIH0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQge1xuICAgIHByaXZhdGUgX2ZpbHRlcjogYW55O1xuICAgIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCAgZmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xuICAgIH1cblxuICAgIHNldCBmaWx0ZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyID0gdmFsdWU7XG4gICAgfVxuXG4gICAgb25LZXlFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLl9maWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1pb0NvbXBvbmVudCwgRm9ybWlvRm9ybX0gZnJvbSAnYW5ndWxhci1mb3JtaW8nO1xuaW1wb3J0IHtBbmd1bGFyRGF0YUNvbnRleHR9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7U2VydmljZVVybFByZVByb2Nlc3NvciwgVHJhbnNsYXRlUHJlUHJvY2Vzc29yfSBmcm9tICdAdW5pdmVyc2lzL2Zvcm1zJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnR9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC1iYXNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1zZWFyY2gtZm9ybScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInAtNFwiPlxuICAgICAgPGZvcm1pbyAjZm9ybWlvQ29tcG9uZW50IGNsYXNzPVwiZm9ybWlvLXNlYXJjaFwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RW50ZXIoJGV2ZW50KVwiIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiIChmb3JtTG9hZCk9XCJvbkZvcm1Mb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICBbcmVmcmVzaF09XCJyZWZyZXNoRm9ybVwiIFtzdWJtaXNzaW9uXT1cInN1Ym1pc3Npb25cIiBbZm9ybV09XCJmb3JtXCI+PC9mb3JtaW8+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2FkdmFuY2VkLXNlYXJjaC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50IGV4dGVuZHMgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuXG4gIEBWaWV3Q2hpbGQoJ2Zvcm1pb0NvbXBvbmVudCcpIGZvcm1Db21wb25lbnQ/OiBGb3JtaW9Db21wb25lbnQ7XG4gIEBJbnB1dCgpIGZvcm06IGFueSA9IHt9O1xuICBASW5wdXQoKSBmb3JtU3JjPzogc3RyaW5nO1xuICBAT3V0cHV0KCkgcmVmcmVzaEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGxvYWRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGFyZ2V0OiBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnR9PigpO1xuICBzdWJtaXNzaW9uOiBhbnkgPSB7IGRhdGE6IHt9IH07XG4gIHByaXZhdGUgZmlsdGVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY29tcG9uZW50TG9hZGluZyA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnRcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdmb3JtJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmZvcm0gIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtLmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgY2hhbmdlcy5mb3JtLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmZvcm0ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdmb3JtU3JjJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmZvcm1TcmMgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtU3JjLmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgY2hhbmdlcy5mb3JtU3JjLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmZvcm1TcmMucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0KGNoYW5nZXMuZm9ybVNyYy5jdXJyZW50VmFsdWUpLnRvUHJvbWlzZSgpLnRoZW4oKGZvcm0pID0+IHtcbiAgICAgICAgICAgIC8vIHNldCBmb3JtXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgICAgICAgICAgLy8gYW5kIGluaXRcbiAgICAgICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHNlYXJjaCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZmlsdGVyJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmZpbHRlciAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3VibWlzc2lvbi5kYXRhID0gY2hhbmdlcy5maWx0ZXIuY3VycmVudFZhbHVlIHx8IHt9O1xuICAgICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgICAgIHN1Ym1pc3Npb246IHRoaXMuc3VibWlzc2lvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICBuZXcgU2VydmljZVVybFByZVByb2Nlc3Nvcih0aGlzLl9jb250ZXh0KS5wYXJzZSh0aGlzLmZvcm0pO1xuICAgICAgbmV3IFRyYW5zbGF0ZVByZVByb2Nlc3Nvcih0aGlzLl90cmFuc2xhdGVTZXJ2aWNlKS5wYXJzZSh0aGlzLmZvcm0pO1xuICAgICAgdGhpcy5zdWJtaXNzaW9uID0ge1xuICAgICAgICBkYXRhOiB0aGlzLmZpbHRlclxuICAgICAgfTtcbiAgICAgIHRoaXMubG9hZGluZy5lbWl0KHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh7XG4gICAgICAgIGZvcm06IHRoaXMuZm9ybVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBvbmVudExvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uID0gdGhpcy5maWx0ZXJDaGFuZ2Uuc3Vic2NyaWJlKCBmaWx0ZXIgPT4ge1xuICAgICAgICB0aGlzLnN1Ym1pc3Npb24uZGF0YSA9IGZpbHRlcjtcbiAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtcbiAgICAgICAgICBzdWJtaXNzaW9uOiB0aGlzLnN1Ym1pc3Npb25cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZShldmVudDogb2JqZWN0KSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvcm1Db21wb25lbnQgPSB0aGlzLmZvcm1Db21wb25lbnQ7XG4gICAgT2JqZWN0LmtleXMoZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGEsIGtleSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmb3JtQ29tcG9uZW50LnN1Ym1pc3Npb24uZGF0YVtrZXldO1xuICAgICAgICAvLyB0aGUgZmlsdGVyIHdpdGggdHlwZSBpcyBhIHN0cmluZyBhbmQgaXMgbm90IGVtcHR5XG4gICAgICAgIGNvbnN0IGlzRW1wdHlTdHJpbmcgPSAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDA7XG4gICAgICAgIC8vIGRvIG5vdCBpbmNsdWRlIGVtcHR5IG9iamVjdHMgaW4gZmlsdGVyXG4gICAgICAgIGNvbnN0IGlzRW1wdHlPYmplY3QgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICAgIC8vIG1ha2UgaXNFbXB0eVN0cmluZywgaXNFbXB0eU9iamVjdCBtdXRleFxuICAgICAgICBpZiAoIWlzRW1wdHlTdHJpbmcgJiYgIWlzRW1wdHlPYmplY3QpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5maWx0ZXIsIGtleSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlIDogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZSA6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRm9ybUxvYWQoZm9ybTogRm9ybWlvRm9ybSkge1xuICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmc7XG4gICAgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm1pby5pMThuZXh0Lm9wdGlvbnMucmVzb3VyY2VzW2N1cnJlbnRMYW5nXSA9IHsgdHJhbnNsYXRpb24gOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEZvcm1zYCkgfTtcbiAgICB0aGlzLmZvcm1Db21wb25lbnQuZm9ybWlvLmxhbmd1YWdlID0gY3VycmVudExhbmc7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy9cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpbHRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIERvQ2hlY2sgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi8uLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUZW1wbGF0ZVBpcGUgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUGFnZUluZm8ge1xuICBwYWdlOiBudW1iZXI7XG4gIHBhZ2VzOiBudW1iZXI7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICBsZW5ndGg6IG51bWJlcjtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNEaXNwbGF5OiBudW1iZXI7XG4gIHNlcnZlclNpZGU/OiBib29sZWFuO1xufVxuXG4vLyBpbXBvcnRhbnQ6IGV4cG9ydCB0aGlzIGNvbnN0IGR1ZSB0byBBT1QgY29tcGlsYXRpb24gZXJyb3JzXG4vLyBzZWUgbW9yZSBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvYW90LW1ldGFkYXRhLWVycm9ycyNvbmx5LWluaXRpYWxpemVkLXZhcmlhYmxlc1xuZXhwb3J0IGNvbnN0IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VUZW1wbGF0ZSA9IGBcbjxkaXY+XG4gICAgPCEtLSBzZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zXCI+XG4gICAgICAgICAgPGlucHV0IHNwZWxsY2hlY2s9XCJmYWxzZVwiIHR5cGU9XCJ0ZXh0XCIgI3NlYXJjaEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGJnLWdyYXktMTAwIGJvcmRlci0wXCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydUYWJsZXMuU2VhcmNoUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX1cIiBhcmlhLWxhYmVsPVwiU2VhcmNoXCIgYXJpYS1kZXNjcmliZWRieT1cImJhc2ljLWFkZG9uMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYmctZ3JheS0xMDAgYm9yZGVyLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2VhcmNoKClcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggdGV4dC1zZWNvbmRhcnlcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVNZXNzYWdlJ1wiPjwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1ncmF5LTEwMFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zbGlkZXJzLWggcHItMiB0ZXh0LXNlY29uZGFyeVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT57eydUYWJsZXMuRmlsdGVycycgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgI2Ryb3Bkb3duRmlsdGVyIGNsYXNzPVwiZHJvcGRvd24gbWwtM1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZ3JheS0xMDAgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGlkPVwiZHJvcGRvd25EZWZhdWx0RmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBkcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgICAge3sgdGhpcy5kZWZhdWx0RmlsdGVyLm5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkRlZmF1bHRGaWx0ZXJzXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZGVmYXVsdEZpbHRlcnNcIiAoY2xpY2spPVwib25GaWx0ZXJTZWxlY3QoZmlsdGVyKVwiPlxuICAgICAgICAgICAgICAgIHt7IGZpbHRlci5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIHRleHQtbGctcmlnaHQgbXQtMyBtdC1sZy0wIGQtbm9uZVwiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJ0cnVlXCIgY2xhc3M9XCJidG4gcm91bmRlZC1waWxsIGJ0bi1vdXRsaW5lLXRoZW1lXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwci0yIGZvbnQtbGdcIj4rPC9zcGFuPjxzcGFuIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5BZGRJdGVtJ1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgW25nQ2xhc3NdPVwieyAnY29tcG9uZW50LWxvYWRpbmcnOiBsb2FkaW5nfVwiPlxuICAgICAgICA8YXBwLWFkdmFuY2VkLXRhYmxlICNhZHZhbmNlZFRhYmxlIChpbml0KT1cIm9uVGFibGVJbml0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2FkKT1cIm9uRGF0YUxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlU2VsZWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxYXT1cImZhbHNlXCIgW3Njcm9sbFldPVwiMzIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZUxlbmd0aF09XCJwYWdlTGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJmYWxzZVwiIFtzaG93Rm9vdGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0FjdGlvbnNdPVwiZmFsc2VcIiBbbGVuZ3RoTWVudV09XCJsZW5ndGhNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInRhYmxlQ29uZmlnXCIgW2NvbmZpZ1NyY109XCJ0YWJsZUNvbmZpZ1NyY1wiPjwvYXBwLWFkdmFuY2VkLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zIHRhYmxlLWN1c3RvbS1wYWdlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXhcIiAqbmdJZj1cInJlY29yZHNUb3RhbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBtbC1hdXRvIG1yLTMgdGV4dC1zZWNvbmRhcnlcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuUmVjb3Jkc1BlclBhZ2UnXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgI2Ryb3Bkb3duTGVuZ3RoIGNsYXNzPVwiZHJvcGRvd24gbXItM1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyYXktMTAwIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJkcm9wZG93blBhZ2VTaXplXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICBkcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgIHt7cGFnZUxlbmd0aH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93blBhZ2VTaXplXCI+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRMZW5ndGgoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZHJvcGRvd24taXRlbS10aGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsZW5ndGhNZW51XCI+e3tpdGVtfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIG1yLTJcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuUGFnZUluZm8nXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJwYWdlSW5mb1wiPjwvZGl2PlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlID09PSAwXCIgY2xhc3M9XCJidG4gdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwiZmlyc3RQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlPT09MFwiIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInBhZ2VJbmZvICYmIHBhZ2VJbmZvLnBhZ2U9PT1wYWdlSW5mby5wYWdlcy0xXCIgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwibmV4dFBhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZT09PXBhZ2VJbmZvLnBhZ2VzLTFcIiBjbGFzcz1cImJ0biB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJsYXN0UGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuYDtcblxuLyoqXG4gKlxuICogQSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBjcml0ZXJpb25cbiAqXG4gKi9cbmludGVyZmFjZSBTZWFyY2hJdGVtIHtcbiAgZmlsdGVyOiBhbnk7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLW1vZGFsJyxcbiAgdGVtcGxhdGU6IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VUZW1wbGF0ZSxcbiAgc3R5bGVzOiBbXG4gICAgYFxuXG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hFbGVtZW50ICYmIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0FMTF9GSUxURVIgPSB7XG4gICAgbmFtZTogJ1RhYmxlcy5BbGwnLFxuICAgIGZpbHRlcjogbnVsbFxuICB9O1xuXG4gIEBWaWV3Q2hpbGQoJ2FkdmFuY2VkVGFibGUnKSBhZHZhbmNlZFRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZW1wdHlUYWJsZScpIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkcm9wZG93bkZpbHRlcicpIGRyb3Bkb3duRmlsdGVyPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25MZW5ndGgnKSBkcm9wZG93bkxlbmd0aD86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEVsZW1lbnQnKSBzZWFyY2hFbGVtZW50OiBhbnk7XG4gIEBJbnB1dCgndGFibGVDb25maWcnKSB0YWJsZUNvbmZpZz86IFRhYmxlQ29uZmlndXJhdGlvbjtcbiAgQElucHV0KCd0YWJsZUNvbmZpZ1NyYycpIHRhYmxlQ29uZmlnU3JjPzogc3RyaW5nO1xuICBASW5wdXQoJ3BhZ2VMZW5ndGgnKSBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgnc2VhcmNoVGV4dCcpIHNlYXJjaFRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgnbGVuZ3RoTWVudScpIGxlbmd0aE1lbnU6IEFycmF5PG51bWJlcj4gPSBbNSwgMTAsIDI1LCA1MCwgMTAwXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyByZWNvcmRzVG90YWwgPSAwO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgcmVjb3Jkc0ZpbHRlcmVkID0gMDtcbiAgcHVibGljIGRlZmF1bHRGaWx0ZXJzOiBBcnJheTxhbnk+ID0gW0FkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSXTtcbiAgQElucHV0KCdkZWZhdWx0RmlsdGVyJykgZGVmYXVsdEZpbHRlciA9IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSO1xuXG5cbiAgcHVibGljIHBhZ2VJbmZvID0gPFBhZ2VJbmZvPntcbiAgICBzZXJ2ZXJTaWRlOiB0cnVlXG4gIH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG4gIGNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgX3JvdXRlcjogUm91dGVyLFxuICAgIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJvdGVjdGVkIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgIHByb3RlY3RlZCBkYXRlUGlwZTogRGF0ZVBpcGVcbiAgKSB7XG4gICAgc3VwZXIoX3JvdXRlciwgX2FjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLm1vZGFsQ2xhc3MgPSAnbW9kYWwteGwgbW9kYWwtdGFibGUnO1xuICAgIHRoaXMuX3RlbXBsYXRlID0gbmV3IFRlbXBsYXRlUGlwZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SW5wdXRzKGNvbXBvbmVudFR5cGUpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBwcm9wcyA9IGNvbXBvbmVudFR5cGUuX19wcm9wX19tZXRhZGF0YV9fO1xuICAgIGNvbnN0IGlucHV0czogYW55W10gPSBbXTtcbiAgICBpZiAocHJvcHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGlucHV0cztcbiAgICB9XG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBjb25zdCBtZW1iZXIgPSBwcm9wc1twcm9wXVswXTtcbiAgICAgIGlmIChtZW1iZXIubmdNZXRhZGF0YU5hbWUgPT09ICdJbnB1dCcpIHtcbiAgICAgICAgaW5wdXRzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlucHV0cy5zb3J0KCk7XG4gIH1cblxuICBwdWJsaWMgaGFzSW5wdXRzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5va0J1dHRvblRleHQgPSAnVGFibGVzLkFwcGx5JztcbiAgICB0aGlzLmNhbmNlbEJ1dHRvblRleHQgPSAnVGFibGVzLkNhbmNlbCc7XG4gICAgLy8gZ2V0IHJvdXRlIGRhdGFcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAvLyBzZXQgbW9kYWwgdGl0bGUgaWYgYW55XG4gICAgICBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgICB0aGlzLm1vZGFsVGl0bGUgPSBkYXRhLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jb25maWcpIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZyA9IGRhdGEuY29uZmlnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycy5wdXNoLmFwcGx5KHRoaXMuZGVmYXVsdEZpbHRlcnMsIHRoaXMudGFibGVDb25maWcuc2VhcmNoZXMpO1xuICAgICAgfVxuICAgICAgLy8gaW1wb3J0YW50OiB1c2UgaGFzSW5wdXRzIGR1ZSB0byBBT1QgY29tcGlsYXRpb24uIE1ldGFkYXRhIHByb3BlcnRpZXMgY2Fubm90IGJlIHVzZWQgKGUuZy4gQElucHV0KCkpXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBlbXB0eSBkdXJpbmcgcnVudGltZVxuICAgICAgLy8gc28gd2UgbmVlZCB0byBkZWZpbmUgbWFudWFsbHkgaW5wdXQgcHJvcGVydGllcyB0aGF0IGFyZSBnb2luZyB0byBiZSBiaW5kIHRocm91Z2ggdGhpcyBwcm9jZXNzXG4gICAgICAvLyBiaW5kIGFsbCBpbnB1dHNcbiAgICAgIGNvbnN0IGlucHV0cyA9IHRoaXMuaGFzSW5wdXRzKCk7XG4gICAgICBpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwgaW5wdXQpKSB7XG4gICAgICAgICAgdGhpc1tpbnB1dF0gPSBkYXRhW2lucHV0XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuYWR2YW5jZWRUYWJsZS5jb25maWdDaGFuZ2VzLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgICAgIC8vIHJlc2V0IGRlZmF1bHQgZmlsdGVyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcbiAgICAgICAgICAgIC8vIGluaXQgZmlsdGVyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzID0gW0FkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSXTtcbiAgICAgICAgICAgIC8vIGFkZCBleHRyYSBmaWx0ZXJzXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzLnB1c2guYXBwbHkodGhpcy5kZWZhdWx0RmlsdGVycywgdGhpcy50YWJsZUNvbmZpZy5zZWFyY2hlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhTG9hZChkYXRhOiBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCkge1xuICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgdGhpcy5yZWNvcmRzRmlsdGVyZWQgPSBkYXRhLnJlY29yZHNGaWx0ZXJlZDtcbiAgICAvLyBnZXQgZmlyc3QgcGFnZSBpbmZvIChiZWNhdXNlIHBhZ2UgaXMgbm90IGdvaW5nIHRvIGJlIGZpcmVkIGZvciBmaXJzdCBwYWdlKVxuICAgIGlmIChkYXRhLnJlY29yZHNUb3RhbCA+IDAgJiYgdGhpcy5wYWdlSW5mby5yZWNvcmRzVG90YWwgPT09IDApIHtcbiAgICAgIHRoaXMucGFnZUluZm8ucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgfVxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICB9XG5cbiAgcHJldmlvdXNQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIG5leHQgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgncHJldmlvdXMnKS5kcmF3KCdwYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgbmV4dFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgLy8gZ28gdG8gbmV4dCBwYWdlXG4gICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCduZXh0JykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIG9uVGFibGVJbml0KCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGRhdGFUYWJsZSA9IHNlbGYuYWR2YW5jZWRUYWJsZSAmJiBzZWxmLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlO1xuICAgIC8vIGdldCBpbml0aWFsIHBhZ2UgaW5mb1xuICAgIGNvbnN0IGluaXRpYWxQYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgaW5pdGlhbFBhZ2VJbmZvLnN0YXJ0ICs9IDE7XG4gICAgc2VsZi5wYWdlSW5mbyA9IGluaXRpYWxQYWdlSW5mbztcbiAgICAvLyBjaGFuZ2UgZW1wdHlUYWJsZU1lc3NhZ2VcbiAgICBkYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmVtcHR5VGFibGUgJiYgdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIC8vIGJpbmQgcGFnZSBjaGFuZ2UgZXZlbnRcbiAgICBkYXRhVGFibGUub24oJ3BhZ2UuZHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICBwYWdlSW5mby5zdGFydCArPSAxO1xuICAgICAgc2VsZi5wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIH0pO1xuICAgIC8vIGJpbmQgZHJhdyBjaGFuZ2UgZXZlbnRcbiAgICBkYXRhVGFibGUub24oJ2RyYXcuZHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBmb3IgZnV0dXJlIHVzZVxuICAgICAgc2VsZi5sb2FkaW5nID0gZmFsc2U7XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICBwYWdlSW5mby5zdGFydCArPSAxO1xuICAgICAgc2VsZi5wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIH0pO1xuICB9XG5cbiAgZmlyc3RQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIGZpcnN0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ2ZpcnN0JykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIGxhc3RQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIGxhc3QgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgnbGFzdCcpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBzZXRMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIHRoaXMucGFnZUxlbmd0aCA9IHZhbHVlO1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlLmxlbih2YWx1ZSkuZHJhdygpO1xuICAgIH1cbiAgfVxuXG4gIG9uS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1JldHVybicpIHtcbiAgICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgICAgLy8gbG9hZGluZ1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkdmFuY2VkVGFibGUuc2VhcmNoKCg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBsb2FkaW5nXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBSZWFkcyB0aGUgbW9kYWwgdGFibGUgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZpbHRlcnMgdG8gdXNlIGluIHRoZSB0YWJsZVxuICAgKiBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHRhYmxlQ29uZmlnIHtvYmplY3R9IFRoZSB0YWJsZSBjb25maWd1cmF0aW9uIGZyb20ganNvbiBmaWxlXG4gICAqIEBwYXJhbSBkZWZhdWx0RmlsdGVyVmFsdWVzIHtvYmplY3R9IEEgbGlzdCBvZiBkZWZhdWx0IGZpbHRlcnNcbiAgICogQHBhcmFtIHNlYXJjaEl0ZW0gVGhlIHNlYXJjaEl0ZW0gdG8gdXNlXG4gICAqXG4gICAqL1xuICBnZXRGaWx0ZXJzKFxuICAgIHRhYmxlQ29uZmlnOiBhbnksXG4gICAgZGVmYXVsdEZpbHRlclZhbHVlcyA9IHt9LFxuICAgIHNlYXJjaEl0ZW06IGFueVxuICApOiBBcnJheTxzdHJpbmc+IHtcbiAgICAvLyBEbyBub3RoaW5nIGluIGFic2VuY2Ugb2YgY29uZmlndXJhdGlvbi5cbiAgICBpZiAoIXRhYmxlQ29uZmlnIHx8ICFBcnJheS5pc0FycmF5KHRhYmxlQ29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmIChzZWFyY2hJdGVtLmZpbHRlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlZENyaXRlcmlvbiA9IHRhYmxlQ29uZmlnLmNyaXRlcmlhLmZpbmQoY3JpdGVyaW9uID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2VhcmNoSXRlbS5maWx0ZXIsIGNyaXRlcmlvbi5uYW1lKVxuICAgICk7XG5cbiAgICBpZiAobWF0Y2hlZENyaXRlcmlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBzZWFyY2hJdGVtLmZpbHRlclttYXRjaGVkQ3JpdGVyaW9uLm5hbWVdO1xuXG4gICAgY29uc3QgY3JpdGVyaW9uU2FmZU5hbWUgPSBtYXRjaGVkQ3JpdGVyaW9uLm5hbWUgIT09IG51bGxcbiAgICAgID8gbWF0Y2hlZENyaXRlcmlvbi5uYW1lLnRvU3RyaW5nKClcbiAgICAgIDogJyc7XG5cbiAgICBsZXQgYXBwbGljYWJsZUZpbHRlcjogc3RyaW5nO1xuXG4gICAgLy8gUmF3IGRhdGVzIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB0byBhIHNwZWNpZmljIGZvcm1hdFxuICAgIGlmIChjcml0ZXJpb25TYWZlTmFtZS5pbmNsdWRlcygnR01UJykpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShjcml0ZXJpb25TYWZlTmFtZSwgJ01NL2RkL3l5eXknKTtcbiAgICAgIGFwcGxpY2FibGVGaWx0ZXIgPSB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0obWF0Y2hlZENyaXRlcmlvbi5maWx0ZXIsIHtcbiAgICAgICAgdmFsdWU6IG5ld0RhdGVcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChjcml0ZXJpb25TYWZlTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGFwcGxpY2FibGVGaWx0ZXIgPSAodGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKG1hdGNoZWRDcml0ZXJpb24uZmlsdGVyLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9LCBkZWZhdWx0RmlsdGVyVmFsdWVzKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBsaWNhYmxlRmlsdGVyID0gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIFthcHBsaWNhYmxlRmlsdGVyXTtcbiAgfVxuXG4gIG9uRmlsdGVyU2VsZWN0KHZhbHVlOiB7IGZpbHRlcjogYW55OyBuYW1lOiBzdHJpbmcgfSB8IGFueSkge1xuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2godmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJ1bnMgYSBmaWx0ZXIgYWdhaW5zdCB0aGUgbW9kYWwgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIHVzZSBpbiB0aGUgc2VhcmNoXG4gICAqXG4gICAqL1xuICBhc3luYyBhZHZhbmNlZFNlYXJjaChmaWx0ZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIERvIG5vdGhpbmcgaW4gYWJzZW5jZSBvZiBjb25maWd1cmF0aW9uLlxuICAgIGlmICghdGhpcy50YWJsZUNvbmZpZyB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLnRhYmxlQ29uZmlnLmNyaXRlcmlhKSB8fCAhdGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIHRhYmxlIGNvbmZpZ3VyYXRpb24gYXZhaWxhYmxlJywgdGhpcy50YWJsZUNvbmZpZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQW4gYWR2YW5jZWQgdGFibGUgaGFzIHNvbWUgZmlsdGVycyBieSBkZWZhdWx0XG4gICAgbGV0IGRlZmF1bHRGaWx0ZXJWYWx1ZXM7XG4gICAgdHJ5IHtcbiAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSBhd2FpdCB0aGlzLmFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlci5nZXRWYWx1ZXMoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uczogYW55W10gPSBbXTtcbiAgICBsZXQgcHJlZGVmaW5lZENyaXRlcmlhO1xuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IGZpbHRlcjtcbiAgICAgIHByZWRlZmluZWRDcml0ZXJpYSA9IHRoaXMuZ2V0RmlsdGVycyhcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZyxcbiAgICAgICAgZGVmYXVsdEZpbHRlclZhbHVlcyxcbiAgICAgICAgZmlsdGVyXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbXB0eSBhIGZhbHN5IGZpbHRlciByZXNldHMgdGhlIHJlc3VsdHNcbiAgICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSO1xuICAgIH1cblxuICAgIC8vIHNlYXJjaCBmaWx0ZXIgaXMgYXBwbGllZCBzZXBhcmF0ZWx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGFkZCBoZXJlLlxuICAgIGV4cHJlc3Npb25zLnB1c2gocHJlZGVmaW5lZENyaXRlcmlhKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmFkdmFuY2VkVGFibGUuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCdmaWx0ZXInLCBleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKS5wcmVwYXJlKCk7XG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLmZldGNoKCk7XG4gIH1cbn1cblxuIiwiaW1wb3J0IHsgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlLW1vZGFsL2FkdmFuY2VkLXRhYmxlLW1vZGFsLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAubW9kYWwtdGFibGUgLmRhdGFUYWJsZXNfd3JhcHBlciB7XG4gICAgICBoZWlnaHQ6IDUwdmg7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cbiAgICBgLFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICBwdWJsaWMgZGlzbWlzczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEVsZW1lbnQnKSBzZWFyY2hFbGVtZW50OiBhbnk7XG5cbiAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsXG4gICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIGNvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBhZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBfbW9kYWxSZWY6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKHJvdXRlciwgYWN0aXZhdGVkUm91dGUsIGNvbnRleHQsIGFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlciwgZGF0ZVBpcGUpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRWxlbWVudCAmJiB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG9rKCkge1xuICAgIHRoaXMuX21vZGFsUmVmLmhpZGUoKTtcbiAgICB0aGlzLmRpc21pc3MuZW1pdCgnb2snKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYW5jZWwoKSB7XG4gICAgdGhpcy5fbW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudCc7XG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWxlY3RTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9tb2RhbDogTW9kYWxTZXJ2aWNlKSB7XG4gICAgLy9cbiAgfVxuXG4gIHNlbGVjdChpbml0aWFsU3RhdGU6IGFueSk6IFByb21pc2U8e3Jlc3VsdDogc3RyaW5nLCBpdGVtczogQXJyYXk8YW55Pn0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLl9tb2RhbC5vcGVuTW9kYWxDb21wb25lbnQoQWR2YW5jZWRTZWxlY3RDb21wb25lbnQsIHtcbiAgICAgICAgICBjbGFzczogJ21vZGFsLXhsIG1vZGFsLXRhYmxlJyxcbiAgICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICAgIGFuaW1hdGVkOiB0cnVlLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWY6IEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50ID0gbW9kYWxSZWYuY29udGVudDtcbiAgICAgICAgY29tcG9uZW50UmVmLmRpc21pc3Muc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGl0ZW1zOiAoY29tcG9uZW50UmVmLmFkdmFuY2VkVGFibGUgJiYgY29tcG9uZW50UmVmLmFkdmFuY2VkVGFibGUuc2VsZWN0ZWQpIGFzIGFueVtdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUmVzb2x2ZSwgUm91dGVyU3RhdGVTbmFwc2hvdH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb25SZXNvbHZlciBpbXBsZW1lbnRzIFJlc29sdmU8c3RyaW5nPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCkge31cbiAgICByZXNvbHZlKFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbiAgICApOiBQcm9taXNlPGFueT58YW55IHtcbiAgICAgICAgLy8gZ2V0IGxpc3RcbiAgICAgICAgY29uc3QgbGlzdCA9IHJvdXRlLmRhdGEubGlzdCB8fCByb3V0ZS5wYXJhbXMubGlzdDtcbiAgICAgICAgLy8gZ2V0IG1vZGVsXG4gICAgICAgIGNvbnN0IG1vZGVsID0gcm91dGUuZGF0YS5tb2RlbCB8fCByb3V0ZS5wYXJhbXMubW9kZWw7XG4gICAgICAgIC8vIGdldCBjb25maWd1cmF0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldChgYXNzZXRzL2xpc3RzLyR7bW9kZWx9LyR7bGlzdH0uanNvbmApLnRvUHJvbWlzZSgpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoQ29uZmlndXJhdGlvblJlc29sdmVyIGltcGxlbWVudHMgUmVzb2x2ZTxzdHJpbmc+IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50KSB7fVxuICAgIHJlc29sdmUoXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuICAgICk6IFByb21pc2U8YW55Pnxhbnkge1xuICAgICAgICAvLyBnZXQgbGlzdFxuICAgICAgICBjb25zdCBsaXN0ID0gcm91dGUuZGF0YS5saXN0IHx8IHJvdXRlLnBhcmFtcy5saXN0O1xuICAgICAgICAvLyBnZXQgbW9kZWxcbiAgICAgICAgY29uc3QgbW9kZWwgPSByb3V0ZS5kYXRhLm1vZGVsIHx8IHJvdXRlLnBhcmFtcy5tb2RlbDtcbiAgICAgICAgLy8gZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KGBhc3NldHMvbGlzdHMvJHttb2RlbH0vc2VhcmNoLiR7bGlzdH0uanNvbmApLnRvUHJvbWlzZSgpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlLCBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTdG9yYWdlU2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC10YWJsZS1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCcsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdtb2RhbF9zZXR0aW5nc190ZW1wbGF0ZScpIG1vZGFsX3NldHRpbmdzX3RlbXBsYXRlPzogRWxlbWVudFJlZjtcclxuICBtb2RhbFJlZj86IEJzTW9kYWxSZWY7XHJcbiAgc3RvcmFnZUtleTogYW55O1xyXG4gIHBhcmFtczogYW55ID0gdGhpcy5fYWN0aXZhdGVkUm91dGUucGFyYW1zO1xyXG4gIHByaXZhdGUgc2F2ZWRUYWJsZVNldHRpbmdzOiBhbnk7XHJcbiAgZm9ybT86IEZvcm1Hcm91cDtcclxuICBjb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIHRhYmxlQ29sdW1uczogYW55O1xyXG4gIGFjdGl2ZVRhYmxlQ29uZmlnOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxyXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTdG9yYWdlOiBVc2VyU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkVGFibGU6IEFjdGl2YXRlZFRhYmxlU2VydmljZSkge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hY3RpdmVUYWJsZUNvbmZpZyA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlICYmIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmdldENvbmZpZygpO1xyXG4gICAgdGhpcy5zdG9yYWdlS2V5ID0gJ3JlZ2lzdHJhci9zZXR0aW5ncy8nICsgdGhpcy5hY3RpdmVUYWJsZUNvbmZpZy50aXRsZSArICcvdGFibGUvY29sdW1ucyc7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtjb2x1bW5zOiBuZXcgRm9ybUFycmF5KFtdLCB0aGlzLm1pblNlbGVjdGVkQ29sdW1ucygxKSl9KTtcclxuICAgIHRoaXMudXNlclN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkpLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLnNhdmVkVGFibGVTZXR0aW5ncyA9IGRhdGEudmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUuaGFuZGxlQ29sdW1ucyh0aGlzLnNhdmVkVGFibGVTZXR0aW5ncyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkQ2hlY2tib3hlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhZGRDaGVja2JveGVzKCkge1xyXG4gICAgdGhpcy50YWJsZUNvbHVtbnMgPSB0aGlzLmFjdGl2ZVRhYmxlQ29uZmlnLmNvbHVtbnMuc2xpY2UoMSk7XHJcbiAgICB0aGlzLnRhYmxlQ29sdW1ucy5mb3JFYWNoICgoY29sdW1uLCBpKSA9PiB7XHJcbiAgICAgIGlmICghY29sdW1uLmhpZGRlbikge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB7XHJcbiAgICAgICAgICBpZDogY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICBuYW1lOiBjb2x1bW4udGl0bGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbnRyb2wpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnNhdmVkVGFibGVTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCAoKGNvbHVtbiwgaSkgPT4ge1xyXG4gICAgICAgIGNvbHVtbi5jaGVjayA9IGZhbHNlO1xyXG4gICAgICAgIGNvbHVtbi5jaGVjayA9IHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzLmluY2x1ZGVzKGNvbHVtbi5pZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKGNvbHVtbi5jaGVjayk7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgICAgKHRoaXMuZm9ybS5jb250cm9scy5jb2x1bW5zIGFzIEZvcm1BcnJheSkucHVzaChjb250cm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblRhYmxlU2V0dGluZ3ModGFibGVfc2V0dGluZ3NfbW9kYWw6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRhYmxlX3NldHRpbmdzX21vZGFsKTtcclxuICB9XHJcblxyXG4gIHNhdmVUYWJsZVNldHRpbmdzKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1uc0lkcyA9IHRoaXMuZm9ybS52YWx1ZS5jb2x1bW5zXHJcbiAgICAgIC5tYXAoKHYsIGkpID0+IHYgPyB0aGlzLmNvbHVtbnNbaV0uaWQgOiBudWxsKVxyXG4gICAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XHJcbiAgICB0aGlzLnVzZXJTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LCBzZWxlY3RlZENvbHVtbnNJZHMpO1xyXG4gICAgaWYgKHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlKSB7XHJcbiAgICAgIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmhhbmRsZUNvbHVtbnMoc2VsZWN0ZWRDb2x1bW5zSWRzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGFsUmVmKSB7XHJcbiAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzbWlzcygpIHtcclxuICAgIGlmICh0aGlzLm1vZGFsUmVmKSB7XHJcbiAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWluU2VsZWN0ZWRDb2x1bW5zKG1pbiA9IDEpIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoZm9ybUFycmF5OiBGb3JtQXJyYXkpID0+IHtcclxuICAgICAgY29uc3QgdG90YWxTZWxlY3RlZCA9IGZvcm1BcnJheS5jb250cm9sc1xyXG4gICAgICAgIC5tYXAoY29udHJvbCA9PiBjb250cm9sLnZhbHVlKVxyXG4gICAgICAgIC5yZWR1Y2UoKHByZXYsIG5leHQpID0+IG5leHQgPyBwcmV2ICsgbmV4dCA6IHByZXYsIDApO1xyXG5cclxuICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPj0gbWluID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbiwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBUZW1wbGF0ZVJlZiwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXNlclN0b3JhZ2VTZXJ2aWNlLCBNb2RhbFNlcnZpY2UsIERJQUxPR19CVVRUT05TIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UsIEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQge1RlbXBsYXRlUGlwZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUZXh0VXRpbHMgfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cyB7XG4gIGFkdmFuY2VkVmlldzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFNlYXJjaExpc3Qge1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC10YWJsZS1zZWFyY2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5cbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSAge1xuXG4gIHByaXZhdGUgcXVlcnlQYXJhbVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBjb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBASW5wdXQoKSBwdWJsaWMgdGFibGU/OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50O1xuICBASW5wdXQoKSBwdWJsaWMgY29sbGFwc2VkID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGFsbG93U2F2ZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93TW9yZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBtZXJnZVF1ZXJ5UGFyYW1zID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFRleHQnKSBwdWJsaWMgc2VhcmNoVGV4dDogYW55O1xuICBAT3V0cHV0KCd2aWV3Q2hhbmdlJykgcHVibGljIHZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXM+KCk7XG4gIEBPdXRwdXQoJ2xpc3RDaGFuZ2UnKSBwdWJsaWMgbGlzdENoYW5nZTogRXZlbnRFbWl0dGVyPEFkdmFuY2VkU2VhcmNoTGlzdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkdmFuY2VkU2VhcmNoTGlzdD4oKTtcbiAgcHVibGljIHNldCB0ZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5zZWFyY2hUZXh0ICYmIHRoaXMuc2VhcmNoVGV4dC5uYXRpdmVFbGVtZW50ICYmIHRoaXMuc2VhcmNoVGV4dC5uYXRpdmVFbGVtZW50LnZhbHVlKSBhcyBzdHJpbmc7XG4gIH1cblxuICBwdWJsaWMgbW9kYWxSZWY/OiBCc01vZGFsUmVmO1xuICBwdWJsaWMgc3RvcmFnZUtleTogYW55O1xuICBwdWJsaWMgc3RvcmFnZVZhbHVlOiBhbnk7XG4gIHB1YmxpYyB1c2VyU2VhcmNoTGlzdDogYW55ID0gW107XG4gIHB1YmxpYyBzZWxlY3RlZExpc3Q6IGFueSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoIHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICBwcm90ZWN0ZWQgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3VzZXJTdG9yYWdlOiBVc2VyU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZFNlYXJjaFZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGUsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMudGFibGUuY29uZmlnQ2hhbmdlcy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbG9hZCB1c2VyIHNlYXJjaGVzXG4gICAgICAgIHRoaXMubG9hZFVzZXJTZWFyY2hMaXN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgLy8gaWYgc2VhcmNoIGNvbXBvbmVudCBtZXJnZXMgcXVlcnkgcGFyYW1zXG4gICAgICAgICAgLy8gKHVzZXMgcXVlcnlQYXJhbXMgdG8gYXBwbHkgZmlsdGVyKVxuICAgICAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocXVlcnlQYXJhbXMpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hcHBseVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHF1ZXJ5IGdpdmVuIGJ5IHRoZSBxdWVyeVBhcmFtcyBvZiB0aGUgYWN0aXZhdGVkIHJvdXRlXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBhbnkpIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsICdxJykpIHtcbiAgICAgIC8vIHNldCBjb2xsYXBzZWRcbiAgICAgIHRoaXMuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgIC8vIHNlYXJjaCB0ZXh0XG4gICAgICB0aGlzLnRleHQgPSBxdWVyeVBhcmFtcy5xO1xuICAgICAgcmV0dXJuIHRhYmxlLnNlYXJjaCh0aGlzLnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRleHQgPSAnJztcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyUGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcXVlcnlQYXJhbXMpO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgJ3MnKSkge1xuICAgICAgLy8gc2V0IGNvbGxhcHNlZFxuICAgICAgdGhpcy5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgIC8vIGZpbmQgdXNlciBzZWFyY2ggYnkgbmFtZVxuICAgICAgaWYgKHRoaXMudXNlclNlYXJjaExpc3QpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBxdWVyeVBhcmFtcy5zO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMaXN0KSB7XG4gICAgICAgICAgZmlsdGVyUGFyYW1zID0gdGhpcy5zZWxlY3RlZExpc3QuZmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhmaWx0ZXJQYXJhbXMpLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgICAvLyBzZWFyY2ggY3JpdGVyaWFcbiAgICAgIGlmICh0YWJsZS5jb25maWcgJiYgdGFibGUuY29uZmlnLmNyaXRlcmlhKSB7XG4gICAgICAgIHJldHVybiB0YWJsZS5jb25maWcuY3JpdGVyaWEuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT09IGtleTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBmaWx0ZXJQYXJhbXNba2V5XTtcbiAgICAgIGlmIChUZXh0VXRpbHMuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChmaWx0ZXJQYXJhbXNba2V5XSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maWx0ZXJba2V5XSAhPT0gdmFsdWUpIHtcbiAgICAgICAgLy8gc2V0IHZhbHVlXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmZpbHRlciwga2V5LCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsdGVyW2tleV0gIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gY2FsbCBmaWx0ZXJDaGFuZ2UgZXZlbnQgdG8gYXBwbHkgY2hhbmdlIHRvIGFkdmFuY2VkIHNlYXJjaCBjaGlsZHJlblxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgIC8vIGFwcGx5IHF1ZXJ5XG4gICAgdGhpcy5nZXRRdWVyeSgpLnRoZW4oKHF1ZXJ5KSA9PiB7XG4gICAgICAvLyBpZiB0YWJsZSBxdWVyeSBpcyBudWxsXG4gICAgICBpZiAodGFibGUucXVlcnkgPT0gbnVsbCkge1xuICAgICAgICAvLyBzZXQgcXVlcnlcbiAgICAgICAgdGFibGUucXVlcnkgPSBxdWVyeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChxdWVyeSAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCBmaWx0ZXIgcGFyYW1zXG4gICAgICAgICAgdGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBwYXJhbXMuJGZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gYW5kIGZpbmFsbHkgZmV0Y2ggZGF0YVxuICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBvblNlYXJjaEtleURvd24oZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnRhYmxlICYmIGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAvLyBnZXQgc2VhcmNoIHRleHRcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSAoIGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgIC8vIG1lcmdlIHF1ZXJ5IHBhcmFtcyA/XG4gICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgIHE6IHNlYXJjaFRleHQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmNvbmZpZyAmJiB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkge1xuICAgICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyeSB0byBhcHBseSBmaWx0ZXIgYnkgYXBwZW5kaW5nIHF1ZXJ5IHBhcmFtc1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcbiAgICAgICAgcTogc2VhcmNoVGV4dFxuICAgICAgfSk7XG4gICAgICAvLyBvdGhlcndpc2UgZG8gc2VhcmNoXG4gICAgICB0aGlzLnRhYmxlLnNlYXJjaChzZWFyY2hUZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtRGF0ZShkYXRlKSB7XG4gICAgZGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdNTS9kZC95eXl5Jyk7IC8vIHdoYXRldmVyIGZvcm1hdCB5b3UgbmVlZC5cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0VG9TdHJpbmcobmFtZUZpbHRlcikge1xuICAgIGxldCBuYW1lID0gJyc7XG4gICAgaWYgKG5hbWVGaWx0ZXIgIT0gbnVsbCkge1xuICAgICAgbmFtZSA9IG5hbWVGaWx0ZXIudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuLy8gIExvYWQgc2F2ZWQgY3JpdGVyaWEgc2VhcmNoZXMgdXNlciBoYXMgc3RvcmVkIGJlZm9yZVxuICBwcml2YXRlIGxvYWRVc2VyU2VhcmNoTGlzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHRoaXMuc3RvcmFnZUtleSA9ICd0YWJsZXMvJyArIHRoaXMudGFibGUuY29uZmlnLm1vZGVsICsgJy9zZWFyY2hlcyc7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gZGF0YS52YWx1ZSB8fCBbXTtcbiAgICAgIC8vIGlmIHRhYmxlIGNvbmZpZ3VyYXRpb24gaGFzIHByZS1kZWZpbmVkIHNlYXJjaGVzXG4gICAgICBpZiAodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcyAmJiB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gYWRkIHByZS1kZWZpbmVkIGxpc3RzXG4gICAgICAgIGxpc3QucHVzaC5hcHBseShsaXN0LCB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcy5tYXAgKCAoeCkgPT4ge1xuICAgICAgICAgIHgucmVhZE9ubHkgPSB0cnVlOyAvLyBhcyByZWFkb25seVxuICAgICAgICAgIHgubmFtZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHgubmFtZSk7XG4gICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCB1c2VyIHNlYXJjaCBsaXN0XG4gICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gbGlzdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAvLyBETyBOT1QgVEhST1cgRVJST1JcbiAgICAgIC8vIHRvZG86IG5vdGlmeSBjb21wb25lbnQgZm9yIHRoaXMgZXJyb3IgaW4gb3JkZXIgdG8gZGlzYWJsZSBzb21lIGFjdGlvbnNcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgdXNlciBzZWFyY2ggbGlzdCcpO1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0VXNlclNlYXJjaChldmVudDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZExpc3QgJiYgdGhpcy50YWJsZSkge1xuICAgICAgY29uc3QgbGlzdEZvdW5kID0gdGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUodGhpcy5zZWxlY3RlZExpc3QubmFtZSk7XG4gICAgICBpZiAobGlzdEZvdW5kKSB7XG4gICAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgcTogbnVsbCwgczogdGhpcy5zZWxlY3RlZExpc3QubmFtZSB9O1xuICAgICAgICAgIC8vIGNsZWFyIGNyaXRlcmlhIGlmIGFueVxuICAgICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbGlzdEZvdW5kO1xuICAgICAgICB0aGlzLmZpbHRlciA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbHRlcjtcbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogeyBzOiBudWxsIH0sXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaEluTGlzdEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICggQXJyYXkuaXNBcnJheSh0aGlzLnVzZXJTZWFyY2hMaXN0KSApIHtcbiAgICAgIGNvbnN0IGxpc3RGb3VuZCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmluZCggKHgpID0+IHgubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZiAoIGxpc3RGb3VuZCApIHtcbiAgICAgICAgcmV0dXJuIGxpc3RGb3VuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuLy8gIFVwZGF0ZSBsaXN0IGl0ZW0gY29udGVudHMgd2l0aCBnaXZlbiBjb250ZW50IChTZWFyY2ggYnkgb2JqZWN0IG5hbWUgcHJvcGVydHkpXG4gIHB1YmxpYyB1cGRhdGVTYXZlZFNlYXJjaExpc3RJdGVtQnlOYW1lKCBuYW1lOiBzdHJpbmcsIG5ld0l0ZW06IGFueSApIHtcbiAgICBjb25zdCBpdGVtSW5MaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maW5kKCAoeCkgPT4geC5uYW1lID09PSBuYW1lICk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmluZGV4T2YoaXRlbUluTGlzdCk7XG4gICAgdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF0gPSBuZXdJdGVtO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF07XG4gIH1cblxuLy8gIFVwZGF0ZSBsaXN0IGl0ZW0gY29udGVudHMgd2l0aCBnaXZlbiBjb250ZW50IChTZWFyY2ggYnkgb2JqZWN0KVxuICBwdWJsaWMgdXBkYXRlU2F2ZWRTZWFyY2hMaXN0SXRlbUJ5T2JqZWN0KCBpdGVtSW5MaXN0OiBhbnksIG5ld0l0ZW06IGFueSApIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudXNlclNlYXJjaExpc3QuaW5kZXhPZihpdGVtSW5MaXN0KTtcbiAgICB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XSA9IG5ld0l0ZW07XG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XTtcbiAgfVxuXG4vLyAgRGVsZXRlIGxpc3QgaXRlbSBmcm9tIGxpc3RcbiAgcHVibGljIGRlbGV0ZUl0ZW1Gcm9tU2F2ZWRTZWFyY2hMaXN0QnlPYmplY3QoIGl0ZW1Jbkxpc3Q6IGFueSkge1xuICAgIHRoaXMudXNlclNlYXJjaExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gaXRlbUluTGlzdCk7XG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyID0ge307XG4gICAgdGhpcy5hZHZhbmNlZFNlYXJjaCh0cnVlKTtcbiAgICB0aGlzLnVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCk7XG4gIH1cblxuLy8gIFVzZXIgY2hvc2UgdG8gc2F2ZSBpdHMgYWR2YW5jZWQgZm9ybSBzZWFyY2ggY3JpdGVyaWFcbiAgcHVibGljIHNhdmVTZWFyY2goIHRlbXBsYXRlVG9Mb2FkOiBUZW1wbGF0ZVJlZjxhbnk+LCBuZXdMaXN0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnLm1vZGVsKSB7XG4vLyAgICAgIFNldCB0aGUgY29ycmVzcG9uZGluZyBrZXkgdG8gaXRzIGxpc3QgYW5kIHNob3cgYSBjb25maXJtYXRpb24gbW9kYWwgd2luZG93XG4gICAgICB0aGlzLnN0b3JhZ2VLZXkgPSBgdGFibGVzLyR7dGhpcy50YWJsZS5jb25maWcubW9kZWx9L3NlYXJjaGVzYDtcbiAgICAgIGlmICh0aGlzLmZpbHRlciAmJiBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcikubGVuZ3RoKSB7XG4vLyAgICAgIFVzZXIgd2FudHMgdG8gc2F2ZSBhbiBleGlzdGluZyBsaXN0IGZyb20gdGhlIGRyb3Bkb3duXG4gICAgICAgIGlmICggIW5ld0xpc3QgJiYgdGhpcy5zZWxlY3RlZExpc3QgKSB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgbmFtZSA6ICB0aGlzLnNlbGVjdGVkTGlzdC5uYW1lLCBmaWx0ZXIgOiB7IC4uLiB0aGlzLmZpbHRlciB9IH07XG4gICAgICAgICAgdGhpcy51cGRhdGVTYXZlZFNlYXJjaExpc3RJdGVtQnlPYmplY3QgKCB0aGlzLnNlbGVjdGVkTGlzdCwgbmV3SXRlbSApO1xuICAgICAgICAgIHRoaXMudXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKTtcbi8vICAgICAgVXNlciB3YW50cyB0byBzYXZlIGEgbmV3IGxpc3RcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGVUb0xvYWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuLy8gICAgICAgIFVzZXIgZGlkIG5vdCBkZWZpbmUgYW55IGNyaXRlcmlhXG4gICAgICAgIHRoaXMuX21vZGFsLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZScpLFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5FbXB0eUNyaXRlcmlhTGlzdCcpLFxuICAgICAgICAgIERJQUxPR19CVVRUT05TLk9rKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kYWwuc2hvd1dhcm5pbmdEaWFsb2coXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLlRpdGxlJyksXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLk5vTGlzdERlZmluZWQnKSxcbiAgICAgICAgICBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgfVxuICB9XG5cbi8vICBVc2VyIEFjY2VwdGVkID0+IFNhdmUgbGlzdCBhbmQgQ2xvc2UgbW9kYWxcbiAgcHVibGljIGNvbmZpcm1Nb2RhbCggc2F2ZUZvcm1OYW1lICk6IHZvaWQge1xuLy8gICAgbmFtZSBnaXZlbiBhbmQgbGlzdCBuYW1lIGlzIHVuaXF1ZVxuICAgIGlmICggc2F2ZUZvcm1OYW1lICYmICEodGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUoc2F2ZUZvcm1OYW1lKSkgKSB7XG4gICAgICBjb25zdCBuZXdJbnNlcnRlZFZhbHVlID0geyBuYW1lIDogIHNhdmVGb3JtTmFtZSwgZmlsdGVyIDogeyAuLi4gdGhpcy5maWx0ZXIgfSB9O1xuICAgICAgaWYgKCB0aGlzLnVzZXJTZWFyY2hMaXN0ICYmIHRoaXMudXNlclNlYXJjaExpc3QubGVuZ3RoICE9PSAwICkge1xuICAgICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0LnB1c2gobmV3SW5zZXJ0ZWRWYWx1ZSk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVZhbHVlID0gdGhpcy51c2VyU2VhcmNoTGlzdDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBuZXdJbnNlcnRlZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlVmFsdWUgPSBbbmV3SW5zZXJ0ZWRWYWx1ZV07XG4gICAgICAgIHRoaXMudXNlclNlYXJjaExpc3QgPSB0aGlzLnN0b3JhZ2VWYWx1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBuZXdJbnNlcnRlZFZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy51cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpO1xuICAgICAgaWYgKHRoaXMubW9kYWxSZWYpIHtcbiAgICAgICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICggc2F2ZUZvcm1OYW1lICYmICh0aGlzLnNlYXJjaEluTGlzdEJ5TmFtZShzYXZlRm9ybU5hbWUpKSApIHtcbi8vICAgICAgVXNlciBzaG91bGQgaW5zZXJ0IGEgZGlmZmVyZW50IG5hbWUgY2F1c2UgdGhpcyBvbmUgaXMgYWxyZWFkeSBpbiB1c2VcbiAgICAgIGFsZXJ0KHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZU9uTGlzdEFscmVhZHlDcmVhdGVkJykpO1xuICAgIH0gZWxzZSB7XG4vLyAgICAgIFVzZXIgZGlkIG5vdCBpbnNlcnQgYW55IHRleHRcbiAgICAgIGFsZXJ0KHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZU9uVXNlckVycm9yJykpO1xuICAgIH1cbiAgfVxuXG4vLyAgVXNlciBkZWNsaW5lZCA9PiBDbG9zZSBtb2RhbFxuICBwdWJsaWMgY2xvc2VNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xuICAgICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XG4gICAgfVxuICB9XG5cbi8vICBVcGxvYWQgdXNlcidzIGNyaXRlcmlhIG9uIFVzZXIgU3RvcmFnZVxuICBwdWJsaWMgdXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKSB7XG4gICAgdGhpcy5fdXNlclN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIHRoaXMudXNlclNlYXJjaExpc3QuZmlsdGVyKCh4KSA9PiB7XG4gICAgICByZXR1cm4gIXgucmVhZE9ubHk7XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQuIFVzZSBzZWFyY2goKSBtZXRob2QgaW5zdGVhZC5cbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXN5bmNBZHZhbmNlZFNlYXJjaChldmVudD86IGFueSkge1xuICAgIGlmICggdGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZyAmJiBBcnJheS5pc0FycmF5KHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCB0aGlzLmdldFF1ZXJ5KCk7XG4gICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBPYmplY3QuYXNzaWduKHsgcTogbnVsbCwgczogbnVsbCB9LCB0aGlzLmZpbHRlcik7XG4gICAgICAgIC8vIGVudW1lcmF0ZSBjcml0ZXJpYVxuICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgaXRlbS5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRhYmxlLnF1ZXJ5KSB7XG4gICAgICAgIHRoaXMudGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBxdWVyeS5nZXRQYXJhbXMoKVsnJGZpbHRlciddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFibGUucXVlcnkgPSBxdWVyeTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgICAgdGhpcy50YWJsZS5mZXRjaCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNBZHZhbmNlZFNlYXJjaCgpLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFF1ZXJ5KCkge1xuICAgIC8vIG9uIHNpbXBsZSBzZWFyY2ggcmV0dXJuIG51bGxcbiAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoIHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkpIHtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgdGhpcy5fYWR2YW5jZWRTZWFyY2hWYWx1ZVByb3ZpZGVyLmdldFZhbHVlcygpO1xuICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZmlsdGVyLCB4Lm5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgbmFtZUZpbHRlciA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZmlsdGVyW3gubmFtZV0pO1xuICAgICAgICAgIGlmIChuYW1lRmlsdGVyLmluY2x1ZGVzKCdHTVQnKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IHRoaXMudHJhbnNmb3JtRGF0ZSh0aGlzLmZpbHRlclt4Lm5hbWVdKTtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHguZmlsdGVyLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBuZXdEYXRlLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJbeC5uYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHguZmlsdGVyLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyW3gubmFtZV0sXG4gICAgICAgICAgICB9LCB2YWx1ZXMpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBxdWVyeTtcbiAgICAgIGlmIChleHByZXNzaW9ucyAmJiBleHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgLy8gY3JlYXRlIGNsaWVudCBxdWVyeVxuICAgICAgICBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy50YWJsZS5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgIHF1ZXJ5LnNldFBhcmFtKCdmaWx0ZXInLCBleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2goZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmFzeW5jQWR2YW5jZWRTZWFyY2goZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMgJiYgdGhpcy50YWJsZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBxOiBudWxsLCBzOiBudWxsIH07XG4gICAgICAgIC8vIGVudW1lcmF0ZSBjcml0ZXJpYVxuICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgaXRlbS5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgIHRoaXMuZmlsdGVyID0ge307XG4gICAgICAvLyBjbGVhciBsaXN0XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgICAvLyByYWlzZSBmaWx0ZXIgY2hhbmdlIGV2ZW50XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmlldyBzdGF0ZSBvZiBzZWFyY2ggY29udHJvbFxuICAgKi9cbiAgcHVibGljIGdldCB2aWV3U3RhdGUoKTogQWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWR2YW5jZWRWaWV3OiAhdGhpcy5jb2xsYXBzZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2hlcyB2aWV3IGJldHdlZW4gc2ltcGxlIGFuZCBhZHZhbmNlZCBzZWFyY2hcbiAgICovXG4gIHB1YmxpYyBhc3luYyB0b2dnbGVWaWV3KCkge1xuICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkO1xuICAgIC8vIGVtaXQgZXZlbnQgZm9yIHZpZXcgc3RhdHVzIGNoYW5nZVxuICAgIHRoaXMudmlld0NoYW5nZS5lbWl0KHRoaXMudmlld1N0YXRlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQWN0aW9uTGlua0Zvcm1hdHRlciwgQnV0dG9uRm9ybWF0dGVyLCBEYXRlVGltZUZvcm1hdHRlciwgTGFuZ3VhZ2VGb3JtYXR0ZXIsXG4gIExpbmtGb3JtYXR0ZXIsXG4gIE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyLCBOZ0NsYXNzRm9ybWF0dGVyLCBTZWxlY3RSb3dGb3JtYXR0ZXIsXG4gIFRlbXBsYXRlRm9ybWF0dGVyLCBUcmFuc2xhdGlvbkZvcm1hdHRlcixcbiAgVHJ1ZUZhbHNlRm9ybWF0dGVyLCBBY3Rpb25CdXR0b25Gb3JtYXR0ZXIsIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyLFxufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyB7XG4gIEFjdGlvbkxpbmtGb3JtYXR0ZXI/OiBBY3Rpb25MaW5rRm9ybWF0dGVyO1xuICBCdXR0b25Gb3JtYXR0ZXI/OiBCdXR0b25Gb3JtYXR0ZXI7XG4gIERhdGVUaW1lRm9ybWF0dGVyPzogRGF0ZVRpbWVGb3JtYXR0ZXI7XG4gIExhbmd1YWdlRm9ybWF0dGVyPzogTGFuZ3VhZ2VGb3JtYXR0ZXI7XG4gIExpbmtGb3JtYXR0ZXI/OiBMaW5rRm9ybWF0dGVyO1xuICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcj86IE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyO1xuICBOZ0NsYXNzRm9ybWF0dGVyPzogTmdDbGFzc0Zvcm1hdHRlcjtcbiAgU2VsZWN0Um93Rm9ybWF0dGVyPzogU2VsZWN0Um93Rm9ybWF0dGVyO1xuICBUZW1wbGF0ZUZvcm1hdHRlcj86IFRlbXBsYXRlRm9ybWF0dGVyO1xuICBUcmFuc2xhdGlvbkZvcm1hdHRlcj86IFRyYW5zbGF0aW9uRm9ybWF0dGVyO1xuICBUcnVlRmFsc2VGb3JtYXR0ZXI/OiBUcnVlRmFsc2VGb3JtYXR0ZXI7XG4gIEFjdGlvbkJ1dHRvbkZvcm1hdHRlcj86IEFjdGlvbkJ1dHRvbkZvcm1hdHRlcjtcbiAgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXI/OiBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcjtcbn1cbmV4cG9ydCBjb25zdCBGT1JNQVRURVJTOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMgPSB7XG4gICAgICBBY3Rpb25MaW5rRm9ybWF0dGVyOiBuZXcgQWN0aW9uTGlua0Zvcm1hdHRlcigpLFxuICAgICAgQnV0dG9uRm9ybWF0dGVyOiBuZXcgQnV0dG9uRm9ybWF0dGVyKCksXG4gICAgICBEYXRlVGltZUZvcm1hdHRlcjogbmV3IERhdGVUaW1lRm9ybWF0dGVyKCksXG4gICAgICBMYW5ndWFnZUZvcm1hdHRlcjogbmV3IExhbmd1YWdlRm9ybWF0dGVyKCksXG4gICAgICBMaW5rRm9ybWF0dGVyOiBuZXcgTGlua0Zvcm1hdHRlcigpLFxuICAgICAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI6IG5ldyBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcigpLFxuICAgICAgTmdDbGFzc0Zvcm1hdHRlcjogbmV3IE5nQ2xhc3NGb3JtYXR0ZXIoKSxcbiAgICAgIFNlbGVjdFJvd0Zvcm1hdHRlcjogbmV3IFNlbGVjdFJvd0Zvcm1hdHRlcigpLFxuICAgICAgVGVtcGxhdGVGb3JtYXR0ZXI6IG5ldyBUZW1wbGF0ZUZvcm1hdHRlcigpLFxuICAgICAgVHJhbnNsYXRpb25Gb3JtYXR0ZXI6IG5ldyBUcmFuc2xhdGlvbkZvcm1hdHRlcigpLFxuICAgICAgVHJ1ZUZhbHNlRm9ybWF0dGVyOiBuZXcgVHJ1ZUZhbHNlRm9ybWF0dGVyKCksXG4gICAgICBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI6IG5ldyBBY3Rpb25CdXR0b25Gb3JtYXR0ZXIoKSxcbiAgICAgIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyOiBuZXcgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXIoKSxcbn07XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICd0YWJsZS1zaW1wbGUtaGVhZGVyLXRvb2xzJyxcbiAgdGVtcGxhdGU6IGBcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxuICBzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIFNpbXBsZUhlYWRlclRvb2xzQ29tcG9uZW50IHtcbiAgLy9cbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtdGFibGUtc2ltcGxlLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1zaW1wbGUtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMudGFibGUpIHtcbiAgICAgIGlmIChjaGFuZ2VzLnRhYmxlLmN1cnJlbnRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFMb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgIGlmIChjaGFuZ2VzLnRhYmxlLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnRhYmxlLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbiA9IGNoYW5nZXMudGFibGUuY3VycmVudFZhbHVlLmxvYWQuc3Vic2NyaWJlKChkYXRhOiBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgcHVibGljIHJlY29yZHNUb3RhbD86IG51bWJlcjtcbiAgcHVibGljIGRhdGFMb2FkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vXG4gIH1cblxufVxuIiwiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLCBPdXRwdXQsIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ0FkdmFuY2VkIHRhYmxlIGNvbXBvbmVudCBjYW5ub3QgYmUgZW1wdHkgYXQgdGhpcyBjb250ZXh0LicpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoXG4ge1xuICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcbiAgIHNlbGVjdG9yOiAnW3RhYmxlRWRpdG9yXScsXG4gfSxcbilcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlRWRpdG9yRGlyZWN0aXZlIHtcblxuICBwdWJsaWMgZGlydHkgPSBmYWxzZTtcbiAgQE91dHB1dCgpIHB1YmxpYyBkaXJ0eUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWJsZTogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCkge1xuICAgIC8vXG4gIH1cblxuICAvKipcbiAgICogQWRkIHJvd3MgdG8gdGFibGUgYW5kIG1hcmsgdGhlbSBhcyBhZGRlZCByb3dzXG4gICAqL1xuICBwdWJsaWMgYWRkKC4uLmFkZEl0ZW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIGRlY29yYXRlIGl0ZW1zXG4gICAgY29uc3Qga2V5ID0gdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFkZEl0ZW1zKSB7XG4gICAgICBsZXQgdHIgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6aGFzKGlucHV0W2RhdGEtaWQ9XCInICsgZWxlbWVudFtrZXldICsgJ1wiXSknKS5ub2RlcygpLnRvJCgpO1xuICAgICAgaWYgKHRyLmhhc0NsYXNzKCdyZW1vdmVkJykpIHtcbiAgICAgICAgdHIudG9nZ2xlQ2xhc3MoJ3JlbW92ZWQgdGV4dC1ncmF5LTQwMCB0ZXh0LWRlY29yYXRpb24tbGluZS10aHJvdWdoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzLmFkZChbZWxlbWVudF0pO1xuICAgICAgICB0ciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpoYXMoaW5wdXRbZGF0YS1pZD1cIicgKyBlbGVtZW50W2tleV0gKyAnXCJdKScpLm5vZGVzKCkudG8kKCk7XG4gICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdhZGRlZCBmb250LXdlaWdodC1ib2xkIHRleHQtc3VjY2VzcycpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgLy8gZmluZCByZW1vdmVkXG4gICAgY29uc3QgcmVtb3ZlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5yZW1vdmVkJylbMF0ubGVuZ3RoO1xuICAgIC8vIGZpbmQgYWRkZWRcbiAgICBjb25zdCBhZGRlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpWzBdLmxlbmd0aDtcbiAgICAvLyBhbmQgZW1pdCBldmVudFxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICBkYXRhOiBpdGVtcyxcbiAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICB9KTtcbiAgICB0aGlzLmRpcnR5ID0gKHJlbW92ZWRMZW5ndGggPiAwIHx8IGFkZGVkTGVuZ3RoID4gMCk7XG4gICAgdGhpcy5kaXJ0eUNoYW5nZS5lbWl0KHRoaXMuZGlydHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHJvd3MgYXMgcmVtb3ZlZCByb3dzXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKC4uLnJlbW92ZUl0ZW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIGdldCBrZXlcbiAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ubmFtZSB8fCAnJztcbiAgICAvLyBsb29wIGl0ZW1zXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHJlbW92ZUl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOmhhcyhpbnB1dFtkYXRhLWlkPVwiJyArIGVsZW1lbnRba2V5XSArICdcIl0pJykubm9kZXMoKS50byQoKTtcbiAgICAgICAgLy8gaWYgcm93IGlzIG1hcmtlZCBhcyBhZGRlZFxuICAgICAgICBpZiAodHIuaGFzQ2xhc3MoJ2FkZGVkJykpIHtcbiAgICAgICAgICAvLyByZW1vdmUgdGhpcyBkaXJ0eSByb3dcbiAgICAgICAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKHRyKS5yZW1vdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UgdW5tYXJrZWQgcm93XG4gICAgICAgICAgdHIudG9nZ2xlQ2xhc3MoJ3JlbW92ZWQgdGV4dC1ncmF5LTQwMCB0ZXh0LWRlY29yYXRpb24tbGluZS10aHJvdWdoJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgaWYgaXRlbSBpcyBzZWxlY3RlZFxuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy50YWJsZS5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBlbGVtZW50W2tleV07XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgcmVtb3ZlIGl0IGZyb20gc2VsZWN0ZWQgY29sbGVjdGlvblxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgdGhpcy50YWJsZS5zZWxlY3RlZC5zcGxpY2Uoc2VsZWN0ZWRJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHJlLWRyYXcgdGFibGVcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgICAvLyBnZXQgbnVtYmVyIG9mIHRhYmxlIGl0ZW1zXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpO1xuICAgICAgLy8gZ2V0IG51bWJlciBvZiByZW1vdmVkIGl0ZW1zXG4gICAgY29uc3QgcmVtb3ZlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5yZW1vdmVkJylbMF0ubGVuZ3RoO1xuICAgICAgLy8gZ2V0IG51bWJlciBvZiBhZGRlZCBpdGVtc1xuICAgIGNvbnN0IGFkZGVkTGVuZ3RoID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLmFkZGVkJylbMF0ubGVuZ3RoO1xuICAgICAgLy8gcmVmcmVzaFxuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgICAgZGF0YTogaXRlbXMsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy5sZW5ndGggLSByZW1vdmVkTGVuZ3RoLFxuICAgICAgfSk7XG4gICAgdGhpcy5kaXJ0eSA9IChyZW1vdmVkTGVuZ3RoID4gMCB8fCBhZGRlZExlbmd0aCA+IDApO1xuICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQoaXRlbXM6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgcm93c1xuICAgIHRoaXMudGFibGUuc2VsZWN0ZWQgPSBbXTtcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5jbGVhcigpO1xuICAgIC8vIHNldCBpdGVtc1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MuYWRkKGl0ZW1zKS5kcmF3KCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuZG8gY2hhbmdlc1xuICAgKi9cbiAgcHVibGljIHVuZG8oKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgLy8gcmVzZXQgcmVtb3ZlZCByb3dzXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLnJlbW92ZWQnKS5ub2RlcygpLnRvJCgpLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgIC8vIHJlbW92ZSBhZGRlZCByb3dzXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLmFkZGVkJykucmVtb3ZlKCk7XG4gICAgLy8gY2xlYXIgc2VsZWN0ZWQgaXRlbXNcbiAgICB0aGlzLnRhYmxlLnNlbGVjdGVkID0gW107XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpO1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICBkYXRhOiBpdGVtcyxcbiAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoLFxuICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy5sZW5ndGgsXG4gICAgfSk7XG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyByb3dzKCkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpub3QoLnJlbW92ZWQpJykuZGF0YSgpKTtcbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IFRlbXBsYXRlUGlwZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGVcbiAgKSB7IH1cblxuICAvKipcbiAgICpcbiAgICogRm9ybWF0cyBhbmQgZXhlY3V0ZXMgdGhlIGRhdGEgcXVlcnlcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsIFRoZSB0YXJnZXQgbW9kZWxcbiAgICogQHBhcmFtIGZpeGVkUGFyYW1zIFBhaXJzIG9mIHBhcmFtZXRlcnMgdG8gYWx3YXlzIGJlIGFwcGxpZWRcbiAgICogQHBhcmFtIHF1ZXJ5U3RhdGVtZW50IFRoZSBkZWZhdWx0IHF1ZXJ5IHRvIHVzZSBmb3IgZmV0Y2hpbmcgdGhlIGRhdGEgKGUuZy4gZXhwYW5kcyBldGMpXG4gICAqIEBwYXJhbSBmaWx0ZXJzIEEgbGlzdCBvZiBmaWx0ZXIgZXhwcmVzc2lvbnMgdG8gYXBwZW5kIGF0IHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gc2VhcmNoVGVtcGxhdGUgVGhlIHRlbXBsYXRlIHRvIHVzZSBmb3Igc2VhcmNoaW5nIGV4cHJlc3Npb25zXG4gICAqIEBwYXJhbSBzZWFyY2hWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHVzZXIgc2VhcmNoXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBvZiB0aGUgcXVlcnkgZXhlY3V0aW9uXG4gICAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIGFzeW5jIGZldGNoRGF0YShtb2RlbDogc3RyaW5nLCBmaXhlZFBhcmFtczogb2JqZWN0LCBxdWVyeVN0YXRlbWVudDogc3RyaW5nID0gJycsIGZpbHRlcnM6IHN0cmluZ1tdLCBzZWFyY2hUZW1wbGF0ZT86IHN0cmluZywgc2VhcmNoVmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbChtb2RlbCkuYXNRdWVyeWFibGUoKTtcblxuICAgIGlmICghZml4ZWRQYXJhbXMgfHwgdHlwZW9mIGZpeGVkUGFyYW1zICE9PSAnb2JqZWN0Jykge1xuICAgICAgZml4ZWRQYXJhbXMgPSB7fTtcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyRXhwcmVzc2lvbnM6IGFueVtdID0gW107XG5cbiAgICBpZiAoZml4ZWRQYXJhbXMpIHtcbiAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgT2JqZWN0LmtleXMoZml4ZWRQYXJhbXMpKSB7XG4gICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnB1c2goYCR7cGFyYW19IGVxICR7Zml4ZWRQYXJhbXNbcGFyYW1dfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycykpIHtcbiAgICAgIGZpbHRlckV4cHJlc3Npb25zID0gW1xuICAgICAgICAuLi5maWx0ZXJFeHByZXNzaW9ucyxcbiAgICAgICAgLi4uZmlsdGVyc1xuICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoVGVtcGxhdGUgJiYgc2VhcmNoVmFsdWUpIHtcbiAgICAgIGxldCBldmFsdWF0ZWRTZWFyY2g7XG4gICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFZhbHVlKSkgeyAvLyB2YWxpZGF0ZSBzZWFyY2ggdGV4dCBpbiBkb3VibGUgcXVvdGVzXG4gICAgICAgIGV2YWx1YXRlZFNlYXJjaCA9IHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShzZWFyY2hUZW1wbGF0ZSwge1xuICAgICAgICAgIC4uLmZpeGVkUGFyYW1zLFxuICAgICAgICAgIHRleHQ6IHNlYXJjaFZhbHVlLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHJ5IHRvIHNwbGl0IHdvcmRzXG4gICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgICAgLy8gam9pbiB3b3JkcyB0byBhIHNpbmdsZSBmaWx0ZXJcbiAgICAgICAgZXZhbHVhdGVkU2VhcmNoID0gd29yZHMubWFwKHdvcmQgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oc2VhcmNoVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIC4uLmZpeGVkUGFyYW1zLFxuICAgICAgICAgICAgdGV4dDogd29yZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KS5qb2luKCcgYW5kICcpO1xuXG4gICAgICB9XG4gICAgICBmaWx0ZXJFeHByZXNzaW9ucy5wdXNoKGV2YWx1YXRlZFNlYXJjaCk7XG4gICAgfVxuXG4gICAgcXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXJFeHByZXNzaW9ucy5qb2luKCdhbmQnKSk7XG4gICAgcmV0dXJuIHF1ZXJ5LmV4cGFuZChxdWVyeVN0YXRlbWVudCkudGFrZSgtMSkuZ2V0SXRlbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBGb3JtYXRzIHRoZSByZWNlaXZlZCBkYXRhIHRvIHVzZSBmbGF0IGtleXNcbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgYXBwbGllZCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBkYXRhIFRoZSByYXcgZGF0YVxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZmxhdC1rZXkgb2JqZWN0IGxpc3RcbiAgICpcbiAgICovXG4gIGZvcm1hdERhdGEoY29uZmlnLCBkYXRhKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkYXRhLm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgaWYgKGVudHJ5LnN1Yml0ZW1zICYmIEFycmF5LmlzQXJyYXkoZW50cnkuc3ViaXRlbXMpKSB7XG4gICAgICAgICAgZW50cnkuc3ViaXRlbXMgPSB0aGlzLmZvcm1hdERhdGEoY29uZmlnLCBlbnRyeS5zdWJpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW50cnlPYmplY3QgPSB7fSBhcyBhbnk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gY29uZmlnLmNvbHVtbnNbaV0ubmFtZS5zcGxpdCgnLycpO1xuICAgICAgICAgIGxldCBoZWxwZXJPYmplY3QgPSBlbnRyeVtrZXlzWzBdXTtcblxuICAgICAgICAgIGlmIChoZWxwZXJPYmplY3QgJiYga2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoaGVscGVyT2JqZWN0ID09PSB1bmRlZmluZWQgfHwgaGVscGVyT2JqZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaGVscGVyT2JqZWN0ID0gaGVscGVyT2JqZWN0W2tleXNbaV1dICE9PSB1bmRlZmluZWQgJiYgaGVscGVyT2JqZWN0W2tleXNbaV1dICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IGhlbHBlck9iamVjdFtrZXlzW2ldXVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbnRyeU9iamVjdFtjb25maWcuY29sdW1uc1tpXS5uYW1lXSA9IGhlbHBlck9iamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS5zdWJpdGVtcykge1xuICAgICAgICAgIGVudHJ5T2JqZWN0LnN1Yml0ZW1zID0gZW50cnkuc3ViaXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW50cnlPYmplY3Q7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWR2YW5jZWQtYWdncmVnYXRvci9hZHZhbmNlZC1hZ2dyZWdhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnLCBBZHZhbmNlZEFnZ3JlZ2F0b3JGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vYWR2YW5jZWQtYWdncmVnYXRvcic7XG5pbXBvcnQgeyBMb2FkaW5nU2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuLyoqXG4gKlxuICogXG4gKiAgQGNsYXNzZGVzYyBBbiBhZHZhbmNlZCBsaXN0IHdpdGggdGhlIGNhcGFiaWxpdHkgb2YgYWdncmVnYXRlIGRhdGEgYmFzZWQgb24gY29uZmlndXJhYmxlIGZpbHRlcnNcbiAqXG4gKi9cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtYWdncmVnYXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1hZ2dyZWdhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9jb25maWc/OiBBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWc7XG4gIHByaXZhdGUgX2FnZ3JlZ2F0b3JzO1xuICBwcml2YXRlIF9wb3N0UHJvY2Vzc29ycztcblxuICBwdWJsaWMgYm9keTtcbiAgcHVibGljIGdyb3VwczogYW55W10gPSBbXTtcblxuICBASW5wdXQoJ2NvbmZpZycpXG4gIHB1YmxpYyBzZXQgY29uZmlnKHZhbHVlOiBBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgnYWdncmVnYXRvcnMnKVxuICBwdWJsaWMgc2V0IGFnZ3JlZ2F0b3JzKHZhbHVlKSB7XG4gICAgdGhpcy5fYWdncmVnYXRvcnMgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgncG9zdFByb2Nlc3NvcnMnKVxuICBwdWJsaWMgc2V0IHBvc3RQcm9jZXNzb3JzKHZhbHVlKSB7XG4gICAgdGhpcy5fcG9zdFByb2Nlc3NvcnMgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgncGFyYW1zJykgcGFyYW1zO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnc2VsZWN0ZWRHcm91cHMnKSBzZWxlY3RlZEdyb3VwcyQ7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdmaWx0ZXJzJykgZmlsdGVycyQ7XG4gIEBJbnB1dCgnc2VhcmNoRXhwcmVzc2lvbicpIHNlYXJjaEV4cHJlc3Npb24/OiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIGV2ZW50SGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfYWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZTogQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2VcbiAgKSB7IH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIEFkdmFuY2VkQWdncmVnYXRvckNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWdncmVnYXRvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0b3JzO1xuICB9XG5cbiAgcHVibGljIGdldCBwb3N0UHJvY2Vzc29ycygpIHtcbiAgICByZXR1cm4gdGhpcy5fcG9zdFByb2Nlc3NvcnM7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBzJC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBzID0gZGF0YTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5maWx0ZXJzJC5zdWJzY3JpYmUoYXN5bmMgKGZpbHRlcnM6IEFkdmFuY2VkQWdncmVnYXRvckZpbHRlcnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmV0Y2goZmlsdGVycyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwcyQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZpbHRlcnMkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogUmV0cmlldmVzIHRoZSBkYXRhXG4gICAqXG4gICAqL1xuICBhc3luYyBmZXRjaChmaWx0ZXJzOiBBZHZhbmNlZEFnZ3JlZ2F0b3JGaWx0ZXJzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuX2FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UuZmV0Y2hEYXRhKHRoaXMuY29uZmlnLm1vZGVsLFxuICAgICAgICB0aGlzLnBhcmFtcyxcbiAgICAgICAgdGhpcy5jb25maWcucXVlcnksXG4gICAgICAgIGZpbHRlcnMuZmlsdGVycyxcbiAgICAgICAgdGhpcy5zZWFyY2hFeHByZXNzaW9uLFxuICAgICAgICBmaWx0ZXJzLnRleHRcbiAgICAgICk7XG5cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIGlmICh0aGlzLnBvc3RQcm9jZXNzb3JzICYmIE9iamVjdC5rZXlzKHRoaXMucG9zdFByb2Nlc3NvcnMpLmxlbmd0aCA+IDAgJiYgdGhpcy5jb25maWcucG9zdFByb2Nlc3NvcnMgJiYgdGhpcy5jb25maWcucG9zdFByb2Nlc3NvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMucG9zdFByb2Nlc3NvcnNbdGhpcy5jb25maWcucG9zdFByb2Nlc3NvcnNbaV0ubmFtZV0oZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5ib2R5ID0gdGhpcy5fYWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZS5mb3JtYXREYXRhKHRoaXMuY29uZmlnLCBkYXRhKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBUcmlnZ2VycyB0aGUgZXZlbnQgaGFuZGxlciBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IGRhdGFcbiAgICpcbiAgICovXG4gIG9uQWN0aW9uRXZlbnQoZXZlbnQpIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0KGV2ZW50KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbmVudW0gTGVuZ3RocyB7XG4gIFhMPSAneGwnLFxuICBMRz0gJ2xnJyxcbiAgTUQ9ICdtZCcsXG4gIFNNPSAnc20nLFxuICBYUz0gJ3hzJ1xufVxuXG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0FkdmFuY2VkQWdncmVnYXRvckNvbmZpZ30gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0byB1c2VcbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZzogYW55O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0FycmF5PEFycmF5PGFueT4+fSBib2R5IFRoZSBsaXN0IG9mIGRhdGEgZW50cmllcyB0byBzaG93IGFzIHRoZSBsaXN0IGJvZHlcbiAgICovXG4gIEBJbnB1dCgpIGJvZHk7XG5cbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKHggPT4ge1xuICAgICAgeC5sZW5ndGggPSBPYmplY3QudmFsdWVzKExlbmd0aHMpLmluY2x1ZGVzKHgubGVuZ3RoKSA/IHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShgc2lzLS1saXN0LWdyb3VwLWl0ZW1fJHt4Lmxlbmd0aH1fY29sdW1uYCwgeCApIDpcbiAgICAgICAgIXgubGVuZ3RoID8gJ3Npcy0tbGlzdC1ncm91cC1pdGVtX3NtX2NvbHVtbicgOiB4Lmxlbmd0aCA7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVHJpZ2dlcnMgdGhlIG91dHB1dCBldmVudCBlbWl0dGVyXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCBhcyBpdCdzIGRlY2xhcmVkIGluIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBpdGVtIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBpdGVtXG4gICAqIH1cbiAgICovXG4gIGNhbGxDYWxsYmFjayh0eXBlOiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KHtcbiAgICAgIHR5cGUsXG4gICAgICBkYXRhXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlck1vZGFsT2tDYW5jZWx9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uL3JvdXRpbmcnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50fSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS1tb2RhbC9hZHZhbmNlZC10YWJsZS1tb2RhbC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge0FkdmFuY2VkRm9ybUNvbXBvbmVudH0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQge0xvYWRpbmdTZXJ2aWNlLCBNb2RhbFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWRkLWl0ZW1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1pdGVtcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWRkSXRlbXNDb21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gIHB1YmxpYyBsYXN0RXJyb3I7XG4gIEBJbnB1dCgpIGV4ZWN1dGU/OiBPYnNlcnZhYmxlPGFueT47XG4gIEBJbnB1dCgpIGl0ZW1zOiBBcnJheTxhbnk+ID0gW107XG4gIEBJbnB1dCgpIHRhcmdldDogYW55O1xuICAvLyBASW5wdXQoKSBzZWxlY3RlZDogYW55O1xuICBASW5wdXQoKSB0YWJsZUNvbmZpZ3VyYXRpb246IGFueTtcbiAgQElucHV0KCkgZm9ybU5hbWU6IGFueTtcbiAgQElucHV0KCkgbWVzc2FnZXM6IEFycmF5PGFueT4gPSBbXTtcbiAgQFZpZXdDaGlsZCgnZm9ybUNvbXBvbmVudCcpIGZvcm1Db21wb25lbnQ/OiBBZHZhbmNlZEZvcm1Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdENvbXBvbmVudCcpIHNlbGVjdENvbXBvbmVudD86IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQ7XG4gIHByaXZhdGUgZm9ybUxvYWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZm9ybUNoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBzZWxlY3RlZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlKSB7XG4gICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgLy8gc2V0IG1vZGFsIHNpemVcbiAgICB0aGlzLm1vZGFsQ2xhc3MgPSAnbW9kYWwtbGcnO1xuICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RDb21wb25lbnQgJiYgdGhpcy5zZWxlY3RDb21wb25lbnQuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VsZWN0Q29tcG9uZW50LmFkdmFuY2VkVGFibGUuc2VsZWN0ZWRJdGVtcy5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1OYW1lID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSBpdGVtcy5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtTmFtZSAhPSBudWxsICYmIHRoaXMuZm9ybUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5mb3JtQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uY2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV2ZW50LCAnaXNWYWxpZCcpKSB7XG4gICAgICAgICAgLy8gZW5hYmxlIG9yIGRpc2FibGUgYnV0dG9uIGJhc2VkIG9uIGZvcm0gc3RhdHVzXG4gICAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gKCFldmVudC5pc1ZhbGlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldDtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLmNsZWFyTWVzc2FnZXMoKTtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIC8vIGNsb3NlXG4gICAgaWYgKHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZi5oaWRlKCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Mb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZvcm1Mb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm1DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gICAgLy8gZ2V0IGZvcm0gZGF0YVxuICBwcml2YXRlIGV4ZWN1dGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGdldCBmb3JtRGF0YSgpOiBhbnkge1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQgJiYgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvLmRhdGE7XG4gICAgfVxuXG4gICAgb2soKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2xlYXJNZXNzYWdlcygpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RDb21wb25lbnQgPT0gbnVsbCB8fCB0aGlzLnNlbGVjdENvbXBvbmVudC5hZHZhbmNlZFRhYmxlID09IG51bGwgfHwgdGhpcy5leGVjdXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgLy8gc2V0IGNvdXJzZXNcbiAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZWxlY3RDb21wb25lbnQuYWR2YW5jZWRUYWJsZS5zZWxlY3RlZDtcbiAgICAgICAgICAvLyBleGVjdXRlIGFkZFxuICAgICAgICAgIHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZXhlY3V0ZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2xvc2UgbW9kYWxcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgICAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gZW5zdXJlIHRoYXQgbG9hZGluZyBpcyBoaWRkZW5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLmhpZGVMb2FkaW5nKCk7XG4gICAgICAgICAgICAvLyBzZXQgbGFzdCBlcnJvclxuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UuaGlkZUxvYWRpbmcoKTtcbiAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlKCRldmVudDogYW55KSB7fVxuXG4gIGNsZWFyTWVzc2FnZXMoKSB7XG4gICAgdGhpcy5tZXNzYWdlcyA9IFtdO1xuICB9XG5cbiAgb25GaWx0ZXJDaGFuZ2UoZXZlbnQ6ICB7IG5hbWU6IHN0cmluZywgZW1pdDogYm9vbGVhbiB9KSB7fVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqXG4gKlxuICogQGNsYXNzZGVzYyBHaXZlbiBhIGxpc3Qgb2YgaXRlbXMgcnVucyBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBhZ2FpbnN0IHRoYXQgbGlzdFxuICpcbiAqL1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdjYWxsQWdncmVnYXRvcidcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRBZ2dyZWdhdG9yUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIC8qKlxuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIGl0ZW1zIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIHJ1biB0aGUgYWdncmVnYXRvciBhZ2FpbnN0XG4gICAqIEBwYXJhbSBmdW5jdGlvblBvb2wgVGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgbGlzdCBjYWxsZXJcbiAgICogQHBhcmFtIGZ1bmN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBzaG93IGF0IHRoZSBVSVxuICAgKlxuICAgKi9cbiAgdHJhbnNmb3JtKGl0ZW1zOiBhbnlbXSwgZnVuY3Rpb25Qb29sOiBhbnksIGZ1bmN0aW9uTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykgJiYgZnVuY3Rpb25OYW1lICYmIGZ1bmN0aW9uTmFtZSBpbiBmdW5jdGlvblBvb2wpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvblBvb2xbZnVuY3Rpb25OYW1lXShpdGVtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbi8qKlxuICpcbiAqIFxuICogQGNsYXNzZGVzYyBHaXZlbiBhIHRpdGxlIG9mIGFuIGFnZ3JlZ2F0b3IgbGlzdCwgdHJhbnNsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSBwYXJhbWV0ZXIgaWYgYW55XG4gKlxuICovXG5cbkBQaXBlKHtcbiAgbmFtZTogJ2FnZ3JlZ2F0b3JMaXN0VGl0bGUnXG59KVxuZXhwb3J0IGNsYXNzIFBhcnNlVGl0bGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIG9mIHRoZSBsaXN0XG4gICAqIEBwYXJhbSBrZXkgVGhlIGN1cnJlbnQgbGlzdCBrZXkgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAqXG4gICAqL1xuICB0cmFuc2Zvcm0odGl0bGU6IHN0cmluZywga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCB8fCBrZXkgPT09ICd1bmRlZmluZWQnIHx8IGtleSA9PT0gJ251bGwnKSB7XG4gICAgICAgIGtleSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLk5vdERlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aXRsZS5zcGxpdCgnICcpXG4gICAgICAgIC5tYXAoKHBhcnQpID0+IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChwYXJ0KSlcbiAgICAgICAgLm1hcCgocGFydCkgPT4gcGFydC5yZXBsYWNlKCcke3BhcmFtfScsIGtleSkpXG4gICAgICAgIC5qb2luKCcgJyk7XG4gICAgfVxuICB9XG59XG4iLCIvLyB0c2xpbnQ6ZGlzYWJsZTogcXVvdGVtYXJrXG4vLyB0c2xpbnQ6ZGlzYWJsZTogbWF4LWxpbmUtbGVuZ3RoXG5leHBvcnQgY29uc3QgVEFCTEVTX0VMID0ge1xuICAgIFwiVGFibGVzXCI6IHtcbiAgICAgICAgXCJFeHBvcnRcIjogXCLOlc6+zrHOs8+JzrPOrlwiLFxuICAgICAgICBcIk1vcmVcIjogXCLOoM61z4HOuc+Dz4PPjM+EzrXPgc6xXCIsXG4gICAgICAgIFwiU2VhcmNoXCI6IFwizpHOvc6xzrbOrs+EzrfPg863XCIsXG4gICAgICAgIFwiU2VhcmNoUGxhY2Vob2xkZXJcIjogXCLOkc69zrHOts6uz4TOt8+DzrcuLi5cIixcbiAgICAgICAgXCJHcm91cEJ5XCI6IFwizp/OvM6xzrTOv8+Azr/Or863z4POtyDOsc69zqxcIixcbiAgICAgICAgXCJOb3REZWZpbmVkXCI6IFwizpzOtyDPgM+Bzr/Pg860zrnOv8+BzrnPg868zq3Ovc6/XCIsXG4gICAgICAgIFwiRGF0YVRhYmxlXCI6IHtcbiAgICAgICAgICAgIFwicGFnaW5hdGVcIjoge1xuICAgICAgICAgICAgICAgIFwiZmlyc3RcIjogXCLOoM+Bz47PhM63IM+DzrXOu86vzrTOsVwiLFxuICAgICAgICAgICAgICAgIFwibGFzdFwiOiBcIs6kzrXOu861z4TOsc6vzrEgz4POtc67zq/OtM6xXCIsXG4gICAgICAgICAgICAgICAgXCJuZXh0XCI6IFwizpXPgM+MzrzOtc69zrdcIixcbiAgICAgICAgICAgICAgICBcInByZXZpb3VzXCI6IFwizqDPgc6/zrfOs86/z43OvM61zr3Ot1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJpbmZvXCI6IFwizpXOvM+GzqzOvc65z4POtyBfU1RBUlRfIM6tz4nPgiBfRU5EXyDOsc+Az4wgX1RPVEFMXyDOtc6zzrPPgc6xz4bOrc+CXCIsXG4gICAgICAgICAgICBcImluZm9FbXB0eVwiOiBcIs6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM61zrPOs8+BzrHPhs6tz4JcIixcbiAgICAgICAgICAgIFwibG9hZGluZ1wiOiBcIs6VzrzPhs6szr3Ouc+DzrcgzrTOtc60zr/OvM6tzr3Pic69Li4uXCIsXG4gICAgICAgICAgICBcInByb2Nlc3NpbmdcIjogXCLOoM6xz4HOsc67zrHOss6uIM60zrXOtM6/zrzOrc69z4nOvS4uLlwiLFxuICAgICAgICAgICAgXCJlbXB0eVRhYmxlXCI6IFwizpTOtc69IM6yz4HOrc64zrfOus6xzr0gzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xLlwiXG4gICAgICAgIH0sXG4gICAgICBcIkNvbHVtbkRpc3BsYXlcIjogXCLOlc+AzrnOu86/zrPOriDOlc68z4bOrM69zrnPg863z4Igz4PPhM63zrvPjs69XCIsXG4gICAgICBcIkNvbHVtbkRpc3BsYXlJbmZvXCI6IFwizpXPgM65zrvOrc6+z4TOtSDPhM65z4Igz4PPhM6uzrvOtc+CIM+Azr/PhSDOuM6tzrvOtc+EzrUgzr3OsSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkuXCIsXG4gICAgICBcIlNhdmVcIjogXCLOlc+GzrHPgc68zr/Os86uXCIsXG4gICAgICBcIkFwcGx5XCI6IFwizpXPhs6xz4HOvM6/zrPOrlwiLFxuICAgICAgXCJDYW5jZWxcIjogXCLOkc66z43Pgc+Jz4POt1wiLFxuICAgICAgXCJSZWNvcmRzUGVyUGFnZVwiOiBcIs6VzrPOs8+BzrHPhs6tz4IgzrHOvc6sIM+DzrXOu86vzrTOsVwiLFxuICAgICAgXCJQYWdlSW5mb1wiOiBcInt7c3RhcnR9fS17e2VuZH19IM6xz4DPjCB7e3JlY29yZHNUb3RhbH19XCIsXG4gICAgICBcIlNlYXJjaExpc3RQbGFjZWhvbGRlclwiOiBcIs6Rzr3Osc62zrfPhM6uz4PPhM61IM+Dz4TOtyDOu86vz4PPhM6xLi4uXCIsXG4gICAgICBcIkZpbHRlcnNcIjogXCLOps6vzrvPhM+BzrFcIixcbiAgICAgIFwiQWxsXCI6IFwizozOu86xXCIsXG4gICAgICAgIFwiQWRkSXRlbVwiOiBcIs6gz4HOv8+DzrjOrs66zrcgz4PPhM6/zrnPh861zq/Ov8+FXCIsXG4gICAgICAgIFwiRW1wdHlUYWJsZVRpdGxlXCI6IFwizpTOtc69IM6yz4HOrc64zrfOus6xzr0gzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xLlwiLFxuICAgICAgICBcIkVtcHR5VGFibGVNZXNzYWdlXCI6IFwizqDPgc6/z4PPgM6xzrjOrs+Dz4TOtSDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg861z4TOtSDOrM67zrvOtc+CIM67zq3Ovs61zrnPgiDOus67zrXOuc60zrnOrC5cIixcbiAgICAgICAgXCJSZW1vdmVJdGVtXCI6IFwizpTOuc6xzrPPgc6xz4bOriDPg8+Ezr/Ouc+HzrXOr86/z4VcIixcbiAgICAgICAgXCJJdGVtc1wiOiBcIs+Dz4TOv865z4fOtc6vzrFcIixcbiAgICAgICAgXCJJdGVtXCI6IFwiz4PPhM6/zrnPh861zq/Ov1wiLFxuICAgICAgICBcIkFkZEl0ZW1NZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCLOoM+Bzr/Pg864zq7Ous63IM+Dz4TOv865z4fOtc6vz4nOvVwiLFxuICAgICAgICAgICAgXCJvbmVcIjogXCLOiM69zrEgzr3Orc6/IM+Dz4TOv865z4fOtc6vzr8gz4DPgc6/z4PPhM6tzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiLFxuICAgICAgICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IM69zq3OsSDPg8+Ezr/Ouc+HzrXOr86xIM+Az4HOv8+Dz4TOrc64zrfOus6xzr0gzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgXCJSZW1vdmVJdGVtTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IFwizpHPhs6xzq/Pgc61z4POtyDPg8+Ezr/Ouc+HzrXOr8+Jzr1cIixcbiAgICAgICAgICAgIFwib25lXCI6IFwizojOvc6xIM+Dz4TOv865z4fOtc6vzr8gzrHPhs6xzrnPgc6tzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiLFxuICAgICAgICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IM+Dz4TOv865z4fOtc6vzrEgzrHPhs6xzrnPgc6tzrjOt866zrHOvSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJSZW1vdmVJdGVtc1RpdGxlXCI6IFwizpTOuc6xzrPPgc6xz4bOriDPg8+Ezr/Ouc+HzrXOr86/z4VcIixcbiAgICAgICAgXCJSZW1vdmVJdGVtc01lc3NhZ2VcIjogXCLOoM+Bz4zOus61zrnPhM6xzrkgzr3OsSDOtM65zrHOs8+BzqzPiM61z4TOtSDOrc69zrEgzq4gz4DOtc+BzrnPg8+Dz4zPhM61z4HOsSDPg8+Ezr/Ouc+HzrXOr86xLiDOmM6tzrvOtc+EzrUgzr3OsSDPgM+Bzr/Ph8+Jz4HOrs+DzrXPhM61P1wiLFxuICAgICAgICBcIlNlbGVjdEFsbFwiOiBcIs6Vz4DOuc67zr/Os86uIM+MzrvPic69XCIsXG4gICAgICAgIFwiQ2xlYXJTZWxlY3Rpb25cIjogXCLOkc69zrHOr8+BzrXPg863IM61z4DOuc67zr/Os86uz4JcIixcbiAgICAgIFwiQWN0aW9uc1wiOiB7XG4gICAgICAgIFwiTGFiZWxcIjogXCLOlc+AzrXOvs61z4HOs86xz4POr86xXCIsXG4gICAgICAgIFwiU3RhcnRcIjogXCLOiM69zrHPgc6+zrdcIixcbiAgICAgICAgXCJBY3Rpb25NZXNzYWdlXCI6IHtcbiAgICAgICAgICBcIk5vbmVcIjogXCLOlM61zr0gzq3Ph861z4TOtSDOtc+AzrnOu86tzr7Otc65IM66zrHOvc6tzr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM+Azr/PhSDOvc6xIM6xzrrOv867zr/Phc64zrXOryDPhM65z4Igz4DPgc6/z4vPgM6/zrjOrc+DzrXOuc+CIM+EzrfPgiDOtc69zq3Pgc6zzrXOuc6xz4IuXCIsXG4gICAgICAgICAgXCJPbmVcIjogXCLOiM+HzrXPhM61IM61z4DOuc67zq3Ovs61zrkgzq3Ovc6xIM+Dz4TOv865z4fOtc6vzr8gz4DOv8+FIM6xzrrOv867zr/Phc64zrXOryDPhM65z4Igz4DPgc6/z4vPgM6/zrjOrc+DzrXOuc+CIM+EzrfPgiDOtc69zq3Pgc6zzrXOuc6xz4IuIM6gzrHPhM6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gzojOvc6xz4HOvs63IM6zzrnOsSDOvc6xIM6+zrXOus65zr3Ors+DzrXOuSDOtyDOtM65zrHOtM65zrrOsc+Dzq/OsS5cIixcbiAgICAgICAgICBcIk1hbnlcIjogXCLOiM+HzrXPhM61IM61z4DOuc67zq3Ovs61zrkge3tsZW5ndGh9fSDPg8+Ezr/Ouc+HzrXOr86xIM+Azr/PhSDOsc66zr/Ou86/z4XOuM6/z43OvSDPhM65z4Igz4DPgc6/z4vPgM6/zrjOrc+DzrXOuc+CIM+EzrfPgiDOtc69zq3Pgc6zzrXOuc6xz4IuIM6gzrHPhM6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gzojOvc6xz4HOvs63IM6zzrnOsSDOvc6xIM6+zrXOus65zr3Ors+DzrXOuSDOtyDOtM65zrHOtM65zrrOsc+Dzq/OsS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIkNvbXBsZXRlZFdpdGhFcnJvcnNcIjoge1xuICAgICAgICAgIFwiVGl0bGVcIjogXCLOlyDOtM65zrHOtM65zrrOsc+Dzq/OsSDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSDPg8+GzqzOu868zrHPhM6xLlwiLFxuICAgICAgICAgIFwiRGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJPbmVcIjogXCLOiM69zrEgz4PPhM6/zrnPh861zq/OvyDOtM61zr0gzrHOvc6xzr3Otc+OzrjOt866zrUgzrvPjM6zz4kgzrXOvc+Mz4Igz4PPhs6szrvOvM6xz4TOv8+CIM+Azr/PhSDPg8+Fzr3Orc6yzrcgzrrOsc+Ezqwgz4TOt869IM61zrrPhM6tzrvOtc+Dzrcgz4TOt8+CIM60zrnOsc60zrnOus6xz4POr86xz4IuXCIsXG4gICAgICAgICAgICBcIk1hbnlcIjogXCJ7e2Vycm9yc319IM+Dz4TOv865z4fOtc6vzrEgzrTOtc69IM6xzr3Osc69zrXPjs64zrfOus6xzr0gzrvPjM6zz4kgzrXOvc+Mz4Igz4PPhs6szrvOvM6xz4TOv8+CIM+Azr/PhSDPg8+Fzr3Orc6yzrcgzrrOsc+Ezqwgz4TOt869IM61zrrPhM6tzrvOtc+Dzrcgz4TOt8+CIM60zrnOsc60zrnOus6xz4POr86xz4IuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aFN1Y2Nlc3NcIjoge1xuICAgICAgICAgIFwiVGl0bGVcIjogXCLOlyDOtM65zrHOtM65zrrOsc+Dzq/OsSDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcIlNlbGVjdENvbHVtbnNcIjogXCLOlc+AzrnOu86/zrPOriDPg8+EzrfOu8+Ozr1cIixcbiAgICAgIFwiTW92ZVVwXCI6IFwizpXPgM6szr3PiVwiLFxuICAgICAgXCJNb3ZlRG93blwiOiBcIs6azqzPhM+JXCIsXG4gICAgICBcIkFkZENvbHVtblwiOiBcIs6Vz4DOuc67zr/Os86uXCIsXG4gICAgICBcIlJlbW92ZUNvbHVtblwiOiBcIs6Rz4bOsc6vz4HOtc+DzrdcIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uSGVscFwiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgzrzOr86xIM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrXPgiDOsc+Az4wgz4TOuc+CIM60zrnOsc64zq3Pg865zrzOtc+CIM+Dz4TOrs67zrXPgiDOus6xzrkgz4DOsc+Ezq7Pg8+EzrUgz4TOvyDPgM67zq7Ous+Ez4HOvyAnzpXPgM65zrvOv86zzq4nIM6zzrnOsSDOvc6xIM+EzrnPgiDOtc68z4bOsc69zq/Pg861z4TOtS4gzqfPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/ICfOkc+GzrHOr8+BzrXPg863JyDOs865zrEgzr3OsSDOsc+GzrHOuc+Bzq3Pg861z4TOtSDPhM65z4IgzrXPgM65zrvOtc6zzrzOrc69zrXPgiDPg8+Ezq7Ou861z4IuXCIsXG4gICAgICBcIk1vdmVDb2x1bW5IZWxwXCI6IFwizqfPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6xIM+AzrvOrs66z4TPgc6xICfOlc+AzqzOvc+JJyDOus6xzrkgJ86azqzPhM+JJyDOs865zrEgzr3OsSDOsc67zrvOrM6+zrXPhM61IM+EzrfOvSDPg861zrnPgc6sIM61zrzPhs6szr3Ouc+DzrfPgiDPhM+Jzr0gz4PPhM63zrvPjs69IM+Ezr/PhSDPgM6vzr3Osc66zrEuXCIsXG4gICAgICBcIlVua25vd25Db2x1bW5cIjogXCLOhs6zzr3Pic+Dz4TOv1wiLFxuICAgICAgXCJTZWxlY3RDb2x1bW5cIjogXCLOlc+AzrnOu86/zrPOrlwiLFxuICAgICAgXCJBY3Rpb25MaW5rQ29sdW1uXCI6IFwizpXOvc6tz4HOs861zrnOtc+CXCIsXG4gICAgICBcIkRhdGFFcnJvclwiOiB7XG4gICAgICAgIFwiVGl0bGVcIjogXCLOo8+GzqzOu868zrEgzrrOsc+Ezqwgz4TOt869IM+AzrHPgc6xzrvOsc6yzq4gz4TPic69IM60zrXOtM6/zrzOrc69z4nOvVwiLFxuICAgICAgICBcIk1lc3NhZ2VcIjogXCLOo8+Fzr3Orc6yzrcgz4PPhs6szrvOvM6xIM66zrHPhM6sIM+EzrfOvSDPgM6xz4HOsc67zrHOss6uIM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr0uIM6gz4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr7Osc69zqwgzq4gz4TPgc6/z4DOv8+Azr/Ouc6uz4PPhM61IM+EzrEgz4PPhM6/zrnPh861zq/OsSDOsc69zrHOts6uz4TOt8+DzrfPgi5cIlxuICAgICAgfSxcbiAgICAgIFwiRXhwb3J0TGlzdFwiOiBcIs6Vzr7Osc6zz4nOs86uIM67zq/Pg8+EzrHPglwiLFxuICAgICAgXCJFeHBvcnRMaW1pdEV4Y2VlZGVkXCI6IFwizqTOvyDPgM67zq7OuM6/z4Igz4TPic69IM+Dz4TOv865z4fOtc6vz4nOvSDPgM+Bzr/PgiDOtc6+zrHOs8+JzrPOriAoe3tkYXRhTGVuZ3RofX0pIM6+zrXPgM61z4HOvc6szrXOuSDPhM6/IM68zq3Os865z4PPhM6/IM61z4DOuc+Ez4HOtc+Az4TPjCAoe3tleHBvcnRMaW1pdH19KS4gzqDOsc+BzrHOus6xzrvOv8+NzrzOtSDPgM+Bzr/Pg86xz4HOvM+Mz4PPhM61IM+EzrEgz4bOr867z4TPgc6xIM+EzrfPgiDOsc69zrHOts6uz4TOt8+DzrfPgiDOus6xzrkgz4DPgc6/z4PPgM6xzrjOrs+Dz4TOtSDOvs6xzr3OrC5cIixcbiAgICAgIFwiRXhwb3J0UmVzdWx0c1wiOiBcIs6UzrXOtM6/zrzOrc69zrEgzrvOr8+Dz4TOsc+CXCJcbiAgICB9LFxuICAgIFwiVHJ1ZUZhbHNlXCI6IHtcbiAgICAgICAgXCJsb25nXCI6IHtcbiAgICAgICAgICAgIFwiWWVzXCI6IFwizp3Osc65XCIsXG4gICAgICAgICAgICBcIk5vXCI6IFwizozPh865XCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJTZXR0aW5nc1wiOiB7XG4gICAgICBcIk9wZXJhdGlvbkNvbXBsZXRlZFwiOiBcIs6XIM60zrnOsc60zrnOus6xz4POr86xIM6/zrvOv866zrvOt8+Bz47OuM63zrrOtSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCJcbiAgICB9LFxuICAgIFwiQWR2YW5jZWRTZWFyY2hcIjoge1xuICAgICAgICBcIkNob29zZVwiOiBcIjzOlc+AzrnOu86tzr7PhM61IM68zrnOsSDOsc69zrHOts6uz4TOt8+Dzrc+XCIsXG4gICAgICAgIFwiQ2hvb3NlRGF0ZVwiOiBcIs6Vz4DOuc67zr/Os86uIM63zrzOtc+Bzr/OvM63zr3Or86xz4JcIixcbiAgICAgICAgXCJTYXZlZFNlYXJjaGVzXCI6IFwizpHPgM6/zrjOt866zrXPhc68zq3Ovc61z4IgzrHOvc6xzrbOt8+Ezq7Pg861zrnPglwiLFxuICAgICAgICBcIlRvZ2dsZURyb3Bkb3duXCIgOiBcIs6VzrzPhs6szr3Ouc+DzrcgzrvOr8+Dz4TOsc+CXCIsXG4gICAgICAgIFwiU2F2ZUN1cnJlbnRTZWFyY2hcIjogXCLOkc+Azr/OuM6uzrrOtc+Fz4POtyDOsc69zrHOts6uz4TOt8+DzrfPglwiLFxuICAgICAgICBcIlNhdmVBc1wiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POtyDPic+CXCIsXG4gICAgICAgIFwiU2F2ZVwiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POt1wiLFxuICAgICAgICBcIkRlbGV0ZVwiIDogXCLOlM65zrHOs8+BzrHPhs6uXCIsXG4gICAgICAgIFwiTW9yZVwiOiBcIs6gzrXPgc65z4PPg8+Mz4TOtc+BzrFcIixcbiAgICAgICAgXCJMZXNzXCI6IFwizpvOuc6zz4zPhM61z4HOsVwiLFxuICAgICAgICBcIk1vZGFsXCIgOiB7XG4gICAgICAgICAgICBcIlRpdGxlXCIgOiBcIs6Rz4DOv864zq7Ous61z4XPg863IM66z4HOuc+EzrfPgc6vz4nOvSDOsc69zrHOts6uz4TOt8+DzrfPglwiLFxuICAgICAgICAgICAgXCJIZWxwXCIgOiBcIs6fz4HOr8+Dz4TOtSDOrc69zrHOvSDPhM6vz4TOu86/IM6zzrnOsSDPhM6xIM61z4DOuc67zrXOs868zq3Ovc6xIM66z4HOuc+Ezq7Pgc65zrEgzrHOvc6xzrbOrs+EzrfPg863z4IuIM6Rz4XPhM+Mz4Igzr8gz4TOr8+EzrvOv8+CIM64zrEgz4POsc+CIM6yzr/Ot864zq7Pg861zrkgzr3OsSDPhM6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg861z4TOtSDOvs6xzr3OrCDPg8+Ezr8gzrzOrc67zrvOv869LlwiLFxuICAgICAgICAgICAgXCJUaXRsZU9uVXNlckVycm9yXCIgOiBcIs6gzrHPgc6xzrrOsc67z44gzrXOuc+DzqzOs861z4TOtSDOrc69zrHOvSDPhM6vz4TOu86/XCIsXG4gICAgICAgICAgICBcIlRpdGxlT25MaXN0QWxyZWFkeUNyZWF0ZWRcIiA6IFwizqTOvyDPjM69zr/OvM6xIM6xz4XPhM+MIM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOr8+EzrHOuSDOrs60zrcuIM6UzrnOsc67zq3Ovs+EzrUgzq3Ovc6xIM60zrnOsc+Gzr/Pgc61z4TOuc66z4wuXCIsXG4gICAgICAgICAgICBcIk5vTGlzdERlZmluZWRcIiA6IFwizpTOtc69IM6tz4fOtc65IM6/z4HOuc+Dz4TOtc6vIM+Ezr8gz4POt868zrXOr86/IM6xz4DOv864zq7Ous61z4XPg863z4Igz4TOt8+CIM67zq/Pg8+EzrHPglwiLFxuICAgICAgICAgICAgXCJFbXB0eUNyaXRlcmlhTGlzdFwiIDogXCLOlM61zr0gzq3Ph861z4TOtSDOus6xzrjOv8+Bzq/Pg861zrkgzrrOsc69zq3Ovc6xIM66z4HOuc+Ezq7Pgc65zr8gzrPOuc6xIM6xz4DOv864zq7Ous61z4XPg863XCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lTGFiZWxcIiA6IFwizp/Ovc6/zrzOsc+Dzq/OsSDOu86vz4PPhM6xz4JcIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVQbGFjZWhvbGRlclwiIDogXCLOlc65z4POrM6zzrXPhM61IM6tzr3Osc69IM+Ezq/PhM67zr9cIixcbiAgICAgICAgICAgIFwiQWNjZXB0XCIgOiBcIs6Rz4DOv864zq7Ous61z4XPg863XCIsXG4gICAgICAgICAgICBcIkRlY2xpbmVcIiA6IFwizpHPgM+Mz4HPgc65z4jOt1wiLFxuICAgICAgICAgICAgXCJDbG9zZVwiIDogXCLOms67zrXOr8+DzrnOvM6/XCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJBZGRJdGVtc1wiIDoge1xuICAgICAgXCJTZWxlY3RJdGVtc1wiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgz4PPhM6/zrnPh861zq/OsVwiLFxuICAgIH1cbn07XG4iLCIvLyB0c2xpbnQ6ZGlzYWJsZTogcXVvdGVtYXJrXG4vLyB0c2xpbnQ6ZGlzYWJsZTogbWF4LWxpbmUtbGVuZ3RoXG5leHBvcnQgY29uc3QgVEFCTEVTX0VOID0ge1xuICAgIFwiVGFibGVzXCI6IHtcbiAgICAgIFwiRXhwb3J0XCI6IFwiRXhwb3J0XCIsXG4gICAgICAgIFwiTW9yZVwiOiBcIk1vcmVcIixcbiAgICAgICAgXCJTZWFyY2hcIjogXCJTZWFyY2hcIixcbiAgICAgICAgXCJTZWFyY2hQbGFjZWhvbGRlclwiOiBcIlNlYXJjaC4uLlwiLFxuICAgICAgICBcIkdyb3VwQnlcIjogXCJHcm91cCBieVwiLFxuICAgICAgICBcIk5vdERlZmluZWRcIjogXCJOb3QgZGVmaW5lZFwiLFxuICAgICAgICBcIkRhdGFUYWJsZVwiOiB7XG4gICAgICAgICAgICBcInBhZ2luYXRlXCI6IHtcbiAgICAgICAgICAgICAgICBcImZpcnN0XCI6IFwiRmlyc3RcIixcbiAgICAgICAgICAgICAgICBcImxhc3RcIjogXCJMYXN0XCIsXG4gICAgICAgICAgICAgICAgXCJuZXh0XCI6IFwiTmV4dFwiLFxuICAgICAgICAgICAgICAgIFwicHJldmlvdXNcIjogXCJQcmV2aW91c1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJpbmZvXCI6IFwiU2hvd2luZyBfU1RBUlRfIHRvIF9FTkRfIG9mIF9UT1RBTF8gZW50cmllc1wiLFxuICAgICAgICAgICAgXCJpbmZvRW1wdHlcIjogXCJTaG93aW5nIDAgdG8gMCBvZiAwIGVudHJpZXNcIixcbiAgICAgICAgICAgIFwicHJvY2Vzc2luZ1wiOiBcIlByb2Nlc3NpbmcgZGF0YS4uLlwiLFxuICAgICAgICAgICAgXCJlbXB0eVRhYmxlXCI6IFwiVGhlcmUgYXJlIG5vIG1hdGNoaW5nIHJlY29yZHMuXCJcbiAgICAgICAgfSxcbiAgICAgIFwiQ29sdW1uRGlzcGxheVwiOiBcIkNvbHVtbiBEaXNwbGF5XCIsXG4gICAgICBcIkNvbHVtbkRpc3BsYXlJbmZvXCI6IFwizpXPgM65zrvOrc6+z4TOtSDPhM65z4Igz4PPhM6uzrvOtc+CIM+Azr/PhSDOuM6tzrvOtc+EzrUgzr3OsSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkuXCIsXG4gICAgICBcIlNhdmVcIjogXCJTYXZlXCIsXG4gICAgICBcIkFwcGx5XCI6IFwiQXBwbHlcIixcbiAgICAgIFwiQ2FuY2VsXCI6IFwiQ2FuY2VsXCIsXG4gICAgICBcIlJlY29yZHNQZXJQYWdlXCI6IFwiSXRlbXMgcGVyIHBhZ2VcIixcbiAgICAgIFwiUGFnZUluZm9cIjogXCJ7e3N0YXJ0fX0te3tlbmR9fSBvZiB7e3JlY29yZHNUb3RhbH19XCIsXG4gICAgICBcIlNlYXJjaExpc3RQbGFjZUhvbGRlclwiOiBcIlNlYXJjaCBpbiBsaXN0Li4uXCIsXG4gICAgICBcIkZpbHRlcnNcIjogXCJGaWx0ZXJzXCIsXG4gICAgICBcIkFsbFwiOiBcIkFsbFwiLFxuICAgICAgXCJBZGRJdGVtXCI6IFwiQWRkIGl0ZW1cIixcbiAgICAgIFwiRW1wdHlUYWJsZVRpdGxlXCI6IFwiVGhlcmUgYXJlIG5vIG1hdGNoaW5nIHJlY29yZHMuXCIsXG4gICAgICBcIkVtcHR5VGFibGVNZXNzYWdlXCI6IFwiUGxlYXNlIHRyeSB0byB1c2Ugb3RoZXIga2V5d29yZHMgb3Igc2VhcmNoIHBhcmFtZXRlcnMuXCIsXG4gICAgICBcIlJlbW92ZUl0ZW1cIjogXCJSZW1vdmUgaXRlbVwiLFxuICAgICAgXCJJdGVtc1wiOiBcIml0ZW1zXCIsXG4gICAgICBcIkl0ZW1cIjogXCJpdGVtXCIsXG4gICAgXCJBZGRJdGVtTWVzc2FnZVwiOiB7XG4gICAgICBcInRpdGxlXCI6IFwiQWRkIGl0ZW1cIixcbiAgICAgIFwib25lXCI6IFwiQSBuZXcgaXRlbSBoYXMgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuXCIsXG4gICAgICBcIm1hbnlcIjogXCJ7e3ZhbHVlfX0gbmV3IGl0ZW1zIGhhdmUgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuXCJcbiAgICB9LFxuICAgIFwiUmVtb3ZlSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgXCJ0aXRsZVwiOiBcIlJlbW92ZSBpdGVtc1wiLFxuICAgICAgXCJvbmVcIjogXCJBbiBpdGVtIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZW1vdmVkLlwiLFxuICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IGl0ZW1zIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cIlxuICAgIH0sXG4gICAgXCJSZW1vdmVJdGVtc1RpdGxlXCI6IFwiUmVtb3ZlIGl0ZW1zXCIsXG4gICAgXCJSZW1vdmVJdGVtc01lc3NhZ2VcIjogXCJZb3UgYXJlIGdvaW5nIHRvIHJlbW92ZSBvbmUgb3IgbW9yZSBpbnN0cnVjdG9yIGNvdXJzZXMuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/XCIsXG4gICAgICBcIlNlbGVjdEFsbFwiOiBcIlNlbGVjdCBhbGxcIixcbiAgICAgIFwiQ2xlYXJTZWxlY3Rpb25cIjogXCJDbGVhciBzZWxlY3Rpb25cIixcbiAgICAgIFwiQWN0aW9uc1wiOiB7XG4gICAgICAgIFwiTGFiZWxcIjogXCJFZGl0XCIsXG4gICAgICAgIFwiU3RhcnRcIjogXCJTdGFydFwiLFxuICAgICAgICBcIkFjdGlvbk1lc3NhZ2VcIjoge1xuICAgICAgICAgIFwiTm9uZVwiOiBcIlRoZXJlIGlzIG5vIHNlbGVjdGVkIGl0ZW0gdGhhdCBtZWV0cyBhY3Rpb24gcmVxdWlyZW1lbnRzLlwiLFxuICAgICAgICAgIFwiT25lXCI6IFwiWW91IGhhdmUgc2VsZWN0ZWQgb25lIGl0ZW0gdGhhdCBtZWV0cyBhY3Rpb24gcmVxdWlyZW1lbnRzLlwiLFxuICAgICAgICAgIFwiTWFueVwiOiBcIllvdSBoYXZlIHNlbGVjdGVkIHt7bGVuZ3RofX0gaXRlbXMgdGhhdCBtZWV0IGFjdGlvbiByZXF1aXJlbWVudHMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJDb21wbGV0ZWRXaXRoRXJyb3JzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwiVGhlIG9wZXJhdGlvbiB3YXMgY29tcGxldGVkIHdpdGggZXJyb3JzLlwiLFxuICAgICAgICAgIFwiRGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJPbmVcIjogXCJPbmUgaXRlbSBoYXMgbm90IGJlZW4gdXBkYXRlZCBkdWUgdG8gYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nIHByb2Nlc3MuXCIsXG4gICAgICAgICAgICBcIk1hbnlcIjogXCJ7e2Vycm9yc319IGl0ZW1zIGhhdmUgbm90IGJlZW4gdXBkYXRlZCBkdWUgdG8gYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nIHByb2Nlc3MuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aFN1Y2Nlc3NcIjoge1xuICAgICAgICAgIFwiVGl0bGVcIjogXCJUaGUgb3BlcmF0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcIlNlbGVjdENvbHVtbnNcIjogXCJTZWxlY3QgY29sdW1uc1wiLFxuICAgICAgXCJNb3ZlVXBcIjogXCJNb3ZlIHVwXCIsXG4gICAgICBcIk1vdmVEb3duXCI6IFwiTW92ZSBkb3duXCIsXG4gICAgICBcIkFkZENvbHVtblwiOiBcIkFkZFwiLFxuICAgICAgXCJSZW1vdmVDb2x1bW5cIjogXCJSZW1vdmVcIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uSGVscFwiOiBcIlNlbGVjdCBvbmUgb3IgbW9yZSBjb2x1bW5zIGFuZCBwcmVzcyAnQWRkJyBidXR0b24gdG8gaW5jbHVkZSB0aGVtIGluIHRhYmxlLiBVc2UgJ1JlbW92ZScgYnV0dG9uIHRvIGV4Y2x1ZGUgb25lIG9yIG1vcmUgY29sdW1ucyBmcm9tIHZpZXcuXCIsXG4gICAgICBcIk1vdmVDb2x1bW5IZWxwXCI6IFwiVXNlICdNb3ZlIHVwJyBhbmQgJ01vdmUgZG93bicgYnV0dG9ucyB0byBjaGFuZ2UgY29sdW1uIG9yZGVyLlwiLFxuICAgICAgXCJVbmtub3duQ29sdW1uXCI6IFwiVW5rbm93blwiLFxuICAgICAgXCJTZWxlY3RDb2x1bW5cIjogXCJTZWxlY3RcIixcbiAgICAgIFwiQWN0aW9uTGlua0NvbHVtblwiOiBcIkFjdGlvbnNcIixcbiAgICAgIFwiRGF0YUVycm9yXCI6IHtcbiAgICAgICAgXCJUaXRsZVwiOiBcIkVycm9yIHdoaWxlIGdldHRpbmcgZGF0YVwiLFxuICAgICAgICBcIk1lc3NhZ2VcIjogXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIGRhdGEuIFBsZWFzZSB0cnkgYWdhaW4gb3IgY2hhbmdlIHlvdXIgY3JpdGVyaWEuXCJcbiAgICAgIH0sXG4gICAgICBcIkV4cG9ydExpc3RcIjogXCJFeHBvcnQgbGlzdFwiLFxuICAgICAgXCJFeHBvcnRMaW1pdEV4Y2VlZGVkXCI6IFwiVGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGFyZSB0byBiZSBleHBvcnRlZCAoe3tkYXRhTGVuZ3RofX0pIGV4Y2VlZHMgdGhlIGV4cG9ydCBsaW1pdCAoe3tleHBvcnRMaW1pdH19KS4gUGxlYXNlIGFwcGx5IG1vcmUgc3BlY2lmaWMgZmlsdGVycyB0byB0aGUgc2VhcmNoLlwiLFxuICAgICAgXCJFeHBvcnRSZXN1bHRzXCI6IFwiRXhwb3J0ZWQgbGlzdFwiXG4gICAgfSxcbiAgICBcIlRydWVGYWxzZVwiOiB7XG4gICAgICAgIFwibG9uZ1wiOiB7XG4gICAgICAgICAgICBcIlllc1wiOiBcIlllc1wiLFxuICAgICAgICAgICAgXCJOb1wiOiBcIk5vXCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJTZXR0aW5nc1wiOiB7XG4gICAgICBcIk9wZXJhdGlvbkNvbXBsZXRlZFwiOiBcIlRoZSBvcGVyYXRpb24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCJcbiAgICB9LFxuICAgIFwiQWR2YW5jZWRTZWFyY2hcIjoge1xuICAgICAgICBcIkNob29zZVwiOiBcIjxTZWxlY3QgYSBzYXZlZCBzZWFyY2g+XCIsXG4gICAgICAgIFwiQ2hvb3NlRGF0ZVwiOiBcIkNob29zZSBkYXRlXCIsXG4gICAgICAgIFwiU2F2ZWRTZWFyY2hlc1wiOiBcIlNhdmVkIHNlYXJjaGVzXCIsXG4gICAgICAgIFwiVG9nZ2xlRHJvcGRvd25cIiA6IFwiVG9nZ2xlIERyb3Bkb3duXCIsXG4gICAgICAgIFwiU2F2ZUN1cnJlbnRTZWFyY2hcIjogXCJTYXZlIHNlYXJjaFwiLFxuICAgICAgICBcIlNhdmVBc1wiIDogXCJTYXZlIGFzLi4uXCIsXG4gICAgICAgIFwiU2F2ZVwiIDogXCJTYXZlXCIsXG4gICAgICAgIFwiRGVsZXRlXCIgOiBcIlJlbW92ZVwiLFxuICAgICAgICBcIk1vcmVcIjogXCJNb3JlXCIsXG4gICAgICAgIFwiTGVzc1wiOiBcIkxlc3NcIixcbiAgICAgICAgXCJNb2RhbFwiIDoge1xuICAgICAgICAgICAgXCJUaXRsZVwiIDogXCJTYXZlIGN1cnJlbnQgc2VhcmNoIGNyaXRlcmlhXCIsXG4gICAgICAgICAgICBcIkhlbHBcIiA6IFwiUGxlYXNlIGFkZCBhIHRpdGxlIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIGNyaXRlcmlhLiBUaGlzIHRpdGxlIHdpbGwgaGVscCB5b3UgdG8gdXNlIHRob3NlIGNyaXRlcmlhIGFnYWluIGluIHRoZSBmdXR1cmUuXCIsXG4gICAgICAgICAgICBcIlRpdGxlT25Vc2VyRXJyb3JcIiA6IFwiUGxlYXNlIHVzZSBhIHZhbGlkIG5hbWUgZm9yIHlvdXIgbGlzdFwiLFxuICAgICAgICAgICAgXCJUaXRsZU9uTGlzdEFscmVhZHlDcmVhdGVkXCIgOiBcIk5hbWUgYWxyZWFkeSBpbiB1c2UuIFBsZWFzZSBjaG9vc2UgYSBkaWZmZXJlbnQgb25lXCIsXG4gICAgICAgICAgICBcIk5vTGlzdERlZmluZWRcIiA6IFwiQ2Fubm90IGRlZmluZSB1c2VyIHN0b3JhZ2Uga2V5LlwiLFxuICAgICAgICAgICAgXCJFbXB0eUNyaXRlcmlhTGlzdFwiIDogXCJQbGVhc2UgZGVmaW5lIHNlYXJjaCBjcml0ZXJpYSBiZWZvcmUgc2F2ZS5cIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVMYWJlbFwiIDogXCJMaXN0IG5hbWVcIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVQbGFjZWhvbGRlclwiIDogXCJUeXBlIGEgdGl0bGUgaGVyZS4uLlwiLFxuICAgICAgICAgICAgXCJBY2NlcHRcIiA6IFwiU2F2ZVwiLFxuICAgICAgICAgICAgXCJEZWNsaW5lXCIgOiBcIkRlY2xpbmVcIixcbiAgICAgICAgICAgIFwiQ2xvc2VcIiA6IFwiQ2xvc2VcIlxuICAgICAgICB9XG4gICAgfSxcbiAgXCJBZGRJdGVtc1wiIDoge1xuICAgIFwiU2VsZWN0SXRlbXNcIjogXCJTZWxlY3QgaXRlbXNcIixcbiAgfVxufTtcbiIsImltcG9ydCB7IEFjdGlvbiB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuZXhwb3J0IGVudW0gVGFibGVBY3Rpb25UeXBlcyB7XG4gIExvYWRGaWx0ZXIgPSAnW1RhYmxlXSBMb2FkIEZpbHRlcicsXG4gIEFwcGVuZEZpbHRlciA9ICdbVGFibGVdIEFwcGVuZCBGaWx0ZXInLFxuICBBcHBlbmRTdGF0ZSA9ICdbVGFibGVdIEFwcGVuZCBTdGF0ZSdcbn1cblxuZXhwb3J0IGNsYXNzIExvYWRGaWx0ZXIgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gVGFibGVBY3Rpb25UeXBlcy5Mb2FkRmlsdGVyO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZykge31cbn1cblxuZXhwb3J0IGNsYXNzIEFwcGVuZEZpbHRlciBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBUYWJsZUFjdGlvblR5cGVzLkFwcGVuZEZpbHRlcjtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSBmaWx0ZXI6IGFueSkge31cbn1cblxuZXhwb3J0IGNsYXNzIEFwcGVuZFN0YXRlIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFRhYmxlQWN0aW9uVHlwZXMuQXBwZW5kU3RhdGU7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgZGF0YTogYW55KSB7fVxufVxuXG5leHBvcnQgdHlwZSBUYWJsZUFjdGlvbnMgPSBMb2FkRmlsdGVyIHwgQXBwZW5kRmlsdGVyIHwgQXBwZW5kU3RhdGU7XG4iLCJpbXBvcnQge1xuICBBY3Rpb25SZWR1Y2VyTWFwLFxuICBjcmVhdGVGZWF0dXJlU2VsZWN0b3IsXG4gIGNyZWF0ZVNlbGVjdG9yLFxufSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVGFibGVBY3Rpb25zLCBUYWJsZUFjdGlvblR5cGVzIH0gZnJvbSAnLi4vYWN0aW9ucy90YWJsZS5hY3Rpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZVN0YXRlIHtcbiAgZmlsdGVyPzogYW55O1xuICBvcmRlcj86IGFueTtcbiAgdGFibGU/OiBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG59O1xuXG5leHBvcnQgY29uc3QgdGFibGVJbml0aWFsU3RhdGU6IFRhYmxlU3RhdGUgPSB7XG4gIGZpbHRlcjoge30sXG4gIG9yZGVyOiBbXVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlUmVkdWNlcihzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uOiBUYWJsZUFjdGlvbnMpOiB7IFtpZDogc3RyaW5nXTogVGFibGVTdGF0ZTsgfSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblxuICAgIGNhc2UgVGFibGVBY3Rpb25UeXBlcy5Mb2FkRmlsdGVyOlxuICAgICAgcmV0dXJuIHN0YXRlW2FjdGlvbi5pZF07XG4gICAgY2FzZSBUYWJsZUFjdGlvblR5cGVzLkFwcGVuZEZpbHRlcjpcbiAgICAgICAgc3RhdGVbYWN0aW9uLmlkXSA9IHtcbiAgICAgICAgICAuLi5zdGF0ZVthY3Rpb24uaWRdLFxuICAgICAgICAgIGZpbHRlcjogY2xvbmVEZWVwKGFjdGlvbi5maWx0ZXIpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdGF0ZTtcblxuICAgIGNhc2UgVGFibGVBY3Rpb25UeXBlcy5BcHBlbmRTdGF0ZTpcbiAgICAgICAgICBzdGF0ZVthY3Rpb24uaWRdID0ge1xuICAgICAgICAgICAgLi4uc3RhdGVbYWN0aW9uLmlkXSxcbiAgICAgICAgICAgIHRhYmxlOiBhY3Rpb24uZGF0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3hUYWJsZXNTdGF0ZSB7XG4gIHRhYmxlczoge1xuICAgIFtpZDogc3RyaW5nXTogVGFibGVTdGF0ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHRhYmxlUmVkdWNlcnM6IEFjdGlvblJlZHVjZXJNYXA8Tmd4VGFibGVzU3RhdGU+ID0ge1xuICB0YWJsZXM6IHRhYmxlUmVkdWNlcixcbn07XG5cbmV4cG9ydCBjb25zdCBmZWF0dXJlTmFtZSA9ICd0YWJsZXMnO1xuXG5leHBvcnQgY29uc3QgZ2V0VGFibGVzU3RhdGUgPSBjcmVhdGVGZWF0dXJlU2VsZWN0b3IoZmVhdHVyZU5hbWUpO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0VGFibGUgPSBjcmVhdGVTZWxlY3RvcihcbiAgZ2V0VGFibGVzU3RhdGUsXG4gIChzdGF0ZTogTmd4VGFibGVzU3RhdGUsIHByb3BzOiB7IGlkOiBzdHJpbmcgfSkgPT4ge1xuICAgIHJldHVybiBzdGF0ZS50YWJsZXNbcHJvcHMuaWRdO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsIE9wdGlvbmFsLCBJbnB1dCwgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBOZ3hUYWJsZXNTdGF0ZSB9IGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBmcm9tVGFibGVzIGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwZW5kU3RhdGUgfSBmcm9tICcuLi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMnO1xuXG5ARGlyZWN0aXZlKFxuICAgIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICAgICAgc2VsZWN0b3I6ICdbdGFibGVTdGF0ZV0nLFxuICAgIH0sXG4pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTdGF0ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSB0YWJsZVN0YXRlPzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWJsZTogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzdG9yZTogU3RvcmU8Tmd4VGFibGVzU3RhdGU+KSB7XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdG9yZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVNhdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnRhYmxlLnN0YXRlTG9hZENhbGxiYWNrID0gKHNldHRpbmdzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5waXBlKHNlbGVjdChmcm9tVGFibGVzLnNlbGVjdFRhYmxlLCB7IGlkOiB0aGlzLnRhYmxlU3RhdGUgYXMgc3RyaW5nIH0pLCBmaXJzdCgpKS5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhzdGF0ZSAmJiBzdGF0ZS50YWJsZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLnRhYmxlICYmIHN0YXRlLnRhYmxlLkNvbFJlb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcihzdGF0ZS50YWJsZS5Db2xSZW9yZGVyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZpcnN0RHJhdyA9IHRydWU7XG4gICAgICAgIHRoaXMudGFibGUuZHJhdy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpcnN0RHJhdyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZS5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0RHJhdyA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbG9hZGVTdGF0ZVNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgb1NhdmVkU3RhdGU/OiB7XG4gICAgICAgICAgICAgICAgICAgIENvbFJlb3JkZXI/OiBudW1iZXJbXTtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJvdzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJvd1RvcDogbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ID0gdGhpcy50YWJsZS5kYXRhVGFibGUuc2V0dGluZ3MoKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyU2V0dGluZ3MgPSBsb2FkZVN0YXRlU2V0dGluZ3Mub1NhdmVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgICBsb2FkZVN0YXRlU2V0dGluZ3Mub1NhdmVkU3RhdGUuc2Nyb2xsZXI7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsZXJTZXR0aW5ncyAmJiBzY3JvbGxlclNldHRpbmdzLnRvcFJvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy50YWJsZS5kYXRhVGFibGUuc2Nyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUb1JvdyhzY3JvbGxlclNldHRpbmdzLnRvcFJvdywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYmxlLnN0YXRlU2F2ZUNhbGxiYWNrID0gKHNldHRpbmdzLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBBcHBlbmRTdGF0ZSh0aGlzLnRhYmxlU3RhdGUgYXMgc3RyaW5nLCBkYXRhKSk7XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsIE9wdGlvbmFsLCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3lcbiAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBBcHBlbmRGaWx0ZXIgfSBmcm9tICcuLi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3hUYWJsZXNTdGF0ZSwgc2VsZWN0VGFibGUgfSBmcm9tICcuLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTdGF0ZSB9IGZyb20gJy4vYWR2YW5jZS10YWJsZS1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbiAgZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnROb3ROdWxsIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoJ0FkdmFuY2VkIHRhYmxlIHNlYXJjaCBjb21wb25lbnQgY2Fubm90IGJlIGVtcHR5IGF0IHRoaXMgY29udGV4dC4nKTtcbiAgICB9XG4gIH1cblxuICBARGlyZWN0aXZlKFxuICAge1xuICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxuICAgICBzZWxlY3RvcjogJ1tzZWFyY2hTdGF0ZV0nLFxuICAgfSxcbiAgKVxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuICBleHBvcnQgY2xhc3MgQWR2YW5jZWRTZWFyY2hTdGF0ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIEBJbnB1dCgpIHNlYXJjaFN0YXRlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgZmlsdGVyQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgdGFibGVJbml0U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNlYXJjaDogQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHN0b3JlOiBTdG9yZTxOZ3hUYWJsZXNTdGF0ZT4pIHtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5zdG9yZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlYXJjaCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnROb3ROdWxsKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgICAvLyBzZXQgYXV0byBsb2FkIHRvIGZhbHNlXG4gICAgICAgICAgdGhpcy5zZWFyY2gudGFibGUuYXV0b0xvYWQgPSBmYWxzZTtcbiAgICAgICAgICAvLyBoYW5kbGUgZmlsdGVyaW5nXG4gICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaC5maWx0ZXJDaGFuZ2Uuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBhcHBseSB0YWJsZSBzdGF0ZVxuICAgICAgICAgIHRoaXMuYXBwbHlUYWJsZVN0YXRlKCk7XG4gICAgICAgICAgLy8gaGFuZGxlIHRhYmxlIGluaXRcbiAgICAgICAgICB0aGlzLnRhYmxlSW5pdFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoLnRhYmxlLmluaXQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uVGFibGVJbml0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFwcGx5VGFibGVTdGF0ZSgpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaC50YWJsZSkge1xuICAgICAgICAvLyBoYW5kbGUgdGFibGUgc3RhdGUgKHZpYSBkaXJlY3RpdmUpXG4gICAgICAgIGNvbnN0IHRhYmxlU3RhdGUgPSBuZXcgQWR2YW5jZWRUYWJsZVN0YXRlKHRoaXMuc2VhcmNoLnRhYmxlLCB0aGlzLnN0b3JlKTtcbiAgICAgICAgdGFibGVTdGF0ZS50YWJsZVN0YXRlID0gdGhpcy5zZWFyY2hTdGF0ZSBhcyBzdHJpbmc7XG4gICAgICAgIHRhYmxlU3RhdGUubmdPbkluaXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUluaXQoKSB7XG4gICAgICB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdFRhYmxlLCB7IGlkOiB0aGlzLnNlYXJjaFN0YXRlIGFzIHN0cmluZ30pLCBmaXJzdCgpKS5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgLy8gdXNlIG9yZGVyXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIGlmIChzdGF0ZS5vcmRlciAmJiBzdGF0ZS5vcmRlci5sZW5ndGggJiYgdGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLnRhYmxlLmRhdGFUYWJsZS5vcmRlcihzdGF0ZS5vcmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHVzZSB0ZXh0IHNlYXJjaFxuICAgICAgICAgIGlmIChzdGF0ZS5maWx0ZXIgJiYgc3RhdGUuZmlsdGVyLnEgJiYgdGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLnRleHQgPSBzdGF0ZS5maWx0ZXIucTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2gudGFibGUuc2VhcmNoKHRoaXMuc2VhcmNoLnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB1c2UgcHJlZGVmaW5lZCBzZWFyY2hcbiAgICAgICAgICBpZiAoc3RhdGUuZmlsdGVyICYmIHN0YXRlLmZpbHRlci5zKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5zZWxlY3RlZExpc3QgPSB0aGlzLnNlYXJjaC51c2VyU2VhcmNoTGlzdC5maW5kKChpdGVtOiB7IG5hbWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT09IHN0YXRlLmZpbHRlci5zO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2guc2VhcmNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0ZS5maWx0ZXIpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZS5maWx0ZXIpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBzZXQgY29sbGFwc2VkIHRvIGZhbHNlIChhZHZhbmNlZCBzZWFyY2gpXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoLmNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaC5maWx0ZXIgPSBzdGF0ZS5maWx0ZXI7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaC5zZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZW5zdXJlIGVtcHR5IGZpbHRlciBhdCB0aGlzIG1vbWVudFxuICAgICAgICAgIC8vIGJlY2F1c2Ugc2VhcmNoKCkgZnVuY3Rpb24gdHJpZ2dlcnMgYSBzdG9yZSBkaXNwYXRjaFxuICAgICAgICAgIHRoaXMuc2VhcmNoLmZpbHRlciA9IHt9O1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaC5zZWFyY2goKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNlYXJjaEZpbHRlcihmaWx0ZXI6IGFueSkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQXBwZW5kRmlsdGVyKHRoaXMuc2VhcmNoU3RhdGUgYXMgc3RyaW5nLCBmaWx0ZXIpKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVJbml0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMudGFibGVJbml0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IE5neFRhYmxlc1N0YXRlIH0gZnJvbSAnLi4vcmVkdWNlcnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hTdGF0ZSB9IGZyb20gJy4vYWR2YW5jZS1zZWFyY2gtc3RhdGUuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW3JvdXRlclNlYXJjaFN0YXRlXSdcbn0pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGUgZXh0ZW5kcyBBZHZhbmNlZFNlYXJjaFN0YXRlIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBwcml2YXRlIF9yb3V0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfZW50ZXJpbmdTdGF0ZSA9IHRydWU7XG4gIHByaXZhdGUgX2FwcGx5U3RhdGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc2VhcmNoOiBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50LFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBzdG9yZTogU3RvcmU8Tmd4VGFibGVzU3RhdGU+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlcjogUm91dGVyXG4gICkge1xuICAgIC8vIGNhbGwgc3VwZXIgY29uc3RydWN0b3JcbiAgICBzdXBlcihzZWFyY2gsIHN0b3JlKTtcbiAgICAvLyBzZXQgc2VhcmNoIHN0YXRlIGR5bmFtaWNhbGx5IGFjY29yZGluZyB0byByb3V0ZVxuICAgIHRoaXMuX3JvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0IHx8IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogTmF2aWdhdGlvblN0YXJ0IHwgTmF2aWdhdGlvbkVuZCkgPT4ge1xuICAgICAgICAvLyBjYXB0dXJlIHVybHMgcmVnYXJkaW5nIHRhYiBjaGFuZ2luZyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGFjdGl2ZVxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgJiYgIXRoaXMuX2VudGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICAvLyBzZXQgc2VhcmNoIHN0YXRlXG4gICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZSA9IGV2ZW50LnVybDtcbiAgICAgICAgICAvLyB0b29nbGUgYXBwbHlTdGF0ZVxuICAgICAgICAgIHRoaXMuX2FwcGx5U3RhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNhcHR1cmUgdXJsIG9mIHRoZSBmaXJzdCBhY3RpdmF0aW9uIG9mIHRoZSBjb21wb25lbnQgKGUuZy4gY29taW5nIGZyb20gYW5vdGhlciByb3V0ZSlcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiB0aGlzLl9lbnRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgLy8gc2V0IHNlYXJjaCBzdGF0ZVxuICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGUgPSBldmVudC51cmxBZnRlclJlZGlyZWN0cztcbiAgICAgICAgICAvLyB0b2dnbGUgZW50ZXJpbmdTdGF0ZVxuICAgICAgICAgIHRoaXMuX2VudGVyaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fYXBwbHlTdGF0ZSkge1xuICAgICAgICAgIC8vIGFwcGx5IG5ldyB0YWJsZSBzdGF0ZVxuICAgICAgICAgIHN1cGVyLmFwcGx5VGFibGVTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuX2FwcGx5U3RhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBkZXN0cm95IG93biBzdWJzY3JpcHRpb25zXG4gICAgaWYgKHRoaXMuX3JvdXRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fcm91dGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8vIGRlc3Ryb3kgcGFyZW50IHN1YnNjcmlwdGlvbnNcbiAgICByZXR1cm4gc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtOZ01vZHVsZSwgT25Jbml0LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBDT0xVTU5fRk9STUFUVEVSU30gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0J0bkV4cERpcmVjdGl2ZX0gZnJvbSAnLi9kaXJlY3RpdmVzL2J0bmV4cC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHtTaGFyZWRNb2R1bGUsIFRlbXBsYXRlUGlwZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS1tb2RhbC9hZHZhbmNlZC10YWJsZS1tb2RhbC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge1JvdXRlck1vZGFsTW9kdWxlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEFkdmFuY2VkU2VhcmNoRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1zZWFyY2gtZm9ybS9hZHZhbmNlZC1zZWFyY2gtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEZvcm1zTW9kdWxlfSBmcm9tICdAdW5pdmVyc2lzL2Zvcm1zJztcbmltcG9ydCB7Rm9ybWlvTW9kdWxlfSBmcm9tICdhbmd1bGFyLWZvcm1pbyc7XG5pbXBvcnQgeyBBZHZhbmNlZExpc3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtbGlzdC9hZHZhbmNlZC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gICAgQWR2YW5jZWRTZWFyY2hDb25maWd1cmF0aW9uUmVzb2x2ZXIsXG4gICAgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb25SZXNvbHZlclxufSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtcmVzb2x2ZXJzJztcbmltcG9ydCB7QWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1yb3ctYWN0aW9uL2FkdmFuY2VkLXJvdy1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7Rk9STUFUVEVSU30gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcblxuaW1wb3J0IHtUQUJMRVNfRUx9IGZyb20gJy4vaTE4bi90YWJsZXMuZWwnO1xuaW1wb3J0IHtUQUJMRVNfRU59IGZyb20gJy4vaTE4bi90YWJsZXMuZW4nO1xuaW1wb3J0IHsgVGFibGVTaW1wbGVIZWFkZXJDb21wb25lbnQsIFNpbXBsZUhlYWRlclRvb2xzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXNpbXBsZS1oZWFkZXIvdGFibGUtc2ltcGxlLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kYWxNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFByb2dyZXNzYmFyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wcm9ncmVzc2Jhcic7XG5pbXBvcnQgeyBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlbGVjdFNlcnZpY2UgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VsZWN0L2FkdmFuY2VkLXNlbGVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvYWR2YW5jZWQtdGFibGUtZWRpdG9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0FkdmFuY2VkQWdncmVnYXRvckNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEFnZ3JlZ2F0b3JMaXN0Q29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtYWdncmVnYXRvci1saXN0L2FkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7QWR2YW5jZWRBZ2dyZWdhdG9yUGlwZX0gZnJvbSAnLi9waXBlcy9hZHZhbmNlZC1hZ2dyZWdhdG9yLnBpcGUnO1xuaW1wb3J0IHtHcm91cEJ5UGlwZSwgTmdQaXBlc01vZHVsZX0gZnJvbSAnbmd4LXBpcGVzJztcbmltcG9ydCB7UGFyc2VUaXRsZVBpcGV9IGZyb20gJy4vcGlwZXMvYWR2YW5zZWQtYWdncmVnYXRvci1saXN0LXRpdGxlLXBhcnNlLnBpcGUnO1xuaW1wb3J0IHtBZGRJdGVtc0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkZC1pdGVtcy9hZGQtaXRlbXMuY29tcG9uZW50JztcbmltcG9ydCB7IEFkdmFuY2VkU2VhcmNoU3RhdGUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvYWR2YW5jZS1zZWFyY2gtc3RhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTdGF0ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hZHZhbmNlLXRhYmxlLXN0YXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2VkLXNlYXJjaC1yb3V0ZXItc3RhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC1iYXNlJztcbmltcG9ydCB7IENvbHVtblNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IENvbHVtblNlbGVjdG9yU2VydmljZSB9IGZyb20gJy4vY29tcG9uZW50cy9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBTaGFyZWRNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kYWxNb2R1bGUsXG4gICAgICAgIEZvcm1pb01vZHVsZSxcbiAgICAgICAgQWR2YW5jZWRGb3Jtc01vZHVsZSxcbiAgICAgICAgU2hhcmVkTW9kdWxlLFxuICAgICAgICBNb2RhbE1vZHVsZSxcbiAgICAgICAgUHJvZ3Jlc3NiYXJNb2R1bGUsXG4gICAgICAgIE5nUGlwZXNNb2R1bGVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0RhdGVQaXBlLCBUZW1wbGF0ZVBpcGUsXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IENPTFVNTl9GT1JNQVRURVJTLFxuICAgICAgICB1c2VWYWx1ZTogRk9STUFUVEVSU1xuICAgICAgfSxcblxuICAgICAgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb25SZXNvbHZlcixcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hDb25maWd1cmF0aW9uUmVzb2x2ZXIsXG4gICAgICAgIEFkdmFuY2VkU2VsZWN0U2VydmljZSxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSxcbiAgICAgICAgQ29sdW1uU2VsZWN0b3JTZXJ2aWNlLFxuICAgICAgICBHcm91cEJ5UGlwZVxuICAgICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQsXG4gICAgICAgIEJ0bkV4cERpcmVjdGl2ZSxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkTGlzdENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnQsXG4gICAgICAgIFRhYmxlU2ltcGxlSGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBTaW1wbGVIZWFkZXJUb29sc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVFZGl0b3JEaXJlY3RpdmUsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvckNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yTGlzdENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yUGlwZSxcbiAgICAgICAgUGFyc2VUaXRsZVBpcGUsXG4gICAgICAgIEFkZEl0ZW1zQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlYXJjaFN0YXRlLFxuICAgICAgICBBZHZhbmNlZFRhYmxlU3RhdGUsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGUsXG4gICAgICAgIENvbHVtblNlbGVjdG9yQ29tcG9uZW50XG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIEFkdmFuY2VkVGFibGVDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQsXG4gICAgICAgIEJ0bkV4cERpcmVjdGl2ZSxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkTGlzdENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnQsXG4gICAgICAgIFRhYmxlU2ltcGxlSGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBTaW1wbGVIZWFkZXJUb29sc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVFZGl0b3JEaXJlY3RpdmUsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvckNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yTGlzdENvbXBvbmVudCxcbiAgICAgICAgQWRkSXRlbXNDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoU3RhdGUsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTdGF0ZSxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hSb3V0ZXJTdGF0ZSxcbiAgICAgICAgQ29sdW1uU2VsZWN0b3JDb21wb25lbnRcbiAgICBdLFxuICAgIGVudHJ5Q29tcG9uZW50czogW1xuICAgICAgICBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCxcbiAgICAgICAgQWRkSXRlbXNDb21wb25lbnQsXG4gICAgICAgIENvbHVtblNlbGVjdG9yQ29tcG9uZW50XG4gICAgXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVzTW9kdWxlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMubmdPbkluaXQoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9hZGluZyB0YWJsZXMgbW9kdWxlJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKCdlbicsIFRBQkxFU19FTiwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2Uuc2V0VHJhbnNsYXRpb24oJ2VsJywgVEFCTEVTX0VMLCB0cnVlKTtcbiAgICB9XG5cbn1cbiJdLCJuYW1lcyI6WyJ0ZW1wbGF0ZSIsIkFjdGl2YXRlZFJvdXRlIiwiUm91dGVyIiwidHNsaWJfMS5fX2V4dGVuZHMiLCJhdCIsIlRyYW5zbGF0ZVNlcnZpY2UiLCJ0c2xpYl8xLl9fdmFsdWVzIiwiRGF0ZVBpcGUiLCJJU082MzkxLmdldE5hdGl2ZU5hbWUiLCJUZW1wbGF0ZVBpcGUiLCJJbmplY3RhYmxlIiwiRXZlbnRFbWl0dGVyIiwiRm9ybUNvbnRyb2wiLCJDb21wb25lbnQiLCJWaWV3RW5jYXBzdWxhdGlvbiIsIkJzTW9kYWxSZWYiLCJDaGFuZ2VEZXRlY3RvclJlZiIsIklucHV0IiwiVmlld0NoaWxkIiwiUm91dGVyTW9kYWxPa0NhbmNlbCIsIk1vZGFsU2VydmljZSIsIkJlaGF2aW9yU3ViamVjdCIsInNraXAiLCJOYXZpZ2F0aW9uU3RhcnQiLCJSZXNwb25zZUVycm9yIiwiRGlyZWN0aXZlIiwiQW5ndWxhckRhdGFDb250ZXh0IiwiQ29uZmlndXJhdGlvblNlcnZpY2UiLCJMb2FkaW5nU2VydmljZSIsIkVycm9yU2VydmljZSIsIkhvc3RMaXN0ZW5lciIsIkluamVjdGlvblRva2VuIiwiVHJhbnNsYXRlUGlwZSIsIkNsaWVudERhdGFRdWVyeWFibGUiLCJESUFMT0dfQlVUVE9OUyIsIkluamVjdCIsIkluamVjdG9yIiwiRWxlbWVudFJlZiIsIkh0dHBDbGllbnQiLCJFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2UiLCJPdXRwdXQiLCJUb2FzdFNlcnZpY2UiLCJVc2VyQWN0aXZpdHlTZXJ2aWNlIiwiU2VydmljZVVybFByZVByb2Nlc3NvciIsIlRyYW5zbGF0ZVByZVByb2Nlc3NvciIsIkZvcm1BcnJheSIsIkJzTW9kYWxTZXJ2aWNlIiwiVXNlclN0b3JhZ2VTZXJ2aWNlIiwiRm9ybUJ1aWxkZXIiLCJUZXh0VXRpbHMiLCJDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSIsIlBpcGUiLCJjbG9uZURlZXAiLCJjcmVhdGVGZWF0dXJlU2VsZWN0b3IiLCJjcmVhdGVTZWxlY3RvciIsInN0b3JlIiwic2VsZWN0IiwiZnJvbVRhYmxlcy5zZWxlY3RUYWJsZSIsImZpcnN0IiwiU3RvcmUiLCJPcHRpb25hbCIsImZpbHRlciIsIk5hdmlnYXRpb25FbmQiLCJOZ01vZHVsZSIsIkNvbW1vbk1vZHVsZSIsIlNoYXJlZE1vZHVsZSIsIlRyYW5zbGF0ZU1vZHVsZSIsIkZvcm1zTW9kdWxlIiwiUmVhY3RpdmVGb3Jtc01vZHVsZSIsIlJvdXRlck1vZHVsZSIsIlJvdXRlck1vZGFsTW9kdWxlIiwiRm9ybWlvTW9kdWxlIiwiQWR2YW5jZWRGb3Jtc01vZHVsZSIsIk1vZGFsTW9kdWxlIiwiUHJvZ3Jlc3NiYXJNb2R1bGUiLCJOZ1BpcGVzTW9kdWxlIiwiR3JvdXBCeVBpcGUiLCJDVVNUT01fRUxFTUVOVFNfU0NIRU1BIl0sIm1hcHBpbmdzIjoiOzs7Ozs7SUFBQTs7Ozs7Ozs7Ozs7Ozs7SUFjQTtJQUVBLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjO1NBQ3BDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVFLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBRSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBRS9FLHVCQUEwQixDQUFDLEVBQUUsQ0FBQztRQUMxQixhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLGdCQUFnQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDLENBQUMsQ0FBQyxT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LENBQUMsQ0FBQyxDQUFDOzRCQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUFDLFNBQVM7d0JBQ2pELEtBQUssQ0FBQzs0QkFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUFDLFNBQVM7d0JBQ2pEOzRCQUNJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQ0FBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUFDLFNBQVM7NkJBQUU7NEJBQzVHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUFDLE1BQU07NkJBQUU7NEJBQ3RGLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQ0FBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dDQUFDLE1BQU07NkJBQUU7NEJBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FB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
|