@esfaenza/es-diagrams 11.2.8 → 11.2.12
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/esfaenza-es-diagrams.umd.js +8 -0
- package/bundles/esfaenza-es-diagrams.umd.js.map +1 -1
- package/esfaenza-es-diagrams.metadata.json +1 -1
- package/esm2015/lib/components/es-diagram.component.js +9 -1
- package/fesm2015/esfaenza-es-diagrams.js +8 -0
- package/fesm2015/esfaenza-es-diagrams.js.map +1 -1
- package/lib/components/es-diagram.component.d.ts +4 -0
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"ContextMenuCommand":{"__symbolic":"class","members":{}},"ContextMenuOptions":{"__symbolic":"class","members":{}},"ExpandCollapseOptions":{"__symbolic":"class","members":{}},"NodeHTMLTemplate":{"__symbolic":"class","members":{}},"NodeTemplate":{"__symbolic":"class","members":{}},"ZoomLevelBasedTemplate":{"__symbolic":"class","members":{}},"BaseLayoutOptionsImpl":{"__symbolic":"class","members":{"ready":[{"__symbolic":"method"}],"stop":[{"__symbolic":"method"}]}},"BreadthFirstLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"CircleLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ConcentricLayoutOptionsImpl":{"__symbolic":"class","members":{"concentric":[{"__symbolic":"method"}],"levelWidth":[{"__symbolic":"method"}]}},"CoseLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"DagreLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"GridLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"NullLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"BaseLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"PresetLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"RandomLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ShapedLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"EsDiagramModuleConfig":{"__symbolic":"class","members":{}},"EsDiagramComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":28,"character":1},"arguments":[{"selector":"es-diagram","template":"<div #graph class=\"graph-wrapper {{name}}\"></div>","styles":[".graph-wrapper{height:100%;width:100%}.html-node-notransition{transition:none!important;transform:none!important}\n"]}]}],"members":{"cyGraph":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":38,"character":3},"arguments":["graph"]}]}],"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"UseContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":48,"character":3}}]}],"ContextMenuOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"UseExpandCollapse":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"ExpandCollapseOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":3}}]}],"NativeOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"Elements":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"NodeStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"EdgeStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":87,"character":3}}]}],"Readonly":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"AutoupdateSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":97,"character":3}}]}],"PreserveElementsPosition":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":104,"character":3}}]}],"AnimateLayoutChanges":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3}}]}],"SmartSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":123,"character":3}}]}],"SingleSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":128,"character":3}}]}],"SmartSelectionStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":139,"character":3}}]}],"ResizeThrottleTime":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":146,"character":3}}]}],"Layout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":151,"character":3}}]}],"NodeHTMLTemplates":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":158,"character":3}}]}],"ExtensionModulesImporter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":177,"character":3}}]}],"ExtensionModulesApplyer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":196,"character":3}}]}],"onNodeClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":201,"character":3}}]}],"onNodeSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":206,"character":3}}]}],"onLoaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":211,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":256,"character":15}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":256,"character":62}}],null],"parameters":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"dispatchLoadChart":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"render":[{"__symbolic":"method"}],"setupElementsSelectionIfNeeded":[{"__symbolic":"method"}],"setupSelectionStyles":[{"__symbolic":"method"}],"listenOnChanges":[{"__symbolic":"method"}],"onContainerSizeChanged":[{"__symbolic":"method"}],"bindCytoscapeEvents":[{"__symbolic":"method"}],"performModulesLoading":[{"__symbolic":"method"}],"performOperationsWithLoadedModules":[{"__symbolic":"method"}],"updateCardData":[{"__symbolic":"method"}],"loadInternal":[{"__symbolic":"method"}],"getCompletedOptions":[{"__symbolic":"method"}],"reviewCytoscapeElements":[{"__symbolic":"method"}]}},"EsDiagramModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"EsDiagramComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":13},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":13,"character":27},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":13,"character":40},{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":61}],"exports":[{"__symbolic":"reference","name":"EsDiagramComponent"}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"EsDiagramModule"},"providers":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵe"},{"provide":{"__symbolic":"reference","name":"ɵc"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"ɵd"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"debugMode"},"right":false}}]}}}},"ɵa":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"BaseLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":14,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":27,"character":17}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":27,"character":29},"arguments":[{"__symbolic":"reference","name":"ɵc"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":27,"character":77}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":27,"character":89},"arguments":[{"__symbolic":"reference","name":"ɵd"}]}]],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"string"}]}],"importIfNeeded":[{"__symbolic":"method"}],"handleError":[{"__symbolic":"method"}],"log":[{"__symbolic":"method"}],"loc":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":55},"arguments":["DIA_LOCALE"]},"ɵd":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":10,"character":60},"arguments":["DIA_DEBUG_MODE"]},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":7,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":23,"character":17},"arguments":[{"__symbolic":"reference","name":"ɵd"}]}]],"parameters":[{"__symbolic":"reference","name":"boolean"}]}],"register":[{"__symbolic":"method"}],"deregister":[{"__symbolic":"method"}],"drainInitQueues":[{"__symbolic":"method"}],"log":[{"__symbolic":"method"}]}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"throttle":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}}},"origins":{"ContextMenuCommand":"./lib/models/component/contextmenu/ContextMenuCommand","ContextMenuOptions":"./lib/models/component/contextmenu/ContextMenuOptions","ExpandCollapseOptions":"./lib/models/component/grouping/ExpandCollapseOptions","NodeHTMLTemplate":"./lib/models/component/nodes/NodeHTMLTemplate","NodeTemplate":"./lib/models/component/nodes/NodeTemplate","ZoomLevelBasedTemplate":"./lib/models/component/nodes/ZoomLevelBasedTemplate","BaseLayoutOptionsImpl":"./lib/models/layouts/base/BaseLayoutOptionsImpl","BreadthFirstLayoutOptionsImpl":"./lib/models/layouts/BreadthFirstLayoutOptionsImpl","CircleLayoutOptionsImpl":"./lib/models/layouts/CircleLayoutOptionsImpl","ConcentricLayoutOptionsImpl":"./lib/models/layouts/ConcentricLayoutOptionsImpl","CoseLayoutOptionsImpl":"./lib/models/layouts/CoseLayoutOptionsImpl","DagreLayoutOptionsImpl":"./lib/models/layouts/DagreLayoutOptionsImpl","GridLayoutOptionsImpl":"./lib/models/layouts/GridLayoutOptionsImpl","NullLayoutOptionsImpl":"./lib/models/layouts/NullLayoutOptionsImpl","PresetLayoutOptionsImpl":"./lib/models/layouts/PresetLayoutOptionsImpl","RandomLayoutOptionsImpl":"./lib/models/layouts/RandomLayoutOptionsImpl","ShapedLayoutOptionsImpl":"./lib/models/layouts/base/ShapedLayoutOptionsImpl","EsDiagramModuleConfig":"./lib/models/EsDiagramModuleConfig","EsDiagramComponent":"./lib/components/es-diagram.component","EsDiagramModule":"./lib/esdiagram.module","ɵa":"./lib/models/layouts/base/AnimateLayoutOptionsImpl","ɵb":"./lib/services/es-diagram.service","ɵc":"./lib/tokens","ɵd":"./lib/tokens","ɵe":"./lib/services/es-diagram.dispatcher","ɵf":"./lib/extensions/ReactiveExtensions"},"importAs":"@esfaenza/es-diagrams"}
|
|
1
|
+
{"__symbolic":"module","version":4,"metadata":{"ContextMenuCommand":{"__symbolic":"class","members":{}},"ContextMenuOptions":{"__symbolic":"class","members":{}},"ExpandCollapseOptions":{"__symbolic":"class","members":{}},"NodeHTMLTemplate":{"__symbolic":"class","members":{}},"NodeTemplate":{"__symbolic":"class","members":{}},"ZoomLevelBasedTemplate":{"__symbolic":"class","members":{}},"BaseLayoutOptionsImpl":{"__symbolic":"class","members":{"ready":[{"__symbolic":"method"}],"stop":[{"__symbolic":"method"}]}},"BreadthFirstLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"CircleLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ConcentricLayoutOptionsImpl":{"__symbolic":"class","members":{"concentric":[{"__symbolic":"method"}],"levelWidth":[{"__symbolic":"method"}]}},"CoseLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"DagreLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"GridLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"NullLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"BaseLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"PresetLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"RandomLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ShapedLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"EsDiagramModuleConfig":{"__symbolic":"class","members":{}},"EsDiagramComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":28,"character":1},"arguments":[{"selector":"es-diagram","template":"<div #graph class=\"graph-wrapper {{name}}\"></div>","styles":[".graph-wrapper{height:100%;width:100%}.html-node-notransition{transition:none!important;transform:none!important}\n"]}]}],"members":{"cyGraph":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":38,"character":3},"arguments":["graph"]}]}],"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"UseContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":48,"character":3}}]}],"ContextMenuOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"UseExpandCollapse":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"ExpandCollapseOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":3}}]}],"NativeOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"Elements":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"NodeStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"EdgeStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":87,"character":3}}]}],"Readonly":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"AutoupdateSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":97,"character":3}}]}],"PreserveElementsPosition":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":104,"character":3}}]}],"AnimateLayoutChanges":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3}}]}],"SmartSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":123,"character":3}}]}],"SingleSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":128,"character":3}}]}],"SmartSelectionStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":139,"character":3}}]}],"ResizeThrottleTime":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":146,"character":3}}]}],"Layout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":151,"character":3}}]}],"NodeHTMLTemplates":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":158,"character":3}}]}],"ExtensionModulesImporter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":177,"character":3}}]}],"ExtensionModulesApplyer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":196,"character":3}}]}],"onNodeClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":201,"character":3}}]}],"onNodeSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":206,"character":3}}]}],"onLayoutDone":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":211,"character":3}}]}],"onLoaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":216,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":261,"character":15}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":261,"character":62}}],null],"parameters":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"dispatchLoadChart":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"render":[{"__symbolic":"method"}],"setupElementsSelectionIfNeeded":[{"__symbolic":"method"}],"setupSelectionStyles":[{"__symbolic":"method"}],"listenOnChanges":[{"__symbolic":"method"}],"onContainerSizeChanged":[{"__symbolic":"method"}],"bindCytoscapeEvents":[{"__symbolic":"method"}],"performModulesLoading":[{"__symbolic":"method"}],"performOperationsWithLoadedModules":[{"__symbolic":"method"}],"updateCardData":[{"__symbolic":"method"}],"loadInternal":[{"__symbolic":"method"}],"getCompletedOptions":[{"__symbolic":"method"}],"reviewCytoscapeElements":[{"__symbolic":"method"}]}},"EsDiagramModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"EsDiagramComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":13},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":13,"character":27},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":13,"character":40},{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":61}],"exports":[{"__symbolic":"reference","name":"EsDiagramComponent"}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"EsDiagramModule"},"providers":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵe"},{"provide":{"__symbolic":"reference","name":"ɵc"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"ɵd"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"debugMode"},"right":false}}]}}}},"ɵa":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"BaseLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":14,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":27,"character":17}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":27,"character":29},"arguments":[{"__symbolic":"reference","name":"ɵc"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":27,"character":77}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":27,"character":89},"arguments":[{"__symbolic":"reference","name":"ɵd"}]}]],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"string"}]}],"importIfNeeded":[{"__symbolic":"method"}],"handleError":[{"__symbolic":"method"}],"log":[{"__symbolic":"method"}],"loc":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":55},"arguments":["DIA_LOCALE"]},"ɵd":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":10,"character":60},"arguments":["DIA_DEBUG_MODE"]},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":7,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":23,"character":17},"arguments":[{"__symbolic":"reference","name":"ɵd"}]}]],"parameters":[{"__symbolic":"reference","name":"boolean"}]}],"register":[{"__symbolic":"method"}],"deregister":[{"__symbolic":"method"}],"drainInitQueues":[{"__symbolic":"method"}],"log":[{"__symbolic":"method"}]}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"throttle":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}}},"origins":{"ContextMenuCommand":"./lib/models/component/contextmenu/ContextMenuCommand","ContextMenuOptions":"./lib/models/component/contextmenu/ContextMenuOptions","ExpandCollapseOptions":"./lib/models/component/grouping/ExpandCollapseOptions","NodeHTMLTemplate":"./lib/models/component/nodes/NodeHTMLTemplate","NodeTemplate":"./lib/models/component/nodes/NodeTemplate","ZoomLevelBasedTemplate":"./lib/models/component/nodes/ZoomLevelBasedTemplate","BaseLayoutOptionsImpl":"./lib/models/layouts/base/BaseLayoutOptionsImpl","BreadthFirstLayoutOptionsImpl":"./lib/models/layouts/BreadthFirstLayoutOptionsImpl","CircleLayoutOptionsImpl":"./lib/models/layouts/CircleLayoutOptionsImpl","ConcentricLayoutOptionsImpl":"./lib/models/layouts/ConcentricLayoutOptionsImpl","CoseLayoutOptionsImpl":"./lib/models/layouts/CoseLayoutOptionsImpl","DagreLayoutOptionsImpl":"./lib/models/layouts/DagreLayoutOptionsImpl","GridLayoutOptionsImpl":"./lib/models/layouts/GridLayoutOptionsImpl","NullLayoutOptionsImpl":"./lib/models/layouts/NullLayoutOptionsImpl","PresetLayoutOptionsImpl":"./lib/models/layouts/PresetLayoutOptionsImpl","RandomLayoutOptionsImpl":"./lib/models/layouts/RandomLayoutOptionsImpl","ShapedLayoutOptionsImpl":"./lib/models/layouts/base/ShapedLayoutOptionsImpl","EsDiagramModuleConfig":"./lib/models/EsDiagramModuleConfig","EsDiagramComponent":"./lib/components/es-diagram.component","EsDiagramModule":"./lib/esdiagram.module","ɵa":"./lib/models/layouts/base/AnimateLayoutOptionsImpl","ɵb":"./lib/services/es-diagram.service","ɵc":"./lib/tokens","ɵd":"./lib/tokens","ɵe":"./lib/services/es-diagram.dispatcher","ɵf":"./lib/extensions/ReactiveExtensions"},"importAs":"@esfaenza/es-diagrams"}
|
|
@@ -128,6 +128,10 @@ export class EsDiagramComponent {
|
|
|
128
128
|
* Evento lanciato alla selezione o deselezione di un nodo, contiene l'oggetto **data** del nodo in questione e informazioni sul suo stato di selezione
|
|
129
129
|
*/
|
|
130
130
|
this.onNodeSelection = new EventEmitter();
|
|
131
|
+
/**
|
|
132
|
+
* Evento lanciato al termine del Layouting. Se si vuole eseguire codice dopo che il Layout è fatto e completamente graficato, questo è il punto
|
|
133
|
+
*/
|
|
134
|
+
this.onLayoutDone = new EventEmitter();
|
|
131
135
|
/**
|
|
132
136
|
* Evento lanciato al termine del caricamento del diagramma
|
|
133
137
|
*/
|
|
@@ -321,6 +325,9 @@ export class EsDiagramComponent {
|
|
|
321
325
|
let targetData = event.target.data();
|
|
322
326
|
this.onNodeSelection.emit({ data: targetData, selected: true });
|
|
323
327
|
});
|
|
328
|
+
this.cy.bind('layoutstop', (event) => {
|
|
329
|
+
this.onLayoutDone.emit();
|
|
330
|
+
});
|
|
324
331
|
this.cy.bind('unselect', 'node', (event) => {
|
|
325
332
|
let targetData = event.target.data();
|
|
326
333
|
this.onNodeSelection.emit({ data: targetData, selected: false });
|
|
@@ -505,6 +512,7 @@ EsDiagramComponent.propDecorators = {
|
|
|
505
512
|
ExtensionModulesApplyer: [{ type: Input }],
|
|
506
513
|
onNodeClick: [{ type: Output }],
|
|
507
514
|
onNodeSelection: [{ type: Output }],
|
|
515
|
+
onLayoutDone: [{ type: Output }],
|
|
508
516
|
onLoaded: [{ type: Output }]
|
|
509
517
|
};
|
|
510
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQUUsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFnQmpJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxjQUFjLENBQUEsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXBDOztHQUVHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQTBON0I7Ozs7T0FJRztJQUNILFlBQWdDLE9BQXlCLEVBQXNCLFVBQStCLEVBQVUsSUFBd0I7UUFBaEgsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBc0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFvQjtRQXhOaEo7O1dBRUc7UUFDTSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRTNCOztXQUVHO1FBQ00sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFTekM7O1dBRUc7UUFDTSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFPNUM7Ozs7V0FJRztRQUNNLGtCQUFhLEdBQStCLEVBQUUsQ0FBQztRQXNCeEQ7O1dBRUc7UUFDTSxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUV4Qzs7OztX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QyxLQUFLLElBQUksT0FBTztnQkFDN0MsRUFBRSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtTQUMxQztJQUNILENBQUM7OztZQW5tQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0QiwrREFBMEM7O2FBRTNDOzs7WUFoQlEsZ0JBQWdCLHVCQWdQVixRQUFRO1lBL09kLG1CQUFtQix1QkErT2tDLFFBQVE7WUE1TzdELGtCQUFrQjs7O3NCQWtCeEIsU0FBUyxTQUFDLE9BQU87bUJBS2pCLEtBQUs7NkJBS0wsS0FBSztpQ0FPTCxLQUFLO2dDQUtMLEtBQUs7b0NBS0wsS0FBSzs0QkFPTCxLQUFLO3VCQUtMLEtBQUs7eUJBS0wsS0FBSzt5QkFLTCxLQUFLO3VCQUtMLEtBQUs7NkJBS0wsS0FBSzt1Q0FPTCxLQUFLO21DQU9MLEtBQUs7NkJBWUwsS0FBSzs4QkFLTCxLQUFLO21DQVdMLEtBQUs7aUNBT0wsS0FBSztxQkFLTCxLQUFLO2dDQU9MLEtBQUs7dUNBbUJMLEtBQUs7c0NBbUJMLEtBQUs7MEJBS0wsTUFBTTs4QkFLTixNQUFNO3VCQUtOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3B0aW9uYWwsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuXHJcbmltcG9ydCB7IENvbnRleHRNZW51T3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvY29udGV4dG1lbnUvQ29udGV4dE1lbnVPcHRpb25zJztcclxuaW1wb3J0IHsgRXhwYW5kQ29sbGFwc2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBvbmVudC9ncm91cGluZy9FeHBhbmRDb2xsYXBzZU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBOb2RlSFRNTFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBvbmVudC9ub2Rlcy9Ob2RlSFRNTFRlbXBsYXRlJztcclxuXHJcbmltcG9ydCB7IEJyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvQnJlYWR0aEZpcnN0TGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5pbXBvcnQgeyBDaXJjbGVMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0NpcmNsZUxheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgQ29uY2VudHJpY0xheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvQ29uY2VudHJpY0xheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgQ29zZUxheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvQ29zZUxheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgRGFncmVMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0RhZ3JlTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5pbXBvcnQgeyBHcmlkTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9HcmlkTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5pbXBvcnQgeyBOdWxsTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9OdWxsTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5pbXBvcnQgeyBQcmVzZXRMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL1ByZXNldExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9SYW5kb21MYXlvdXRPcHRpb25zSW1wbCc7XHJcblxyXG5pbXBvcnQgeyBFc0RpYWdyYW1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZXMtZGlhZ3JhbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXNEaWFncmFtRGlzcGF0Y2hlciB9IGZyb20gJy4uL3NlcnZpY2VzL2VzLWRpYWdyYW0uZGlzcGF0Y2hlcic7XHJcbmltcG9ydCB7IFJlc2l6ZVNlbnNvciB9IGZyb20gXCIuLi9leHRlbnNpb25zL1Jlc2l6ZVNlbnNvclwiO1xyXG5cclxuaW1wb3J0IHsgUmVhY3RpdmVFeHRlbnNpb25zIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucy9SZWFjdGl2ZUV4dGVuc2lvbnMnO1xyXG5cclxuaW1wb3J0ICogYXMgY3lfIGZyb20gJ2N5dG9zY2FwZSc7XHJcbi8qKiBAaWdub3JlICovY29uc3QgY3l0b3NjYXBlID0gY3lfO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgY2hlIHNpIG9jY3VwYSBkaSBncmFmaWNhcmUgdW4gZGlhZ3JhbW1hIGUgZGkgZ2VzdGlybmUgaWwgY2ljbG8gZGkgdml0YVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlcy1kaWFncmFtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZXMtZGlhZ3JhbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZXMtZGlhZ3JhbS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFc0RpYWdyYW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG5cclxuICAvKipcclxuICAgKiBSaWZlcmltZW50byBhbGwnb2dnZXR0byBIVE1MIHN1IGN1aSBjcmVhcmUgaWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgnZ3JhcGgnKSBjeUdyYXBoOiBFbGVtZW50UmVmO1xyXG5cclxuICAvKipcclxuICAgKiBOb21lIGRlbCBkaWFncmFtbWEsIGZvbmRhbWVudGFsZSBhc3NlZ25hcmxvIHBlciBwZXJtZXR0ZXJlIGFsbGEgbGlicmVyaWEgZGkgc2NoZWR1bGFybmUgbGEgY3JlYXppb25lXHJcbiAgICovXHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIHV0aWxpenphcmUgaWwgbWVuw7kgY29udGVzdHVhbGUgYSBydW90YSBhdHRvcm5vIGFkIG9nbmkgbm9kb1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFVzZUNvbnRleHRNZW51OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBsZSBvcHppb25pIGRlbCBtZW7DuSBjb250ZXN0dWFsZSBxdWFsb3JhICoqVXNlQ29udGV4dE1lbnUqKiBmb3NzZSAqKnRydWUqKi5cclxuICAgKiBcclxuICAgKiBPZ25pIGVsZW1lbnRvIGRpIHF1ZXN0byBhcnJheSDDqCB1biBzZWxldHRvcmUgY29uIGlsIG1lbnUgZGEgbW9zdHJhcmUgcGVyIHF1ZWxsYSBjYXNpc3RpY2FcclxuICAgKi9cclxuICBASW5wdXQoKSBDb250ZXh0TWVudU9wdGlvbnM6IENvbnRleHRNZW51T3B0aW9uc1tdO1xyXG5cclxuICAvKipcclxuICAgKiBEaWNlIGFsIGNvbXBvbmVudGUgc2UgaWwgZGlhZ3JhbW1hIGRldmUgdXRpbGl6emFyZSBpbCBzaXN0ZW1hIGRpIGVzdGVuc2lvbmUgcGVyIGwnZXhwYW5kIGUgY29sbGFwc2UgZGVpIGdydXBwaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFVzZUV4cGFuZENvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wemlvbmkgbmF0aXZlIGRlbGwnZXN0ZW5zaW9uZSBleHBhbmQtY29sbGFwc2UsIHZlbmdvbm8gb3Z2aWFtZW50ZSB1dGlsaXp6YXRlIHNvbG8gc2UgKipVc2VFeHBhbmRDb2xsYXBzZSoqIMOoICoqdHJ1ZSoqXHJcbiAgICovXHJcbiAgQElucHV0KCkgRXhwYW5kQ29sbGFwc2VPcHRpb25zOiBFeHBhbmRDb2xsYXBzZU9wdGlvbnM7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJsb2NjbyBjb21wbGV0byBkZWxsZSBvcHppb25pLCBhbHRlcm5hdGl2byBhbGwnYXNzZWduYXppb25lIGRpICoqRWxlbWVudHMqKiwgKipOb2RlU3R5bGVzKiosICoqRWRnZVN0eWxlcyoqLCBlICoqTGF5b3V0KiouXHJcbiAgICogXHJcbiAgICogUXVhbG9yYSBlbnRyYW1iZSB2ZW5pc3Nlcm8gc3BlY2lmaWNhdGUgdmVycsOgIGVmZmV0dHVhdGEgdW4ndW5pb25lIGZyYSBxdWVzdGUgb3B6aW9uaSBlIHF1ZWxsZSBzcGVjaWZpY2F0ZSwgZGFuZG8gcHJpb3JpdMOgIGFsbGUgc3BlY2lmaWNhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSBOYXRpdmVPcHRpb25zOiBjeXRvc2NhcGUuQ3l0b3NjYXBlT3B0aW9ucyA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBEZWZpbml6aW9uZSBkZWdsaSBlbGVtZW50aSBkYSBtb3N0cmFyZSBuZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgQElucHV0KCkgRWxlbWVudHM6IGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZpbml6aW9uZSBkZWdsaSBzdGlsaSBkZWkgbm9kaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIE5vZGVTdHlsZXM6IGN5dG9zY2FwZS5Dc3MuTm9kZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgc3RpbGkgZGVpIGNvbGxlZ2FtZW50aSBmcmEgaSBub2RpXHJcbiAgICovXHJcbiAgQElucHV0KCkgRWRnZVN0eWxlczogY3l0b3NjYXBlLkNzcy5FZGdlO1xyXG5cclxuICAvKipcclxuICAgKiBJbiB1biBkaWFncmFtbWEgaW4gc29sYSBsZXR0dXJhIHR1dHRlIGxlIGludGVyYXppb25pIHV0ZW50ZSBzb25vIGFubnVsbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFJlYWRvbmx5OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBBZ2dpb3JuYSBhdXRvbWF0aWNhbWVudGUgbGUgZGltZW5zaW9uaSBkZWwgZGlhZ3JhbW1hIHF1YW5kbyBjYW1iaWFubyBsZSBkaW1lbnNpb25pIGRlbGxhIGZpbmVzdHJhXHJcbiAgICovXHJcbiAgQElucHV0KCkgQXV0b3VwZGF0ZVNpemU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgZGkgbWFudGVuZXJlIGxhIHBvc2l6aW9uZSBkZWkgbm9kaSBxdWFsb3JhIHZlbmlzc2VybyBjYW1iaWF0aSBkYWxsJ0lucHV0ICoqRWxlbWVudHMqKi5cclxuICAgKiBcclxuICAgKiBTZSBsJ0lEIGRpIHVuIG5vZG8gw6ggdWd1YWxlIGFsbCdJRCBkaSB1biBub2RvIHByZXNlbnRlIGluIHByZWNlZGVuemEsIGlsIG51b3ZvIG5vZG8gbmUgZXJlZGl0ZXLDoCBsYSBwb3NpemlvbmVcclxuICAgKi9cclxuICBASW5wdXQoKSBQcmVzZXJ2ZUVsZW1lbnRzUG9zaXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBRdWFsb3JhIHZlbmlzc2UgbW9kaWZpY2F0byBsJ0lucHV0ICoqRWxlbWVudHMqKiwgcGl1dHRvc3RvIGNoZSBtZXR0ZXJlIHNlbXBsaWNlbWVudGUgaWwgbnVvdm8gRWxlbWVudG8gaW4gYmFzZSBhbCBMYXlvdXQgcHJlY2VkZW50ZSwgYXBwbGljYSBhbmNoZSB1bidhbmltYXppb25lIFxyXG4gICAqIFxyXG4gICAqIEZ1bnppb25hIHNvbGFtZW50ZSBzZSBpbCAqKkxheW91dCoqIGNvcnJlbnRlIGRlbCBkaWFncmFtbWEgc3VwcG9ydGEgbGUgYW5pbWF6aW9uaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEFuaW1hdGVMYXlvdXRDaGFuZ2VzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQXR0aXZhIHVuYSBtb2RhbGl0w6AgZGkgc2VsZXppb25lIFwic21hcnRcIi4uLiBvIHBlcmxvbWVubyBcInNtYXJ0ZXJcIiBkZWwgZGVmYXVsdCBkaSBDeXRvc2NhcGUuXHJcbiAgICogXHJcbiAgICogLSBJbCBjbGljayBkaSB1biBlbGVtZW50byBub24gc2VsZXppb25hdG8gbG8gc2VsZXppb25hXHJcbiAgICogLSBJbCBjbGljayBkaSB1biBlbGVtZW50byBzZWxlemlvbmF0byBsbyBkZXNlbGV6aW9uYVxyXG4gICAqIC0gTG8gc3RhdG8gZGkgc2VsZXppb25lIHZpZW5lIHBlcnNpc3RpdG8gc3VsbCdvZ2dldHRvIG9yaWdpbmFsZSBpbnZlY2UgZGkgcmltYW5lcmUgaW4gdW4gaW50ZXJuYWxcclxuICAgKiAtIEFsbCdhc3NlZ25hemlvbmUgZGkgb2dnZXR0aSBzZWxlemlvbmF0aSwgcXVlc3RpIHZlbmdvbm8gbWFyY2F0aSBjb3JyZXR0YW1lbnRlIGNvbiBsJ292ZXJsYXkgZGkgc2VsZXppb25lXHJcbiAgICogXHJcbiAgICogTi5COiBsYSBjaGlhbWF0YSBhbGwnZXZlbnRvICoqb25Ob2RlQ2xpY2sqKiBhdnZpZW5lICoqRE9QTyoqIGxhIGdlc3Rpb25lIGRlbGxhIHNlbGV6aW9uZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFNtYXJ0U2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBkaSBzZWxlemlvbmFyZSB1biBlbGVtZW50byBwZXIgdm9sdGEgcXVhbG9yYSAqKlNtYXJ0U2VsZWN0aW9uKiogZm9zc2UgYXR0aXZvXHJcbiAgICovXHJcbiAgQElucHV0KCkgU2luZ2xlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIENTUyBwZXIgbGEgZ3JhZmljYXppb25lIGRlbGxhIHNlbGV6aW9uZSBkZWkgbm9kaS4gUXVhbmRvIHVuIG5vZG8gdmVycsOgIHNlbGV6aW9uYXRvIGF2csOgIHNvcHJhIGRpIHNlIHVuIG92ZXJsYXkgY2hlICdzYm9yZGEnIGRpICoqb3ZlcmxheS1wYWRkaW5nKiogcGl4ZWwsXHJcbiAgICogZGkgY29sb3JlICoqb3ZlcmxheS1jb2xvcioqIGUgY29uIHVuIG9wYWNpdMOgICoqb3ZlcmxheS1vcGFjaXR5KipcclxuICAgKiBcclxuICAgKiBBc3NlZ25hbmRvIFwie31cIiBhIHF1ZXN0byBpbnB1dCwgbGEgU21hcnQgc2VsZWN0aW9uIHZpZW5lIGdlc3RpdGEgbWEgbGEgZ2VzdGlvbmUgZ3JhZmljYSDDqCBhZmZpZGF0YSBhbGwndXRlbnRlLFxyXG4gICAqIGFkIGVzZW1waW8gdXNhbmRvIGRlaSAqKk5vZGVIVE1MVGVtcGxhdGVzKiogY2hlIGRlZmluaXNjYW5vIHNlbGV0dG9yaSBzdSBub2RpIFwiOnNlbGVjdGVkXCJcclxuICAgKiBcclxuICAgKiBAZGVmYXVsdCB7J292ZXJsYXktY29sb3InOidibHVlJywnb3ZlcmxheS1vcGFjaXR5JzowLjUsJ292ZXJsYXktcGFkZGluZyc6N31cclxuICAgKi9cclxuICBASW5wdXQoKSBTbWFydFNlbGVjdGlvblN0eWxlczogeyAnb3ZlcmxheS1jb2xvcic6IHN0cmluZywgJ292ZXJsYXktb3BhY2l0eSc6IG51bWJlciwgJ292ZXJsYXktcGFkZGluZyc6IG51bWJlciB9ID0gbnVsbFxyXG5cclxuICAvKipcclxuICAgKiBQZXJpb2RvIGRpIHRocm90dGxlIGRhIHF1YW5kbyB2aWVuZSBlZmZldHR1YXRvIHVuIHJlc2l6ZSBhIHF1YW5kbyByaWNhbGNvbGFyZSBsZSBkaW1lbnNpb25pIGRlbCBkaWFncmFtbWEuXHJcbiAgICogXHJcbiAgICogUHXDsiBlc3NlcmUgdGVudXRvIGEgMCAocmVkcmF3IGlzdGFudGFuZW8pIGZpbmNow6kgbm9uIGNpIHNvbm8gcHJvYmxlbWkgZGkgcHJlc3RhemlvbmkgY29uIGV2ZW50dWFsbWVudGUgdGFudGkgcmVzaXplIGEgcG9jYSBkaXN0YW56YSBsJ3VubyBkYWxsJ2FsdHJvLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFJlc2l6ZVRocm90dGxlVGltZTogbnVtYmVyID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogTGF5b3V0IGRpIG9yZGluYW1lbnRvIGRlaSBub2RpXHJcbiAgICovXHJcbiAgQElucHV0KCkgTGF5b3V0OiBCcmVhZHRoRmlyc3RMYXlvdXRPcHRpb25zSW1wbCB8IENpcmNsZUxheW91dE9wdGlvbnNJbXBsIHwgQ29uY2VudHJpY0xheW91dE9wdGlvbnNJbXBsIHxcclxuICAgIENvc2VMYXlvdXRPcHRpb25zSW1wbCB8IERhZ3JlTGF5b3V0T3B0aW9uc0ltcGwgfCBHcmlkTGF5b3V0T3B0aW9uc0ltcGwgfCBOdWxsTGF5b3V0T3B0aW9uc0ltcGwgfCBQcmVzZXRMYXlvdXRPcHRpb25zSW1wbCB8XHJcbiAgICBSYW5kb21MYXlvdXRPcHRpb25zSW1wbDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGVtcGxhdGUgSFRNTCBkYSBhcHBsaWNhcmUgYWkgbm9kaSBwZXIgZGFyZ2xpIHN0aWxpIHBhcnRpY29sYXJpLCBkaXZlcnNpIGRhbGxlIHNoYXBlIGRpIGRlZmF1bHRcclxuICAgKi9cclxuICBASW5wdXQoKSBOb2RlSFRNTFRlbXBsYXRlczogTm9kZUhUTUxUZW1wbGF0ZVtdO1xyXG5cclxuICAvKipcclxuICAgKiBGb3JuaXNjZSBpbCBnbG9iYWwgZGVsbGEgbGlicmVyaWEgKG5hbWVzcGFjZSAqKmN5dG9zY2FwZSoqKSBlIHNpIGFzcGV0dGEgY2hlIGRvcG8gb3BlcmF6aW9uaSBkaSBpbXBvcnRhemlvbmUgXHJcbiAgICogbGFzY2lhdGUgYWxsJ3V0ZW50ZSB2ZW5nYW5vIGFnZ2l1bnRpIHR1dHRpIGkgbW9kdWxpIGRlc2lkZXJhdGkuIFxyXG4gICAqIFxyXG4gICAqIMOIICoqZm9uZGFtZW50YWxlKiogY2hlIGlsIHByaW1vIHBhcmFtZXRybyAoaWwgbm9tZSBkZWwgbW9kdWxvKSBzaWEgdWd1YWxlIGEgY2nDsiBkaSBjdWkgdmllbmUgZmF0dG8gaWwgcmVxdWlyZSBpbiBtb2RvIGNoZSBsYSBsaWJyZXJpYVxyXG4gICAqIHBvc3NhIGNvbnRyb2xsYXJlIGNoZSBpbCBtb2R1bG8gaW1wb3J0YXRvIG5vbiBzaWEgZ2nDoCBzdGF0byBpbXBvcnRhdG8gaW4gcHJlY2VkZW56YVxyXG4gICAqIFxyXG4gICAqICMjIEVzZW1waW86XHJcbiAgICogXHJcbiAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAqIChnbG9iYWwpID0+IHtcclxuICAgKiAgICByZXR1cm4gaW1wb3J0KFwiY3l0b3NjYXBlLWV4dGVuc2lvbi1saWJyYXJ5XCIpLnRoZW4obW9kdWxlID0+IGdsb2JhbC51c2UoXCJjeXRvc2NhcGUtZXh0ZW5zaW9uLWxpYnJhcnlcIiwgbW9kdWxlLmRlZmF1bHQpKTtcclxuICAgKiBcclxuICAgKiAgICAuLi5cclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQElucHV0KCkgRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyOiAoZ2xvYmFsOiB7IHVzZTogKG1vZHVsZU5hbWU6IHN0cmluZywgbW9kdWxlOiB2b2lkIHwgY3l0b3NjYXBlLkV4dCkgPT4gdm9pZCB9KSA9PiBQcm9taXNlPGFueT4gPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBGb3JuaXNjZSBsJ2lzdGFuemEgYXR0dWFsZSBkaSBDeXRvc2NhcGUgZGEgY3VpIMOoIHBvc3NpYmlsZSBwcmVuZGVyZSBsZSBsaWJyZXJpZSBkaSBlc3RlbnNpb25lIGNhcmljYXRlIGluICoqRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKipcclxuICAgKiBlIGNvbmZpZ3VyYXJsZSBpbiBiYXNlIGFpIGNvbXBvcnRhbWVudGkgc3BlY2lmaWNpXHJcbiAgICogXHJcbiAgICogIyMgRXNlbXBpbzpcclxuICAgKiBcclxuICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICogKGN5dG9zY2FwZUNvcmUpID0+IHtcclxuICAgKiAgICAvLyBGYXJlIHF1ZXN0byBsYXZvcm8gcGVyIG9nbmkgZXN0ZW5zaW9uZSBjYXJpY2F0YVxyXG4gICAqICAgIGxldCBleHRlbnNpb25Db25maWd1cmF0aW9uID0geyAuLi4gfTtcclxuICAgKiAgICBsZXQgZXh0ZW5zaW9uSW5zdGFuY2UgPSBjeXRvc2NhcGVDb3JlLmV4dGVuc2lvbkxpYnJhcnkoZXh0ZW5zaW9uQ29uZmlndXJhdGlvbik7XHJcbiAgICogICAgZXh0ZW5zaW9uSW5zdGFuY2UuZG9Tb21ldGhpbmdTcGVjaWZpY1RvVGhpc0V4dGVuc2lvbigpO1xyXG4gICAqIFxyXG4gICAqICAgIC4uLlxyXG4gICAqIH1cclxuICAgKiBgYGBcclxuICAgKi9cclxuICBASW5wdXQoKSBFeHRlbnNpb25Nb2R1bGVzQXBwbHllcjogKGN5dG9zY2FwZUNvcmU6IGN5dG9zY2FwZS5Db3JlKSA9PiB2b2lkID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGxhbmNpYXRvIGFsIGNsaWNrIGRpIHVuIG5vZG8sIGNvbnRpZW5lIGwnb2dnZXR0byAqKmRhdGEqKiBkZWwgbm9kbyBpbiBxdWVzdGlvbmVcclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25Ob2RlQ2xpY2s6IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnkgfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGxhbmNpYXRvIGFsbGEgc2VsZXppb25lIG8gZGVzZWxlemlvbmUgZGkgdW4gbm9kbywgY29udGllbmUgbCdvZ2dldHRvICoqZGF0YSoqIGRlbCBub2RvIGluIHF1ZXN0aW9uZSBlIGluZm9ybWF6aW9uaSBzdWwgc3VvIHN0YXRvIGRpIHNlbGV6aW9uZVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvbk5vZGVTZWxlY3Rpb246IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSwgc2VsZWN0ZWQ6IGJvb2xlYW4gfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55LCBzZWxlY3RlZDogYm9vbGVhbiB9PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gbGFuY2lhdG8gYWwgdGVybWluZSBkZWwgY2FyaWNhbWVudG8gZGVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvbkxvYWRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBWYXJpYWJpbGUgc3UgY3VpIHNhbHZhcnNpIHNlIGkgbm9kaSBoYW5ubyB1bmEgZ2VyYXJjaGlhIGEgZ3J1cHBpIG8gbm8uIFNlcnZlIHBlciBwb2kgY2FyaWNhcmUgbCdlc3RlbnNpb25lIGV4cGFuZC1jb2xsYXBzZSBxdWFsb3JhIGZvc3NlIHJpY2hpZXN0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgTm9kZXNIaWVyYXJjaHk6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSBpbCByZW5kZXJpbmcgZGVsIGRpYWdyYW1tYSDDqCB0ZXJtaW5hdG9cclxuICAgKi9cclxuICBwcml2YXRlIFJlbmRlcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIElzdGFuemEgZGVsIGRpYWdyYW1tYSBhdHR1YWxtZW50ZSBpbiB1c29cclxuICAgKi9cclxuICBwdWJsaWMgY3k6IGN5dG9zY2FwZS5Db3JlXHJcblxyXG4gIC8qKlxyXG4gICAqIEFwaSBkZWxsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlIHBlciBwZXJtZXR0ZXJlIGRpIGVmZmV0dHVhcmUgb3BlcmF6aW9uaSBkYWxsJ2VzdGVybm8gZGVsIGRpYWdyYW1tYS4gVmVuZ29ubyB2YWxvcml6emF0ZSBzZSAqKlVzZUV4cGFuZENvbGxhcHNlKiogw6ggKip0cnVlKipcclxuICAgKi9cclxuICBwdWJsaWMgRXhwYW5kQ29sbGFwc2VBcGk6IGFueSA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwaSBkZWxsJ2VzdGVuc2lvbmUgaHRtbC1ub2RlIHBlciBwZXJtZXR0ZXJlIGRpIGVmZmV0dHVhcmUgb3BlcmF6aW9uaSBkYWxsJ2VzdGVybm8gZGVsIGRpYWdyYW1tYS4gVmVuZ29ubyB2YWxvcml6emF0ZSBzZSBzb25vIGltcG9zdGF0aSBkZWkgKipOb2RlSFRNTFRlbXBsYXRlcyoqXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBIdG1sTm9kZUFwaTogYW55ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogT3NzZXJ2YXRvcmUgZGVsbGUgbW9kaWZpY2hlIGFsIGNvbnRlbml0b3JlIGRlbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVTZW5zb3I7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpZmVyaW1lbnRvIGFsbCd1bHRpbW8gbGF5b3V0IHV0aWxpenphdG8uIFZpZW5lIHJpYXBwbGljYXRvIHF1YWxvcmEgdmVuaXNzZSBjYW1iaWF0byBsJ0lucHV0ICoqRWxlbWVudHMqKi5cclxuICAgKiBcclxuICAgKiBOb24gdXRpbGl6em8gaWwgbWFrZUxheW91dHMgcGVyY2jDqSBhbHRyaW1lbnRpIHJpc2NoaWVyZWkgZGkgY3JlYXJlIHVuIGxheW91dCByaWZlcml0byBhIFggZWxlbWVudGksIG5lIGFnZ2l1bmdvIDEsIHJpYXBwbGljbyBpbCBMYXlvdXQgXHJcbiAgICogbWEgbWkgdmllbmUgcmlhcHBsaWNhdG8gYSBYIGVsZW1lbnRpIGludmVjZSBjaGUgWCArIDFcclxuICAgKi9cclxuICBwcml2YXRlIExhc3RMYXlvdXQ6IGN5dG9zY2FwZS5MYXlvdXRPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBDb3N0cnV0dG9yZVxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwcml2YXRlIHNlcnZpY2U6IEVzRGlhZ3JhbVNlcnZpY2UsIEBPcHRpb25hbCgpIHByaXZhdGUgZGlzcGF0Y2hlcjogRXNEaWFncmFtRGlzcGF0Y2hlciwgcHJpdmF0ZSBleHRzOiBSZWFjdGl2ZUV4dGVuc2lvbnMpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlIFxyXG4gICAqIFxyXG4gICAqIEFuZ3VsYXIgUGlwZWxpbmVcclxuICAgKi9cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKCF0aGlzLnNlcnZpY2UgfHwgIXRoaXMuZGlzcGF0Y2hlcilcclxuICAgICAgdGhyb3cgXCJJbCBtb2R1bG8gQGVzZmFlbnphL2RpYWdyYW1zIG5vbiDDqCBzdGF0byBpbXBvcnRhdG8gY29uIGlsIGZvclJvb3QoKTtcIjtcclxuXHJcbiAgICB0aGlzLmRpc3BhdGNoTG9hZENoYXJ0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGwnb25EZXN0cm95IHJpcHVsaXNjbyBsYSBtZW1vcmlhIGRhbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLmN5KSB7XHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRGlhZ3JhbVwiICsgXCIgXCIgKyB0aGlzLm5hbWUgKyBcIjogVW5sb2FkaW5nIGRlc3Ryb3llZCBkaWFncmFtXCIsIGZhbHNlKTtcclxuICAgICAgdGhpcy5jeS5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5kZXJlZ2lzdGVyKHRoaXMubmFtZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiQ2hhcnQgXCIgKyB0aGlzLm5hbWUgKyBcIjogVW5sb2FkaW5nIHVuY3JlYXRlZCBjaGFydCBjb21wb25lbnQuIEl0IHByb2JhYmx5IHdhcyBhIGR1cGxpY2F0ZWRcIiwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0cmEgaWwgZGlhZ3JhbW1hIGF0dHVhbGUgbmVsIERpc3BhdGNoZXIgaW4gbW9kbyBjaGUgdmVuZ2EgY2FyaWNhdG8gYXBwZW5hIHBvc3NpYmlsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGlzcGF0Y2hMb2FkQ2hhcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc3BhdGNoZXIucmVnaXN0ZXIodGhpcy5uYW1lLCAoKSA9PiB7IHJldHVybiB0aGlzLnJlbmRlcigpOyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmUgXHJcbiAgICogXHJcbiAgICogQW5ndWxhciBQaXBlbGluZTogR2VzdGlvbmUgcmktZ3JhZmljYXppb25lIGRlbCBkaWFncmFtbWEsIHNlIHBvc3NpYmlsZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYW55IHtcclxuICAgIGxldCB0b0NoZWNrID0gW1wiVGVtcGxhdGVzXCIsIFwiVXNlQ29udGV4dE1lbnVcIiwgXCJDb250ZXh0TWVudU9wdGlvbnNcIiwgXCJVc2VFeHBhbmRDb2xsYXBzZVwiLCBcIkV4cGFuZENvbGxhcHNlT3B0aW9uc1wiLCBcIk5vZGVTdHlsZXNcIiwgXCJFZGdlU3R5bGVzXCIsIFwiTmF0aXZlT3B0aW9uc1wiXTtcclxuXHJcbiAgICBpZiAodGhpcy5SZW5kZXJlZCAmJiB0b0NoZWNrLnNvbWUodCA9PiBjaGFuZ2VzW3RdKSlcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIldcIiwgXCJSZWRyYXcgYmFzZWQgb24gZHluYW1pYyBJbnB1dCBjaGFuZ2UgaXMgc3VwcG9ydGVkIG9ubHkgZm9yICdFbGVtZW50cycgYW5kICdMYXlvdXQnIGlucHV0cywgcGxlYXNlIGRlc3Ryb3kgdGhlIGNvbXBvbmVudCBhbmQgcmVjcmVhdGUgaXQgd2l0aCB0aGUgbmV3IHNldHRpbmdzXCIpO1xyXG5cclxuICAgIGxldCBlbGVtZW50Q2hhbmdlcyA9IGNoYW5nZXNbXCJFbGVtZW50c1wiXTtcclxuICAgIGxldCBsYXlvdXRDaGFuZ2VzID0gY2hhbmdlc1tcIkxheW91dFwiXTtcclxuICAgIGlmIChlbGVtZW50Q2hhbmdlcyAmJiAhZWxlbWVudENoYW5nZXMuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJFbGVtZW50cyBoYXZlIGJlZW4gY2hhbmdlZCBhZnRlciBkaWFncmFtIGluaXRpYWxpemF0aW9uXCIpO1xyXG5cclxuICAgICAgLy8gQ2FtYmlhbWVudG8gYWdsaSBFbGVtZW50aTogcmlwdWxpc2NvIGdsaSBlbGVtZW50aSB2ZWNjaGksIHByZW5kbyBpIG51b3ZpLCBsaSBzaXN0ZW1vIGUgbGkgcmlhc3NlZ25vLiBcclxuICAgICAgLy8gU2UgaWwgbnVvdm8gSW5wdXQgRWxlbWVudHMgw6ggcm9iYSBzdHJhbmEgbWkgbGltaXRvIGEgcmlwdWxpcmUgaWwgZGlhZ3JhbW1hXHJcbiAgICAgIC8vIFNlIGN5dG9zY2FwZSBhdmV2YSBnacOgIGRlZ2xpIGVsZW1lbnRpIHByZWNlZGVudGVtZW50ZSBuZSBwcmVuZG8gbGUgcG9zaXppb25pIGluIG1vZG8gZGEgcmlkaXNlZ25hcmxpIHBhcnRlbmRvIGRhbGxvIHN0ZXNzbyBwdW50byAoY2FyaW5vIHBlciBsZSBhbmltYXppb25pKVxyXG4gICAgICBsZXQgZWxlbWVudHMgPSBlbGVtZW50Q2hhbmdlcz8uY3VycmVudFZhbHVlO1xyXG4gICAgICBsZXQgcHJldmlvdXNfZWxlbWVudHMgPSB0aGlzLlByZXNlcnZlRWxlbWVudHNQb3NpdGlvbiA/IDxhbnk+dGhpcy5jeS5ub2RlcygpIDogbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuY3kuZWxlbWVudHMoKS5yZW1vdmUoKTtcclxuICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aCAmJiBlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5yZXZpZXdDeXRvc2NhcGVFbGVtZW50cyhlbGVtZW50cywgcHJldmlvdXNfZWxlbWVudHMpO1xyXG4gICAgICAgIHRoaXMuY3kuYWRkKGVsZW1lbnRzKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU21hcnRTZWxlY3Rpb24pXHJcbiAgICAgICAgICB0aGlzLnNldHVwRWxlbWVudHNTZWxlY3Rpb25JZk5lZWRlZCgpO1xyXG5cclxuICAgICAgICAvLyBTZSBzb2xvIGdsaSBlbGVtZW50aSBjYW1iaWFubywgcmlhcHBsaWNvIGlsIExheW91dCBwcmVjZWRlbnRlXHJcbiAgICAgICAgaWYgKCFsYXlvdXRDaGFuZ2VzICYmIHRoaXMuTGFzdExheW91dCkge1xyXG5cclxuICAgICAgICAgIC8vIFNlIGRldm8gYW5pbWFyZSBsZSBtb2RpZmNoZSBhbCBsYXlvdXQgZm9yem8gaWwgcGFyYW1ldHJvIHJlbGF0aXZvXHJcbiAgICAgICAgICBpZiAodGhpcy5BbmltYXRlTGF5b3V0Q2hhbmdlcylcclxuICAgICAgICAgICAgKDxhbnk+dGhpcy5MYXN0TGF5b3V0KS5hbmltYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB0aGlzLmN5LmxheW91dCh0aGlzLkxhc3RMYXlvdXQpLnJ1bigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlIGlsIGxheW91dCBjYW1iaWEgbG8gYXBwbGljbyBlIG1lIGxvIHNhbHZvIGNvbWUgbGF5b3V0IHByZWNlZGVudGUgcGVyIGlsIGZ1dHVyb1xyXG4gICAgaWYgKGxheW91dENoYW5nZXMgJiYgIWxheW91dENoYW5nZXMuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJMYXlvdXQgaGF2ZSBiZWVuIGNoYW5nZWQgYWZ0ZXIgZGlhZ3JhbSBpbml0aWFsaXphdGlvblwiKTtcclxuICAgICAgdGhpcy5MYXN0TGF5b3V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsYXlvdXRDaGFuZ2VzLmN1cnJlbnRWYWx1ZSkpO1xyXG4gICAgICB0aGlzLmN5LmxheW91dCh0aGlzLkxhc3RMYXlvdXQpLnJ1bigpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFZmZldHR1YSBpbCByZW5kZXJpbmcgZGVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyKCkge1xyXG5cclxuICAgIC8vIFRpcm8gZnVvcmkgbGUgb3B6aW9uaSBjb24gY3VpIGdlbmVyYXJlIGlsIGRpYWdyYW1tYVxyXG4gICAgbGV0IGN5T3B0aW9ucyA9IHRoaXMuZ2V0Q29tcGxldGVkT3B0aW9ucygpO1xyXG4gICAgdGhpcy5Ob2Rlc0hpZXJhcmNoeSA9IGN5T3B0aW9ucy5lbGVtZW50cyAmJiAoPGN5Xy5FbGVtZW50RGVmaW5pdGlvbltdPmN5T3B0aW9ucy5lbGVtZW50cykuc29tZSh0ID0+IHQuZGF0YS5wYXJlbnQpO1xyXG5cclxuICAgIC8vIENhcmljbyBldmVudHVhbGkgY2xhc3NpIGRpIGVzdGVuc2lvbmUgY2hlIHNlcnZvbm9cclxuICAgIGF3YWl0IHRoaXMucGVyZm9ybU1vZHVsZXNMb2FkaW5nKCk7XHJcblxyXG4gICAgLy8gR2VuZXJvIGlsIGRpYWdyYW1tYVxyXG4gICAgdGhpcy5jeSA9IGN5dG9zY2FwZShjeU9wdGlvbnMpO1xyXG5cclxuICAgIC8vIENvbGxlZ28gZ2xpIGV2ZW50aSBhbCBjb21wb25lbnRlXHJcbiAgICB0aGlzLmJpbmRDeXRvc2NhcGVFdmVudHMoKTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBsZSBjbGFzc2kgZGkgZXN0ZW5zaW9uZSBjYXJpY2F0ZSBwcmVjZWRlbnRlbWVudGUgcGVyIGZhcmUgaWwgcmVzdG8gZGVsbGUgbWllIG9wZXJhemlvbmlcclxuICAgIHRoaXMucGVyZm9ybU9wZXJhdGlvbnNXaXRoTG9hZGVkTW9kdWxlcygpO1xyXG5cclxuICAgIC8vIEltcG9zdG8gbGEgdmFyaWFiaWxlIFJlbmRlcmVkIGEgdHJ1ZSBpbiBtb2RvIGNoZSBzZSBkYSBhZGVzc28gdmVuZ29ubyBmYXR0ZSBtb2RpZmljaGUgY2hlIGRvdnJlYmJlcm8gY2F1c2FyZSB1biByZWRyYXcgcG9zc28gYWNjb3JnZXJtZW5lXHJcbiAgICAvLyBlIG1hbmRhcmUgYSBjYWdhcmUgbG8gc3Ryb256byBkaSB0dXJub1xyXG4gICAgdGhpcy5SZW5kZXJlZCA9IHRydWU7XHJcblxyXG4gICAgLy8gU2UgZGV2byBhZ2dpb3JuYXJlIGluIGF1dG9tYXRpY28gaW4gYmFzZSBhbGxhIGRpbWVuc2lvbmUgZGVsIGNvbnRlbml0b3JlIGNvbGxlZ28gaWwgUmVzaXplT2JzZXJ2ZXJcclxuICAgIGlmICh0aGlzLkF1dG91cGRhdGVTaXplKVxyXG4gICAgICB0aGlzLmxpc3Rlbk9uQ2hhbmdlcygpO1xyXG5cclxuICAgIGlmICh0aGlzLlNtYXJ0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2V0dXBTZWxlY3Rpb25TdHlsZXMoKTtcclxuICAgICAgdGhpcy5zZXR1cEVsZW1lbnRzU2VsZWN0aW9uSWZOZWVkZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uTG9hZGVkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZW5kZSB0dXR0aSBnbGkgZWxlbWVudGkgYXBwZW5hIGFzc2VnbmF0aSwgZSBzZSBxdWFsY3VubyBlcmEgc2VsZXppb25hdG8gbGEgc2l0dWF6aW9uZSB2aWVuZSBwZXJzaXN0aXRhIHN1IGN5dG9zY2FwZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0dXBFbGVtZW50c1NlbGVjdGlvbklmTmVlZGVkKCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBlbGRhdGEgPSA8YW55PnRoaXMuRWxlbWVudHNbaV0uZGF0YTtcclxuICAgICAgaWYgKGVsZGF0YS5fX3NlbGVjdGVkKSB7XHJcbiAgICAgICAgbGV0IGVsID0gdGhpcy5jeS4kaWQoZWxkYXRhLmlkKTtcclxuICAgICAgICBlbC5zZWxlY3QoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FyaWNhIGdsaSBzdGlsaSBwZXIgbW9zdHJhcmUgY2FyaW5hIGxhIHNlbGV6aW9uZSBkZWkgbm9kaVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0dXBTZWxlY3Rpb25TdHlsZXMoKXtcclxuICAgIGxldCBjc3NJdGVtID0gdGhpcy5TbWFydFNlbGVjdGlvblN0eWxlcyB8fCB7XHJcbiAgICAgICdvdmVybGF5LWNvbG9yJzogJ2JsdWUnLFxyXG4gICAgICAnb3ZlcmxheS1vcGFjaXR5JzogMC41LFxyXG4gICAgICAnb3ZlcmxheS1wYWRkaW5nJzogN1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBCYWNrZG9vciBwZXIgcG90ZXIgYXNzZWduYXJlIFwie31cIiBhIFNtYXJ0U2VsZWN0aW9uU3R5bGVzIGluIG1vZG8gZGkgdXRpbGl6emFyZSBsYSBzbWFydCBzZWxlY3Rpb24gbWEgc2VuemEgY2hlIG5lc3N1bm8gc3RpbGUgdmVuZ2EgYXBwbGljYXRvXHJcbiAgICAvLyBhZCBlc2VtcGlvIHF1YWxvcmEgc2kgdm9sZXNzZSB1dGlsaXp6YXJlIGwnaHRtbG5vZGUgcGVyIGdlc3RpcmUgbGEgZ3JhZmljYSBkZWdsaSBlbGVtZW50aSBzZWxlemlvbmF0aVxyXG4gICAgaWYoY3NzSXRlbVsnb3ZlcmxheS1jb2xvciddICYmIGNzc0l0ZW1bJ292ZXJsYXktb3BhY2l0eSddICYmIGNzc0l0ZW1bJ292ZXJsYXktcGFkZGluZyddKVxyXG4gICAgICAoPGFueT50aGlzLmN5LnN0eWxlKCkpLnNlbGVjdG9yKCdub2RlOnNlbGVjdGVkJykuY3NzKGNzc0l0ZW0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0cmEgbCdhc2NvbHRvIGFsIGNvbnRlbml0b3JlIGRlbCBncmFmaWNvIGUgaW4gY2FzbyBkaSBtb2RpZmljaGUgYWxsYSBkaW1lbnNpb25lLCBhbCBtYXNzaW1vIHVuYSB2b2x0YSBvZ25pIDUwMCBtaWxsaXNlY29uZGksIGxvIHJpZGlzZWduYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgbGlzdGVuT25DaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVTZW5zb3IodGhpcy5jeUdyYXBoLm5hdGl2ZUVsZW1lbnQsICgpID0+IHtcclxuICAgICAgdGhpcy5leHRzLnRocm90dGxlKHRoaXMubmFtZSwgdGhpcy5vbkNvbnRhaW5lclNpemVDaGFuZ2VkLmJpbmQodGhpcyksIHRoaXMuUmVzaXplVGhyb3R0bGVUaW1lKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuemlvbmUgY2hlIHNpIG9jY3VwYSBkaSBnZXN0aXJlIGlsIHJlcGFpbnQgZGVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgb25Db250YWluZXJTaXplQ2hhbmdlZCgpIHtcclxuICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRGlhZ3JhbSBjb250YWluZXIgc2l6ZSBoYXMgY2hhbmdlZCwgcmVkcmF3aW5nXCIpO1xyXG4gICAgdGhpcy5jeS5yZXNpemUoKTtcclxuICAgIHRoaXMuY3kuZml0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb2xsZWdhIHR1dHRpIGdsaSBldmVudGkgY2hlIG1pIHBvc3Nvbm8gc2VydmlyZSBlIGxpIGVzcG9uZSBpbiBvdXRwdXRcclxuICAgKi9cclxuICBwcml2YXRlIGJpbmRDeXRvc2NhcGVFdmVudHMoKSB7XHJcbiAgICB0aGlzLmN5LmJpbmQoJ2NsaWNrJywgJ25vZGUnLCAoZXZlbnQpID0+IHtcclxuICAgICAgbGV0IHRhcmdldERhdGEgPSBldmVudC50YXJnZXQuZGF0YSgpXHJcbiAgICAgIGlmICh0aGlzLlNtYXJ0U2VsZWN0aW9uKSB7XHJcblxyXG4gICAgICAgIC8vIEluIGNhc28gZGkgc2VsZXppb25lIHNpbmdvbGEgcmlwdWxpc2NvIHR1dHRpIGdsaSBlbGVtZW50aSBwcmVjZWRlbnRlbWVudGUgc2VsZXppb25hdGlcclxuICAgICAgICBpZiAodGhpcy5TaW5nbGVTZWxlY3Rpb24pIHtcclxuICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHRoaXMuY3kuZWxlbWVudHMoJ25vZGU6c2VsZWN0ZWQnKTtcclxuICAgICAgICAgIHNlbGVjdGVkLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgICBlbC5zZWxlY3RpZnkoKTtcclxuICAgICAgICAgICAgZWwudW5zZWxlY3QoKTtcclxuICAgICAgICAgICAgZWwudW5zZWxlY3RpZnkoKTtcclxuICAgICAgICAgICAgZWwuZGF0YShcIl9fc2VsZWN0ZWRcIiwgZmFsc2UpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBpZCA9IHRhcmdldERhdGEuaWRcclxuICAgICAgICBsZXQgZWwgPSB0aGlzLmN5LiRpZChpZCk7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkID0gZWwuc2VsZWN0ZWQoKTtcclxuXHJcbiAgICAgICAgZWwuc2VsZWN0aWZ5KCk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkKVxyXG4gICAgICAgICAgZWwudW5zZWxlY3QoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBlbC5zZWxlY3QoKTtcclxuICAgICAgICBlbC51bnNlbGVjdGlmeSgpO1xyXG5cclxuICAgICAgICAvLyBRdWVzdG8gdmEgYW5jaGUgbmVsbGEgbGlzdGEgZGVnbGkgZWxlbWVudGkgb3JpZ2luYWxpICh0aGlzLkVsZW1lbnRzKSBkYXRvIGNoZSBjeXRvc2NhcGUgbGkgcHJlbmRlIHBlciByaWZlcmltZW50byAoYmJiYmJyYXZvIGN5dG8tY2hhbilcclxuICAgICAgICBlbC5kYXRhKFwiX19zZWxlY3RlZFwiLCAhc2VsZWN0ZWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLm9uTm9kZUNsaWNrLmVtaXQoeyBkYXRhOiB0YXJnZXREYXRhIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jeS5iaW5kKCdzZWxlY3QnLCAnbm9kZScsIChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0RGF0YSA9IGV2ZW50LnRhcmdldC5kYXRhKClcclxuXHJcbiAgICAgIHRoaXMub25Ob2RlU2VsZWN0aW9uLmVtaXQoeyBkYXRhOiB0YXJnZXREYXRhLCBzZWxlY3RlZDogdHJ1ZSB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3kuYmluZCgndW5zZWxlY3QnLCAnbm9kZScsIChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0RGF0YSA9IGV2ZW50LnRhcmdldC5kYXRhKClcclxuXHJcbiAgICAgIHRoaXMub25Ob2RlU2VsZWN0aW9uLmVtaXQoeyBkYXRhOiB0YXJnZXREYXRhLCBzZWxlY3RlZDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBbHRyaSBldmVudGkuLi5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2VydmUgcGVyIGNhcmljYXJlIHR1dHRlIGxlIGVzdGVuc2lvbmkgZGVsbGEgbGlicmVyaWEgaW4gYmFzZSBhIGNpw7IgY2hlIHZpZW5lIHV0aWxpenphdG9cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1Nb2R1bGVzTG9hZGluZygpIHtcclxuICAgIGlmICh0aGlzLkxheW91dC5uYW1lID09ICdkYWdyZScpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWRhZ3JlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMClcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtaHRtbC1ub2RlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbnRlcm5hbChcImN5dG9zY2FwZS1jeHRtZW51XCIpO1xyXG5cclxuICAgIGlmICh0aGlzLk5vZGVzSGllcmFyY2h5ICYmIHRoaXMuVXNlRXhwYW5kQ29sbGFwc2UpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZVwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5FeHRlbnNpb25Nb2R1bGVzSW1wb3J0ZXIpIHtcclxuICAgICAgLy8gV3JhcHBvIGlsIG5hbWVzcGFjZSBpbiBtb2RvIGNoZSBwb3NzYSBkaXJlIGxhIG1pYSBzdWwgZmF0dG8gY2hlIGwndXRlbnRlIGFnZ2l1bmdhIHVuIG1vZHVsbyBvIG1lbm8gOkRcclxuICAgICAgdmFyIHdyYXBwZWRDeXRvc2NhcGUgPSB7XHJcbiAgICAgICAgdXNlOiAobW9kdWxlTmFtZTogc3RyaW5nLCBtb2R1bGU6IGN5dG9zY2FwZS5FeHQpID0+IHtcclxuICAgICAgICAgIGlmICghbW9kdWxlKVxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCB0aGlzLnNlcnZpY2UubG9jKFwiUmVjZWl2ZWQgYW4gdW5kZWZpbmVkIG1vZHVsZS4gTWFrZSBzdXJlIHlvdSBhcmUgY29ycmVjdGx5IGxvYWRpbmcgaXRcIikgKyBcIjogXCIgKyBtb2R1bGVOYW1lLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgaWYgKFtcImN5dG9zY2FwZS1kYWdyZVwiLCBcImN5dG9zY2FwZS1odG1sLW5vZGVcIiwgXCJjeXRvc2NhcGUtY3h0bWVudVwiLCBcImN5dG9zY2FwZS1leHBhbmQtY29sbGFwc2VcIl0uaW5jbHVkZXMobW9kdWxlTmFtZSkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5sb2coXCJXXCIsIHRoaXMuc2VydmljZS5sb2MoXCJNb2R1bGVcIikgKyBcIiBcIiArIG1vZHVsZU5hbWUgKyBcIiBcIiArIHRoaXMuc2VydmljZS5sb2MoXCJpcyBsb2FkZWQgYW5kIG1hbmFnZWQgZGlyZWN0bHkgYnkgdGhpcyBsaWJyYXJ5LiBZb3UgZG9uJ3QgbmVlZCB0byBpbXBvcnQgaXQgb3IgdXNlIGl0IGRpcmVjdGx5LCBqdXN0IGJlIHN1cmUgdG8gc2V0IHRoZSByZWxhdGl2ZSBvcHRpb25zXCIpLCBmYWxzZSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGN5dG9zY2FwZS51c2UobW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKHdyYXBwZWRDeXRvc2NhcGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzZXJ2ZSBwZXIgY2FyaWNhcmUgdHV0dGUgbGUgZXN0ZW5zaW9uaSBkZWxsYSBsaWJyZXJpYSBpbiBiYXNlIGEgY2nDsiBjaGUgdmllbmUgdXRpbGl6emF0byBjb24gbGUgb3B6aW9uaSBkZWZpbml0ZSBkYWdsaSBJbnB1dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGVyZm9ybU9wZXJhdGlvbnNXaXRoTG9hZGVkTW9kdWxlcygpIHtcclxuXHJcbiAgICBsZXQgYW55Q3kgPSAoPGFueT50aGlzLmN5KTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWwgbGF5b3V0LCBsbyBzYWx2byBwZXIgcG90ZXJsbyByaXV0aWxpenphcmUgaW4gZnV0dXJvXHJcbiAgICBpZiAodGhpcy5MYXlvdXQpIHtcclxuICAgICAgdGhpcy5MYXN0TGF5b3V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkxheW91dCkpO1xyXG4gICAgICB0aGlzLmN5LmxheW91dCh0aGlzLkxhc3RMYXlvdXQpLnJ1bigpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXRpbGl6em8gZGVsbCdIVE1MIG5vZGVcclxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkh0bWxOb2RlQXBpID0gYW55Q3kuaHRtbG5vZGUoKTtcclxuICAgICAgdGhpcy5IdG1sTm9kZUFwaS5jcmVhdGVIdG1sTm9kZShjeXRvc2NhcGUsIHRoaXMuY3ksIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFV0aWxpenpvIGRlbCBDb250ZXh0IE1lbnVcclxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxyXG4gICAgICB0aGlzLkNvbnRleHRNZW51T3B0aW9ucy5mb3JFYWNoKG8gPT4geyBhbnlDeS5jeHRtZW51KG8pOyB9KTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWxsJ2V4cGFuZCBjb2xsYXBzZSBzb2xvIHF1YW5kbyBjJ8OoIHVuYSBnZXJhcmNoaWEgZGkgbm9kaVxyXG4gICAgaWYgKHRoaXMuTm9kZXNIaWVyYXJjaHkgJiYgdGhpcy5Vc2VFeHBhbmRDb2xsYXBzZSlcclxuICAgICAgdGhpcy5FeHBhbmRDb2xsYXBzZUFwaSA9IGFueUN5LmV4cGFuZENvbGxhcHNlKHRoaXMuRXhwYW5kQ29sbGFwc2VPcHRpb25zKTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkaSBlc3RlbnNpb25pIGV4dHJhLCBpbXBsZW1lbnRhemlvbmUgYWZmaWRhdGEgYWwgcHJvZ3JhbW1hdG9yZVxyXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIpXHJcbiAgICAgIHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIodGhpcy5jeSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ2FyZERhdGEoKSB7XHJcbiAgICBpZiAoIXRoaXMuSHRtbE5vZGVBcGkpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJDYW5ub3QgdXBkYXRlIE5vZGVIVE1MVGVtcGxhdGVzIGFzIHRoZXkgZG9uJ3Qgc2VlbSB0byBiZSB1c2VkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkh0bWxOb2RlQXBpLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludGVybm8gcGVyIGlsIGNhcmljYW1lbnRvIGRlaSBtb2R1bGkgZGkgZXN0ZW5zaW9uZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7J2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnfSBtb2R1bGVJZCBNb2R1bG8gZGEgY2FyaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGxvYWRJbnRlcm5hbChtb2R1bGVJZDogJ2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnKSB7XHJcbiAgICBsZXQgdG9Mb2FkID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmltcG9ydElmTmVlZGVkKG1vZHVsZUlkKTtcclxuICAgIGlmICh0b0xvYWQpIGN5dG9zY2FwZS51c2UodG9Mb2FkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgYmFzYW5kb3NpIHN1bGxlIG9wemlvbmkgbmF0aXZlIGV2ZW50dWFsbWVudGUgYXNzZWduYXRlIGxlIGNvbXBsZXRhIGNvbiBnbGkgSW5wdXQgYWRkaXppb25hbGlcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Y3lfLkN5dG9zY2FwZU9wdGlvbnN9IE9wemlvbmkgZmluYWxpIHVuaXRlIGRhIElucHV0IGVkIG9wemlvbmkgbmF0aXZlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDb21wbGV0ZWRPcHRpb25zKCk6IGN5Xy5DeXRvc2NhcGVPcHRpb25zIHtcclxuICAgIHZhciBvcHRzOiBjeV8uQ3l0b3NjYXBlT3B0aW9ucyA9IHRoaXMuTmF0aXZlT3B0aW9ucyB8fCB7fTtcclxuICAgIG9wdHMuY29udGFpbmVyID0gdGhpcy5jeUdyYXBoLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBvcHRzLnN0eWxlID0gb3B0cy5zdHlsZSB8fCBbXTtcclxuXHJcbiAgICAvLyBQZXIgdHV0dGUgbGUgY29zZSBwZXIgY3VpIGdsaSBJbnB1dCBoYW5ubyBwcmlvcml0w6Agc292cmFzY3Jpdm8gZ2xpIG9yaWdpbmFsaSBkZWxsZSBvcHppb25pXHJcblxyXG4gICAgaWYgKHRoaXMuTm9kZVN0eWxlcyB8fCB0aGlzLkVkZ2VTdHlsZXMpIHtcclxuICAgICAgb3B0cy5zdHlsZSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5Ob2RlU3R5bGVzKSBvcHRzLnN0eWxlLnB1c2goeyBzZWxlY3RvcjogJ25vZGUnLCBjc3M6IHRoaXMuTm9kZVN0eWxlcyB9KTtcclxuICAgICAgaWYgKHRoaXMuRWRnZVN0eWxlcykgb3B0cy5zdHlsZS5wdXNoKHsgc2VsZWN0b3I6ICdlZGdlJywgY3NzOiB0aGlzLkVkZ2VTdHlsZXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRWxlbWVudHMpXHJcbiAgICAgIG9wdHMuZWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzO1xyXG5cclxuICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoPGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdPm9wdHMuZWxlbWVudHMpO1xyXG5cclxuICAgIGlmICh0aGlzLkxheW91dClcclxuICAgICAgb3B0cy5sYXlvdXQgPSB0aGlzLkxheW91dDtcclxuXHJcbiAgICBpZiAodGhpcy5SZWFkb25seSkge1xyXG4gICAgICAvLyBRdWVzdG8gY29zbyBmYSBlZmZldHRpIHN0cmFuaS4uLi5cclxuICAgICAgLy9vcHRzLmF1dG9sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgIG9wdHMuYXV0b3VuZ3JhYmlmeSA9IHRydWU7XHJcbiAgICAgIG9wdHMuYXV0b3Vuc2VsZWN0aWZ5ID0gZmFsc2U7XHJcbiAgICAgIG9wdHMuYm94U2VsZWN0aW9uRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgIG9wdHMudXNlclpvb21pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICAgIG9wdHMudXNlclBhbm5pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9wdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZ2dpdXN0YW1lbnRpIGRlZ2xpIGVsZW1lbnRpIGRpIEN5dG9zY2FwZS4gXHJcbiAgICogXHJcbiAgICogSSBub2RpIG5vbiB2ZW5nb25vIHRvY2NhdGkuXHJcbiAgICogXHJcbiAgICogUGVyIG9nbmkgZWRnZSB2aWVuZSBjb250cm9sbGF0byBzZSDDqCBzcGVjaWZpY2F0YSB1bmEgc29yZ2VudGUgZWQgdW5hIGRlc3RpbmF6aW9uZSwgaW4gY2FzbyBjb250cmFyaW8gc2kgY2VyY2EgZGkgZGVkdXJsaSBkYWxsJ0lEXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXX0gZWxlbWVudHMgRWxlbWVudGkgZGEgc2lzdGVtYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXZpZXdDeXRvc2NhcGVFbGVtZW50cyhlbGVtZW50czogY3l0b3NjYXBlLkVsZW1lbnREZWZpbml0aW9uW10sIHByZXZQb3NpdGlvbnM/OiBhbnkpIHtcclxuICAgIGxldCBoYXNQcmV2aW91c1Bvc2l0aW9ucyA9IHByZXZQb3NpdGlvbnMgJiYgcHJldlBvc2l0aW9ucy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHBvc2l0aW9uQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBjeXRvc2NhcGUuUG9zaXRpb24gfSA9IHt9O1xyXG5cclxuICAgIGlmIChoYXNQcmV2aW91c1Bvc2l0aW9ucykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgaXRlbSA9IHByZXZQb3NpdGlvbnNbaV07XHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbkNhY2hlW2l0ZW0uZGF0YSgpLmlkXSlcclxuICAgICAgICAgIHBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdID0gaXRlbS5wb3NpdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZWwgPSBlbGVtZW50c1tpXTtcclxuICAgICAgaWYgKGVsLmdyb3VwID09IFwiZWRnZXNcIiAmJiAoIWVsLmRhdGEuc291cmNlICYmICFlbC5kYXRhLnRhcmdldCkpIHtcclxuICAgICAgICBpZiAoIWVsLmRhdGEuaWQuaW5jbHVkZXMoXCItXCIpKVxyXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNvdXJjZSBhbmQgYSB0YXJnZXQgZm9yIGFuIGVkZ2UgeW91IGhhdmUgdG8gd3JpdGUgaXRzIGlkIGluIHRoZSBmb3JtYXQge3NvdXJjZX0te3RhcmdldH1cIik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YXIgc291cmNlVGFyZ2V0ID0gZWwuZGF0YS5pZC5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgZWwuZGF0YS5zb3VyY2UgPSBzb3VyY2VUYXJnZXRbMF0udHJpbSgpO1xyXG4gICAgICAgICAgZWwuZGF0YS50YXJnZXQgPSBzb3VyY2VUYXJnZXRbMV0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGhhc1ByZXZpb3VzUG9zaXRpb25zICYmIGVsLmdyb3VwID09IFwibm9kZXNcIilcclxuICAgICAgICBlbC5wb3NpdGlvbiA9IHBvc2l0aW9uQ2FjaGVbZWwuZGF0YS5pZF1cclxuICAgIH1cclxuICB9XHJcbn0iXX0=
|
|
518
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQUUsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFnQmpJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxjQUFjLENBQUEsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXBDOztHQUVHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQStON0I7Ozs7T0FJRztJQUNILFlBQWdDLE9BQXlCLEVBQXNCLFVBQStCLEVBQVUsSUFBd0I7UUFBaEgsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBc0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFvQjtRQTdOaEo7O1dBRUc7UUFDTSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRTNCOztXQUVHO1FBQ00sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFTekM7O1dBRUc7UUFDTSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFPNUM7Ozs7V0FJRztRQUNNLGtCQUFhLEdBQStCLEVBQUUsQ0FBQztRQXNCeEQ7O1dBRUc7UUFDTSxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUV4Qzs7OztXQUlHO1FBQ00sNkJBQXdCLEdBQVksSUFBSSxDQUFDO1FBRWxEOzs7O1dBSUc7UUFDTSx5QkFBb0IsR0FBWSxJQUFJLENBQUM7UUFFOUM7Ozs7Ozs7OztXQVNHO1FBQ00sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFekM7O1dBRUc7UUFDTSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUUxQzs7Ozs7Ozs7V0FRRztRQUNNLHlCQUFvQixHQUFzRixJQUFJLENBQUE7UUFFdkg7Ozs7V0FJRztRQUNNLHVCQUFrQixHQUFXLENBQUMsQ0FBQztRQWN4Qzs7Ozs7Ozs7Ozs7Ozs7OztXQWdCRztRQUNNLDZCQUF3QixHQUFrRyxJQUFJLENBQUM7UUFFeEk7Ozs7Ozs7Ozs7Ozs7Ozs7V0FnQkc7UUFDTSw0QkFBdUIsR0FBNEMsSUFBSSxDQUFDO1FBRWpGOztXQUVHO1FBQ08sZ0JBQVcsR0FBZ0MsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFFdkY7O1dBRUc7UUFDTyxvQkFBZSxHQUFtRCxJQUFJLFlBQVksRUFBb0MsQ0FBQztRQUVqSTs7V0FFRztRQUNPLGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEU7O1dBRUc7UUFDTyxhQUFRLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFPbEU7O1dBRUc7UUFDSyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBT2xDOztXQUVHO1FBQ0ksc0JBQWlCLEdBQVEsSUFBSSxDQUFDO1FBRXJDOztXQUVHO1FBQ0ssZ0JBQVcsR0FBUSxJQUFJLENBQUM7SUFvQm9ILENBQUM7SUFFcko7Ozs7T0FJRztJQUNJLGVBQWU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNuQyxNQUFNLHNFQUFzRSxDQUFDO1FBRS9FLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLCtCQUErQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZDOztZQUVDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxxRUFBcUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLE9BQXNCO1FBQ3ZDLElBQUksT0FBTyxHQUFHLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFL0osSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLCtKQUErSixDQUFDLENBQUM7UUFFekwsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxJQUFJLGNBQWMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUU7WUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLHlEQUF5RCxDQUFDLENBQUM7WUFFakYsd0dBQXdHO1lBQ3hHLDZFQUE2RTtZQUM3RSw4SkFBOEo7WUFDOUosSUFBSSxRQUFRLEdBQUcsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLFlBQVksQ0FBQztZQUM1QyxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRXBGLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUIsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFdEIsSUFBSSxJQUFJLENBQUMsY0FBYztvQkFDckIsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7Z0JBRXhDLGdFQUFnRTtnQkFDaEUsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUVyQyxvRUFBb0U7b0JBQ3BFLElBQUksSUFBSSxDQUFDLG9CQUFvQjt3QkFDckIsSUFBSSxDQUFDLFVBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUV4QyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQ3ZDO2FBQ0Y7U0FDRjtRQUVELG9GQUFvRjtRQUNwRixJQUFJLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7WUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLHVEQUF1RCxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO1NBQ3RDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ1csTUFBTTs7WUFFbEIsc0RBQXNEO1lBQ3RELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLFFBQVEsSUFBOEIsU0FBUyxDQUFDLFFBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRW5ILG9EQUFvRDtZQUNwRCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBRW5DLHNCQUFzQjtZQUN0QixJQUFJLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUvQixtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFFM0IsbUdBQW1HO1lBQ25HLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1lBRTFDLDRJQUE0STtZQUM1SSx5Q0FBeUM7WUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFFckIscUdBQXFHO1lBQ3JHLElBQUksSUFBSSxDQUFDLGNBQWM7Z0JBQ3JCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUV6QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQzthQUN2QztZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztLQUFBO0lBRUQ7O09BRUc7SUFDSyw4QkFBOEI7UUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdDLElBQUksTUFBTSxHQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3hDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDckIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDYjtTQUNGO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CO1FBQzFCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsSUFBSTtZQUN6QyxlQUFlLEVBQUUsTUFBTTtZQUN2QixpQkFBaUIsRUFBRSxHQUFHO1lBQ3RCLGlCQUFpQixFQUFFLENBQUM7U0FDckIsQ0FBQztRQUVGLCtJQUErSTtRQUMvSSx3R0FBd0c7UUFDeEcsSUFBRyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDO1lBQy9FLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFHLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsK0NBQStDLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN0QyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ3BDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFFdkIsd0ZBQXdGO2dCQUN4RixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ3hCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNqRCxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO3dCQUNwQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQ2YsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNkLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDakIsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQy9CLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUVELElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUE7Z0JBQ3RCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBRTdCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDZixJQUFJLFFBQVE7b0JBQ1YsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDOztvQkFFZCxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2QsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVqQiwwSUFBMEk7Z0JBQzFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDbEM7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7WUFFcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO1lBRXBDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILGtCQUFrQjtJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDVyxxQkFBcUI7O1lBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksT0FBTztnQkFDN0IsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFN0MsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUM3RCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUVqRCxJQUFJLElBQUksQ0FBQyxjQUFjO2dCQUNyQixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUUvQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGlCQUFpQjtnQkFDL0MsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFFdkQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ2pDLHdHQUF3RztnQkFDeEcsSUFBSSxnQkFBZ0IsR0FBRztvQkFDckIsR0FBRyxFQUFFLENBQUMsVUFBa0IsRUFBRSxNQUFxQixFQUFFLEVBQUU7d0JBQ2pELElBQUksQ0FBQyxNQUFNOzRCQUNULElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsQ0FBQyxHQUFHLElBQUksR0FBRyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBRTdJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7NEJBQ25ILElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwSUFBMEksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDOzs0QkFFalAsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztpQkFDRixDQUFBO2dCQUVELE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDdkQ7UUFDSCxDQUFDO0tBQUE7SUFFRDs7T0FFRztJQUNLLGtDQUFrQztRQUV4QyxJQUFJLEtBQUssR0FBUyxJQUFJLENBQUMsRUFBRyxDQUFDO1FBRTNCLG1FQUFtRTtRQUNuRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7U0FDdEM7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDN0U7UUFFRCw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsY0FBYztZQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlELHNFQUFzRTtRQUN0RSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUMvQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUU1RSwwRUFBMEU7UUFDMUUsSUFBSSxJQUFJLENBQUMsdUJBQXVCO1lBQzlCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLCtEQUErRCxDQUFDLENBQUM7WUFDdkYsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNXLFlBQVksQ0FBQyxRQUF1Rzs7WUFDaEksSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxJQUFJLE1BQU07Z0JBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxHQUF5QixJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFFOUIsNkZBQTZGO1FBRTdGLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksSUFBSSxDQUFDLFVBQVU7Z0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNqRixJQUFJLElBQUksQ0FBQyxVQUFVO2dCQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7U0FDbEY7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRWhDLElBQUksQ0FBQyx1QkFBdUIsQ0FBZ0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNFLElBQUksSUFBSSxDQUFDLE1BQU07WUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLG9DQUFvQztZQUNwQyx1QkFBdUI7WUFFdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7U0FDakM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLHVCQUF1QixDQUFDLFFBQXVDLEVBQUUsYUFBbUI7UUFDMUYsSUFBSSxvQkFBb0IsR0FBRyxhQUFhLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckUsSUFBSSxhQUFhLEdBQTRDLEVBQUUsQ0FBQztRQUVoRSxJQUFJLG9CQUFvQixFQUFFO1lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM3QyxJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDaEMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkQ7U0FDRjtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLEVBQUUsQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQy9ELElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsaUhBQWlILENBQUMsQ0FBQztxQkFDdEk7b0JBQ0gsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN6QyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3hDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDekM7YUFDRjtZQUVELElBQUksb0JBQW9CLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxPQUFPO2dCQUM3QyxFQUFFLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQzFDO0lBQ0gsQ0FBQzs7O1lBNW1CRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLCtEQUEwQzs7YUFFM0M7OztZQWhCUSxnQkFBZ0IsdUJBcVBWLFFBQVE7WUFwUGQsbUJBQW1CLHVCQW9Qa0MsUUFBUTtZQWpQN0Qsa0JBQWtCOzs7c0JBa0J4QixTQUFTLFNBQUMsT0FBTzttQkFLakIsS0FBSzs2QkFLTCxLQUFLO2lDQU9MLEtBQUs7Z0NBS0wsS0FBSztvQ0FLTCxLQUFLOzRCQU9MLEtBQUs7dUJBS0wsS0FBSzt5QkFLTCxLQUFLO3lCQUtMLEtBQUs7dUJBS0wsS0FBSzs2QkFLTCxLQUFLO3VDQU9MLEtBQUs7bUNBT0wsS0FBSzs2QkFZTCxLQUFLOzhCQUtMLEtBQUs7bUNBV0wsS0FBSztpQ0FPTCxLQUFLO3FCQUtMLEtBQUs7Z0NBT0wsS0FBSzt1Q0FtQkwsS0FBSztzQ0FtQkwsS0FBSzswQkFLTCxNQUFNOzhCQUtOLE1BQU07MkJBS04sTUFBTTt1QkFLTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9wdGlvbmFsLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcblxyXG5pbXBvcnQgeyBDb250ZXh0TWVudU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMvY29tcG9uZW50L2NvbnRleHRtZW51L0NvbnRleHRNZW51T3B0aW9ucyc7XHJcbmltcG9ydCB7IEV4cGFuZENvbGxhcHNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvZ3JvdXBpbmcvRXhwYW5kQ29sbGFwc2VPcHRpb25zJztcclxuaW1wb3J0IHsgTm9kZUhUTUxUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvbm9kZXMvTm9kZUhUTUxUZW1wbGF0ZSc7XHJcblxyXG5pbXBvcnQgeyBCcmVhZHRoRmlyc3RMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0JyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9DaXJjbGVMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0NvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENvc2VMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0Nvc2VMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IERhZ3JlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9EYWdyZUxheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgR3JpZExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvR3JpZExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgTnVsbExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvTnVsbExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9QcmVzZXRMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IFJhbmRvbUxheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5cclxuaW1wb3J0IHsgRXNEaWFncmFtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VzLWRpYWdyYW0uc2VydmljZSc7XHJcbmltcG9ydCB7IEVzRGlhZ3JhbURpc3BhdGNoZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9lcy1kaWFncmFtLmRpc3BhdGNoZXInO1xyXG5pbXBvcnQgeyBSZXNpemVTZW5zb3IgfSBmcm9tIFwiLi4vZXh0ZW5zaW9ucy9SZXNpemVTZW5zb3JcIjtcclxuXHJcbmltcG9ydCB7IFJlYWN0aXZlRXh0ZW5zaW9ucyB9IGZyb20gJy4uL2V4dGVuc2lvbnMvUmVhY3RpdmVFeHRlbnNpb25zJztcclxuXHJcbmltcG9ydCAqIGFzIGN5XyBmcm9tICdjeXRvc2NhcGUnO1xyXG4vKiogQGlnbm9yZSAqL2NvbnN0IGN5dG9zY2FwZSA9IGN5XztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGNoZSBzaSBvY2N1cGEgZGkgZ3JhZmljYXJlIHVuIGRpYWdyYW1tYSBlIGRpIGdlc3Rpcm5lIGlsIGNpY2xvIGRpIHZpdGFcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZXMtZGlhZ3JhbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VzLWRpYWdyYW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VzLWRpYWdyYW0uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXNEaWFncmFtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgLyoqXHJcbiAgICogUmlmZXJpbWVudG8gYWxsJ29nZ2V0dG8gSFRNTCBzdSBjdWkgY3JlYXJlIGlsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2dyYXBoJykgY3lHcmFwaDogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoqXHJcbiAgICogTm9tZSBkZWwgZGlhZ3JhbW1hLCBmb25kYW1lbnRhbGUgYXNzZWduYXJsbyBwZXIgcGVybWV0dGVyZSBhbGxhIGxpYnJlcmlhIGRpIHNjaGVkdWxhcm5lIGxhIGNyZWF6aW9uZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSB1dGlsaXp6YXJlIGlsIG1lbsO5IGNvbnRlc3R1YWxlIGEgcnVvdGEgYXR0b3JubyBhZCBvZ25pIG5vZG9cclxuICAgKi9cclxuICBASW5wdXQoKSBVc2VDb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgbGUgb3B6aW9uaSBkZWwgbWVuw7kgY29udGVzdHVhbGUgcXVhbG9yYSAqKlVzZUNvbnRleHRNZW51KiogZm9zc2UgKip0cnVlKiouXHJcbiAgICogXHJcbiAgICogT2duaSBlbGVtZW50byBkaSBxdWVzdG8gYXJyYXkgw6ggdW4gc2VsZXR0b3JlIGNvbiBpbCBtZW51IGRhIG1vc3RyYXJlIHBlciBxdWVsbGEgY2FzaXN0aWNhXHJcbiAgICovXHJcbiAgQElucHV0KCkgQ29udGV4dE1lbnVPcHRpb25zOiBDb250ZXh0TWVudU9wdGlvbnNbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljZSBhbCBjb21wb25lbnRlIHNlIGlsIGRpYWdyYW1tYSBkZXZlIHV0aWxpenphcmUgaWwgc2lzdGVtYSBkaSBlc3RlbnNpb25lIHBlciBsJ2V4cGFuZCBlIGNvbGxhcHNlIGRlaSBncnVwcGlcclxuICAgKi9cclxuICBASW5wdXQoKSBVc2VFeHBhbmRDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBPcHppb25pIG5hdGl2ZSBkZWxsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlLCB2ZW5nb25vIG92dmlhbWVudGUgdXRpbGl6emF0ZSBzb2xvIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4cGFuZENvbGxhcHNlT3B0aW9uczogRXhwYW5kQ29sbGFwc2VPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBCbG9jY28gY29tcGxldG8gZGVsbGUgb3B6aW9uaSwgYWx0ZXJuYXRpdm8gYWxsJ2Fzc2VnbmF6aW9uZSBkaSAqKkVsZW1lbnRzKiosICoqTm9kZVN0eWxlcyoqLCAqKkVkZ2VTdHlsZXMqKiwgZSAqKkxheW91dCoqLlxyXG4gICAqIFxyXG4gICAqIFF1YWxvcmEgZW50cmFtYmUgdmVuaXNzZXJvIHNwZWNpZmljYXRlIHZlcnLDoCBlZmZldHR1YXRhIHVuJ3VuaW9uZSBmcmEgcXVlc3RlIG9wemlvbmkgZSBxdWVsbGUgc3BlY2lmaWNhdGUsIGRhbmRvIHByaW9yaXTDoCBhbGxlIHNwZWNpZmljYXRlXHJcbiAgICovXHJcbiAgQElucHV0KCkgTmF0aXZlT3B0aW9uczogY3l0b3NjYXBlLkN5dG9zY2FwZU9wdGlvbnMgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgZWxlbWVudGkgZGEgbW9zdHJhcmUgbmVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEVsZW1lbnRzOiBjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgc3RpbGkgZGVpIG5vZGlcclxuICAgKi9cclxuICBASW5wdXQoKSBOb2RlU3R5bGVzOiBjeXRvc2NhcGUuQ3NzLk5vZGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaXppb25lIGRlZ2xpIHN0aWxpIGRlaSBjb2xsZWdhbWVudGkgZnJhIGkgbm9kaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEVkZ2VTdHlsZXM6IGN5dG9zY2FwZS5Dc3MuRWRnZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW4gdW4gZGlhZ3JhbW1hIGluIHNvbGEgbGV0dHVyYSB0dXR0ZSBsZSBpbnRlcmF6aW9uaSB1dGVudGUgc29ubyBhbm51bGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSBSZWFkb25seTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQWdnaW9ybmEgYXV0b21hdGljYW1lbnRlIGxlIGRpbWVuc2lvbmkgZGVsIGRpYWdyYW1tYSBxdWFuZG8gY2FtYmlhbm8gbGUgZGltZW5zaW9uaSBkZWxsYSBmaW5lc3RyYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEF1dG91cGRhdGVTaXplOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIGRpIG1hbnRlbmVyZSBsYSBwb3NpemlvbmUgZGVpIG5vZGkgcXVhbG9yYSB2ZW5pc3Nlcm8gY2FtYmlhdGkgZGFsbCdJbnB1dCAqKkVsZW1lbnRzKiouXHJcbiAgICogXHJcbiAgICogU2UgbCdJRCBkaSB1biBub2RvIMOoIHVndWFsZSBhbGwnSUQgZGkgdW4gbm9kbyBwcmVzZW50ZSBpbiBwcmVjZWRlbnphLCBpbCBudW92byBub2RvIG5lIGVyZWRpdGVyw6AgbGEgcG9zaXppb25lXHJcbiAgICovXHJcbiAgQElucHV0KCkgUHJlc2VydmVFbGVtZW50c1Bvc2l0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUXVhbG9yYSB2ZW5pc3NlIG1vZGlmaWNhdG8gbCdJbnB1dCAqKkVsZW1lbnRzKiosIHBpdXR0b3N0byBjaGUgbWV0dGVyZSBzZW1wbGljZW1lbnRlIGlsIG51b3ZvIEVsZW1lbnRvIGluIGJhc2UgYWwgTGF5b3V0IHByZWNlZGVudGUsIGFwcGxpY2EgYW5jaGUgdW4nYW5pbWF6aW9uZSBcclxuICAgKiBcclxuICAgKiBGdW56aW9uYSBzb2xhbWVudGUgc2UgaWwgKipMYXlvdXQqKiBjb3JyZW50ZSBkZWwgZGlhZ3JhbW1hIHN1cHBvcnRhIGxlIGFuaW1hemlvbmlcclxuICAgKi9cclxuICBASW5wdXQoKSBBbmltYXRlTGF5b3V0Q2hhbmdlczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEF0dGl2YSB1bmEgbW9kYWxpdMOgIGRpIHNlbGV6aW9uZSBcInNtYXJ0XCIuLi4gbyBwZXJsb21lbm8gXCJzbWFydGVyXCIgZGVsIGRlZmF1bHQgZGkgQ3l0b3NjYXBlLlxyXG4gICAqIFxyXG4gICAqIC0gSWwgY2xpY2sgZGkgdW4gZWxlbWVudG8gbm9uIHNlbGV6aW9uYXRvIGxvIHNlbGV6aW9uYVxyXG4gICAqIC0gSWwgY2xpY2sgZGkgdW4gZWxlbWVudG8gc2VsZXppb25hdG8gbG8gZGVzZWxlemlvbmFcclxuICAgKiAtIExvIHN0YXRvIGRpIHNlbGV6aW9uZSB2aWVuZSBwZXJzaXN0aXRvIHN1bGwnb2dnZXR0byBvcmlnaW5hbGUgaW52ZWNlIGRpIHJpbWFuZXJlIGluIHVuIGludGVybmFsXHJcbiAgICogLSBBbGwnYXNzZWduYXppb25lIGRpIG9nZ2V0dGkgc2VsZXppb25hdGksIHF1ZXN0aSB2ZW5nb25vIG1hcmNhdGkgY29ycmV0dGFtZW50ZSBjb24gbCdvdmVybGF5IGRpIHNlbGV6aW9uZVxyXG4gICAqIFxyXG4gICAqIE4uQjogbGEgY2hpYW1hdGEgYWxsJ2V2ZW50byAqKm9uTm9kZUNsaWNrKiogYXZ2aWVuZSAqKkRPUE8qKiBsYSBnZXN0aW9uZSBkZWxsYSBzZWxlemlvbmVcclxuICAgKi9cclxuICBASW5wdXQoKSBTbWFydFNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgZGkgc2VsZXppb25hcmUgdW4gZWxlbWVudG8gcGVyIHZvbHRhIHF1YWxvcmEgKipTbWFydFNlbGVjdGlvbioqIGZvc3NlIGF0dGl2b1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFNpbmdsZVNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDU1MgcGVyIGxhIGdyYWZpY2F6aW9uZSBkZWxsYSBzZWxlemlvbmUgZGVpIG5vZGkuIFF1YW5kbyB1biBub2RvIHZlcnLDoCBzZWxlemlvbmF0byBhdnLDoCBzb3ByYSBkaSBzZSB1biBvdmVybGF5IGNoZSAnc2JvcmRhJyBkaSAqKm92ZXJsYXktcGFkZGluZyoqIHBpeGVsLFxyXG4gICAqIGRpIGNvbG9yZSAqKm92ZXJsYXktY29sb3IqKiBlIGNvbiB1biBvcGFjaXTDoCAqKm92ZXJsYXktb3BhY2l0eSoqXHJcbiAgICogXHJcbiAgICogQXNzZWduYW5kbyBcInt9XCIgYSBxdWVzdG8gaW5wdXQsIGxhIFNtYXJ0IHNlbGVjdGlvbiB2aWVuZSBnZXN0aXRhIG1hIGxhIGdlc3Rpb25lIGdyYWZpY2Egw6ggYWZmaWRhdGEgYWxsJ3V0ZW50ZSxcclxuICAgKiBhZCBlc2VtcGlvIHVzYW5kbyBkZWkgKipOb2RlSFRNTFRlbXBsYXRlcyoqIGNoZSBkZWZpbmlzY2FubyBzZWxldHRvcmkgc3Ugbm9kaSBcIjpzZWxlY3RlZFwiXHJcbiAgICogXHJcbiAgICogQGRlZmF1bHQgeydvdmVybGF5LWNvbG9yJzonYmx1ZScsJ292ZXJsYXktb3BhY2l0eSc6MC41LCdvdmVybGF5LXBhZGRpbmcnOjd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgU21hcnRTZWxlY3Rpb25TdHlsZXM6IHsgJ292ZXJsYXktY29sb3InOiBzdHJpbmcsICdvdmVybGF5LW9wYWNpdHknOiBudW1iZXIsICdvdmVybGF5LXBhZGRpbmcnOiBudW1iZXIgfSA9IG51bGxcclxuXHJcbiAgLyoqXHJcbiAgICogUGVyaW9kbyBkaSB0aHJvdHRsZSBkYSBxdWFuZG8gdmllbmUgZWZmZXR0dWF0byB1biByZXNpemUgYSBxdWFuZG8gcmljYWxjb2xhcmUgbGUgZGltZW5zaW9uaSBkZWwgZGlhZ3JhbW1hLlxyXG4gICAqIFxyXG4gICAqIFB1w7IgZXNzZXJlIHRlbnV0byBhIDAgKHJlZHJhdyBpc3RhbnRhbmVvKSBmaW5jaMOpIG5vbiBjaSBzb25vIHByb2JsZW1pIGRpIHByZXN0YXppb25pIGNvbiBldmVudHVhbG1lbnRlIHRhbnRpIHJlc2l6ZSBhIHBvY2EgZGlzdGFuemEgbCd1bm8gZGFsbCdhbHRyby5cclxuICAgKi9cclxuICBASW5wdXQoKSBSZXNpemVUaHJvdHRsZVRpbWU6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIExheW91dCBkaSBvcmRpbmFtZW50byBkZWkgbm9kaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIExheW91dDogQnJlYWR0aEZpcnN0TGF5b3V0T3B0aW9uc0ltcGwgfCBDaXJjbGVMYXlvdXRPcHRpb25zSW1wbCB8IENvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCB8XHJcbiAgICBDb3NlTGF5b3V0T3B0aW9uc0ltcGwgfCBEYWdyZUxheW91dE9wdGlvbnNJbXBsIHwgR3JpZExheW91dE9wdGlvbnNJbXBsIHwgTnVsbExheW91dE9wdGlvbnNJbXBsIHwgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfFxyXG4gICAgUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlbXBsYXRlIEhUTUwgZGEgYXBwbGljYXJlIGFpIG5vZGkgcGVyIGRhcmdsaSBzdGlsaSBwYXJ0aWNvbGFyaSwgZGl2ZXJzaSBkYWxsZSBzaGFwZSBkaSBkZWZhdWx0XHJcbiAgICovXHJcbiAgQElucHV0KCkgTm9kZUhUTUxUZW1wbGF0ZXM6IE5vZGVIVE1MVGVtcGxhdGVbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybmlzY2UgaWwgZ2xvYmFsIGRlbGxhIGxpYnJlcmlhIChuYW1lc3BhY2UgKipjeXRvc2NhcGUqKikgZSBzaSBhc3BldHRhIGNoZSBkb3BvIG9wZXJhemlvbmkgZGkgaW1wb3J0YXppb25lIFxyXG4gICAqIGxhc2NpYXRlIGFsbCd1dGVudGUgdmVuZ2FubyBhZ2dpdW50aSB0dXR0aSBpIG1vZHVsaSBkZXNpZGVyYXRpLiBcclxuICAgKiBcclxuICAgKiDDiCAqKmZvbmRhbWVudGFsZSoqIGNoZSBpbCBwcmltbyBwYXJhbWV0cm8gKGlsIG5vbWUgZGVsIG1vZHVsbykgc2lhIHVndWFsZSBhIGNpw7IgZGkgY3VpIHZpZW5lIGZhdHRvIGlsIHJlcXVpcmUgaW4gbW9kbyBjaGUgbGEgbGlicmVyaWFcclxuICAgKiBwb3NzYSBjb250cm9sbGFyZSBjaGUgaWwgbW9kdWxvIGltcG9ydGF0byBub24gc2lhIGdpw6Agc3RhdG8gaW1wb3J0YXRvIGluIHByZWNlZGVuemFcclxuICAgKiBcclxuICAgKiAjIyBFc2VtcGlvOlxyXG4gICAqIFxyXG4gICAqIGBgYHR5cGVzY3JpcHRcclxuICAgKiAoZ2xvYmFsKSA9PiB7XHJcbiAgICogICAgcmV0dXJuIGltcG9ydChcImN5dG9zY2FwZS1leHRlbnNpb24tbGlicmFyeVwiKS50aGVuKG1vZHVsZSA9PiBnbG9iYWwudXNlKFwiY3l0b3NjYXBlLWV4dGVuc2lvbi1saWJyYXJ5XCIsIG1vZHVsZS5kZWZhdWx0KSk7XHJcbiAgICogXHJcbiAgICogICAgLi4uXHJcbiAgICogfVxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcjogKGdsb2JhbDogeyB1c2U6IChtb2R1bGVOYW1lOiBzdHJpbmcsIG1vZHVsZTogdm9pZCB8IGN5dG9zY2FwZS5FeHQpID0+IHZvaWQgfSkgPT4gUHJvbWlzZTxhbnk+ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybmlzY2UgbCdpc3RhbnphIGF0dHVhbGUgZGkgQ3l0b3NjYXBlIGRhIGN1aSDDqCBwb3NzaWJpbGUgcHJlbmRlcmUgbGUgbGlicmVyaWUgZGkgZXN0ZW5zaW9uZSBjYXJpY2F0ZSBpbiAqKkV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcioqXHJcbiAgICogZSBjb25maWd1cmFybGUgaW4gYmFzZSBhaSBjb21wb3J0YW1lbnRpIHNwZWNpZmljaVxyXG4gICAqIFxyXG4gICAqICMjIEVzZW1waW86XHJcbiAgICogXHJcbiAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAqIChjeXRvc2NhcGVDb3JlKSA9PiB7XHJcbiAgICogICAgLy8gRmFyZSBxdWVzdG8gbGF2b3JvIHBlciBvZ25pIGVzdGVuc2lvbmUgY2FyaWNhdGFcclxuICAgKiAgICBsZXQgZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiA9IHsgLi4uIH07XHJcbiAgICogICAgbGV0IGV4dGVuc2lvbkluc3RhbmNlID0gY3l0b3NjYXBlQ29yZS5leHRlbnNpb25MaWJyYXJ5KGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pO1xyXG4gICAqICAgIGV4dGVuc2lvbkluc3RhbmNlLmRvU29tZXRoaW5nU3BlY2lmaWNUb1RoaXNFeHRlbnNpb24oKTtcclxuICAgKiBcclxuICAgKiAgICAuLi5cclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQElucHV0KCkgRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXI6IChjeXRvc2NhcGVDb3JlOiBjeXRvc2NhcGUuQ29yZSkgPT4gdm9pZCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbCBjbGljayBkaSB1biBub2RvLCBjb250aWVuZSBsJ29nZ2V0dG8gKipkYXRhKiogZGVsIG5vZG8gaW4gcXVlc3Rpb25lXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTm9kZUNsaWNrOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55IH0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbGxhIHNlbGV6aW9uZSBvIGRlc2VsZXppb25lIGRpIHVuIG5vZG8sIGNvbnRpZW5lIGwnb2dnZXR0byAqKmRhdGEqKiBkZWwgbm9kbyBpbiBxdWVzdGlvbmUgZSBpbmZvcm1hemlvbmkgc3VsIHN1byBzdGF0byBkaSBzZWxlemlvbmVcclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25Ob2RlU2VsZWN0aW9uOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnksIHNlbGVjdGVkOiBib29sZWFuIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSwgc2VsZWN0ZWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGxhbmNpYXRvIGFsIHRlcm1pbmUgZGVsIExheW91dGluZy4gU2Ugc2kgdnVvbGUgZXNlZ3VpcmUgY29kaWNlIGRvcG8gY2hlIGlsIExheW91dCDDqCBmYXR0byBlIGNvbXBsZXRhbWVudGUgZ3JhZmljYXRvLCBxdWVzdG8gw6ggaWwgcHVudG9cclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25MYXlvdXREb25lOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbCB0ZXJtaW5lIGRlbCBjYXJpY2FtZW50byBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTG9hZGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhcmlhYmlsZSBzdSBjdWkgc2FsdmFyc2kgc2UgaSBub2RpIGhhbm5vIHVuYSBnZXJhcmNoaWEgYSBncnVwcGkgbyBuby4gU2VydmUgcGVyIHBvaSBjYXJpY2FyZSBsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlIHF1YWxvcmEgZm9zc2UgcmljaGllc3RhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBOb2Rlc0hpZXJhcmNoeTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIGlsIHJlbmRlcmluZyBkZWwgZGlhZ3JhbW1hIMOoIHRlcm1pbmF0b1xyXG4gICAqL1xyXG4gIHByaXZhdGUgUmVuZGVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSXN0YW56YSBkZWwgZGlhZ3JhbW1hIGF0dHVhbG1lbnRlIGluIHVzb1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjeTogY3l0b3NjYXBlLkNvcmVcclxuXHJcbiAgLyoqXHJcbiAgICogQXBpIGRlbGwnZXN0ZW5zaW9uZSBleHBhbmQtY29sbGFwc2UgcGVyIHBlcm1ldHRlcmUgZGkgZWZmZXR0dWFyZSBvcGVyYXppb25pIGRhbGwnZXN0ZXJubyBkZWwgZGlhZ3JhbW1hLiBWZW5nb25vIHZhbG9yaXp6YXRlIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxyXG4gICAqL1xyXG4gIHB1YmxpYyBFeHBhbmRDb2xsYXBzZUFwaTogYW55ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQXBpIGRlbGwnZXN0ZW5zaW9uZSBodG1sLW5vZGUgcGVyIHBlcm1ldHRlcmUgZGkgZWZmZXR0dWFyZSBvcGVyYXppb25pIGRhbGwnZXN0ZXJubyBkZWwgZGlhZ3JhbW1hLiBWZW5nb25vIHZhbG9yaXp6YXRlIHNlIHNvbm8gaW1wb3N0YXRpIGRlaSAqKk5vZGVIVE1MVGVtcGxhdGVzKipcclxuICAgKi9cclxuICBwcml2YXRlIEh0bWxOb2RlQXBpOiBhbnkgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBPc3NlcnZhdG9yZSBkZWxsZSBtb2RpZmljaGUgYWwgY29udGVuaXRvcmUgZGVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZVNlbnNvcjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmlmZXJpbWVudG8gYWxsJ3VsdGltbyBsYXlvdXQgdXRpbGl6emF0by4gVmllbmUgcmlhcHBsaWNhdG8gcXVhbG9yYSB2ZW5pc3NlIGNhbWJpYXRvIGwnSW5wdXQgKipFbGVtZW50cyoqLlxyXG4gICAqIFxyXG4gICAqIE5vbiB1dGlsaXp6byBpbCBtYWtlTGF5b3V0cyBwZXJjaMOpIGFsdHJpbWVudGkgcmlzY2hpZXJlaSBkaSBjcmVhcmUgdW4gbGF5b3V0IHJpZmVyaXRvIGEgWCBlbGVtZW50aSwgbmUgYWdnaXVuZ28gMSwgcmlhcHBsaWNvIGlsIExheW91dCBcclxuICAgKiBtYSBtaSB2aWVuZSByaWFwcGxpY2F0byBhIFggZWxlbWVudGkgaW52ZWNlIGNoZSBYICsgMVxyXG4gICAqL1xyXG4gIHByaXZhdGUgTGFzdExheW91dDogY3l0b3NjYXBlLkxheW91dE9wdGlvbnM7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvc3RydXR0b3JlXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgc2VydmljZTogRXNEaWFncmFtU2VydmljZSwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkaXNwYXRjaGVyOiBFc0RpYWdyYW1EaXNwYXRjaGVyLCBwcml2YXRlIGV4dHM6IFJlYWN0aXZlRXh0ZW5zaW9ucykgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmUgXHJcbiAgICogXHJcbiAgICogQW5ndWxhciBQaXBlbGluZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VydmljZSB8fCAhdGhpcy5kaXNwYXRjaGVyKVxyXG4gICAgICB0aHJvdyBcIklsIG1vZHVsbyBAZXNmYWVuemEvZGlhZ3JhbXMgbm9uIMOoIHN0YXRvIGltcG9ydGF0byBjb24gaWwgZm9yUm9vdCgpO1wiO1xyXG5cclxuICAgIHRoaXMuZGlzcGF0Y2hMb2FkQ2hhcnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbCdvbkRlc3Ryb3kgcmlwdWxpc2NvIGxhIG1lbW9yaWEgZGFsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuY3kpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJEaWFncmFtXCIgKyBcIiBcIiArIHRoaXMubmFtZSArIFwiOiBVbmxvYWRpbmcgZGVzdHJveWVkIGRpYWdyYW1cIiwgZmFsc2UpO1xyXG4gICAgICB0aGlzLmN5LmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5kaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcy5uYW1lKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJDaGFydCBcIiArIHRoaXMubmFtZSArIFwiOiBVbmxvYWRpbmcgdW5jcmVhdGVkIGNoYXJ0IGNvbXBvbmVudC4gSXQgcHJvYmFibHkgd2FzIGEgZHVwbGljYXRlZFwiLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RyYSBpbCBkaWFncmFtbWEgYXR0dWFsZSBuZWwgRGlzcGF0Y2hlciBpbiBtb2RvIGNoZSB2ZW5nYSBjYXJpY2F0byBhcHBlbmEgcG9zc2liaWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkaXNwYXRjaExvYWRDaGFydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzLm5hbWUsICgpID0+IHsgcmV0dXJuIHRoaXMucmVuZGVyKCk7IH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZSBcclxuICAgKiBcclxuICAgKiBBbmd1bGFyIFBpcGVsaW5lOiBHZXN0aW9uZSByaS1ncmFmaWNhemlvbmUgZGVsIGRpYWdyYW1tYSwgc2UgcG9zc2liaWxlXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBhbnkge1xyXG4gICAgbGV0IHRvQ2hlY2sgPSBbXCJUZW1wbGF0ZXNcIiwgXCJVc2VDb250ZXh0TWVudVwiLCBcIkNvbnRleHRNZW51T3B0aW9uc1wiLCBcIlVzZUV4cGFuZENvbGxhcHNlXCIsIFwiRXhwYW5kQ29sbGFwc2VPcHRpb25zXCIsIFwiTm9kZVN0eWxlc1wiLCBcIkVkZ2VTdHlsZXNcIiwgXCJOYXRpdmVPcHRpb25zXCJdO1xyXG5cclxuICAgIGlmICh0aGlzLlJlbmRlcmVkICYmIHRvQ2hlY2suc29tZSh0ID0+IGNoYW5nZXNbdF0pKVxyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiV1wiLCBcIlJlZHJhdyBiYXNlZCBvbiBkeW5hbWljIElucHV0IGNoYW5nZSBpcyBzdXBwb3J0ZWQgb25seSBmb3IgJ0VsZW1lbnRzJyBhbmQgJ0xheW91dCcgaW5wdXRzLCBwbGVhc2UgZGVzdHJveSB0aGUgY29tcG9uZW50IGFuZCByZWNyZWF0ZSBpdCB3aXRoIHRoZSBuZXcgc2V0dGluZ3NcIik7XHJcblxyXG4gICAgbGV0IGVsZW1lbnRDaGFuZ2VzID0gY2hhbmdlc1tcIkVsZW1lbnRzXCJdO1xyXG4gICAgbGV0IGxheW91dENoYW5nZXMgPSBjaGFuZ2VzW1wiTGF5b3V0XCJdO1xyXG4gICAgaWYgKGVsZW1lbnRDaGFuZ2VzICYmICFlbGVtZW50Q2hhbmdlcy5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkVsZW1lbnRzIGhhdmUgYmVlbiBjaGFuZ2VkIGFmdGVyIGRpYWdyYW0gaW5pdGlhbGl6YXRpb25cIik7XHJcblxyXG4gICAgICAvLyBDYW1iaWFtZW50byBhZ2xpIEVsZW1lbnRpOiByaXB1bGlzY28gZ2xpIGVsZW1lbnRpIHZlY2NoaSwgcHJlbmRvIGkgbnVvdmksIGxpIHNpc3RlbW8gZSBsaSByaWFzc2Vnbm8uIFxyXG4gICAgICAvLyBTZSBpbCBudW92byBJbnB1dCBFbGVtZW50cyDDqCByb2JhIHN0cmFuYSBtaSBsaW1pdG8gYSByaXB1bGlyZSBpbCBkaWFncmFtbWFcclxuICAgICAgLy8gU2UgY3l0b3NjYXBlIGF2ZXZhIGdpw6AgZGVnbGkgZWxlbWVudGkgcHJlY2VkZW50ZW1lbnRlIG5lIHByZW5kbyBsZSBwb3NpemlvbmkgaW4gbW9kbyBkYSByaWRpc2VnbmFybGkgcGFydGVuZG8gZGFsbG8gc3Rlc3NvIHB1bnRvIChjYXJpbm8gcGVyIGxlIGFuaW1hemlvbmkpXHJcbiAgICAgIGxldCBlbGVtZW50cyA9IGVsZW1lbnRDaGFuZ2VzPy5jdXJyZW50VmFsdWU7XHJcbiAgICAgIGxldCBwcmV2aW91c19lbGVtZW50cyA9IHRoaXMuUHJlc2VydmVFbGVtZW50c1Bvc2l0aW9uID8gPGFueT50aGlzLmN5Lm5vZGVzKCkgOiBudWxsO1xyXG5cclxuICAgICAgdGhpcy5jeS5lbGVtZW50cygpLnJlbW92ZSgpO1xyXG4gICAgICBpZiAoZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoICYmIGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnJldmlld0N5dG9zY2FwZUVsZW1lbnRzKGVsZW1lbnRzLCBwcmV2aW91c19lbGVtZW50cyk7XHJcbiAgICAgICAgdGhpcy5jeS5hZGQoZWxlbWVudHMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5TbWFydFNlbGVjdGlvbilcclxuICAgICAgICAgIHRoaXMuc2V0dXBFbGVtZW50c1NlbGVjdGlvbklmTmVlZGVkKCk7XHJcblxyXG4gICAgICAgIC8vIFNlIHNvbG8gZ2xpIGVsZW1lbnRpIGNhbWJpYW5vLCByaWFwcGxpY28gaWwgTGF5b3V0IHByZWNlZGVudGVcclxuICAgICAgICBpZiAoIWxheW91dENoYW5nZXMgJiYgdGhpcy5MYXN0TGF5b3V0KSB7XHJcblxyXG4gICAgICAgICAgLy8gU2UgZGV2byBhbmltYXJlIGxlIG1vZGlmY2hlIGFsIGxheW91dCBmb3J6byBpbCBwYXJhbWV0cm8gcmVsYXRpdm9cclxuICAgICAgICAgIGlmICh0aGlzLkFuaW1hdGVMYXlvdXRDaGFuZ2VzKVxyXG4gICAgICAgICAgICAoPGFueT50aGlzLkxhc3RMYXlvdXQpLmFuaW1hdGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuY3kubGF5b3V0KHRoaXMuTGFzdExheW91dCkucnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2UgaWwgbGF5b3V0IGNhbWJpYSBsbyBhcHBsaWNvIGUgbWUgbG8gc2Fsdm8gY29tZSBsYXlvdXQgcHJlY2VkZW50ZSBwZXIgaWwgZnV0dXJvXHJcbiAgICBpZiAobGF5b3V0Q2hhbmdlcyAmJiAhbGF5b3V0Q2hhbmdlcy5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkxheW91dCBoYXZlIGJlZW4gY2hhbmdlZCBhZnRlciBkaWFncmFtIGluaXRpYWxpemF0aW9uXCIpO1xyXG4gICAgICB0aGlzLkxhc3RMYXlvdXQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxheW91dENoYW5nZXMuY3VycmVudFZhbHVlKSk7XHJcbiAgICAgIHRoaXMuY3kubGF5b3V0KHRoaXMuTGFzdExheW91dCkucnVuKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVmZmV0dHVhIGlsIHJlbmRlcmluZyBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyByZW5kZXIoKSB7XHJcblxyXG4gICAgLy8gVGlybyBmdW9yaSBsZSBvcHppb25pIGNvbiBjdWkgZ2VuZXJhcmUgaWwgZGlhZ3JhbW1hXHJcbiAgICBsZXQgY3lPcHRpb25zID0gdGhpcy5nZXRDb21wbGV0ZWRPcHRpb25zKCk7XHJcbiAgICB0aGlzLk5vZGVzSGllcmFyY2h5ID0gY3lPcHRpb25zLmVsZW1lbnRzICYmICg8Y3lfLkVsZW1lbnREZWZpbml0aW9uW10+Y3lPcHRpb25zLmVsZW1lbnRzKS5zb21lKHQgPT4gdC5kYXRhLnBhcmVudCk7XHJcblxyXG4gICAgLy8gQ2FyaWNvIGV2ZW50dWFsaSBjbGFzc2kgZGkgZXN0ZW5zaW9uZSBjaGUgc2Vydm9ub1xyXG4gICAgYXdhaXQgdGhpcy5wZXJmb3JtTW9kdWxlc0xvYWRpbmcoKTtcclxuXHJcbiAgICAvLyBHZW5lcm8gaWwgZGlhZ3JhbW1hXHJcbiAgICB0aGlzLmN5ID0gY3l0b3NjYXBlKGN5T3B0aW9ucyk7XHJcblxyXG4gICAgLy8gQ29sbGVnbyBnbGkgZXZlbnRpIGFsIGNvbXBvbmVudGVcclxuICAgIHRoaXMuYmluZEN5dG9zY2FwZUV2ZW50cygpO1xyXG5cclxuICAgIC8vIFV0aWxpenpvIGxlIGNsYXNzaSBkaSBlc3RlbnNpb25lIGNhcmljYXRlIHByZWNlZGVudGVtZW50ZSBwZXIgZmFyZSBpbCByZXN0byBkZWxsZSBtaWUgb3BlcmF6aW9uaVxyXG4gICAgdGhpcy5wZXJmb3JtT3BlcmF0aW9uc1dpdGhMb2FkZWRNb2R1bGVzKCk7XHJcblxyXG4gICAgLy8gSW1wb3N0byBsYSB2YXJpYWJpbGUgUmVuZGVyZWQgYSB0cnVlIGluIG1vZG8gY2hlIHNlIGRhIGFkZXNzbyB2ZW5nb25vIGZhdHRlIG1vZGlmaWNoZSBjaGUgZG92cmViYmVybyBjYXVzYXJlIHVuIHJlZHJhdyBwb3NzbyBhY2Nvcmdlcm1lbmVcclxuICAgIC8vIGUgbWFuZGFyZSBhIGNhZ2FyZSBsbyBzdHJvbnpvIGRpIHR1cm5vXHJcbiAgICB0aGlzLlJlbmRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBTZSBkZXZvIGFnZ2lvcm5hcmUgaW4gYXV0b21hdGljbyBpbiBiYXNlIGFsbGEgZGltZW5zaW9uZSBkZWwgY29udGVuaXRvcmUgY29sbGVnbyBpbCBSZXNpemVPYnNlcnZlclxyXG4gICAgaWYgKHRoaXMuQXV0b3VwZGF0ZVNpemUpXHJcbiAgICAgIHRoaXMubGlzdGVuT25DaGFuZ2VzKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuU21hcnRTZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5zZXR1cFNlbGVjdGlvblN0eWxlcygpO1xyXG4gICAgICB0aGlzLnNldHVwRWxlbWVudHNTZWxlY3Rpb25JZk5lZWRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25Mb2FkZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJlbmRlIHR1dHRpIGdsaSBlbGVtZW50aSBhcHBlbmEgYXNzZWduYXRpLCBlIHNlIHF1YWxjdW5vIGVyYSBzZWxlemlvbmF0byBsYSBzaXR1YXppb25lIHZpZW5lIHBlcnNpc3RpdGEgc3UgY3l0b3NjYXBlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXR1cEVsZW1lbnRzU2VsZWN0aW9uSWZOZWVkZWQoKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGVsZGF0YSA9IDxhbnk+dGhpcy5FbGVtZW50c1tpXS5kYXRhO1xyXG4gICAgICBpZiAoZWxkYXRhLl9fc2VsZWN0ZWQpIHtcclxuICAgICAgICBsZXQgZWwgPSB0aGlzLmN5LiRpZChlbGRhdGEuaWQpO1xyXG4gICAgICAgIGVsLnNlbGVjdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYXJpY2EgZ2xpIHN0aWxpIHBlciBtb3N0cmFyZSBjYXJpbmEgbGEgc2VsZXppb25lIGRlaSBub2RpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXR1cFNlbGVjdGlvblN0eWxlcygpe1xyXG4gICAgbGV0IGNzc0l0ZW0gPSB0aGlzLlNtYXJ0U2VsZWN0aW9uU3R5bGVzIHx8IHtcclxuICAgICAgJ292ZXJsYXktY29sb3InOiAnYmx1ZScsXHJcbiAgICAgICdvdmVybGF5LW9wYWNpdHknOiAwLjUsXHJcbiAgICAgICdvdmVybGF5LXBhZGRpbmcnOiA3XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEJhY2tkb29yIHBlciBwb3RlciBhc3NlZ25hcmUgXCJ7fVwiIGEgU21hcnRTZWxlY3Rpb25TdHlsZXMgaW4gbW9kbyBkaSB1dGlsaXp6YXJlIGxhIHNtYXJ0IHNlbGVjdGlvbiBtYSBzZW56YSBjaGUgbmVzc3VubyBzdGlsZSB2ZW5nYSBhcHBsaWNhdG9cclxuICAgIC8vIGFkIGVzZW1waW8gcXVhbG9yYSBzaSB2b2xlc3NlIHV0aWxpenphcmUgbCdodG1sbm9kZSBwZXIgZ2VzdGlyZSBsYSBncmFmaWNhIGRlZ2xpIGVsZW1lbnRpIHNlbGV6aW9uYXRpXHJcbiAgICBpZihjc3NJdGVtWydvdmVybGF5LWNvbG9yJ10gJiYgY3NzSXRlbVsnb3ZlcmxheS1vcGFjaXR5J10gJiYgY3NzSXRlbVsnb3ZlcmxheS1wYWRkaW5nJ10pXHJcbiAgICAgICg8YW55PnRoaXMuY3kuc3R5bGUoKSkuc2VsZWN0b3IoJ25vZGU6c2VsZWN0ZWQnKS5jc3MoY3NzSXRlbSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RyYSBsJ2FzY29sdG8gYWwgY29udGVuaXRvcmUgZGVsIGdyYWZpY28gZSBpbiBjYXNvIGRpIG1vZGlmaWNoZSBhbGxhIGRpbWVuc2lvbmUsIGFsIG1hc3NpbW8gdW5hIHZvbHRhIG9nbmkgNTAwIG1pbGxpc2Vjb25kaSwgbG8gcmlkaXNlZ25hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsaXN0ZW5PbkNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZVNlbnNvcih0aGlzLmN5R3JhcGgubmF0aXZlRWxlbWVudCwgKCkgPT4ge1xyXG4gICAgICB0aGlzLmV4dHMudGhyb3R0bGUodGhpcy5uYW1lLCB0aGlzLm9uQ29udGFpbmVyU2l6ZUNoYW5nZWQuYmluZCh0aGlzKSwgdGhpcy5SZXNpemVUaHJvdHRsZVRpbWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW56aW9uZSBjaGUgc2kgb2NjdXBhIGRpIGdlc3RpcmUgaWwgcmVwYWludCBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbkNvbnRhaW5lclNpemVDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJEaWFncmFtIGNvbnRhaW5lciBzaXplIGhhcyBjaGFuZ2VkLCByZWRyYXdpbmdcIik7XHJcbiAgICB0aGlzLmN5LnJlc2l6ZSgpO1xyXG4gICAgdGhpcy5jeS5maXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbGxlZ2EgdHV0dGkgZ2xpIGV2ZW50aSBjaGUgbWkgcG9zc29ubyBzZXJ2aXJlIGUgbGkgZXNwb25lIGluIG91dHB1dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYmluZEN5dG9zY2FwZUV2ZW50cygpIHtcclxuICAgIHRoaXMuY3kuYmluZCgnY2xpY2snLCAnbm9kZScsIChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0RGF0YSA9IGV2ZW50LnRhcmdldC5kYXRhKClcclxuICAgICAgaWYgKHRoaXMuU21hcnRTZWxlY3Rpb24pIHtcclxuXHJcbiAgICAgICAgLy8gSW4gY2FzbyBkaSBzZWxlemlvbmUgc2luZ29sYSByaXB1bGlzY28gdHV0dGkgZ2xpIGVsZW1lbnRpIHByZWNlZGVudGVtZW50ZSBzZWxlemlvbmF0aVxyXG4gICAgICAgIGlmICh0aGlzLlNpbmdsZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgbGV0IHNlbGVjdGVkID0gdGhpcy5jeS5lbGVtZW50cygnbm9kZTpzZWxlY3RlZCcpO1xyXG4gICAgICAgICAgc2VsZWN0ZWQuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgICAgIGVsLnNlbGVjdGlmeSgpO1xyXG4gICAgICAgICAgICBlbC51bnNlbGVjdCgpO1xyXG4gICAgICAgICAgICBlbC51bnNlbGVjdGlmeSgpO1xyXG4gICAgICAgICAgICBlbC5kYXRhKFwiX19zZWxlY3RlZFwiLCBmYWxzZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGlkID0gdGFyZ2V0RGF0YS5pZFxyXG4gICAgICAgIGxldCBlbCA9IHRoaXMuY3kuJGlkKGlkKTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWQgPSBlbC5zZWxlY3RlZCgpO1xyXG5cclxuICAgICAgICBlbC5zZWxlY3RpZnkoKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWQpXHJcbiAgICAgICAgICBlbC51bnNlbGVjdCgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGVsLnNlbGVjdCgpO1xyXG4gICAgICAgIGVsLnVuc2VsZWN0aWZ5KCk7XHJcblxyXG4gICAgICAgIC8vIFF1ZXN0byB2YSBhbmNoZSBuZWxsYSBsaXN0YSBkZWdsaSBlbGVtZW50aSBvcmlnaW5hbGkgKHRoaXMuRWxlbWVudHMpIGRhdG8gY2hlIGN5dG9zY2FwZSBsaSBwcmVuZGUgcGVyIHJpZmVyaW1lbnRvIChiYmJiYnJhdm8gY3l0by1jaGFuKVxyXG4gICAgICAgIGVsLmRhdGEoXCJfX3NlbGVjdGVkXCIsICFzZWxlY3RlZCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMub25Ob2RlQ2xpY2suZW1pdCh7IGRhdGE6IHRhcmdldERhdGEgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmN5LmJpbmQoJ3NlbGVjdCcsICdub2RlJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGxldCB0YXJnZXREYXRhID0gZXZlbnQudGFyZ2V0LmRhdGEoKVxyXG5cclxuICAgICAgdGhpcy5vbk5vZGVTZWxlY3Rpb24uZW1pdCh7IGRhdGE6IHRhcmdldERhdGEsIHNlbGVjdGVkOiB0cnVlIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jeS5iaW5kKCdsYXlvdXRzdG9wJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub25MYXlvdXREb25lLmVtaXQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3kuYmluZCgndW5zZWxlY3QnLCAnbm9kZScsIChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0RGF0YSA9IGV2ZW50LnRhcmdldC5kYXRhKClcclxuXHJcbiAgICAgIHRoaXMub25Ob2RlU2VsZWN0aW9uLmVtaXQoeyBkYXRhOiB0YXJnZXREYXRhLCBzZWxlY3RlZDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBbHRyaSBldmVudGkuLi5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2VydmUgcGVyIGNhcmljYXJlIHR1dHRlIGxlIGVzdGVuc2lvbmkgZGVsbGEgbGlicmVyaWEgaW4gYmFzZSBhIGNpw7IgY2hlIHZpZW5lIHV0aWxpenphdG9cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1Nb2R1bGVzTG9hZGluZygpIHtcclxuICAgIGlmICh0aGlzLkxheW91dC5uYW1lID09ICdkYWdyZScpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWRhZ3JlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMClcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtaHRtbC1ub2RlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbnRlcm5hbChcImN5dG9zY2FwZS1jeHRtZW51XCIpO1xyXG5cclxuICAgIGlmICh0aGlzLk5vZGVzSGllcmFyY2h5ICYmIHRoaXMuVXNlRXhwYW5kQ29sbGFwc2UpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZVwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5FeHRlbnNpb25Nb2R1bGVzSW1wb3J0ZXIpIHtcclxuICAgICAgLy8gV3JhcHBvIGlsIG5hbWVzcGFjZSBpbiBtb2RvIGNoZSBwb3NzYSBkaXJlIGxhIG1pYSBzdWwgZmF0dG8gY2hlIGwndXRlbnRlIGFnZ2l1bmdhIHVuIG1vZHVsbyBvIG1lbm8gOkRcclxuICAgICAgdmFyIHdyYXBwZWRDeXRvc2NhcGUgPSB7XHJcbiAgICAgICAgdXNlOiAobW9kdWxlTmFtZTogc3RyaW5nLCBtb2R1bGU6IGN5dG9zY2FwZS5FeHQpID0+IHtcclxuICAgICAgICAgIGlmICghbW9kdWxlKVxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCB0aGlzLnNlcnZpY2UubG9jKFwiUmVjZWl2ZWQgYW4gdW5kZWZpbmVkIG1vZHVsZS4gTWFrZSBzdXJlIHlvdSBhcmUgY29ycmVjdGx5IGxvYWRpbmcgaXRcIikgKyBcIjogXCIgKyBtb2R1bGVOYW1lLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgaWYgKFtcImN5dG9zY2FwZS1kYWdyZVwiLCBcImN5dG9zY2FwZS1odG1sLW5vZGVcIiwgXCJjeXRvc2NhcGUtY3h0bWVudVwiLCBcImN5dG9zY2FwZS1leHBhbmQtY29sbGFwc2VcIl0uaW5jbHVkZXMobW9kdWxlTmFtZSkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5sb2coXCJXXCIsIHRoaXMuc2VydmljZS5sb2MoXCJNb2R1bGVcIikgKyBcIiBcIiArIG1vZHVsZU5hbWUgKyBcIiBcIiArIHRoaXMuc2VydmljZS5sb2MoXCJpcyBsb2FkZWQgYW5kIG1hbmFnZWQgZGlyZWN0bHkgYnkgdGhpcyBsaWJyYXJ5LiBZb3UgZG9uJ3QgbmVlZCB0byBpbXBvcnQgaXQgb3IgdXNlIGl0IGRpcmVjdGx5LCBqdXN0IGJlIHN1cmUgdG8gc2V0IHRoZSByZWxhdGl2ZSBvcHRpb25zXCIpLCBmYWxzZSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGN5dG9zY2FwZS51c2UobW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKHdyYXBwZWRDeXRvc2NhcGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzZXJ2ZSBwZXIgY2FyaWNhcmUgdHV0dGUgbGUgZXN0ZW5zaW9uaSBkZWxsYSBsaWJyZXJpYSBpbiBiYXNlIGEgY2nDsiBjaGUgdmllbmUgdXRpbGl6emF0byBjb24gbGUgb3B6aW9uaSBkZWZpbml0ZSBkYWdsaSBJbnB1dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGVyZm9ybU9wZXJhdGlvbnNXaXRoTG9hZGVkTW9kdWxlcygpIHtcclxuXHJcbiAgICBsZXQgYW55Q3kgPSAoPGFueT50aGlzLmN5KTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWwgbGF5b3V0LCBsbyBzYWx2byBwZXIgcG90ZXJsbyByaXV0aWxpenphcmUgaW4gZnV0dXJvXHJcbiAgICBpZiAodGhpcy5MYXlvdXQpIHtcclxuICAgICAgdGhpcy5MYXN0TGF5b3V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkxheW91dCkpO1xyXG4gICAgICB0aGlzLmN5LmxheW91dCh0aGlzLkxhc3RMYXlvdXQpLnJ1bigpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXRpbGl6em8gZGVsbCdIVE1MIG5vZGVcclxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkh0bWxOb2RlQXBpID0gYW55Q3kuaHRtbG5vZGUoKTtcclxuICAgICAgdGhpcy5IdG1sTm9kZUFwaS5jcmVhdGVIdG1sTm9kZShjeXRvc2NhcGUsIHRoaXMuY3ksIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFV0aWxpenpvIGRlbCBDb250ZXh0IE1lbnVcclxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxyXG4gICAgICB0aGlzLkNvbnRleHRNZW51T3B0aW9ucy5mb3JFYWNoKG8gPT4geyBhbnlDeS5jeHRtZW51KG8pOyB9KTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWxsJ2V4cGFuZCBjb2xsYXBzZSBzb2xvIHF1YW5kbyBjJ8OoIHVuYSBnZXJhcmNoaWEgZGkgbm9kaVxyXG4gICAgaWYgKHRoaXMuTm9kZXNIaWVyYXJjaHkgJiYgdGhpcy5Vc2VFeHBhbmRDb2xsYXBzZSlcclxuICAgICAgdGhpcy5FeHBhbmRDb2xsYXBzZUFwaSA9IGFueUN5LmV4cGFuZENvbGxhcHNlKHRoaXMuRXhwYW5kQ29sbGFwc2VPcHRpb25zKTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkaSBlc3RlbnNpb25pIGV4dHJhLCBpbXBsZW1lbnRhemlvbmUgYWZmaWRhdGEgYWwgcHJvZ3JhbW1hdG9yZVxyXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIpXHJcbiAgICAgIHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIodGhpcy5jeSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ2FyZERhdGEoKSB7XHJcbiAgICBpZiAoIXRoaXMuSHRtbE5vZGVBcGkpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJDYW5ub3QgdXBkYXRlIE5vZGVIVE1MVGVtcGxhdGVzIGFzIHRoZXkgZG9uJ3Qgc2VlbSB0byBiZSB1c2VkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkh0bWxOb2RlQXBpLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludGVybm8gcGVyIGlsIGNhcmljYW1lbnRvIGRlaSBtb2R1bGkgZGkgZXN0ZW5zaW9uZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7J2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnfSBtb2R1bGVJZCBNb2R1bG8gZGEgY2FyaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGxvYWRJbnRlcm5hbChtb2R1bGVJZDogJ2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnKSB7XHJcbiAgICBsZXQgdG9Mb2FkID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmltcG9ydElmTmVlZGVkKG1vZHVsZUlkKTtcclxuICAgIGlmICh0b0xvYWQpIGN5dG9zY2FwZS51c2UodG9Mb2FkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgYmFzYW5kb3NpIHN1bGxlIG9wemlvbmkgbmF0aXZlIGV2ZW50dWFsbWVudGUgYXNzZWduYXRlIGxlIGNvbXBsZXRhIGNvbiBnbGkgSW5wdXQgYWRkaXppb25hbGlcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Y3lfLkN5dG9zY2FwZU9wdGlvbnN9IE9wemlvbmkgZmluYWxpIHVuaXRlIGRhIElucHV0IGVkIG9wemlvbmkgbmF0aXZlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDb21wbGV0ZWRPcHRpb25zKCk6IGN5Xy5DeXRvc2NhcGVPcHRpb25zIHtcclxuICAgIHZhciBvcHRzOiBjeV8uQ3l0b3NjYXBlT3B0aW9ucyA9IHRoaXMuTmF0aXZlT3B0aW9ucyB8fCB7fTtcclxuICAgIG9wdHMuY29udGFpbmVyID0gdGhpcy5jeUdyYXBoLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBvcHRzLnN0eWxlID0gb3B0cy5zdHlsZSB8fCBbXTtcclxuXHJcbiAgICAvLyBQZXIgdHV0dGUgbGUgY29zZSBwZXIgY3VpIGdsaSBJbnB1dCBoYW5ubyBwcmlvcml0w6Agc292cmFzY3Jpdm8gZ2xpIG9yaWdpbmFsaSBkZWxsZSBvcHppb25pXHJcblxyXG4gICAgaWYgKHRoaXMuTm9kZVN0eWxlcyB8fCB0aGlzLkVkZ2VTdHlsZXMpIHtcclxuICAgICAgb3B0cy5zdHlsZSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5Ob2RlU3R5bGVzKSBvcHRzLnN0eWxlLnB1c2goeyBzZWxlY3RvcjogJ25vZGUnLCBjc3M6IHRoaXMuTm9kZVN0eWxlcyB9KTtcclxuICAgICAgaWYgKHRoaXMuRWRnZVN0eWxlcykgb3B0cy5zdHlsZS5wdXNoKHsgc2VsZWN0b3I6ICdlZGdlJywgY3NzOiB0aGlzLkVkZ2VTdHlsZXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRWxlbWVudHMpXHJcbiAgICAgIG9wdHMuZWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzO1xyXG5cclxuICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoPGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdPm9wdHMuZWxlbWVudHMpO1xyXG5cclxuICAgIGlmICh0aGlzLkxheW91dClcclxuICAgICAgb3B0cy5sYXlvdXQgPSB0aGlzLkxheW91dDtcclxuXHJcbiAgICBpZiAodGhpcy5SZWFkb25seSkge1xyXG4gICAgICAvLyBRdWVzdG8gY29zbyBmYSBlZmZldHRpIHN0cmFuaS4uLi5cclxuICAgICAgLy9vcHRzLmF1dG9sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgIG9wdHMuYXV0b3VuZ3JhYmlmeSA9IHRydWU7XHJcbiAgICAgIG9wdHMuYXV0b3Vuc2VsZWN0aWZ5ID0gZmFsc2U7XHJcbiAgICAgIG9wdHMuYm94U2VsZWN0aW9uRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgIG9wdHMudXNlclpvb21pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICAgIG9wdHMudXNlclBhbm5pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9wdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZ2dpdXN0YW1lbnRpIGRlZ2xpIGVsZW1lbnRpIGRpIEN5dG9zY2FwZS4gXHJcbiAgICogXHJcbiAgICogSSBub2RpIG5vbiB2ZW5nb25vIHRvY2NhdGkuXHJcbiAgICogXHJcbiAgICogUGVyIG9nbmkgZWRnZSB2aWVuZSBjb250cm9sbGF0byBzZSDDqCBzcGVjaWZpY2F0YSB1bmEgc29yZ2VudGUgZWQgdW5hIGRlc3RpbmF6aW9uZSwgaW4gY2FzbyBjb250cmFyaW8gc2kgY2VyY2EgZGkgZGVkdXJsaSBkYWxsJ0lEXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXX0gZWxlbWVudHMgRWxlbWVudGkgZGEgc2lzdGVtYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXZpZXdDeXRvc2NhcGVFbGVtZW50cyhlbGVtZW50czogY3l0b3NjYXBlLkVsZW1lbnREZWZpbml0aW9uW10sIHByZXZQb3NpdGlvbnM/OiBhbnkpIHtcclxuICAgIGxldCBoYXNQcmV2aW91c1Bvc2l0aW9ucyA9IHByZXZQb3NpdGlvbnMgJiYgcHJldlBvc2l0aW9ucy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHBvc2l0aW9uQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBjeXRvc2NhcGUuUG9zaXRpb24gfSA9IHt9O1xyXG5cclxuICAgIGlmIChoYXNQcmV2aW91c1Bvc2l0aW9ucykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgaXRlbSA9IHByZXZQb3NpdGlvbnNbaV07XHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbkNhY2hlW2l0ZW0uZGF0YSgpLmlkXSlcclxuICAgICAgICAgIHBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdID0gaXRlbS5wb3NpdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZWwgPSBlbGVtZW50c1tpXTtcclxuICAgICAgaWYgKGVsLmdyb3VwID09IFwiZWRnZXNcIiAmJiAoIWVsLmRhdGEuc291cmNlICYmICFlbC5kYXRhLnRhcmdldCkpIHtcclxuICAgICAgICBpZiAoIWVsLmRhdGEuaWQuaW5jbHVkZXMoXCItXCIpKVxyXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNvdXJjZSBhbmQgYSB0YXJnZXQgZm9yIGFuIGVkZ2UgeW91IGhhdmUgdG8gd3JpdGUgaXRzIGlkIGluIHRoZSBmb3JtYXQge3NvdXJjZX0te3RhcmdldH1cIik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YXIgc291cmNlVGFyZ2V0ID0gZWwuZGF0YS5pZC5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgZWwuZGF0YS5zb3VyY2UgPSBzb3VyY2VUYXJnZXRbMF0udHJpbSgpO1xyXG4gICAgICAgICAgZWwuZGF0YS50YXJnZXQgPSBzb3VyY2VUYXJnZXRbMV0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGhhc1ByZXZpb3VzUG9zaXRpb25zICYmIGVsLmdyb3VwID09IFwibm9kZXNcIilcclxuICAgICAgICBlbC5wb3NpdGlvbiA9IHBvc2l0aW9uQ2FjaGVbZWwuZGF0YS5pZF1cclxuICAgIH1cclxuICB9XHJcbn0iXX0=
|
|
@@ -956,6 +956,10 @@ class EsDiagramComponent {
|
|
|
956
956
|
* Evento lanciato alla selezione o deselezione di un nodo, contiene l'oggetto **data** del nodo in questione e informazioni sul suo stato di selezione
|
|
957
957
|
*/
|
|
958
958
|
this.onNodeSelection = new EventEmitter();
|
|
959
|
+
/**
|
|
960
|
+
* Evento lanciato al termine del Layouting. Se si vuole eseguire codice dopo che il Layout è fatto e completamente graficato, questo è il punto
|
|
961
|
+
*/
|
|
962
|
+
this.onLayoutDone = new EventEmitter();
|
|
959
963
|
/**
|
|
960
964
|
* Evento lanciato al termine del caricamento del diagramma
|
|
961
965
|
*/
|
|
@@ -1149,6 +1153,9 @@ class EsDiagramComponent {
|
|
|
1149
1153
|
let targetData = event.target.data();
|
|
1150
1154
|
this.onNodeSelection.emit({ data: targetData, selected: true });
|
|
1151
1155
|
});
|
|
1156
|
+
this.cy.bind('layoutstop', (event) => {
|
|
1157
|
+
this.onLayoutDone.emit();
|
|
1158
|
+
});
|
|
1152
1159
|
this.cy.bind('unselect', 'node', (event) => {
|
|
1153
1160
|
let targetData = event.target.data();
|
|
1154
1161
|
this.onNodeSelection.emit({ data: targetData, selected: false });
|
|
@@ -1333,6 +1340,7 @@ EsDiagramComponent.propDecorators = {
|
|
|
1333
1340
|
ExtensionModulesApplyer: [{ type: Input }],
|
|
1334
1341
|
onNodeClick: [{ type: Output }],
|
|
1335
1342
|
onNodeSelection: [{ type: Output }],
|
|
1343
|
+
onLayoutDone: [{ type: Output }],
|
|
1336
1344
|
onLoaded: [{ type: Output }]
|
|
1337
1345
|
};
|
|
1338
1346
|
|