@magic-xpa/angular 4.800.0-dev480.94 → 4.801.0-dev000.0

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.
Files changed (139) hide show
  1. package/esm2020/index.mjs +57 -0
  2. package/{esm2015/magic-xpa-angular.js → esm2020/magic-xpa-angular.mjs} +0 -0
  3. package/esm2020/src/controls.metadata.model.mjs +180 -0
  4. package/{esm2015/src/interfaces/sub-form-definition.iterface.js → esm2020/src/interfaces/sub-form-definition.iterface.mjs} +1 -0
  5. package/esm2020/src/magic.core.module.mjs +157 -0
  6. package/{esm2015/src/services/ISubformMagicService.js → esm2020/src/services/ISubformMagicService.mjs} +1 -0
  7. package/esm2020/src/services/OverlayWindowService.mjs +208 -0
  8. package/esm2020/src/services/StylesMapManager.mjs +28 -0
  9. package/esm2020/src/services/accessor.magic.service.mjs +302 -0
  10. package/{esm2015/src/services/commands-collector.magic.service.js → esm2020/src/services/commands-collector.magic.service.mjs} +7 -4
  11. package/esm2020/src/services/component-list.magic.service.mjs +46 -0
  12. package/{esm2015/src/services/confirmation.components.magic.provider.js → esm2020/src/services/confirmation.components.magic.provider.mjs} +2 -2
  13. package/esm2020/src/services/engine.magic.service.mjs +82 -0
  14. package/{esm2015/src/services/exit.magic.service.js → esm2020/src/services/exit.magic.service.mjs} +2 -2
  15. package/esm2020/src/services/magic.lazy.loader.service.mjs +16 -0
  16. package/{esm2015/src/services/magic.providers.js → esm2020/src/services/magic.providers.mjs} +0 -0
  17. package/{esm2015/src/services/magic.services.js → esm2020/src/services/magic.services.mjs} +2 -2
  18. package/{esm2015/src/services/mg-date-adapter.js → esm2020/src/services/mg-date-adapter.mjs} +2 -2
  19. package/{esm2015/src/services/overlay.conainer.magic.provider.js → esm2020/src/services/overlay.conainer.magic.provider.mjs} +2 -2
  20. package/esm2020/src/services/router-commands.magic.service.mjs +28 -0
  21. package/esm2020/src/services/subform.magic.service.mjs +185 -0
  22. package/{esm2015/src/services/table.magic.service.js → esm2020/src/services/table.magic.service.mjs} +2 -2
  23. package/esm2020/src/services/task.magics.service.mjs +611 -0
  24. package/{esm2015/src/services/title.magic.service.js → esm2020/src/services/title.magic.service.mjs} +2 -2
  25. package/esm2020/src/ui/GuiInteractiveExecutor.mjs +98 -0
  26. package/{esm2015/src/ui/components/base-magic-alert.component.js → esm2020/src/ui/components/base-magic-alert.component.mjs} +2 -2
  27. package/{esm2015/src/ui/components/base-magic-confirm.component.js → esm2020/src/ui/components/base-magic-confirm.component.mjs} +2 -2
  28. package/esm2020/src/ui/components/magic-alert.component.mjs +71 -0
  29. package/esm2020/src/ui/components/magic-confirmation-box.component.mjs +82 -0
  30. package/{esm2015/src/ui/directives/NonMagicControlDirective.js → esm2020/src/ui/directives/NonMagicControlDirective.mjs} +2 -2
  31. package/{esm2015/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.js → esm2020/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.mjs} +2 -2
  32. package/{esm2015/src/ui/directives/magic/checkbox.magic.directive.js → esm2020/src/ui/directives/magic/checkbox.magic.directive.mjs} +2 -2
  33. package/{esm2015/src/ui/directives/magic/combobox.magic.directive.js → esm2020/src/ui/directives/magic/combobox.magic.directive.mjs} +2 -2
  34. package/{esm2015/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.js → esm2020/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.mjs} +3 -4
  35. package/{esm2015/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.js → esm2020/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.mjs} +2 -2
  36. package/{esm2015/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.js → esm2020/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.mjs} +3 -4
  37. package/{esm2015/src/ui/directives/magic/input.noformcontrol.magic.directive.js → esm2020/src/ui/directives/magic/input.noformcontrol.magic.directive.mjs} +2 -2
  38. package/{esm2015/src/ui/directives/magic/nocontrol.magic.directive.js → esm2020/src/ui/directives/magic/nocontrol.magic.directive.mjs} +2 -2
  39. package/esm2020/src/ui/directives/magic/row.magic.directive.mjs +58 -0
  40. package/{esm2015/src/ui/directives/magic-focus.directive.js → esm2020/src/ui/directives/magic-focus.directive.mjs} +2 -2
  41. package/esm2020/src/ui/directives/magic.directive.mjs +207 -0
  42. package/esm2020/src/ui/directives/magicViewContainerRef.directive.mjs +20 -0
  43. package/{esm2015/src/ui/directives/mgformat.magic.directive.js → esm2020/src/ui/directives/mgformat.magic.directive.mjs} +2 -2
  44. package/{esm2015/src/ui/directives/range-validator.magic.directive.js → esm2020/src/ui/directives/range-validator.magic.directive.mjs} +2 -2
  45. package/{esm2015/src/ui/magic-confirmationBox.js → esm2020/src/ui/magic-confirmationBox.mjs} +0 -0
  46. package/{esm2015/src/ui/magic-modal/base-magic-overlay-container.js → esm2020/src/ui/magic-modal/base-magic-overlay-container.mjs} +0 -0
  47. package/{esm2015/src/ui/magic-modal/magic-modal-form.js → esm2020/src/ui/magic-modal/magic-modal-form.mjs} +0 -0
  48. package/{esm2015/src/ui/magic-modal/magic-modal-interface.js → esm2020/src/ui/magic-modal/magic-modal-interface.mjs} +1 -0
  49. package/esm2020/src/ui/magic-modal/magic-overlay-container-wrapper.mjs +135 -0
  50. package/esm2020/src/ui/magic-modal/magic-overlay-container.mjs +165 -0
  51. package/esm2020/src/ui/magic-root.component.mjs +237 -0
  52. package/esm2020/src/ui/mgerror.magic.component.mjs +120 -0
  53. package/esm2020/src/ui/pipes/date.magic.pipe.mjs +105 -0
  54. package/{esm2015/src/ui/pipes/time.magic.pipe.js → esm2020/src/ui/pipes/time.magic.pipe.mjs} +3 -3
  55. package/esm2020/src/ui/router-container.magic.component.mjs +109 -0
  56. package/esm2020/src/ui/subform.magic.component.mjs +52 -0
  57. package/{esm2015/src/ui/task-base.magic.component.js → esm2020/src/ui/task-base.magic.component.mjs} +2 -2
  58. package/{esm2015/src/ui/utils.js → esm2020/src/ui/utils.mjs} +0 -0
  59. package/fesm2015/magic-xpa-angular.mjs +4578 -0
  60. package/fesm2015/magic-xpa-angular.mjs.map +1 -0
  61. package/{fesm2015/magic-xpa-angular.js → fesm2020/magic-xpa-angular.mjs} +834 -764
  62. package/fesm2020/magic-xpa-angular.mjs.map +1 -0
  63. package/index.d.ts +1 -0
  64. package/package.json +28 -15
  65. package/src/magic.core.module.d.ts +3 -8
  66. package/src/services/OverlayWindowService.d.ts +2 -2
  67. package/src/services/accessor.magic.service.d.ts +10 -3
  68. package/src/services/commands-collector.magic.service.d.ts +2 -2
  69. package/src/services/component-list.magic.service.d.ts +3 -0
  70. package/src/services/confirmation.components.magic.provider.d.ts +2 -2
  71. package/src/services/engine.magic.service.d.ts +2 -2
  72. package/src/services/exit.magic.service.d.ts +2 -2
  73. package/src/services/magic.lazy.loader.service.d.ts +6 -0
  74. package/src/services/magic.services.d.ts +2 -2
  75. package/src/services/mg-date-adapter.d.ts +2 -2
  76. package/src/services/overlay.conainer.magic.provider.d.ts +2 -2
  77. package/src/services/router-commands.magic.service.d.ts +2 -2
  78. package/src/services/subform.magic.service.d.ts +9 -4
  79. package/src/services/table.magic.service.d.ts +2 -2
  80. package/src/services/task.magics.service.d.ts +2 -2
  81. package/src/services/title.magic.service.d.ts +2 -2
  82. package/src/ui/GuiInteractiveExecutor.d.ts +1 -0
  83. package/src/ui/components/base-magic-alert.component.d.ts +2 -2
  84. package/src/ui/components/base-magic-confirm.component.d.ts +2 -2
  85. package/src/ui/components/magic-alert.component.d.ts +2 -2
  86. package/src/ui/components/magic-confirmation-box.component.d.ts +2 -2
  87. package/src/ui/directives/NonMagicControlDirective.d.ts +2 -2
  88. package/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.d.ts +2 -2
  89. package/src/ui/directives/magic/checkbox.magic.directive.d.ts +2 -2
  90. package/src/ui/directives/magic/combobox.magic.directive.d.ts +2 -2
  91. package/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.d.ts +2 -2
  92. package/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.d.ts +2 -2
  93. package/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.d.ts +2 -2
  94. package/src/ui/directives/magic/input.noformcontrol.magic.directive.d.ts +2 -2
  95. package/src/ui/directives/magic/nocontrol.magic.directive.d.ts +2 -2
  96. package/src/ui/directives/magic/row.magic.directive.d.ts +2 -2
  97. package/src/ui/directives/magic-focus.directive.d.ts +2 -2
  98. package/src/ui/directives/magic.directive.d.ts +3 -2
  99. package/src/ui/directives/magicViewContainerRef.directive.d.ts +2 -2
  100. package/src/ui/directives/mgformat.magic.directive.d.ts +2 -2
  101. package/src/ui/directives/range-validator.magic.directive.d.ts +2 -2
  102. package/src/ui/magic-modal/magic-overlay-container-wrapper.d.ts +7 -5
  103. package/src/ui/magic-modal/magic-overlay-container.d.ts +2 -2
  104. package/src/ui/magic-root.component.d.ts +2 -2
  105. package/src/ui/mgerror.magic.component.d.ts +2 -2
  106. package/src/ui/pipes/date.magic.pipe.d.ts +2 -2
  107. package/src/ui/pipes/time.magic.pipe.d.ts +2 -2
  108. package/src/ui/router-container.magic.component.d.ts +7 -4
  109. package/src/ui/subform.magic.component.d.ts +2 -2
  110. package/src/ui/task-base.magic.component.d.ts +2 -2
  111. package/bundles/magic-xpa-angular.umd.js +0 -4973
  112. package/bundles/magic-xpa-angular.umd.js.map +0 -1
  113. package/bundles/magic-xpa-angular.umd.min.js +0 -16
  114. package/bundles/magic-xpa-angular.umd.min.js.map +0 -1
  115. package/esm2015/index.js +0 -56
  116. package/esm2015/src/controls.metadata.model.js +0 -180
  117. package/esm2015/src/magic.core.module.js +0 -173
  118. package/esm2015/src/services/OverlayWindowService.js +0 -205
  119. package/esm2015/src/services/StylesMapManager.js +0 -29
  120. package/esm2015/src/services/accessor.magic.service.js +0 -290
  121. package/esm2015/src/services/component-list.magic.service.js +0 -36
  122. package/esm2015/src/services/engine.magic.service.js +0 -82
  123. package/esm2015/src/services/router-commands.magic.service.js +0 -25
  124. package/esm2015/src/services/subform.magic.service.js +0 -161
  125. package/esm2015/src/services/task.magics.service.js +0 -610
  126. package/esm2015/src/ui/GuiInteractiveExecutor.js +0 -91
  127. package/esm2015/src/ui/components/magic-alert.component.js +0 -72
  128. package/esm2015/src/ui/components/magic-confirmation-box.component.js +0 -83
  129. package/esm2015/src/ui/directives/magic/row.magic.directive.js +0 -56
  130. package/esm2015/src/ui/directives/magic.directive.js +0 -205
  131. package/esm2015/src/ui/directives/magicViewContainerRef.directive.js +0 -20
  132. package/esm2015/src/ui/magic-modal/magic-overlay-container-wrapper.js +0 -131
  133. package/esm2015/src/ui/magic-modal/magic-overlay-container.js +0 -169
  134. package/esm2015/src/ui/magic-root.component.js +0 -237
  135. package/esm2015/src/ui/mgerror.magic.component.js +0 -120
  136. package/esm2015/src/ui/pipes/date.magic.pipe.js +0 -106
  137. package/esm2015/src/ui/router-container.magic.component.js +0 -102
  138. package/esm2015/src/ui/subform.magic.component.js +0 -52
  139. package/fesm2015/magic-xpa-angular.js.map +0 -1
@@ -178,7 +178,7 @@ export class NoControlMagicDirective extends MagicDirective {
178
178
  }
179
179
  NoControlMagicDirective.ɵfac = function NoControlMagicDirective_Factory(t) { return new (t || NoControlMagicDirective)(i0.ɵɵdirectiveInject(i1.TaskMagicService), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i2.RowMagicDirective, 8)); };
180
180
  NoControlMagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: NoControlMagicDirective, selectors: [["", "magicnc", ""]], inputs: { magic: ["magicnc", "magic"] }, features: [i0.ɵɵInheritDefinitionFeature] });
181
- (function () { i0.ɵsetClassMetadata(NoControlMagicDirective, [{
181
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NoControlMagicDirective, [{
182
182
  type: Directive,
183
183
  args: [{
184
184
  selector: '[magicnc]'
@@ -189,4 +189,4 @@ NoControlMagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: NoControlMagicDir
189
189
  type: Input,
190
190
  args: ['magicnc']
191
191
  }] }); })();
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9jb250cm9sLm1hZ2ljLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3VpL2RpcmVjdGl2ZXMvbWFnaWMvbm9jb250cm9sLm1hZ2ljLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUMsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFZLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRTVELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTyxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDdkUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFTeEQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGNBQWM7SUFJekQsWUFDRSxLQUEwQixFQUMxQixPQUFvQixFQUNwQixRQUFtQixFQUNuQixLQUEwQixFQUNkLFFBQTJCO1FBQ3ZDLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQVRELElBQXNCLEtBQUssQ0FBQyxHQUFHLElBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFBLENBQUM7SUFBQSxDQUFDO0lBVzdF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QyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNO1NBQ1Q7SUFDSCxDQUFDOzs4RkFyTlUsdUJBQXVCOzREQUF2Qix1QkFBdUI7b0NBQXZCLHVCQUF1QjtjQUpuQyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLFdBQVc7YUFDdEI7O3NCQVdJLFFBQVE7d0JBUFcsS0FBSztrQkFBMUIsS0FBSzttQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBSZW5kZXJlcjIsIFZpZXdDb250YWluZXJSZWYsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb21tYW5kVHlwZSwgR3VpQ29tbWFuZH0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7SUd1aUV2ZW50LCBnZXRHdWlFdmVudE9ian0gZnJvbSBcIkBtYWdpYy14cGEvZW5naW5lXCI7XHJcbmltcG9ydCB7Q29udHJvbE1ldGFkYXRhfSBmcm9tIFwiLi4vLi4vLi4vY29udHJvbHMubWV0YWRhdGEubW9kZWxcIjtcclxuaW1wb3J0IHtIdG1sUHJvcGVydGllc30gZnJvbSAgXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge01hZ2ljRGlyZWN0aXZlfSBmcm9tIFwiLi4vbWFnaWMuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VGFza01hZ2ljU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3Rhc2subWFnaWNzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTdHlsZXNNYXBNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvU3R5bGVzTWFwTWFuYWdlclwiO1xyXG5pbXBvcnQge1Jvd01hZ2ljRGlyZWN0aXZlfSBmcm9tIFwiLi9yb3cubWFnaWMuZGlyZWN0aXZlXCI7XHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbWFnaWNuY10nXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTm9Db250cm9sTWFnaWNEaXJlY3RpdmUgZXh0ZW5kcyBNYWdpY0RpcmVjdGl2ZSB7XHJcblxyXG4gIEBJbnB1dCgnbWFnaWNuYycpIHNldCBtYWdpYyh2YWwpIHt0aGlzLmlkID0gdmFsOyB0aGlzLnNlbGVjdG9yID0gJ21hZ2ljbmMnO307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgX3Rhc2sgICA6IFRhc2tNYWdpY1NlcnZpY2UsXHJcbiAgICBlbGVtZW50IDogRWxlbWVudFJlZixcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICB2Y1JlZiAgIDogVmlld0NvbnRhaW5lclJlZixcclxuICAgIEBPcHRpb25hbCgpIG1hZ2ljUm93OiBSb3dNYWdpY0RpcmVjdGl2ZSkge1xyXG4gICAgc3VwZXIoX3Rhc2ssIGVsZW1lbnQsIHJlbmRlcmVyLCAgdmNSZWYsIG1hZ2ljUm93KTtcclxuICB9XHJcblxyXG4gIHJlZ0V2ZW50cygpIHtcclxuICBzdXBlci5yZWdFdmVudHMoKVxyXG5cclxuICAgIGlmICh0aGlzLmh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5odG1sRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJzZWxlY3Rpb25jaGFuZ2VkXCIsIHRoaXMuaWQsIDApO1xyXG4gICAgICAgIGd1aUV2ZW50LlZhbHVlID0gKDxhbnk+KGV2ZW50LnRhcmdldCkpLnNlbGVjdGVkSW5kZXgudG9TdHJpbmcoKVxyXG4gICAgICAgIHRoaXMudGFzay5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzUmFkaW8oKSkge1xyXG4gICAgICB0aGlzLmh0bWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudGFzay5nZXRGb3JtQ29udHJvbCgnMCcsIHRoaXMuaWQpO1xyXG4gICAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJzZWxlY3Rpb25jaGFuZ2VkXCIsIHRoaXMuaWQsIDApO1xyXG4gICAgICAgIGd1aUV2ZW50LlZhbHVlID0gKDxhbnk+KGUudGFyZ2V0KSkudmFsdWU7XHJcbiAgICAgICAgdGhpcy50YXNrLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5pc1RhYkNvbnRyb2woKSkge1xyXG4gICAgICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuWzBdO1xyXG4gICAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJzZWxlY3Rpb25jaGFuZ2VkXCIsIHRoaXMuaWQsIDApO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFiQ29udHJvbC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGFiQ29udHJvbC5jaGlsZHJlbltpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGd1aUV2ZW50LlZhbHVlID0gKCg8bnVtYmVyPjxhbnk+KDxFbGVtZW50PmUuY3VycmVudFRhcmdldCkuZ2V0QXR0cmlidXRlKCdsYXllcicpKS0xKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB0aGlzLnRhc2suaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaXMgdGhlIGRpdiBhIHRhYiBjb250cm9sXHJcbiAgaXNUYWJDb250cm9sKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRGl2RWxlbWVudCAmJlxyXG4gICAgICB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuWzBdLmdldEF0dHJpYnV0ZSgnbWFnaWNNYXJrJyk9PT0gXCJtYWdpY1RhYkNvbnRyb2xcIjtcclxuICB9XHJcblxyXG4gIC8vIGlzIHRoZSBkaXYgYSByYWRpbyBidXR0b25zIHdyYXBwZXJcclxuICBpc1JhZGlvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRGl2RWxlbWVudCAmJlxyXG4gICAgICB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuWzBdLmdldEF0dHJpYnV0ZSgnbWFnaWNNYXJrJykgPT09IFwibWFnaWNSYWRpb1wiO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29tbWFuZChjb21tYW5kOiBHdWlDb21tYW5kKSB7XHJcbiAgICBzdXBlci5oYW5kbGVDb21tYW5kKGNvbW1hbmQpO1xyXG5cclxuICAgIHN3aXRjaCAoY29tbWFuZC5Db21tYW5kVHlwZSkge1xyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9DTEFTUzpcclxuICAgICAgICAvL3JlbW92ZSB0aGUgY2xhc3Mgd2hpY2ggd2FzIHJlcGxhY2VkIGJ5IHRoaXMgbmV3IG9uZSwgYXMgcmVnaXN0ZXJlZCBpbiB0aGUgQ29udHJvbE1ldGFkYXRhXHJcbiAgICAgICAgY29uc3QgY29udHJvbE1ldGFkYXRhOkNvbnRyb2xNZXRhZGF0YSA9IHRoaXMuX3Rhc2suUmVjb3Jkcy5saXN0WzBdLmdldENvbnRyb2xNZXRhZGF0YSh0aGlzLmlkKTtcclxuICAgICAgICBpZihjb250cm9sTWV0YWRhdGEucmVtb3ZlZENsYXNzICE9ICcnKSB7XHJcbiAgICAgICAgICB0aGlzLmh0bWxFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY29udHJvbE1ldGFkYXRhLnJlbW92ZWRDbGFzcyk7XHJcbiAgICAgICAgICBjb250cm9sTWV0YWRhdGEucmVtb3ZlZENsYXNzID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuY2xhc3NMaXN0LmFkZChjb21tYW5kLm9iajEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAgQ29tbWFuZFR5cGUuU0VUX1ZBTFVFOlxyXG4gICAgICAgIGlmICh0aGlzLmh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudClcclxuICAgICAgICAgICg8SFRNTExhYmVsRWxlbWVudD50aGlzLmh0bWxFbGVtZW50KS5pbm5lclRleHQgPSBjb21tYW5kLnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5odG1sRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KVxyXG4gICAgICAgICAgKDxIVE1MU2VsZWN0RWxlbWVudD50aGlzLmh0bWxFbGVtZW50KS52YWx1ZSA9IGNvbW1hbmQudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQpIC8vaHlwZXItdGV4dCBidXR0b25cclxuICAgICAgICAgICg8SFRNTEFuY2hvckVsZW1lbnQ+dGhpcy5odG1sRWxlbWVudCkudGV4dCA9IGNvbW1hbmQudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZigoPEhUTUxJbnB1dEVsZW1lbnQ+dGhpcy5odG1sRWxlbWVudCkudHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XHJcbiAgICAgICAgICAgICg8SFRNTElucHV0RWxlbWVudD50aGlzLmh0bWxFbGVtZW50KS5jaGVja2VkID0gY29tbWFuZC52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+dGhpcy5odG1sRWxlbWVudCkudmFsdWUgPSBjb21tYW5kLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAoPEhUTUxCdXR0b25FbGVtZW50PnRoaXMuaHRtbEVsZW1lbnQpLmlubmVySFRNTCA9IGNvbW1hbmQudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlU2V0UHJvcGVydHkoY29tbWFuZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9TVFlMRTpcclxuICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyA9IFN0eWxlc01hcE1hbmFnZXIubWFnaWNWYWx1ZUdldFN0eWxlKGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLm9iajEpO1xyXG4gICAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9IFN0eWxlc01hcE1hbmFnZXIuTWFnaWNQcm9wZXJ0eVRvSHRtbEF0dHJpYnV0ZU1hcC5nZXQoY29tbWFuZC5PcGVyYXRpb24pO1xyXG4gICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgYXR0cmlidXRlICsgXCI6XCIgKyB2YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gaGFuZGxlIHNldC1wcm9wZXJ0eSBjb21tYW5kc1xyXG4gIGhhbmRsZVNldFByb3BlcnR5KGNvbW1hbmQ6IEd1aUNvbW1hbmQpIHtcclxuICAgIHN1cGVyLmhhbmRsZVNldFByb3BlcnR5KGNvbW1hbmQpO1xyXG4gICAgc3dpdGNoIChjb21tYW5kLk9wZXJhdGlvbikge1xyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlRleHQ6XHJcbiAgICAgICAgaWYgKHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KVxyXG4gICAgICAgICAgKDxIVE1MTGFiZWxFbGVtZW50PnRoaXMuaHRtbEVsZW1lbnQpLmlubmVyVGV4dCA9IGNvbW1hbmQub2JqMTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLkltYWdlOlxyXG4gICAgICAgIGlmICh0aGlzLmh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudClcclxuICAgICAgICAgICg8SFRNTEltYWdlRWxlbWVudD50aGlzLmh0bWxFbGVtZW50KS5zcmMgPSBjb21tYW5kLm9iajE7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5odG1sRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgY29tbWFuZC5vYmoxKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLkl0ZW1zTGlzdDpcclxuICAgICAgICBpZiAodGhpcy5odG1sRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XHJcblxyXG4gICAgICAgICAgLy8gY2xlYXIgdGhlIGxpc3RcclxuICAgICAgICAgIHZhciBsZW4gPSB0aGlzLmh0bWxFbGVtZW50Lmxlbmd0aDtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICB0aGlzLmh0bWxFbGVtZW50LnJlbW92ZShpKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBzIG9mIGNvbW1hbmQub2JqMSkge1xyXG4gICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XHJcbiAgICAgICAgICAgIGVsZW0udGV4dCA9IHMuZGlzcGxheVZhbHVlO1xyXG4gICAgICAgICAgICBlbGVtLnZhbHVlID0gcy5pbmRleDtcclxuICAgICAgICAgICAgKDxIVE1MU2VsZWN0RWxlbWVudD50aGlzLmh0bWxFbGVtZW50KS5hZGQoZWxlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5pc1RhYkNvbnRyb2woKSAmJiB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuWzBdO1xyXG5cclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFiQ29udHJvbC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZih0YWJDb250cm9sLmNoaWxkcmVuW2ldIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAoPEhUTUxFbGVtZW50PnRhYkNvbnRyb2wuY2hpbGRyZW5baV0pLmlubmVyVGV4dCA9IGNvbW1hbmQub2JqMVtpXS5kaXNwbGF5VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlZpc2libGU6XHJcbiAgICAgICAgdGhpcy5odG1sRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3Zpc2liaWxpdHk6JyArIChjb21tYW5kLm9iajEgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBIdG1sUHJvcGVydGllcy5FbmFibGVkOlxyXG4gICAgICAgIGlmIChjb21tYW5kLm9iajEgPT09IGZhbHNlKVxyXG4gICAgICAgICAgdGhpcy5odG1sRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcInRydWVcIik7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5odG1sRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSHRtbFByb3BlcnRpZXMuVGFiSW5kZXg6XHJcbiAgICAgICAgdGhpcy5odG1sRWxlbWVudC5zZXRBdHRyaWJ1dGUoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlNlbGVjdGVkVmFsdWU6XHJcbiAgICAgICAgaWYgKHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudClcclxuICAgICAgICAgICg8SFRNTFNlbGVjdEVsZW1lbnQ+dGhpcy5odG1sRWxlbWVudCkudmFsdWUgPSBjb21tYW5kLm9iajE7XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLmlzVGFiQ29udHJvbCgpICAmJiB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgY29uc3QgdGFiQ29udHJvbCA9IHRoaXMuaHRtbEVsZW1lbnQuY2hpbGRyZW5bMF07XHJcblxyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJDb250cm9sLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZCA9IHRhYkNvbnRyb2wuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gKDxudW1iZXI+PGFueT5jaGlsZC5nZXRBdHRyaWJ1dGUoJ2xheWVyJykpLTE7XHJcblxyXG4gICAgICAgICAgICBpZihjaGlsZCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgLy8gc2V0IGJ1dHRvbiBzdHlsZVxyXG4gICAgICAgICAgICAgIGlmICggbGF5ZXIgPT0gY29tbWFuZC5vYmoxKSB7IC8vIGNvbXBhcmUgaW50IHRvIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgY2hpbGQuY2xhc3NMaXN0LmFkZCgndGFiX2J1dHRvbl9hY3RpdmUnKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5jbGFzc0xpc3QucmVtb3ZlKCd0YWJfYnV0dG9uX2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBub3QgYSBidXRvbiAtIGhpZGUgdW5zZWxlY3RlZCB0YWJwYWdlc1xyXG4gICAgICAgICAgICAgIGxldCBzdHlsZSA9IChsYXllciA9PSBjb21tYW5kLm9iajEpID8gJ2Rpc3BsYXk6IGlubGluZScgOiAnZGlzcGxheTogbm9uZSc7XHJcbiAgICAgICAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKCdzdHlsZScsICBzdHlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlBsYWNlSG9sZGVyOlxyXG4gICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuc2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIiwgY29tbWFuZC5vYmoxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSHRtbFByb3BlcnRpZXMuVG9vbHRpcDpcclxuICAgICAgICB0aGlzLmh0bWxFbGVtZW50LnNldEF0dHJpYnV0ZShcInRpdGxlXCIsIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlBhc3N3b3JkOlxyXG4gICAgICAgIGlmIChjb21tYW5kLm9iajEgPT09IGZhbHNlKVxyXG4gICAgICAgICAgdGhpcy5odG1sRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dFwiKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLmh0bWxFbGVtZW50LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJwYXNzd29yZFwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9jb250cm9sLm1hZ2ljLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3VpL2RpcmVjdGl2ZXMvbWFnaWMvbm9jb250cm9sLm1hZ2ljLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUMsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFZLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRTVELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTyxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDdkUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFTeEQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGNBQWM7SUFJekQsWUFDRSxLQUEwQixFQUMxQixPQUFvQixFQUNwQixRQUFtQixFQUNuQixLQUEwQixFQUNkLFFBQTJCO1FBQ3ZDLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQVRELElBQXNCLEtBQUssQ0FBQyxHQUFHLElBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFBLENBQUM7SUFBQSxDQUFDO0lBVzdF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QyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNO1NBQ1Q7SUFDSCxDQUFDOzs4RkFyTlUsdUJBQXVCOzREQUF2Qix1QkFBdUI7dUZBQXZCLHVCQUF1QjtjQUpuQyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLFdBQVc7YUFDdEI7O3NCQVdJLFFBQVE7d0JBUFcsS0FBSztrQkFBMUIsS0FBSzttQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBSZW5kZXJlcjIsIFZpZXdDb250YWluZXJSZWYsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb21tYW5kVHlwZSwgR3VpQ29tbWFuZH0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7SUd1aUV2ZW50LCBnZXRHdWlFdmVudE9ian0gZnJvbSBcIkBtYWdpYy14cGEvZW5naW5lXCI7XHJcbmltcG9ydCB7Q29udHJvbE1ldGFkYXRhfSBmcm9tIFwiLi4vLi4vLi4vY29udHJvbHMubWV0YWRhdGEubW9kZWxcIjtcclxuaW1wb3J0IHtIdG1sUHJvcGVydGllc30gZnJvbSAgXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge01hZ2ljRGlyZWN0aXZlfSBmcm9tIFwiLi4vbWFnaWMuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7VGFza01hZ2ljU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3Rhc2subWFnaWNzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtTdHlsZXNNYXBNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvU3R5bGVzTWFwTWFuYWdlclwiO1xyXG5pbXBvcnQge1Jvd01hZ2ljRGlyZWN0aXZlfSBmcm9tIFwiLi9yb3cubWFnaWMuZGlyZWN0aXZlXCI7XHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbWFnaWNuY10nXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTm9Db250cm9sTWFnaWNEaXJlY3RpdmUgZXh0ZW5kcyBNYWdpY0RpcmVjdGl2ZSB7XHJcblxyXG4gIEBJbnB1dCgnbWFnaWNuYycpIHNldCBtYWdpYyh2YWwpIHt0aGlzLmlkID0gdmFsOyB0aGlzLnNlbGVjdG9yID0gJ21hZ2ljbmMnO307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgX3Rhc2sgICA6IFRhc2tNYWdpY1NlcnZpY2UsXHJcbiAgICBlbGVtZW50IDogRWxlbWVudFJlZixcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICB2Y1JlZiAgIDogVmlld0NvbnRhaW5lclJlZixcclxuICAgIEBPcHRpb25hbCgpIG1hZ2ljUm93OiBSb3dNYWdpY0RpcmVjdGl2ZSkge1xyXG4gICAgc3VwZXIoX3Rhc2ssIGVsZW1lbnQsIHJlbmRlcmVyLCAgdmNSZWYsIG1hZ2ljUm93KTtcclxuICB9XHJcblxyXG4gIHJlZ0V2ZW50cygpIHtcclxuICBzdXBlci5yZWdFdmVudHMoKVxyXG5cclxuICAgIGlmICh0aGlzLmh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5odG1sRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xyXG4gICAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJzZWxlY3Rpb25jaGFuZ2VkXCIsIHRoaXMuaWQsIDApO1xyXG4gICAgICAgIGd1aUV2ZW50LlZhbHVlID0gKDxhbnk+KGV2ZW50LnRhcmdldCkpLnNlbGVjdGVkSW5kZXgudG9TdHJpbmcoKVxyXG4gICAgICAgIHRoaXMudGFzay5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzUmFkaW8oKSkge1xyXG4gICAgICB0aGlzLmh0bWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudGFzay5nZXRGb3JtQ29udHJvbCgnMCcsIHRoaXMuaWQpO1xyXG4gICAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJzZWxlY3Rpb25jaGFuZ2VkXCIsIHRoaXMuaWQsIDApO1xyXG4gICAgICAgIGd1aUV2ZW50LlZhbHVlID0gKDxhbnk+KGUudGFyZ2V0KSkudmFsdWU7XHJcbiAgICAgICAgdGhpcy50YXNrLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5pc1RhYkNvbnRyb2woKSkge1xyXG4gICAgICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuWzBdO1xyXG4gICAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooXCJzZWxlY3Rpb25jaGFuZ2VkXCIsIHRoaXMuaWQsIDApO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFiQ29udHJvbC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGFiQ29udHJvbC5jaGlsZHJlbltpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGd1aUV2ZW50LlZhbHVlID0gKCg8bnVtYmVyPjxhbnk+KDxFbGVtZW50PmUuY3VycmVudFRhcmdldCkuZ2V0QXR0cmlidXRlKCdsYXllcicpKS0xKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB0aGlzLnRhc2suaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaXMgdGhlIGRpdiBhIHRhYiBjb250cm9sXHJcbiAgaXNUYWJDb250cm9sKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRGl2RWxlbWVudCAmJlxyXG4gICAgICB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuWzBdLmdldEF0dHJpYnV0ZSgnbWFnaWNNYXJrJyk9PT0gXCJtYWdpY1RhYkNvbnRyb2xcIjtcclxuICB9XHJcblxyXG4gIC8vIGlzIHRoZSBkaXYgYSByYWRpbyBidXR0b25zIHdyYXBwZXJcclxuICBpc1JhZGlvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRGl2RWxlbWVudCAmJlxyXG4gICAgICB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuWzBdLmdldEF0dHJpYnV0ZSgnbWFnaWNNYXJrJykgPT09IFwibWFnaWNSYWRpb1wiO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29tbWFuZChjb21tYW5kOiBHdWlDb21tYW5kKSB7XHJcbiAgICBzdXBlci5oYW5kbGVDb21tYW5kKGNvbW1hbmQpO1xyXG5cclxuICAgIHN3aXRjaCAoY29tbWFuZC5Db21tYW5kVHlwZSkge1xyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9DTEFTUzpcclxuICAgICAgICAvL3JlbW92ZSB0aGUgY2xhc3Mgd2hpY2ggd2FzIHJlcGxhY2VkIGJ5IHRoaXMgbmV3IG9uZSwgYXMgcmVnaXN0ZXJlZCBpbiB0aGUgQ29udHJvbE1ldGFkYXRhXHJcbiAgICAgICAgY29uc3QgY29udHJvbE1ldGFkYXRhOkNvbnRyb2xNZXRhZGF0YSA9IHRoaXMuX3Rhc2suUmVjb3Jkcy5saXN0WzBdLmdldENvbnRyb2xNZXRhZGF0YSh0aGlzLmlkKTtcclxuICAgICAgICBpZihjb250cm9sTWV0YWRhdGEucmVtb3ZlZENsYXNzICE9ICcnKSB7XHJcbiAgICAgICAgICB0aGlzLmh0bWxFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY29udHJvbE1ldGFkYXRhLnJlbW92ZWRDbGFzcyk7XHJcbiAgICAgICAgICBjb250cm9sTWV0YWRhdGEucmVtb3ZlZENsYXNzID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuY2xhc3NMaXN0LmFkZChjb21tYW5kLm9iajEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAgQ29tbWFuZFR5cGUuU0VUX1ZBTFVFOlxyXG4gICAgICAgIGlmICh0aGlzLmh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudClcclxuICAgICAgICAgICg8SFRNTExhYmVsRWxlbWVudD50aGlzLmh0bWxFbGVtZW50KS5pbm5lclRleHQgPSBjb21tYW5kLnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5odG1sRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KVxyXG4gICAgICAgICAgKDxIVE1MU2VsZWN0RWxlbWVudD50aGlzLmh0bWxFbGVtZW50KS52YWx1ZSA9IGNvbW1hbmQudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQpIC8vaHlwZXItdGV4dCBidXR0b25cclxuICAgICAgICAgICg8SFRNTEFuY2hvckVsZW1lbnQ+dGhpcy5odG1sRWxlbWVudCkudGV4dCA9IGNvbW1hbmQudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZigoPEhUTUxJbnB1dEVsZW1lbnQ+dGhpcy5odG1sRWxlbWVudCkudHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XHJcbiAgICAgICAgICAgICg8SFRNTElucHV0RWxlbWVudD50aGlzLmh0bWxFbGVtZW50KS5jaGVja2VkID0gY29tbWFuZC52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+dGhpcy5odG1sRWxlbWVudCkudmFsdWUgPSBjb21tYW5kLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAoPEhUTUxCdXR0b25FbGVtZW50PnRoaXMuaHRtbEVsZW1lbnQpLmlubmVySFRNTCA9IGNvbW1hbmQudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlU2V0UHJvcGVydHkoY29tbWFuZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9TVFlMRTpcclxuICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyA9IFN0eWxlc01hcE1hbmFnZXIubWFnaWNWYWx1ZUdldFN0eWxlKGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLm9iajEpO1xyXG4gICAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9IFN0eWxlc01hcE1hbmFnZXIuTWFnaWNQcm9wZXJ0eVRvSHRtbEF0dHJpYnV0ZU1hcC5nZXQoY29tbWFuZC5PcGVyYXRpb24pO1xyXG4gICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgYXR0cmlidXRlICsgXCI6XCIgKyB2YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gaGFuZGxlIHNldC1wcm9wZXJ0eSBjb21tYW5kc1xyXG4gIGhhbmRsZVNldFByb3BlcnR5KGNvbW1hbmQ6IEd1aUNvbW1hbmQpIHtcclxuICAgIHN1cGVyLmhhbmRsZVNldFByb3BlcnR5KGNvbW1hbmQpO1xyXG4gICAgc3dpdGNoIChjb21tYW5kLk9wZXJhdGlvbikge1xyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlRleHQ6XHJcbiAgICAgICAgaWYgKHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KVxyXG4gICAgICAgICAgKDxIVE1MTGFiZWxFbGVtZW50PnRoaXMuaHRtbEVsZW1lbnQpLmlubmVyVGV4dCA9IGNvbW1hbmQub2JqMTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLkltYWdlOlxyXG4gICAgICAgIGlmICh0aGlzLmh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudClcclxuICAgICAgICAgICg8SFRNTEltYWdlRWxlbWVudD50aGlzLmh0bWxFbGVtZW50KS5zcmMgPSBjb21tYW5kLm9iajE7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5odG1sRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgY29tbWFuZC5vYmoxKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLkl0ZW1zTGlzdDpcclxuICAgICAgICBpZiAodGhpcy5odG1sRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XHJcblxyXG4gICAgICAgICAgLy8gY2xlYXIgdGhlIGxpc3RcclxuICAgICAgICAgIHZhciBsZW4gPSB0aGlzLmh0bWxFbGVtZW50Lmxlbmd0aDtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICB0aGlzLmh0bWxFbGVtZW50LnJlbW92ZShpKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBzIG9mIGNvbW1hbmQub2JqMSkge1xyXG4gICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XHJcbiAgICAgICAgICAgIGVsZW0udGV4dCA9IHMuZGlzcGxheVZhbHVlO1xyXG4gICAgICAgICAgICBlbGVtLnZhbHVlID0gcy5pbmRleDtcclxuICAgICAgICAgICAgKDxIVE1MU2VsZWN0RWxlbWVudD50aGlzLmh0bWxFbGVtZW50KS5hZGQoZWxlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5pc1RhYkNvbnRyb2woKSAmJiB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuWzBdO1xyXG5cclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFiQ29udHJvbC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZih0YWJDb250cm9sLmNoaWxkcmVuW2ldIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAoPEhUTUxFbGVtZW50PnRhYkNvbnRyb2wuY2hpbGRyZW5baV0pLmlubmVyVGV4dCA9IGNvbW1hbmQub2JqMVtpXS5kaXNwbGF5VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlZpc2libGU6XHJcbiAgICAgICAgdGhpcy5odG1sRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3Zpc2liaWxpdHk6JyArIChjb21tYW5kLm9iajEgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBIdG1sUHJvcGVydGllcy5FbmFibGVkOlxyXG4gICAgICAgIGlmIChjb21tYW5kLm9iajEgPT09IGZhbHNlKVxyXG4gICAgICAgICAgdGhpcy5odG1sRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcInRydWVcIik7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5odG1sRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSHRtbFByb3BlcnRpZXMuVGFiSW5kZXg6XHJcbiAgICAgICAgdGhpcy5odG1sRWxlbWVudC5zZXRBdHRyaWJ1dGUoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlNlbGVjdGVkVmFsdWU6XHJcbiAgICAgICAgaWYgKHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudClcclxuICAgICAgICAgICg8SFRNTFNlbGVjdEVsZW1lbnQ+dGhpcy5odG1sRWxlbWVudCkudmFsdWUgPSBjb21tYW5kLm9iajE7XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLmlzVGFiQ29udHJvbCgpICAmJiB0aGlzLmh0bWxFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgY29uc3QgdGFiQ29udHJvbCA9IHRoaXMuaHRtbEVsZW1lbnQuY2hpbGRyZW5bMF07XHJcblxyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJDb250cm9sLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZCA9IHRhYkNvbnRyb2wuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gKDxudW1iZXI+PGFueT5jaGlsZC5nZXRBdHRyaWJ1dGUoJ2xheWVyJykpLTE7XHJcblxyXG4gICAgICAgICAgICBpZihjaGlsZCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgLy8gc2V0IGJ1dHRvbiBzdHlsZVxyXG4gICAgICAgICAgICAgIGlmICggbGF5ZXIgPT0gY29tbWFuZC5vYmoxKSB7IC8vIGNvbXBhcmUgaW50IHRvIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgY2hpbGQuY2xhc3NMaXN0LmFkZCgndGFiX2J1dHRvbl9hY3RpdmUnKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5jbGFzc0xpc3QucmVtb3ZlKCd0YWJfYnV0dG9uX2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBub3QgYSBidXRvbiAtIGhpZGUgdW5zZWxlY3RlZCB0YWJwYWdlc1xyXG4gICAgICAgICAgICAgIGxldCBzdHlsZSA9IChsYXllciA9PSBjb21tYW5kLm9iajEpID8gJ2Rpc3BsYXk6IGlubGluZScgOiAnZGlzcGxheTogbm9uZSc7XHJcbiAgICAgICAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKCdzdHlsZScsICBzdHlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlBsYWNlSG9sZGVyOlxyXG4gICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuc2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIiwgY29tbWFuZC5vYmoxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSHRtbFByb3BlcnRpZXMuVG9vbHRpcDpcclxuICAgICAgICB0aGlzLmh0bWxFbGVtZW50LnNldEF0dHJpYnV0ZShcInRpdGxlXCIsIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlBhc3N3b3JkOlxyXG4gICAgICAgIGlmIChjb21tYW5kLm9iajEgPT09IGZhbHNlKVxyXG4gICAgICAgICAgdGhpcy5odG1sRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dFwiKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLmh0bWxFbGVtZW50LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJwYXNzd29yZFwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,58 @@
1
+ import { Directive, ElementRef, HostListener, Input } from "@angular/core";
2
+ import { TaskMagicService } from "../../../services/task.magics.service";
3
+ import { getGuiEventObj } from "@magic-xpa/engine";
4
+ import { filter } from "rxjs/operators";
5
+ import { MagicDirective } from "../../directives/magic.directive";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../../services/task.magics.service";
8
+ export class RowMagicDirective {
9
+ constructor(_task, element) {
10
+ this._task = _task;
11
+ this.element = element;
12
+ this.rowChangedSubscriber = null;
13
+ this.htmlElement = this.element.nativeElement;
14
+ }
15
+ ngOnInit() {
16
+ this.rowChangedSubscriber = this._task
17
+ .OnSelectedRowChanged.pipe(filter(rowId => rowId === this.rowId))
18
+ .subscribe(rowId => {
19
+ if (!this.isInView(this.htmlElement))
20
+ this.htmlElement.scrollIntoView();
21
+ });
22
+ }
23
+ isInView(element) {
24
+ const rect = element.getBoundingClientRect();
25
+ const parentRect = element.parentElement.getBoundingClientRect();
26
+ return (rect.top >= parentRect.top &&
27
+ rect.bottom <= parentRect.bottom);
28
+ }
29
+ ngOnDestroy() {
30
+ if (this.rowChangedSubscriber !== null) {
31
+ this.rowChangedSubscriber.unsubscribe();
32
+ }
33
+ }
34
+ onClick($event) {
35
+ if (this.rowId != '') {
36
+ this._task.insertEvent(getGuiEventObj('click', "magicRow", +this.rowId));
37
+ if (MagicDirective.noOfAutoCompleteBoxesOpened < 1)
38
+ event.cancelBubble = true;
39
+ }
40
+ }
41
+ }
42
+ RowMagicDirective.ɵfac = function RowMagicDirective_Factory(t) { return new (t || RowMagicDirective)(i0.ɵɵdirectiveInject(i1.TaskMagicService), i0.ɵɵdirectiveInject(i0.ElementRef)); };
43
+ RowMagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: RowMagicDirective, selectors: [["", "magicRow", ""]], hostBindings: function RowMagicDirective_HostBindings(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵlistener("click", function RowMagicDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });
45
+ } }, inputs: { rowId: ["magicRow", "rowId"] } });
46
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RowMagicDirective, [{
47
+ type: Directive,
48
+ args: [{
49
+ selector: '[magicRow]'
50
+ }]
51
+ }], function () { return [{ type: i1.TaskMagicService }, { type: i0.ElementRef }]; }, { rowId: [{
52
+ type: Input,
53
+ args: ['magicRow']
54
+ }], onClick: [{
55
+ type: HostListener,
56
+ args: ['click', ['$event']]
57
+ }] }); })();
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93Lm1hZ2ljLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3VpL2RpcmVjdGl2ZXMvbWFnaWMvcm93Lm1hZ2ljLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQTs7O0FBVS9ELE1BQU0sT0FBTyxpQkFBaUI7SUFhNUIsWUFDWSxLQUF3QixFQUN4QixPQUFtQjtRQURuQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBSnZCLHlCQUFvQixHQUFpQixJQUFJLENBQUM7UUFPaEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUNoRCxDQUFDO0lBS0QsUUFBUTtRQUNOLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSzthQUNuQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoRSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVPLFFBQVEsQ0FBQyxPQUFPO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNqRSxPQUFPLENBQ0wsSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRztZQUMxQixJQUFJLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQ2pDLENBQUM7SUFDSixDQUFDO0lBS0QsV0FBVztRQU9ULElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLElBQUksRUFBRTtZQUN0QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBR0QsT0FBTyxDQUFDLE1BQU07UUFDWixJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxjQUFjLENBQUMsMkJBQTJCLEdBQUcsQ0FBQztnQkFDaEQsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDN0I7SUFDSCxDQUFDOztrRkFqRVUsaUJBQWlCO3NEQUFqQixpQkFBaUI7b0dBQWpCLG1CQUFlOzt1RkFBZixpQkFBaUI7Y0FMNUIsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2FBQ3ZCOzRGQUltQixLQUFLO2tCQUF2QixLQUFLO21CQUFDLFVBQVU7WUEwRGpCLE9BQU87a0JBRE4sWUFBWTttQkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7VGFza01hZ2ljU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3Rhc2subWFnaWNzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtnZXRHdWlFdmVudE9ian0gZnJvbSBcIkBtYWdpYy14cGEvZW5naW5lXCI7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqcy9SeFwiO1xyXG5pbXBvcnQge01hZ2ljRGlyZWN0aXZlfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9tYWdpYy5kaXJlY3RpdmVcIlxyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbiBARGlyZWN0aXZlKHtcclxuICAgc2VsZWN0b3I6ICdbbWFnaWNSb3ddJ1xyXG4gfSlcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgUm93TWFnaWNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveXtcclxuICBASW5wdXQoJ21hZ2ljUm93Jykgcm93SWQ6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIEhUTUwgZWxlbWVudCBjb25uZWN0ZWQgdG8gdGhpcyBkaXJlY3RpdmVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByb3dDaGFuZ2VkU3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgX3Rhc2sgOiBUYXNrTWFnaWNTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGVsZW1lbnQ6IEVsZW1lbnRSZWZcclxuICApXHJcbiAge1xyXG4gICAgdGhpcy5odG1sRWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhpcyBvYmplY3RcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucm93Q2hhbmdlZFN1YnNjcmliZXIgPSB0aGlzLl90YXNrXHJcbiAgICAgIC5PblNlbGVjdGVkUm93Q2hhbmdlZC5waXBlKGZpbHRlcihyb3dJZCA9PiByb3dJZCA9PT0gdGhpcy5yb3dJZCkpXHJcbiAgICAgIC5zdWJzY3JpYmUocm93SWQgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmlzSW5WaWV3KHRoaXMuaHRtbEVsZW1lbnQpKVxyXG4gICAgICAgICAgICB0aGlzLmh0bWxFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0luVmlldyhlbGVtZW50KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHBhcmVudFJlY3QgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICByZWN0LnRvcCA+PSBwYXJlbnRSZWN0LnRvcCAmJlxyXG4gICAgICByZWN0LmJvdHRvbSA8PSBwYXJlbnRSZWN0LmJvdHRvbVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFudXBcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIC8vIERvbid0IGtub3cgd2h5LCBidXQgd2hlbiB0aGUgdGFibGUgaXMgbG9hZGVkIGZvciB0aGUgZmlyc3QgdGltZSwgd2VcclxuICAgIC8vIGdldCBuZ09uSW5pdCgpIGZvciB0aGUgMXN0IHJvdyAocm93SWQgPSBcIjBcIikgYW5kIHRoZW4gbmdPbkRlc3Ryb3koKVxyXG4gICAgLy8gZm9yIG51bWJlciBvZiByb3dzIGluIHRoZSBwYWdlIGJ1dCBoZXJlIHRoaXMucm93SWQgaXMgdW5kZWZpbmVkLlxyXG4gICAgLy8gU2luY2UgbmdPbkluaXQoKSB3YXMgbm90IGNhbGxlZCBmb3IgYWxsIHRoZXNlIHJvd3MsIHRoaXMucm93Q2hhbmdlZFN1YnNjcmliZXJcclxuICAgIC8vIGlzIG51bGwgYW5kIGhlbmNlIGNyYXNoZXMuXHJcbiAgICAvLyBTbywgdGhlIGNvbmRpdGlvbiB0byBjaGVjayBudWxpdHkgaXMgYWRkZWQuXHJcbiAgICBpZiAodGhpcy5yb3dDaGFuZ2VkU3Vic2NyaWJlciAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJvd0NoYW5nZWRTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGljaygkZXZlbnQpIHtcclxuICAgIGlmKHRoaXMucm93SWQgIT0gJycpIHtcclxuICAgICAgdGhpcy5fdGFzay5pbnNlcnRFdmVudChnZXRHdWlFdmVudE9iaignY2xpY2snLCBcIm1hZ2ljUm93XCIsICt0aGlzLnJvd0lkKSk7XHJcbiAgICAgIGlmIChNYWdpY0RpcmVjdGl2ZS5ub09mQXV0b0NvbXBsZXRlQm94ZXNPcGVuZWQgPCAxKVxyXG4gICAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gfVxyXG4iXX0=
@@ -10,10 +10,10 @@ export class MagicFocusDirective {
10
10
  }
11
11
  MagicFocusDirective.ɵfac = function MagicFocusDirective_Factory(t) { return new (t || MagicFocusDirective)(i0.ɵɵdirectiveInject(i0.ElementRef)); };
12
12
  MagicFocusDirective.ɵdir = i0.ɵɵdefineDirective({ type: MagicFocusDirective, selectors: [["", "magicFocus", ""]] });
13
- (function () { i0.ɵsetClassMetadata(MagicFocusDirective, [{
13
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicFocusDirective, [{
14
14
  type: Directive,
15
15
  args: [{
16
16
  selector: '[magicFocus]'
17
17
  }]
18
18
  }], function () { return [{ type: i0.ElementRef }]; }, null); })();
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWMtZm9jdXMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tYWdpYy1mb2N1cy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUXRELE1BQU0sT0FBTyxtQkFBbUI7SUFFOUIsWUFBb0IsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7SUFBRyxDQUFDO0lBQy9DLGVBQWU7UUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDOztzRkFMVSxtQkFBbUI7d0RBQW5CLG1CQUFtQjtvQ0FBbkIsbUJBQW1CO2NBSC9CLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsY0FBYzthQUN6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbi8qKlxuICogRGlyZWN0aXZlIGZvciBzZXR0aW5nIGZvY3VzIG9uIGVsZW1lbnRcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW21hZ2ljRm9jdXNdJ1xufSlcbmV4cG9ydCBjbGFzcyBNYWdpY0ZvY3VzRGlyZWN0aXZlICB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZikge31cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbn1cbiJdfQ==
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWMtZm9jdXMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tYWdpYy1mb2N1cy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUXRELE1BQU0sT0FBTyxtQkFBbUI7SUFFOUIsWUFBb0IsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7SUFBRyxDQUFDO0lBQy9DLGVBQWU7UUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDOztzRkFMVSxtQkFBbUI7d0RBQW5CLG1CQUFtQjt1RkFBbkIsbUJBQW1CO2NBSC9CLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsY0FBYzthQUN6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbi8qKlxuICogRGlyZWN0aXZlIGZvciBzZXR0aW5nIGZvY3VzIG9uIGVsZW1lbnRcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW21hZ2ljRm9jdXNdJ1xufSlcbmV4cG9ydCBjbGFzcyBNYWdpY0ZvY3VzRGlyZWN0aXZlICB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZikge31cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,207 @@
1
+ import { Directive, ElementRef, Input, Optional, Renderer2, ViewContainerRef } from '@angular/core';
2
+ import { isNullOrUndefined } from '@magic-xpa/mscorelib';
3
+ import { CommandType, GuiConstants, HtmlProperties, InteractiveCommandType, Modifiers } from '@magic-xpa/gui';
4
+ import { getGuiEventObj } from '@magic-xpa/engine';
5
+ import { TaskBaseMagicComponent } from '../task-base.magic.component';
6
+ import { TaskMagicService } from '../../services/task.magics.service';
7
+ import { debounceTime, filter, map } from 'rxjs/operators';
8
+ import { RowMagicDirective } from './magic/row.magic.directive';
9
+ import { fromEvent } from 'rxjs';
10
+ import { BindingLevel, StorageAttributeType } from '@magic-xpa/utils';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "../../services/task.magics.service";
13
+ import * as i2 from "./magic/row.magic.directive";
14
+ export class MagicDirective {
15
+ constructor(_task, element, renderer, vcRef, magicRow) {
16
+ this._task = _task;
17
+ this.element = element;
18
+ this.renderer = renderer;
19
+ this.vcRef = vcRef;
20
+ this.magicRow = magicRow;
21
+ this.eventHandlers = {};
22
+ this.eventsOnlyVal = false;
23
+ this.htmlElement = this.element.nativeElement;
24
+ if (!(typeof magicRow === 'undefined' || magicRow === null))
25
+ this.rowId = magicRow.rowId;
26
+ }
27
+ set magic(val) {
28
+ this.id = val;
29
+ this.selector = 'magic';
30
+ }
31
+ ;
32
+ set eventsOnly(val) {
33
+ console.log('eventsOnly');
34
+ this.eventsOnlyVal = true;
35
+ }
36
+ ;
37
+ get task() {
38
+ return this._task;
39
+ }
40
+ regEvents() {
41
+ this.eventHandlers['focusin'] = this.OnFocus.bind(this);
42
+ Object.keys(this.eventHandlers).forEach((key) => {
43
+ this.focusUnlistener = this.renderer.listen(this.htmlElement, key, this.eventHandlers[key]);
44
+ });
45
+ let events = ['click', 'mousedown', 'dblclick'];
46
+ events.forEach(event => {
47
+ this.renderer.listen(this.htmlElement, event, (e) => {
48
+ let fromButton = false;
49
+ if (this.htmlElement instanceof HTMLButtonElement)
50
+ fromButton = true;
51
+ this.task.insertEvent(getGuiEventObj(event, this.id, +this.rowId, fromButton));
52
+ if (MagicDirective.noOfAutoCompleteBoxesOpened < 1)
53
+ e.cancelBubble = true;
54
+ });
55
+ });
56
+ this.renderer.listen(this.htmlElement, 'change', (e) => {
57
+ let guiEvent = getGuiEventObj('selectionchanged', this.id, +this.rowId);
58
+ if ((event.target).selectedIndex !== undefined) {
59
+ guiEvent.Value = (event.target).selectedIndex.toString();
60
+ e.cancelBubble = true;
61
+ this.task.insertEvent(guiEvent);
62
+ }
63
+ });
64
+ fromEvent(this.htmlElement, 'input').pipe(map((event) => {
65
+ return event.target.value;
66
+ }), debounceTime(200)).subscribe((x) => {
67
+ if (this.task.getProperty(this.id, HtmlProperties.BindingLevel, this.rowId) === BindingLevel.Character) {
68
+ let attribute = this.task.Records.list[0].getControlMetadata(this.id).dataType;
69
+ if (attribute !== StorageAttributeType.Date && attribute != StorageAttributeType.Time)
70
+ this.task.mgAccessorService.setValueToControl(this.id, x, true);
71
+ }
72
+ });
73
+ this.renderer.listen(this.htmlElement, 'keydown', (e) => {
74
+ let guiEvent = getGuiEventObj('keydown', this.id, +this.rowId);
75
+ guiEvent.modifiers = Modifiers.MODIFIER_NONE;
76
+ if (e.altKey && e.keyCode !== GuiConstants.KEY_ALT)
77
+ guiEvent.modifiers = Modifiers.MODIFIER_ALT;
78
+ else if (e.ctrlKey && e.keyCode !== GuiConstants.KEY_CTRL)
79
+ guiEvent.modifiers = Modifiers.MODIFIER_CTRL;
80
+ let supportedKey = e.keyCode === GuiConstants.KEY_PG_UP ||
81
+ e.keyCode === GuiConstants.KEY_PG_DOWN ||
82
+ e.keyCode === GuiConstants.KEY_LEFT ||
83
+ e.keyCode === GuiConstants.KEY_RIGHT ||
84
+ e.keyCode === GuiConstants.KEY_UP ||
85
+ e.keyCode === GuiConstants.KEY_DOWN ||
86
+ e.keyCode === GuiConstants.KEY_ESC ||
87
+ e.keyCode === GuiConstants.KEY_HOME ||
88
+ e.keyCode === GuiConstants.KEY_END ||
89
+ e.keyCode === GuiConstants.KEY_RETURN ||
90
+ (e.keyCode >= GuiConstants.KEY_F1 && e.keyCode <= GuiConstants.KEY_F12);
91
+ if (guiEvent.modifiers !== Modifiers.MODIFIER_NONE || supportedKey) {
92
+ guiEvent.keyCode = e.keyCode;
93
+ if (e.keyCode !== GuiConstants.KEY_ESC || e.keyCode === GuiConstants.KEY_ESC && (!MagicDirective.opened && MagicDirective.noOfAutoCompleteBoxesOpened < 1))
94
+ e.cancelBubble = true;
95
+ this.task.insertEvent(guiEvent);
96
+ }
97
+ });
98
+ }
99
+ OnFocus() {
100
+ this.task.insertEvent(getGuiEventObj('focus', this.id, +this.rowId));
101
+ event.cancelBubble = true;
102
+ }
103
+ IsSameElement(command) {
104
+ let line = command.line;
105
+ if (this.task.isTableControl(command.CtrlName))
106
+ line = this.task.getGuiRowId(line, true);
107
+ return (command.CtrlName === this.id &&
108
+ (line === +this.rowId ||
109
+ (line === 0 && isNullOrUndefined(this.rowId))));
110
+ }
111
+ IsSameComponent(command) {
112
+ return (command.controlName === this.id);
113
+ }
114
+ regUpdatesUI() {
115
+ this.subscribeRefreshDom = this.task
116
+ .refreshDom.pipe(filter(c => this.IsSameElement(c)))
117
+ .subscribe(a => {
118
+ let command = a;
119
+ if (isNullOrUndefined(this.rowId))
120
+ this.rowId = '0';
121
+ try {
122
+ if (!this.eventsOnlyVal)
123
+ this.handleCommand(command);
124
+ }
125
+ catch (ex) {
126
+ console.dir(ex);
127
+ }
128
+ });
129
+ this.subscribeInteractiveCommands = this.task.interactiveCommands
130
+ .pipe(filter(c => this.IsSameComponent(c)))
131
+ .subscribe(command => {
132
+ this.handleInteractiveCommands(command);
133
+ });
134
+ }
135
+ ngOnInit() {
136
+ this.regEvents();
137
+ this.regUpdatesUI();
138
+ }
139
+ handleCommand(command) {
140
+ switch (command.CommandType) {
141
+ case CommandType.SET_PROPERTY:
142
+ this.handleSetProperty(command);
143
+ break;
144
+ case CommandType.SET_FOCUS:
145
+ this.focusUnlistener();
146
+ if (!(command.obj.ConnectedControl && this.htmlElement instanceof HTMLButtonElement))
147
+ this.htmlElement.focus();
148
+ this.focusUnlistener = this.renderer.listen(this.htmlElement, 'focusin', this.eventHandlers['focusin']);
149
+ break;
150
+ }
151
+ }
152
+ handleInteractiveCommands(command) {
153
+ switch (command._commandType) {
154
+ case InteractiveCommandType.CALL_JS:
155
+ let methodName = command._str;
156
+ let args = command.arguments;
157
+ let magicComponent = (this.vcRef._hostLView).find(v => v instanceof TaskBaseMagicComponent);
158
+ let resultString = '';
159
+ try {
160
+ if (!isNullOrUndefined(magicComponent[methodName])) {
161
+ resultString = magicComponent[methodName].apply(magicComponent, args);
162
+ }
163
+ else
164
+ console.error('Instance method ' + methodName + ' does not exists');
165
+ }
166
+ catch (e) {
167
+ console.error(e.message);
168
+ }
169
+ command.resultString = resultString;
170
+ break;
171
+ }
172
+ }
173
+ handleSetProperty(command) {
174
+ switch (command.Operation) {
175
+ case HtmlProperties.ReadOnly:
176
+ if (command.obj1 != true)
177
+ this.renderer.removeAttribute(this.htmlElement, command.Operation);
178
+ else
179
+ this.renderer.setAttribute(this.htmlElement, command.Operation, command.str);
180
+ break;
181
+ }
182
+ }
183
+ ngOnDestroy() {
184
+ this.subscribeRefreshDom.unsubscribe();
185
+ }
186
+ }
187
+ MagicDirective.opened = false;
188
+ MagicDirective.noOfAutoCompleteBoxesOpened = 0;
189
+ MagicDirective.ɵfac = function MagicDirective_Factory(t) { return new (t || MagicDirective)(i0.ɵɵdirectiveInject(i1.TaskMagicService), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i2.RowMagicDirective, 8)); };
190
+ MagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: MagicDirective, selectors: [["", "magic", ""]], inputs: { magic: "magic", eventsOnly: "eventsOnly", rowId: "rowId" } });
191
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicDirective, [{
192
+ type: Directive,
193
+ args: [{
194
+ selector: '[magic]'
195
+ }]
196
+ }], function () { return [{ type: i1.TaskMagicService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i2.RowMagicDirective, decorators: [{
197
+ type: Optional
198
+ }] }]; }, { magic: [{
199
+ type: Input,
200
+ args: ['magic']
201
+ }], eventsOnly: [{
202
+ type: Input,
203
+ args: ['eventsOnly']
204
+ }], rowId: [{
205
+ type: Input
206
+ }] }); })();
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tYWdpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFDTCxXQUFXLEVBRVgsWUFBWSxFQUVaLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsU0FBUyxFQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBYSxNQUFNLG1CQUFtQixDQUFDO0FBRTlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQVV0RSxNQUFNLE9BQU8sY0FBYztJQW1FekIsWUFDWSxLQUF1QixFQUN2QixPQUFtQixFQUNuQixRQUFtQixFQUNuQixLQUF1QixFQUNYLFFBQTJCO1FBSnZDLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztR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QUFDLGtCQUFrQixHQUFHLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO2lCQUN2RTtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFFVixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDMUI7Z0JBQ0QsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7Z0JBQ3BDLE1BQU07U0FDVDtJQUNILENBQUM7SUFPRCxpQkFBaUIsQ0FBQyxPQUFtQjtRQUNuQyxRQUFRLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDekIsS0FBSyxjQUFjLENBQUMsUUFBUTtnQkFDMUIsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUk7b0JBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDOztvQkFFbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFL0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUtELFdBQVc7UUFFVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekMsQ0FBQzs7QUExUWEscUJBQU0sR0FBRyxLQUFNLENBQUE7QUFFZiwwQ0FBMkIsR0FBRSxDQUFFLENBQUE7NEVBdkRsQyxjQUFjO21EQUFkLGNBQWM7dUZBQWQsY0FBYztjQUoxQixTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLFNBQVM7YUFDcEI7O3NCQTBFSSxRQUFRO3dCQXZFUyxLQUFLO2tCQUF4QixLQUFLO21CQUFDLE9BQU87WUFRVyxVQUFVO2tCQUFsQyxLQUFLO21CQUFDLFlBQVk7WUFTSCxLQUFLO2tCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBSZW5kZXJlcjIsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbW1hbmRUeXBlLFxyXG4gIEd1aUNvbW1hbmQsXHJcbiAgR3VpQ29uc3RhbnRzLFxyXG4gIEd1aUludGVyYWN0aXZlLFxyXG4gIEh0bWxQcm9wZXJ0aWVzLFxyXG4gIEludGVyYWN0aXZlQ29tbWFuZFR5cGUsXHJcbiAgTW9kaWZpZXJzXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQgeyBnZXRHdWlFdmVudE9iaiwgSUd1aUV2ZW50IH0gZnJvbSAnQG1hZ2ljLXhwYS9lbmdpbmUnO1xyXG5cclxuaW1wb3J0IHsgVGFza0Jhc2VNYWdpY0NvbXBvbmVudCB9IGZyb20gJy4uL3Rhc2stYmFzZS5tYWdpYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYXNrTWFnaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFzay5tYWdpY3Muc2VydmljZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFJvd01hZ2ljRGlyZWN0aXZlIH0gZnJvbSAnLi9tYWdpYy9yb3cubWFnaWMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmluZGluZ0xldmVsLCBTdG9yYWdlQXR0cmlidXRlVHlwZSB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDb25uZWN0cyBIVE1MIGVsZW1lbnRzIHRvIHRoZSBNYWdpYyBXZWIgQ2xpZW50IGVuZ2luZVxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbWFnaWNdJ1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hZ2ljRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgnbWFnaWMnKSBzZXQgbWFnaWModmFsKSB7XHJcbiAgICB0aGlzLmlkID0gdmFsO1xyXG4gICAgdGhpcy5zZWxlY3RvciA9ICdtYWdpYyc7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmbGFnIGlzIHVzZWQgd2hlbiB3ZSBvbmx5IHdhbnQgdG8gcmVnaXN0ZXIgdG8gZXZlbnRzLCBidXQgZG8gbm90IHdhbnQgdG8gZXhlY3V0ZSBjb21tYW5kcyBzZW50IGZyb20gc2VydmVyXHJcbiAgICovXHJcbiAgQElucHV0KCdldmVudHNPbmx5Jykgc2V0IGV2ZW50c09ubHkodmFsKSB7XHJcbiAgICBjb25zb2xlLmxvZygnZXZlbnRzT25seScpO1xyXG4gICAgdGhpcy5ldmVudHNPbmx5VmFsID0gdHJ1ZTtcclxuXHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUm93IGlkIG9mIHRoZSBjb250cm9sLCBmb3Igd2hlbiBpdCBpcyBvbiBhIHRhYmxlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHJvd0lkOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICpcclxuICAgKi9cclxuICAvL0BJbnB1dCgpIGV2ZW50czogYW55W10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIEhUTUwgZWxlbWVudCBjb25uZWN0ZWQgdG8gdGhpcyBkaXJlY3RpdmVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gIC8qKlxyXG4gICAqIE1hZ2ljJ3MgY29tcG9uZW50IGhhbmRsaW5nIHRoaXMgY29udHJvbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBjb21wb25lbnQ6IFRhc2tCYXNlTWFnaWNDb21wb25lbnQ7XHJcbiAgLyoqXHJcbiAgICogQ29sbGVjdGlvbiBvZiBldmVudCBoYW5kbGVycyBmb3IgdGhpcyBlbGVtZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBldmVudEhhbmRsZXJzOiB7IFtrZXk6IHN0cmluZ106ICgpID0+IHZvaWQ7IH0gPSB7fTtcclxuICAvKipcclxuICAgKiBJZCBvZiB0aGlzIGVsZW1lbnRcclxuICAgKi9cclxuICBwdWJsaWMgaWQ6IHN0cmluZztcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHNlbGVjdG9yOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHN1YnNjcmliZVJlZnJlc2hEb206IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHJpdmF0ZSBmb2N1c1VubGlzdGVuZXI6ICgoKSA9PiB2b2lkKTtcclxuXHJcbiAgcHVibGljIGV2ZW50c09ubHlWYWwgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBvcGVuZWQgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBub09mQXV0b0NvbXBsZXRlQm94ZXNPcGVuZWQgPTA7XHJcblxyXG4gIHN1YnNjcmliZUludGVyYWN0aXZlQ29tbWFuZHM6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gX3Rhc2sgVGhlIHRhc2sgc2VydmljZVxyXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IGZvciB3aGljaCB0aGUgZGlyZWN0aXZlIGlzIGFwcGxpZWRcclxuICAgKiBAcGFyYW0gcmVuZGVyZXIgUmVuZGVyZXIgZm9yIHRoZSBlbGVtZW50XHJcbiAgICogQHBhcmFtIHZjUmVmXHJcbiAgICogQHBhcmFtIG1hZ2ljUm93XHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgX3Rhc2s6IFRhc2tNYWdpY1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZWxlbWVudDogRWxlbWVudFJlZixcclxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJvdGVjdGVkIHZjUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIG1hZ2ljUm93OiBSb3dNYWdpY0RpcmVjdGl2ZSkge1xyXG5cclxuICAgIHRoaXMuaHRtbEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgIC8vbGV0IGMgPSAoPGFueT50aGlzLnZjUmVmKS5fdmlldztcclxuICAgIC8vd2hpbGUgKCEoYyBpbnN0YW5jZW9mIFRhc2tCYXNlTWFnaWNDb21wb25lbnQpKSB7XHJcbiAgICAvLyAgYyA9IGMuY29tcG9uZW50O1xyXG4gICAgLy99XHJcbiAgICAvL3RoaXMuY29tcG9uZW50ID0gYztcclxuICAgIGlmICghKHR5cGVvZiBtYWdpY1JvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgbWFnaWNSb3cgPT09IG51bGwpKVxyXG4gICAgICB0aGlzLnJvd0lkID0gbWFnaWNSb3cucm93SWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRhc2sgc2VydmljZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0IHRhc2soKTogVGFza01hZ2ljU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFzaztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVyIHRvIHRoZSBldmVudHMgdGhpcyBlbGVtZW50IG1heSBuZWVkIHRvIGhhbmRsZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCByZWdFdmVudHMoKSB7XHJcbiAgICAvLyBIYW5kbGUgZXZlbnRzIGZvciB3aGljaCBldmVudCBoYW5kbGVyIG1heSBiZSByZW1vdmVkIGFuZCByZXN0b3JlZFxyXG4gICAgdGhpcy5ldmVudEhhbmRsZXJzWydmb2N1c2luJ10gPSB0aGlzLk9uRm9jdXMuYmluZCh0aGlzKTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmV2ZW50SGFuZGxlcnMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICB0aGlzLmZvY3VzVW5saXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaHRtbEVsZW1lbnQsIGtleSwgdGhpcy5ldmVudEhhbmRsZXJzW2tleV0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gSGFuZGxlIGV2ZW50cyB3aXRoIGFub255bW91cyAgZXZlbnQgaGFuZGxlcnNcclxuICAgIGxldCBldmVudHM6IHN0cmluZ1tdID0gWydjbGljaycsICdtb3VzZWRvd24nLCAnZGJsY2xpY2snXTsvLyAsJ3Jlc2l6ZScsICdsb2FkJywgJ3VubG9hZCdcclxuICAgIGV2ZW50cy5mb3JFYWNoKGV2ZW50ID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5odG1sRWxlbWVudCwgZXZlbnQsIChlKSA9PiB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgZXZlbnQgaXMgZmlyZWQgZnJvbSB6b29tIGJ1dHRvbiAoIHRvIGlkZW50aWZ5IHRoZSBjb25uZWN0ZWQgem9vbSBidXR0b24gaW4gZW5naW5lKVxyXG4gICAgICAgIGxldCBmcm9tQnV0dG9uID0gZmFsc2U7IFxyXG4gICAgICAgIGlmKHRoaXMuaHRtbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudClcclxuICAgICAgICAgIGZyb21CdXR0b24gPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnRhc2suaW5zZXJ0RXZlbnQoZ2V0R3VpRXZlbnRPYmooZXZlbnQsIHRoaXMuaWQsICt0aGlzLnJvd0lkLCBmcm9tQnV0dG9uKSk7XHJcbiAgICAgICAgaWYgKE1hZ2ljRGlyZWN0aXZlLm5vT2ZBdXRvQ29tcGxldGVCb3hlc09wZW5lZDwgMSlcclxuICAgICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5odG1sRWxlbWVudCwgJ2NoYW5nZScsIChlKSA9PiB7XHJcbiAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooJ3NlbGVjdGlvbmNoYW5nZWQnLCB0aGlzLmlkLCArdGhpcy5yb3dJZCk7XHJcblxyXG4gICAgICBpZiAoKDxhbnk+KGV2ZW50LnRhcmdldCkpLnNlbGVjdGVkSW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGd1aUV2ZW50LlZhbHVlID0gKDxhbnk+KGV2ZW50LnRhcmdldCkpLnNlbGVjdGVkSW5kZXgudG9TdHJpbmcoKTtcclxuICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50YXNrLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICAgICAgfVxyXG4gXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBoYW5kbGUgdGhlIGlucHV0IGV2ZW50XHJcbiAgICBmcm9tRXZlbnQodGhpcy5odG1sRWxlbWVudCwgJ2lucHV0JykucGlwZShcclxuICAgICAgbWFwKChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgyMDApIC8vIHRpbWUgYWZ0ZXIgd2hpY2ggdmFsdWUgd2lsbCBiZSBzZW50IHRvIG1hZ2ljXHJcbiAgICApLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnRhc2suZ2V0UHJvcGVydHkodGhpcy5pZCwgSHRtbFByb3BlcnRpZXMuQmluZGluZ0xldmVsLCB0aGlzLnJvd0lkKSA9PT0gQmluZGluZ0xldmVsLkNoYXJhY3Rlcikge1xyXG4gICAgICAgICAgLy8gRG9uJ3Qgc3VwcG9ydCBjaGFyYWN0ZXIgYmluZGluZyBmb3IgZGF0ZS90aW1lIHZhbHVlc1xyXG4gICAgICAgICBsZXQgYXR0cmlidXRlIDogU3RvcmFnZUF0dHJpYnV0ZVR5cGUgPSAgdGhpcy50YXNrLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEodGhpcy5pZCkuZGF0YVR5cGU7XHJcbiAgICAgICAgIGlmKGF0dHJpYnV0ZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZVR5cGUuRGF0ZSAmJiBhdHRyaWJ1dGUgIT0gU3RvcmFnZUF0dHJpYnV0ZVR5cGUuVGltZSlcclxuICAgICAgICAgICAgdGhpcy50YXNrLm1nQWNjZXNzb3JTZXJ2aWNlLnNldFZhbHVlVG9Db250cm9sKHRoaXMuaWQsIHgsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaHRtbEVsZW1lbnQsICdrZXlkb3duJywgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgICBsZXQgZ3VpRXZlbnQ6IElHdWlFdmVudCA9IGdldEd1aUV2ZW50T2JqKCdrZXlkb3duJywgdGhpcy5pZCwgK3RoaXMucm93SWQpO1xyXG4gICAgICAgIGd1aUV2ZW50Lm1vZGlmaWVycyA9IE1vZGlmaWVycy5NT0RJRklFUl9OT05FO1xyXG5cclxuICAgICAgICBpZiAoZS5hbHRLZXkgJiYgZS5rZXlDb2RlICE9PSBHdWlDb25zdGFudHMuS0VZX0FMVClcclxuICAgICAgICAgICAgZ3VpRXZlbnQubW9kaWZpZXJzID0gTW9kaWZpZXJzLk1PRElGSUVSX0FMVDtcclxuXHJcbiAgICAgICAgZWxzZSBpZiAoZS5jdHJsS2V5ICYmIGUua2V5Q29kZSAhPT0gR3VpQ29uc3RhbnRzLktFWV9DVFJMKVxyXG4gICAgICAgICAgICBndWlFdmVudC5tb2RpZmllcnMgPSBNb2RpZmllcnMuTU9ESUZJRVJfQ1RSTDtcclxuXHJcbiAgICAgICAgbGV0IHN1cHBvcnRlZEtleSA9IGUua2V5Q29kZSA9PT0gR3VpQ29uc3RhbnRzLktFWV9QR19VUCB8fFxyXG4gICAgICAgICAgICBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfUEdfRE9XTiB8fFxyXG4gICAgICAgICAgICBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfTEVGVCB8fFxyXG4gICAgICAgICAgICBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfUklHSFQgfHxcclxuICAgICAgICAgICAgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX1VQIHx8XHJcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PT0gR3VpQ29uc3RhbnRzLktFWV9ET1dOIHx8XHJcbiAgICAgICAgICAgIGUua2V5Q29kZSA9PT0gR3VpQ29uc3RhbnRzLktFWV9FU0MgfHxcclxuICAgICAgICAgICAgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX0hPTUUgfHxcclxuICAgICAgICAgICAgZS5rZXlDb2RlID09PSBHdWlDb25zdGFudHMuS0VZX0VORCB8fFxyXG4gICAgICAgICAgICBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfUkVUVVJOIHx8XHJcbiAgICAgICAgICAgIChlLmtleUNvZGUgPj0gR3VpQ29uc3RhbnRzLktFWV9GMSAmJiBlLmtleUNvZGUgPD0gR3VpQ29uc3RhbnRzLktFWV9GMTIpO1xyXG5cclxuICAgICAgICBpZiAoZ3VpRXZlbnQubW9kaWZpZXJzICE9PSBNb2RpZmllcnMuTU9ESUZJRVJfTk9ORSB8fCBzdXBwb3J0ZWRLZXkpIHtcclxuICAgICAgICAgICAgZ3VpRXZlbnQua2V5Q29kZSA9IGUua2V5Q29kZTtcclxuXHJcbiAgICAgICAgICAgIC8vIERlZmVjdCAxNjAwMjEgZml4ZWQgLSBkb24ndCBzZXQgZS5jYW5jZWxCdWJibGUgd2hlbiBjb21ib2JveCBpcyBvcGVuZWQgYW5kIGVzYyBrZXkgaXMgcHJlc3NlZFxyXG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlICE9PSBHdWlDb25zdGFudHMuS0VZX0VTQyB8fCBlLmtleUNvZGUgPT09IEd1aUNvbnN0YW50cy5LRVlfRVNDICYmICghTWFnaWNEaXJlY3RpdmUub3BlbmVkICYmIE1hZ2ljRGlyZWN0aXZlLm5vT2ZBdXRvQ29tcGxldGVCb3hlc09wZW5lZCA8IDEpKVxyXG4gICAgICAgICAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50YXNrLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgZm9jdXMgZXZlbnRcclxuICAgKi9cclxuICBwcml2YXRlIE9uRm9jdXMoKSB7XHJcbiAgICB0aGlzLnRhc2suaW5zZXJ0RXZlbnQoZ2V0R3VpRXZlbnRPYmooJ2ZvY3VzJywgdGhpcy5pZCwgK3RoaXMucm93SWQpKTtcclxuICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJcyB0aGUgY29tbWFuZCdzIGVsZW1lbnQgdGhlIHNhbWUgYXMgdGhpcyBkaXJlY3RpdmUncyBlbGVtZW50XHJcbiAgICogQHBhcmFtIGNvbW1hbmRcclxuICAgKiBAcmV0dXJucyB0cnVlL2ZhbHNlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBJc1NhbWVFbGVtZW50KGNvbW1hbmQpIHtcclxuICAgIGxldCBsaW5lOiBudW1iZXIgPSBjb21tYW5kLmxpbmU7XHJcblxyXG4gICAgaWYgKHRoaXMudGFzay5pc1RhYmxlQ29udHJvbChjb21tYW5kLkN0cmxOYW1lKSlcclxuICAgICAgbGluZSA9IHRoaXMudGFzay5nZXRHdWlSb3dJZChsaW5lLCB0cnVlKTtcclxuXHJcbiAgICByZXR1cm4gKGNvbW1hbmQuQ3RybE5hbWUgPT09IHRoaXMuaWQgJiZcclxuICAgICAgKGxpbmUgPT09ICt0aGlzLnJvd0lkIHx8XHJcbiAgICAgICAgKGxpbmUgPT09IDAgJiYgaXNOdWxsT3JVbmRlZmluZWQodGhpcy5yb3dJZCkpKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJcyB0aGUgY29tbWFuZCdzIGVsZW1lbnQgdGhlIHNhbWUgYXMgdGhpcyBkaXJlY3RpdmUncyBjb21wb25lbnRcclxuICAgKiBAcGFyYW0gY29tbWFuZFxyXG4gICAqIEByZXR1cm5zIHRydWUvZmFsc2VcclxuICAgKi9cclxuICBwcml2YXRlIElzU2FtZUNvbXBvbmVudChjb21tYW5kOiBHdWlJbnRlcmFjdGl2ZSkge1xyXG4gICAgcmV0dXJuIChjb21tYW5kLmNvbnRyb2xOYW1lID09PSB0aGlzLmlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIHJlZ1VwZGF0ZXNVSSgpIHtcclxuICAgIHRoaXMuc3Vic2NyaWJlUmVmcmVzaERvbSA9IHRoaXMudGFza1xyXG4gICAgICAucmVmcmVzaERvbS5waXBlKGZpbHRlcihjID0+IHRoaXMuSXNTYW1lRWxlbWVudChjKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYSA9PiB7XHJcbiAgICAgICAgICBsZXQgY29tbWFuZDogR3VpQ29tbWFuZCA9IGE7XHJcbiAgICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5yb3dJZCkpXHJcbiAgICAgICAgICAgIHRoaXMucm93SWQgPSAnMCc7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZXZlbnRzT25seVZhbClcclxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbW1hbmQoY29tbWFuZCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRpcihleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlSW50ZXJhY3RpdmVDb21tYW5kcyA9IHRoaXMudGFzay5pbnRlcmFjdGl2ZUNvbW1hbmRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihjID0+IHRoaXMuSXNTYW1lQ29tcG9uZW50KGMpKSlcclxuICAgICAgLnN1YnNjcmliZShjb21tYW5kID0+IHtcclxuICAgICAgICB0aGlzLmhhbmRsZUludGVyYWN0aXZlQ29tbWFuZHMoY29tbWFuZCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhpcyBvYmplY3RcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVnRXZlbnRzKCk7XHJcbiAgICB0aGlzLnJlZ1VwZGF0ZXNVSSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgY29tbWFuZHMgcmVjZWl2ZWQgZnJvbSB0aGUgTWFnaWMgV2ViQ2xpZW50IGVuZ2luZVxyXG4gICAqIEBwYXJhbSBjb21tYW5kXHJcbiAgICovXHJcbiAgaGFuZGxlQ29tbWFuZChjb21tYW5kOiBHdWlDb21tYW5kKSB7XHJcbiAgICBzd2l0Y2ggKGNvbW1hbmQuQ29tbWFuZFR5cGUpIHtcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlU2V0UHJvcGVydHkoY29tbWFuZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9GT0NVUzpcclxuICAgICAgICAgICAgdGhpcy5mb2N1c1VubGlzdGVuZXIoKTtcclxuICAgICAgIC8vIERvIG5vdCBzZXQgZm9jdXMgb24gY29ubmVjdGVkIHpvb20gIGJ1dHRvblxyXG4gICAgICAgIGlmICghKGNvbW1hbmQub2JqLkNvbm5lY3RlZENvbnRyb2wgJiYgdGhpcy5odG1sRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSlcclxuICAgICAgICAgIHRoaXMuaHRtbEVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB0aGlzLmZvY3VzVW5saXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaHRtbEVsZW1lbnQsICdmb2N1c2luJywgdGhpcy5ldmVudEhhbmRsZXJzWydmb2N1c2luJ10pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBoYW5kbGUgdGhlIGludGVyYWN0aXZlIGNvbW1hbmRzIGxpa2UgQ2FsbEpTXHJcbiAgICovXHJcbiAgaGFuZGxlSW50ZXJhY3RpdmVDb21tYW5kcyhjb21tYW5kOiBHdWlJbnRlcmFjdGl2ZSkge1xyXG4gICAgc3dpdGNoIChjb21tYW5kLl9jb21tYW5kVHlwZSkge1xyXG4gICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQ0FMTF9KUzpcclxuICAgICAgICBsZXQgbWV0aG9kTmFtZTogc3RyaW5nID0gY29tbWFuZC5fc3RyO1xyXG4gICAgICAgIGxldCBhcmdzOiBBcnJheTxhbnk+ID0gY29tbWFuZC5hcmd1bWVudHM7XHJcbiAgICAgICAgbGV0IG1hZ2ljQ29tcG9uZW50OiBUYXNrQmFzZU1hZ2ljQ29tcG9uZW50ID0gKCg8YW55PnRoaXMudmNSZWYpLl9ob3N0TFZpZXcpLmZpbmQodiA9PiB2IGluc3RhbmNlb2YgVGFza0Jhc2VNYWdpY0NvbXBvbmVudCk7XHJcbiAgICAgICAgbGV0IHJlc3VsdFN0cmluZyA9ICcnO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChtYWdpY0NvbXBvbmVudFttZXRob2ROYW1lXSkpIHtcclxuICAgICAgICAgICAgLy8gaW52b2tlIHRoZSBtZXRob2Qgb24gaW5zdGFuY2Ugb2YgbWFnaWMgY29tcG9uZW5ldFxyXG4gICAgICAgICAgICByZXN1bHRTdHJpbmcgPSBtYWdpY0NvbXBvbmVudFttZXRob2ROYW1lXS5hcHBseShtYWdpY0NvbXBvbmVudCwgYXJncyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0luc3RhbmNlIG1ldGhvZCAnICsgbWV0aG9kTmFtZSArICcgZG9lcyBub3QgZXhpc3RzJyk7IC8vIHdoZW4gbWV0aG9kIGlzIG5vdCBmb3VuZFxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vIGFueSBvdGhlciBleGNlcHRpb25cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29tbWFuZC5yZXN1bHRTdHJpbmcgPSByZXN1bHRTdHJpbmc7IC8vIHVwZGF0ZSB0aGUgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHRoZSBNYWdpYyBzZXQtcHJvcGVydHkgY29tbWFuZFxyXG4gICAqIEBwYXJhbSBjb21tYW5kXHJcbiAgICovXHJcbiAgaGFuZGxlU2V0UHJvcGVydHkoY29tbWFuZDogR3VpQ29tbWFuZCkge1xyXG4gICAgc3dpdGNoIChjb21tYW5kLk9wZXJhdGlvbikge1xyXG4gICAgICBjYXNlIEh0bWxQcm9wZXJ0aWVzLlJlYWRPbmx5OlxyXG4gICAgICAgIGlmIChjb21tYW5kLm9iajEgIT0gdHJ1ZSlcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuaHRtbEVsZW1lbnQsIGNvbW1hbmQuT3BlcmF0aW9uKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmh0bWxFbGVtZW50LCBjb21tYW5kLk9wZXJhdGlvbiwgY29tbWFuZC5zdHIpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFudXBcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVJlZnJlc2hEb20udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,20 @@
1
+ import { ComponentFactoryResolver, Directive, ViewContainerRef } from "@angular/core";
2
+ import { isNullOrUndefined } from "@magic-xpa/mscorelib";
3
+ import * as i0 from "@angular/core";
4
+ export class MagicViewContainerRef {
5
+ constructor(vcRef, resolver) {
6
+ this.vcRef = vcRef;
7
+ this.resolver = resolver;
8
+ let comp = (this.vcRef._hostLView).find(v => v != null && !isNullOrUndefined(v.setViewContainerRef));
9
+ comp.setViewContainerRef(vcRef);
10
+ }
11
+ }
12
+ MagicViewContainerRef.ɵfac = function MagicViewContainerRef_Factory(t) { return new (t || MagicViewContainerRef)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver)); };
13
+ MagicViewContainerRef.ɵdir = i0.ɵɵdefineDirective({ type: MagicViewContainerRef, selectors: [["", "magicViewContainerRef", ""]] });
14
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MagicViewContainerRef, [{
15
+ type: Directive,
16
+ args: [{
17
+ selector: '[magicViewContainerRef]',
18
+ }]
19
+ }], function () { return [{ type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }]; }, null); })();
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWNWaWV3Q29udGFpbmVyUmVmLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3VpL2RpcmVjdGl2ZXMvbWFnaWNWaWV3Q29udGFpbmVyUmVmLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQVF6RCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQW9CLEtBQXVCLEVBQVUsUUFBa0M7UUFBbkUsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUV0RixJQUFJLElBQUksR0FBRyxDQUFPLElBQUksQ0FBQyxLQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBMkIsSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBRSxDQUE0QixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUNsSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7MEZBTFUscUJBQXFCOzBEQUFyQixxQkFBcUI7dUZBQXJCLHFCQUFxQjtjQUhqQyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjthQUNwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRGlyZWN0aXZlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElNYWdpY1ZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9zdWItZm9ybS1kZWZpbml0aW9uLml0ZXJmYWNlXCI7XG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xuXG4vKipcbiAqIERpcmVjdGl2ZSBmb3Igc2V0dGluZyAgVmlld0NvbnRhaW5lclJlZiBvbiBlbGVtZW50XG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1ttYWdpY1ZpZXdDb250YWluZXJSZWZdJyxcbn0pXG5leHBvcnQgY2xhc3MgTWFnaWNWaWV3Q29udGFpbmVyUmVmIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2Y1JlZjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSB7XG4gICAgLy8gRm9yIGFuZ3VsYXIgMTAgLSAgZmluZCB0aGUgY29tcG9uZW50IGZyb20gdGhlIHZpZXdzXG4gICBsZXQgY29tcCA9ICgoPGFueT50aGlzLnZjUmVmKS5faG9zdExWaWV3KS5maW5kKHYgPT4gdiBhcyBJTWFnaWNWaWV3Q29udGFpbmVyUmVmICE9IG51bGwgJiYgIWlzTnVsbE9yVW5kZWZpbmVkKCh2IGFzIElNYWdpY1ZpZXdDb250YWluZXJSZWYpLnNldFZpZXdDb250YWluZXJSZWYpKTtcbiAgIGNvbXAuc2V0Vmlld0NvbnRhaW5lclJlZih2Y1JlZik7XG4gIH1cbn1cblxuIl19
@@ -211,7 +211,7 @@ MgformatMagicDirective.ɵfac = function MgformatMagicDirective_Factory(t) { retu
211
211
  MgformatMagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: MgformatMagicDirective, selectors: [["", "mgFormat", ""]], hostBindings: function MgformatMagicDirective_HostBindings(rf, ctx) { if (rf & 1) {
212
212
  i0.ɵɵlistener("focus", function MgformatMagicDirective_focus_HostBindingHandler($event) { return ctx.onFocusEvent($event); })("change", function MgformatMagicDirective_change_HostBindingHandler($event) { return ctx.onChangeEvent($event); });
213
213
  } } });
214
- (function () { i0.ɵsetClassMetadata(MgformatMagicDirective, [{
214
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MgformatMagicDirective, [{
215
215
  type: Directive,
216
216
  args: [{
217
217
  selector: '[mgFormat]'
@@ -223,4 +223,4 @@ MgformatMagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: MgformatMagicDirec
223
223
  type: HostListener,
224
224
  args: ['change', ['$event']]
225
225
  }] }); })();
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWdmb3JtYXQubWFnaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tZ2Zvcm1hdC5tYWdpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDL0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBa0IsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7O0FBVXpELE1BQU0sT0FBTyxzQkFBc0I7SUFJakMsWUFDWSxRQUF3QixFQUN4QixLQUF1QjtRQUR2QixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixVQUFLLEdBQUwsS0FBSyxDQUFrQjtJQUUvQixDQUFDO0lBRUwsZUFBZTtRQUNiLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFFLENBQUM7UUFFaEYsSUFBRyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksSUFBSSxFQUFFO1lBRTFELElBQUksR0FBRyxHQUFRLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFD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QUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2FBQ3ZCO2dHQWtDUSxZQUFZO2tCQURsQixZQUFZO21CQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQWlDMUIsYUFBYTtrQkFEbkIsWUFBWTttQkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSG9zdExpc3RlbmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtUYXNrTWFnaWNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdGFzay5tYWdpY3Muc2VydmljZVwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXIsIFJlZlBhcmFtfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIlxyXG5pbXBvcnQge1BJQ0ludGVyZmFjZSwgU3RvcmFnZUF0dHJpYnV0ZX0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIlxyXG5pbXBvcnQge01hZ2ljRGlyZWN0aXZlfSBmcm9tIFwiLi9tYWdpYy5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnN9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge1BJQ30gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7TWdEYXRlRm9ybWF0dGVyfSBmcm9tIFwiLi4vcGlwZXMvZGF0ZS5tYWdpYy5waXBlXCI7XHJcblxyXG4vKipcclxuICogUGVyZm9ybSBNYWdpYyB2YWxpZGF0aW9uIG9uIGlucHV0IGNvbnRyb2xzIHdoaWNoIGhvbGQgYWxwaGFudW1lcmljIHN0cmluZ3NcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW21nRm9ybWF0XSdcclxufSlcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgTWdmb3JtYXRNYWdpY0RpcmVjdGl2ZSB7XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIG1hZ2ljRGlyOiBNYWdpY0RpcmVjdGl2ZSAsXHJcbiAgICBwcm90ZWN0ZWQgX3Rhc2s6IFRhc2tNYWdpY1NlcnZpY2VcclxuXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLl90YXNrLmdldEZvcm1Db250cm9sKHRoaXMubWFnaWNEaXIucm93SWQsIHRoaXMubWFnaWNEaXIuaWQgKTtcclxuXHJcbiAgICBpZihjb250cm9sICE9IG51bGwgJiYgdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBudWxsKSB7XHJcbiAgICAgIC8vIGdldCB0aGUgZmlyc3QgZGF0ZSBjb250cm9sJ3MgZm9ybWF0LlxyXG4gICAgICBsZXQgcGljOiBQSUMgPSB0aGlzLl90YXNrLkdldENvbnRyb2xQaWN0dXJlTWFzayh0aGlzLm1hZ2ljRGlyLmlkKTtcclxuICAgICAgaWYgKHBpYy5nZXRBdHRyKCkgPT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFICkge1xyXG4gICAgICAgIHRoaXMuZm9ybWF0RGF0ZShwaWMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8qKlxyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0IHBhdHRlcm5cclxuICAgKiBPbiBpbnB1dCwgdmVyaWZpZXMgdGhlIGlucHV0IG1hdGNoZXMgdGhlIHJlcXVpcmVkIG1hc2tcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdmb2N1cycsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIG9uRm9jdXNFdmVudCgkZXZlbnQpe1xyXG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLl90YXNrLmdldEZvcm1Db250cm9sKHRoaXMubWFnaWNEaXIucm93SWQsIHRoaXMubWFnaWNEaXIuaWQgKTtcclxuXHJcbiAgICBpZihjb250cm9sICE9IG51bGwgKSB7XHJcbiAgICAgIGxldCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gdGhpcy5fdGFzay5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKHRoaXMubWFnaWNEaXIuaWQpLmRhdGFUeXBlO1xyXG4gICAgICBpZiAoYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IGF0dHIgPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgbGV0IHBpYzogUElDID0gdGhpcy5fdGFzay5HZXRDb250cm9sUGljdHVyZU1hc2sodGhpcy5tYWdpY0Rpci5pZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUGF0dGVybkdlbmVyYXRpb25OZWVkZWQoYXR0ciwgcGljKSkge1xyXG4gICAgICAgICAgbGV0IHBhdHRlcm46IHN0cmluZyA9IHRoaXMuZ2VuZXJhdGVQYXR0ZXJuKGF0dHIsIHBpYyk7XHJcbiAgICAgICAgICBpZiAoY29udHJvbC52YWxpZGF0b3IgPT0gbnVsbClcclxuICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucGF0dGVybihwYXR0ZXJuKSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbY29udHJvbC52YWxpZGF0b3IsIFZhbGlkYXRvcnMucGF0dGVybihwYXR0ZXJuKV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChhdHRyID09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpIHtcclxuICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsaWRhdG9yID09IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLm1heExlbmd0aChwaWMuZ2V0TWFza0xlbmd0aCgpKSk7XHJcbiAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFtjb250cm9sLnZhbGlkYXRvciwgVmFsaWRhdG9ycy5tYXhMZW5ndGgocGljLmdldE1hc2tMZW5ndGgoKSldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAqL1xyXG4gIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHVwcGVyY2FzZS9sb3dlciBjYXNlXHJcbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgb25DaGFuZ2VFdmVudCgkZXZlbnQpe1xyXG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLl90YXNrLmdldEZvcm1Db250cm9sKHRoaXMubWFnaWNEaXIucm93SWQsIHRoaXMubWFnaWNEaXIuaWQgKTtcclxuICAgIGxldCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gdGhpcy5fdGFzay5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKHRoaXMubWFnaWNEaXIuaWQpLmRhdGFUeXBlO1xyXG5cclxuICAgIHN3aXRjaCAgKGF0dHIpXHJcbiAgICB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgdGhpcy5mb3JtYXRBbHBoYVVuaWNvZGUgKGNvbnRyb2wpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB0aGlzLmZvcm1hdEJvb2xlYW4oY29udHJvbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKHBpYzogUElDKTogdm9pZCB7XHJcbiAgICAgbGV0IG1nRGF0ZUZvcm1hdHRlciA9IG5ldyBNZ0RhdGVGb3JtYXR0ZXIoKTtcclxuICAgICAgdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9IG1nRGF0ZUZvcm1hdHRlci5Db252ZXJ0TWdEYXRlRm9ybWF0VG9Bbmd1bGFyKHBpYy5nZXRNYXNrKCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZm9ybWF0QWxwaGFVbmljb2RlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xyXG4gICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG5ld1ZhbHVlOiBzdHJpbmcgPSB0aGlzLl90YXNrLkdldFJhbmdlZFZhbHVlKHRoaXMubWFnaWNEaXIuaWQsIHZhbHVlKTtcclxuICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpXHJcbiAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3Rhc2suR2V0Q29udHJvbFBpY3R1cmVNYXNrKHRoaXMubWFnaWNEaXIuaWQpO1xyXG4gICAgICBsZXQgbWFzazogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgICAgbGV0IHZhbHVlU3RyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHN3aXRjaCAobWFzay5jaGFyQ29kZUF0KGkpKSB7XHJcbiAgICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgICAgICAgdmFsdWVTdHIuQXBwZW5kKHZhbHVlLmNoYXJBdChpKS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTDpcclxuICAgICAgICAgICAgdmFsdWVTdHIuQXBwZW5kKHZhbHVlLmNoYXJBdChpKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB2YWx1ZVN0ci5BcHBlbmQodmFsdWUuY2hhckF0KGkpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlU3RyLlRvU3RyaW5nKCkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBmb3JtYXRCb29sZWFuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkICB7XHJcbiAgICBsZXQgdmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbmV3VmFsdWU6IHN0cmluZyA9IHRoaXMuX3Rhc2suR2V0UmFuZ2VkVmFsdWUgKHRoaXMubWFnaWNEaXIuaWQgLCB2YWx1ZSk7XHJcbiAgICAgIGlmIChuZXdWYWx1ZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgodmFsdWUudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdlbmVyYXRlIHBhdHRlcm4gZnJvbSAgZmxkJ3MgIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgIGdlbmVyYXRlUGF0dGVybiAoYXR0cmlidXRlOiBTdG9yYWdlQXR0cmlidXRlLCBwaWM6IFBJQyk6IHN0cmluZyB7XHJcbiAgICBsZXQgcGF0dGVybjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBzd2l0Y2ggKGF0dHJpYnV0ZSlcclxuICAgIHtcclxuICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBwYXR0ZXJuID0gdGhpcy5nZW5lcmF0ZVBhdHRlcm5Gb3JOdW1iZXIocGljKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgcGF0dGVybiA9IHRoaXMuZ2VuZXJhdGVQYXR0ZXJuRm9yQWxwaGEocGljKTtcclxuICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXR0ZXJuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2VuZXJhdGUgcGF0dGVybiBmb3IgQWxwaGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gZ2VuZXJhdGVQYXR0ZXJuRm9yTnVtYmVyKHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIGxldCBwYXR0ZXJuU3RyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIgKCk7XHJcblxyXG4gICAgcGF0dGVyblN0ci5BcHBlbmQoXCJeXCIpO1xyXG4gICAgaWYgKHBpYy5pc05lZ2F0aXZlKCkpXHJcbiAgICAgIHBhdHRlcm5TdHIuQXBwZW5kKFwiLT9cIik7XHJcbiAgICBpZiAocGljLmdldFdob2xlcygpKVxyXG4gICAgICBwYXR0ZXJuU3RyLkFwcGVuZEZvcm1hdChcIlxcXFxke3swfSx7MX19XCIsIDAsIHBpYy5nZXRXaG9sZXMoKSk7XHJcbiAgICBpZiAocGljLmdldERlYygpKVxyXG4gICAgICBwYXR0ZXJuU3RyLkFwcGVuZEZvcm1hdChcIihcXFxcLlxcXFxkezEsezB9fSk/XCIsIHBpYy5nZXREZWMoKSk7XHJcbiAgICBwYXR0ZXJuU3RyLkFwcGVuZChcIiRcIik7XHJcblxyXG4gICAgcmV0dXJuIHBhdHRlcm5TdHIuVG9TdHJpbmcoKTtcclxuIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gaXNQYXR0ZXJuR2VuZXJhdGlvbk5lZWRlZCAoYXR0ciA6IFN0b3JhZ2VBdHRyaWJ1dGUsIHBpYyA6IFBJQyk6IGJvb2xlYW4ge1xyXG5cclxuICAgc3dpdGNoIChhdHRyKSB7XHJcbiAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgcmV0dXJuIChwaWMuZ2V0TWFza0NoYXJzKCkgPiAwKSA/IHRydWUgOiBmYWxzZTtcclxuICAgfVxyXG4gfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZW5lcmF0ZSBwYXR0ZXJuIGZvciBBbHBoYVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiBnZW5lcmF0ZVBhdHRlcm5Gb3JBbHBoYShwaWMgOiBQSUMpOiBzdHJpbmcge1xyXG4gIGxldCBjbnQ6IG51bWJlciA9IDA7XHJcbiAgbGV0IGlucHV0QWxsQ2hhcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsZXQgY2xvc2VTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsZXQgdmFsOiBhbnkgPSBudWxsO1xyXG4gIGxldCBhbGxvd011bGl0aWxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gICBsZXQgIG1hc2s6IHN0cmluZyA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgIGxldCAgcGF0dGVybjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcblxyXG4gIHBhdHRlcm4uQXBwZW5kKFwiXlwiKTtcclxuICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbWFzay5sZW5ndGg7KVxyXG4gIHtcclxuICAgIC8vc3RhcnQgbmV3IHN1YnNldCAsIGlmIG1hc2tbaV0gaXMgb25lIG9mIHRoZXNlLlxyXG4gICAgaWYgKGlucHV0QWxsQ2hhcnMgJiYgKG1hc2suY2hhckNvZGVBdChpKSA9PSBQSUNJbnRlcmZhY2UuUElDX04gfHwgbWFzay5jaGFyQ29kZUF0KGkpID09IFBJQ0ludGVyZmFjZS5QSUNfVSB8fCBtYXNrLmNoYXJDb2RlQXQoaSkgPT0gUElDSW50ZXJmYWNlLlBJQ19MXHJcbiAgICAgICAgfHwgbWFzay5jaGFyQ29kZUF0KGkpID09IFBJQ0ludGVyZmFjZS5QSUNfWCkpXHJcbiAgICB7XHJcbiAgICAgIHBhdHRlcm4uQXBwZW5kKFwiKFwiKTtcclxuICAgICAgY2xvc2VTZXQgPSB0cnVlO1xyXG4gICAgICBpbnB1dEFsbENoYXJzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY250ID0gMDtcclxuICAgIHN3aXRjaCAobWFzay5jaGFyQ29kZUF0KGkpKVxyXG4gICAge1xyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1g6XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19MOlxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0dGVybi5BcHBlbmQoXCIuXCIpO1xyXG4gICAgICAgIGxldCBpbnB1dEFsbENoYXJzUmVmOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbTxib29sZWFuPihmYWxzZSk7XHJcbiAgICAgICAgbGV0IGRpcnM6IHN0cmluZyA9ICBQSUNJbnRlcmZhY2UuUElDX1UudG9TdHJpbmcoKTtcclxuICAgICAgICBkaXJzICs9IFBJQ0ludGVyZmFjZS5QSUNfTC50b1N0cmluZygpO1xyXG4gICAgICAgIGRpcnMgKz0gUElDSW50ZXJmYWNlLlBJQ19YLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY250ID0gdGhpcy5nZXREaXJlY3RpdmVDb3VudChtYXNrLCBpLCBkaXJzLCBpbnB1dEFsbENoYXJzUmVmKTtcclxuICAgICAgICBpbnB1dEFsbENoYXJzID0gaW5wdXRBbGxDaGFyc1JlZi52YWx1ZTtcclxuICAgICAgICBpICs9IGNudDtcclxuXHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX046XHJcbiAgICAgIHtcclxuICAgICAgICBwYXR0ZXJuLkFwcGVuZChcIlxcXFxkXCIpO1xyXG4gICAgICAgIGxldCBpbnB1dEFsbENoYXJzUmVmOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbTxib29sZWFuPihmYWxzZSk7XHJcbiAgICAgICAgY250ID0gdGhpcy5nZXREaXJlY3RpdmVDb3VudChtYXNrLCBpLCBQSUNJbnRlcmZhY2UuUElDX0wudG9TdHJpbmcoKSwgaW5wdXRBbGxDaGFyc1JlZik7XHJcbiAgICAgICAgaW5wdXRBbGxDaGFycyA9IGlucHV0QWxsQ2hhcnNSZWYudmFsdWU7XHJcbiAgICAgICAgaSArPSBjbnQ7XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcGF0dGVybi5BcHBlbmQobWFza1tpXSk7XHJcbiAgICAgICAgaSsrO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKGNudCA+IDApXHJcbiAgICAgIHBhdHRlcm4uQXBwZW5kRm9ybWF0KFwie3swfSx7MX19XCIsIGlucHV0QWxsQ2hhcnMgPyBjbnQgOiAwLCBjbnQpO1xyXG4gICAgaWYgKGNsb3NlU2V0KVxyXG4gICAgICBwYXR0ZXJuLkFwcGVuZChcIilcIik7XHJcbiAgICBjbG9zZVNldCA9IGZhbHNlO1xyXG5cclxuICB9XHJcbiAgIHBhdHRlcm4uQXBwZW5kKFwiJFwiKTtcclxuICAgcmV0dXJuIHBhdHRlcm4uVG9TdHJpbmcoKTtcclxuIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldERpcmVjdGl2ZUNvdW50KG1hc2s6IHN0cmluZywgaWR4OiBudW1iZXIsIHBhdHRlcm46IHN0cmluZywgY2hhbmdlSW5QYXR0ZXJuOiBSZWZQYXJhbTxib29sZWFuPiApOiBudW1iZXIgIHtcclxuXHJcbiAgICBjaGFuZ2VJblBhdHRlcm4udmFsdWUgPSBmYWxzZTtcclxuICAgIGxldCBwYXR0ZXJuQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gZmluZCBtYXggY2hhcnNcclxuICAgIHdoaWxlIChpZHggPCBtYXNrLmxlbmd0aCAmJiB0aGlzLklzUGF0dGVybk1hdGNoZXMobWFzay5jaGFyQ29kZUF0KGlkeCkudG9TdHJpbmcoKSwgcGF0dGVybikpXHJcbiAgICB7IHBhdHRlcm5Db3VudCsrOyBpZHgrKzsgfVxyXG5cclxuXHJcbiAgICBpZiAoaWR4IDwgbWFzay5sZW5ndGgpXHJcbiAgICAgIGNoYW5nZUluUGF0dGVybi52YWx1ZSA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHBhdHRlcm5Db3VudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBJc1BhdHRlcm5NYXRjaGVzKG1hc2s6IHN0cmluZywgcGF0dGVybjogc3RyaW5nKTogYm9vbGVhbiB7XHJcblxyXG4gICAgZm9yIChsZXQgaTpudW1iZXIgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGg7IGkrKylcclxuICAgIGlmIChtYXNrID09IHBhdHRlcm5baV0pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWdmb3JtYXQubWFnaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tZ2Zvcm1hdC5tYWdpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDL0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBa0IsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7O0FBVXpELE1BQU0sT0FBTyxzQkFBc0I7SUFJakMsWUFDWSxRQUF3QixFQUN4QixLQUF1QjtRQUR2QixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixVQUFLLEdBQUwsS0FBSyxDQUFrQjtJQUUvQixDQUFDO0lBRUwsZUFBZTtRQUNiLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFFLENBQUM7UUFFaEYsSUFBRyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksSUFBSSxFQUFFO1lBRTFELElBQUksR0FBRyxHQUFRLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUc7Z0JBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdEI7U0FDRjtJQUNILENBQUM7SUFXTSxZQUFZLENBQUMsTUFBTTtRQUN4QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBRSxDQUFDO1FBRWhGLElBQUcsT0FBTyxJQUFJLElBQUksRUFBRztZQUNuQixJQUFJLElBQUksR0FBcUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3RHLElBQUksSUFBSSxJQUFJLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksZ0JBQWdCLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQzFHLElBQUksR0FBRyxHQUFRLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFbEUsSUFBSSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUM3QyxJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUk7d0JBQzNCLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzt3QkFFbkQsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzNFO3FCQUNJO29CQUNILElBQUksSUFBSSxJQUFJLGdCQUFnQixDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUNuRSxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSTs0QkFDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7OzRCQUVqRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDN0Y7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQU9NLGFBQWEsQ0FBQyxNQUFNO1FBQ3pCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFFLENBQUM7UUFDaEYsSUFBSSxJQUFJLEdBQXFCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUV0RyxRQUFTLElBQUksRUFDYjtZQUNFLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQzVCLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQyxNQUFNO1lBQ1IsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QixNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVE7UUFDaEIsSUFBSSxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBSUQsa0JBQWtCLENBQUMsT0FBd0I7UUFDekMsSUFBSSxLQUFLLEdBQVcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUVsQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEMsTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUUsSUFBSSxRQUFRLElBQUksSUFBSTtnQkFDbEIsS0FBSyxHQUFHLFFBQVEsQ0FBQztZQUVuQixJQUFJLEdBQUcsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEUsSUFBSSxJQUFJLEdBQVcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQUksUUFBUSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBRWxELEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM3QyxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzFCLEtBQUssWUFBWSxDQUFDLEtBQUs7d0JBQ3JCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO3dCQUMvQyxNQUFNO29CQUNSLEtBQUssWUFBWSxDQUFDLEtBQUs7d0JBQ3JCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO3dCQUMvQyxNQUFNO29CQUNSO3dCQUNFLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxNQUFNO2lCQUNUO2FBQ0Y7WUFFRCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBRXZDO0lBQ0gsQ0FBQztJQUtELGFBQWEsQ0FBRSxPQUF3QjtRQUNyQyxJQUFJLEtBQUssR0FBVyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2xDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN0QyxJQUFJLFFBQVEsR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRyxLQUFLLENBQUMsQ0FBQztZQUM1RSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7Z0JBQzFELE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDNUI7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6QjtTQUNGO0lBQ0gsQ0FBQztJQVNBLGVBQWUsQ0FBRSxTQUEyQixFQUFFLEdBQVE7UUFDckQsSUFBSSxPQUFPLEdBQVcsRUFBRSxDQUFDO1FBRXpCLFFBQVEsU0FBUyxFQUNqQjtZQUNBLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsTUFBTTtZQUNSLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQzVCLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsT0FBTyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUMsTUFBTTtTQUNMO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQVFGLHdCQUF3QixDQUFDLEdBQVE7UUFDOUIsSUFBSSxVQUFVLEdBQWtCLElBQUksYUFBYSxFQUFHLENBQUM7UUFFckQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUU7WUFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUU7WUFDakIsVUFBVSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNkLFVBQVUsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV2QixPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBS0QseUJBQXlCLENBQUUsSUFBdUIsRUFBRSxHQUFTO1FBRTNELFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixPQUFPLElBQUksQ0FBQztZQUVkLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQzVCLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDbEQ7SUFDSCxDQUFDO0lBUUQsdUJBQXVCLENBQUMsR0FBUztRQUNoQyxJQUFJLEdBQUcsR0FBVyxDQUFDLENBQUM7UUFDcEIsSUFBSSxhQUFhLEdBQVksS0FBSyxDQUFDO1FBQ25DLElBQUksUUFBUSxHQUFZLEtBQUssQ0FBQztRQUM5QixJQUFJLEdBQUcsR0FBUSxJQUFJLENBQUM7UUFDcEIsSUFBSSxlQUFlLEdBQVksS0FBSyxDQUFDO1FBR3BDLElBQUssSUFBSSxHQUFXLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxJQUFLLE9BQU8sR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUVuRCxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUN2QztZQUVFLElBQUksYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLO21CQUMvSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFDaEQ7Z0JBQ0UsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEIsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDaEIsYUFBYSxHQUFHLEtBQUssQ0FBQzthQUN2QjtZQUVELEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDUixRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQzFCO2dCQUNFLEtBQUssWUFBWSxDQUFDLEtBQUssQ0FBQztnQkFDeEIsS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN4QixLQUFLLFlBQVksQ0FBQyxLQUFLO29CQUN2Qjt3QkFDRSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNwQixJQUFJLGdCQUFnQixHQUFzQixJQUFJLFFBQVEsQ0FBVSxLQUFLLENBQUMsQ0FBQzt3QkFDdkUsSUFBSSxJQUFJLEdBQVksWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDbEQsSUFBSSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3RDLElBQUksSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUN0QyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7d0JBQzlELGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7d0JBQ3ZDLENBQUMsSUFBSSxHQUFHLENBQUM7cUJBRVY7b0JBQ0MsTUFBTTtnQkFDUixLQUFLLFlBQVksQ0FBQyxLQUFLO29CQUN2Qjt3QkFDRSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN0QixJQUFJLGdCQUFnQixHQUFzQixJQUFJLFFBQVEsQ0FBVSxLQUFLLENBQUMsQ0FBQzt3QkFDdkUsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDdkYsYUFBYSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQzt3QkFDdkMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztxQkFDVjtvQkFDQyxNQUFNO2dCQUVSO29CQUNFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLENBQUMsRUFBRSxDQUFDO29CQUNKLE1BQU07YUFDVDtZQUNELElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ1QsT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsRSxJQUFJLFFBQVE7Z0JBQ1YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixRQUFRLEdBQUcsS0FBSyxDQUFDO1NBRWxCO1FBQ0EsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixPQUFPLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBS0EsaUJBQWlCLENBQUMsSUFBWSxFQUFFLEdBQVcsRUFBRSxPQUFlLEVBQUUsZUFBa0M7UUFFOUYsZUFBZSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxZQUFZLEdBQVcsQ0FBQyxDQUFDO1FBRzdCLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQzNGO1lBQUUsWUFBWSxFQUFFLENBQUM7WUFBQyxHQUFHLEVBQUUsQ0FBQztTQUFFO1FBRzFCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQ25CLGVBQWUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRS9CLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFLRCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsT0FBZTtRQUU1QyxLQUFLLElBQUksQ0FBQyxHQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDOUMsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsT0FBTyxJQUFJLENBQUM7UUFDZCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzRGQXJTVSxzQkFBc0I7MkRBQXRCLHNCQUFzQjt5R0FBdEIsd0JBQW9CLDBGQUFwQix5QkFBcUI7O3VGQUFyQixzQkFBc0I7Y0FMbEMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2FBQ3ZCO2dHQWtDUSxZQUFZO2tCQURsQixZQUFZO21CQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQWlDMUIsYUFBYTtrQkFEbkIsWUFBWTttQkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSG9zdExpc3RlbmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtUYXNrTWFnaWNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdGFzay5tYWdpY3Muc2VydmljZVwiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXIsIFJlZlBhcmFtfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIlxyXG5pbXBvcnQge1BJQ0ludGVyZmFjZSwgU3RvcmFnZUF0dHJpYnV0ZX0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIlxyXG5pbXBvcnQge01hZ2ljRGlyZWN0aXZlfSBmcm9tIFwiLi9tYWdpYy5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnN9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge1BJQ30gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7TWdEYXRlRm9ybWF0dGVyfSBmcm9tIFwiLi4vcGlwZXMvZGF0ZS5tYWdpYy5waXBlXCI7XHJcblxyXG4vKipcclxuICogUGVyZm9ybSBNYWdpYyB2YWxpZGF0aW9uIG9uIGlucHV0IGNvbnRyb2xzIHdoaWNoIGhvbGQgYWxwaGFudW1lcmljIHN0cmluZ3NcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW21nRm9ybWF0XSdcclxufSlcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgTWdmb3JtYXRNYWdpY0RpcmVjdGl2ZSB7XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIG1hZ2ljRGlyOiBNYWdpY0RpcmVjdGl2ZSAsXHJcbiAgICBwcm90ZWN0ZWQgX3Rhc2s6IFRhc2tNYWdpY1NlcnZpY2VcclxuXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLl90YXNrLmdldEZvcm1Db250cm9sKHRoaXMubWFnaWNEaXIucm93SWQsIHRoaXMubWFnaWNEaXIuaWQgKTtcclxuXHJcbiAgICBpZihjb250cm9sICE9IG51bGwgJiYgdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBudWxsKSB7XHJcbiAgICAgIC8vIGdldCB0aGUgZmlyc3QgZGF0ZSBjb250cm9sJ3MgZm9ybWF0LlxyXG4gICAgICBsZXQgcGljOiBQSUMgPSB0aGlzLl90YXNrLkdldENvbnRyb2xQaWN0dXJlTWFzayh0aGlzLm1hZ2ljRGlyLmlkKTtcclxuICAgICAgaWYgKHBpYy5nZXRBdHRyKCkgPT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFICkge1xyXG4gICAgICAgIHRoaXMuZm9ybWF0RGF0ZShwaWMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8qKlxyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0IHBhdHRlcm5cclxuICAgKiBPbiBpbnB1dCwgdmVyaWZpZXMgdGhlIGlucHV0IG1hdGNoZXMgdGhlIHJlcXVpcmVkIG1hc2tcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdmb2N1cycsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIG9uRm9jdXNFdmVudCgkZXZlbnQpe1xyXG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLl90YXNrLmdldEZvcm1Db250cm9sKHRoaXMubWFnaWNEaXIucm93SWQsIHRoaXMubWFnaWNEaXIuaWQgKTtcclxuXHJcbiAgICBpZihjb250cm9sICE9IG51bGwgKSB7XHJcbiAgICAgIGxldCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gdGhpcy5fdGFzay5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKHRoaXMubWFnaWNEaXIuaWQpLmRhdGFUeXBlO1xyXG4gICAgICBpZiAoYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IGF0dHIgPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgbGV0IHBpYzogUElDID0gdGhpcy5fdGFzay5HZXRDb250cm9sUGljdHVyZU1hc2sodGhpcy5tYWdpY0Rpci5pZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUGF0dGVybkdlbmVyYXRpb25OZWVkZWQoYXR0ciwgcGljKSkge1xyXG4gICAgICAgICAgbGV0IHBhdHRlcm46IHN0cmluZyA9IHRoaXMuZ2VuZXJhdGVQYXR0ZXJuKGF0dHIsIHBpYyk7XHJcbiAgICAgICAgICBpZiAoY29udHJvbC52YWxpZGF0b3IgPT0gbnVsbClcclxuICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucGF0dGVybihwYXR0ZXJuKSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbY29udHJvbC52YWxpZGF0b3IsIFZhbGlkYXRvcnMucGF0dGVybihwYXR0ZXJuKV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChhdHRyID09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpIHtcclxuICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsaWRhdG9yID09IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLm1heExlbmd0aChwaWMuZ2V0TWFza0xlbmd0aCgpKSk7XHJcbiAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFtjb250cm9sLnZhbGlkYXRvciwgVmFsaWRhdG9ycy5tYXhMZW5ndGgocGljLmdldE1hc2tMZW5ndGgoKSldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAqL1xyXG4gIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHVwcGVyY2FzZS9sb3dlciBjYXNlXHJcbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgb25DaGFuZ2VFdmVudCgkZXZlbnQpe1xyXG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLl90YXNrLmdldEZvcm1Db250cm9sKHRoaXMubWFnaWNEaXIucm93SWQsIHRoaXMubWFnaWNEaXIuaWQgKTtcclxuICAgIGxldCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gdGhpcy5fdGFzay5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKHRoaXMubWFnaWNEaXIuaWQpLmRhdGFUeXBlO1xyXG5cclxuICAgIHN3aXRjaCAgKGF0dHIpXHJcbiAgICB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgdGhpcy5mb3JtYXRBbHBoYVVuaWNvZGUgKGNvbnRyb2wpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB0aGlzLmZvcm1hdEJvb2xlYW4oY29udHJvbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKHBpYzogUElDKTogdm9pZCB7XHJcbiAgICAgbGV0IG1nRGF0ZUZvcm1hdHRlciA9IG5ldyBNZ0RhdGVGb3JtYXR0ZXIoKTtcclxuICAgICAgdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9IG1nRGF0ZUZvcm1hdHRlci5Db252ZXJ0TWdEYXRlRm9ybWF0VG9Bbmd1bGFyKHBpYy5nZXRNYXNrKCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZm9ybWF0QWxwaGFVbmljb2RlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xyXG4gICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG5ld1ZhbHVlOiBzdHJpbmcgPSB0aGlzLl90YXNrLkdldFJhbmdlZFZhbHVlKHRoaXMubWFnaWNEaXIuaWQsIHZhbHVlKTtcclxuICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpXHJcbiAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3Rhc2suR2V0Q29udHJvbFBpY3R1cmVNYXNrKHRoaXMubWFnaWNEaXIuaWQpO1xyXG4gICAgICBsZXQgbWFzazogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgICAgbGV0IHZhbHVlU3RyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHN3aXRjaCAobWFzay5jaGFyQ29kZUF0KGkpKSB7XHJcbiAgICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgICAgICAgdmFsdWVTdHIuQXBwZW5kKHZhbHVlLmNoYXJBdChpKS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTDpcclxuICAgICAgICAgICAgdmFsdWVTdHIuQXBwZW5kKHZhbHVlLmNoYXJBdChpKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB2YWx1ZVN0ci5BcHBlbmQodmFsdWUuY2hhckF0KGkpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlU3RyLlRvU3RyaW5nKCkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBmb3JtYXRCb29sZWFuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkICB7XHJcbiAgICBsZXQgdmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbmV3VmFsdWU6IHN0cmluZyA9IHRoaXMuX3Rhc2suR2V0UmFuZ2VkVmFsdWUgKHRoaXMubWFnaWNEaXIuaWQgLCB2YWx1ZSk7XHJcbiAgICAgIGlmIChuZXdWYWx1ZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgodmFsdWUudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdlbmVyYXRlIHBhdHRlcm4gZnJvbSAgZmxkJ3MgIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgIGdlbmVyYXRlUGF0dGVybiAoYXR0cmlidXRlOiBTdG9yYWdlQXR0cmlidXRlLCBwaWM6IFBJQyk6IHN0cmluZyB7XHJcbiAgICBsZXQgcGF0dGVybjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBzd2l0Y2ggKGF0dHJpYnV0ZSlcclxuICAgIHtcclxuICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBwYXR0ZXJuID0gdGhpcy5nZW5lcmF0ZVBhdHRlcm5Gb3JOdW1iZXIocGljKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgcGF0dGVybiA9IHRoaXMuZ2VuZXJhdGVQYXR0ZXJuRm9yQWxwaGEocGljKTtcclxuICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXR0ZXJuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2VuZXJhdGUgcGF0dGVybiBmb3IgQWxwaGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gZ2VuZXJhdGVQYXR0ZXJuRm9yTnVtYmVyKHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIGxldCBwYXR0ZXJuU3RyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIgKCk7XHJcblxyXG4gICAgcGF0dGVyblN0ci5BcHBlbmQoXCJeXCIpO1xyXG4gICAgaWYgKHBpYy5pc05lZ2F0aXZlKCkpXHJcbiAgICAgIHBhdHRlcm5TdHIuQXBwZW5kKFwiLT9cIik7XHJcbiAgICBpZiAocGljLmdldFdob2xlcygpKVxyXG4gICAgICBwYXR0ZXJuU3RyLkFwcGVuZEZvcm1hdChcIlxcXFxke3swfSx7MX19XCIsIDAsIHBpYy5nZXRXaG9sZXMoKSk7XHJcbiAgICBpZiAocGljLmdldERlYygpKVxyXG4gICAgICBwYXR0ZXJuU3RyLkFwcGVuZEZvcm1hdChcIihcXFxcLlxcXFxkezEsezB9fSk/XCIsIHBpYy5nZXREZWMoKSk7XHJcbiAgICBwYXR0ZXJuU3RyLkFwcGVuZChcIiRcIik7XHJcblxyXG4gICAgcmV0dXJuIHBhdHRlcm5TdHIuVG9TdHJpbmcoKTtcclxuIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gaXNQYXR0ZXJuR2VuZXJhdGlvbk5lZWRlZCAoYXR0ciA6IFN0b3JhZ2VBdHRyaWJ1dGUsIHBpYyA6IFBJQyk6IGJvb2xlYW4ge1xyXG5cclxuICAgc3dpdGNoIChhdHRyKSB7XHJcbiAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgcmV0dXJuIChwaWMuZ2V0TWFza0NoYXJzKCkgPiAwKSA/IHRydWUgOiBmYWxzZTtcclxuICAgfVxyXG4gfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZW5lcmF0ZSBwYXR0ZXJuIGZvciBBbHBoYVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiBnZW5lcmF0ZVBhdHRlcm5Gb3JBbHBoYShwaWMgOiBQSUMpOiBzdHJpbmcge1xyXG4gIGxldCBjbnQ6IG51bWJlciA9IDA7XHJcbiAgbGV0IGlucHV0QWxsQ2hhcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsZXQgY2xvc2VTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsZXQgdmFsOiBhbnkgPSBudWxsO1xyXG4gIGxldCBhbGxvd011bGl0aWxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gICBsZXQgIG1hc2s6IHN0cmluZyA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgIGxldCAgcGF0dGVybjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcblxyXG4gIHBhdHRlcm4uQXBwZW5kKFwiXlwiKTtcclxuICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbWFzay5sZW5ndGg7KVxyXG4gIHtcclxuICAgIC8vc3RhcnQgbmV3IHN1YnNldCAsIGlmIG1hc2tbaV0gaXMgb25lIG9mIHRoZXNlLlxyXG4gICAgaWYgKGlucHV0QWxsQ2hhcnMgJiYgKG1hc2suY2hhckNvZGVBdChpKSA9PSBQSUNJbnRlcmZhY2UuUElDX04gfHwgbWFzay5jaGFyQ29kZUF0KGkpID09IFBJQ0ludGVyZmFjZS5QSUNfVSB8fCBtYXNrLmNoYXJDb2RlQXQoaSkgPT0gUElDSW50ZXJmYWNlLlBJQ19MXHJcbiAgICAgICAgfHwgbWFzay5jaGFyQ29kZUF0KGkpID09IFBJQ0ludGVyZmFjZS5QSUNfWCkpXHJcbiAgICB7XHJcbiAgICAgIHBhdHRlcm4uQXBwZW5kKFwiKFwiKTtcclxuICAgICAgY2xvc2VTZXQgPSB0cnVlO1xyXG4gICAgICBpbnB1dEFsbENoYXJzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY250ID0gMDtcclxuICAgIHN3aXRjaCAobWFzay5jaGFyQ29kZUF0KGkpKVxyXG4gICAge1xyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1g6XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19MOlxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0dGVybi5BcHBlbmQoXCIuXCIpO1xyXG4gICAgICAgIGxldCBpbnB1dEFsbENoYXJzUmVmOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbTxib29sZWFuPihmYWxzZSk7XHJcbiAgICAgICAgbGV0IGRpcnM6IHN0cmluZyA9ICBQSUNJbnRlcmZhY2UuUElDX1UudG9TdHJpbmcoKTtcclxuICAgICAgICBkaXJzICs9IFBJQ0ludGVyZmFjZS5QSUNfTC50b1N0cmluZygpO1xyXG4gICAgICAgIGRpcnMgKz0gUElDSW50ZXJmYWNlLlBJQ19YLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY250ID0gdGhpcy5nZXREaXJlY3RpdmVDb3VudChtYXNrLCBpLCBkaXJzLCBpbnB1dEFsbENoYXJzUmVmKTtcclxuICAgICAgICBpbnB1dEFsbENoYXJzID0gaW5wdXRBbGxDaGFyc1JlZi52YWx1ZTtcclxuICAgICAgICBpICs9IGNudDtcclxuXHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX046XHJcbiAgICAgIHtcclxuICAgICAgICBwYXR0ZXJuLkFwcGVuZChcIlxcXFxkXCIpO1xyXG4gICAgICAgIGxldCBpbnB1dEFsbENoYXJzUmVmOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbTxib29sZWFuPihmYWxzZSk7XHJcbiAgICAgICAgY250ID0gdGhpcy5nZXREaXJlY3RpdmVDb3VudChtYXNrLCBpLCBQSUNJbnRlcmZhY2UuUElDX0wudG9TdHJpbmcoKSwgaW5wdXRBbGxDaGFyc1JlZik7XHJcbiAgICAgICAgaW5wdXRBbGxDaGFycyA9IGlucHV0QWxsQ2hhcnNSZWYudmFsdWU7XHJcbiAgICAgICAgaSArPSBjbnQ7XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcGF0dGVybi5BcHBlbmQobWFza1tpXSk7XHJcbiAgICAgICAgaSsrO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKGNudCA+IDApXHJcbiAgICAgIHBhdHRlcm4uQXBwZW5kRm9ybWF0KFwie3swfSx7MX19XCIsIGlucHV0QWxsQ2hhcnMgPyBjbnQgOiAwLCBjbnQpO1xyXG4gICAgaWYgKGNsb3NlU2V0KVxyXG4gICAgICBwYXR0ZXJuLkFwcGVuZChcIilcIik7XHJcbiAgICBjbG9zZVNldCA9IGZhbHNlO1xyXG5cclxuICB9XHJcbiAgIHBhdHRlcm4uQXBwZW5kKFwiJFwiKTtcclxuICAgcmV0dXJuIHBhdHRlcm4uVG9TdHJpbmcoKTtcclxuIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldERpcmVjdGl2ZUNvdW50KG1hc2s6IHN0cmluZywgaWR4OiBudW1iZXIsIHBhdHRlcm46IHN0cmluZywgY2hhbmdlSW5QYXR0ZXJuOiBSZWZQYXJhbTxib29sZWFuPiApOiBudW1iZXIgIHtcclxuXHJcbiAgICBjaGFuZ2VJblBhdHRlcm4udmFsdWUgPSBmYWxzZTtcclxuICAgIGxldCBwYXR0ZXJuQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gZmluZCBtYXggY2hhcnNcclxuICAgIHdoaWxlIChpZHggPCBtYXNrLmxlbmd0aCAmJiB0aGlzLklzUGF0dGVybk1hdGNoZXMobWFzay5jaGFyQ29kZUF0KGlkeCkudG9TdHJpbmcoKSwgcGF0dGVybikpXHJcbiAgICB7IHBhdHRlcm5Db3VudCsrOyBpZHgrKzsgfVxyXG5cclxuXHJcbiAgICBpZiAoaWR4IDwgbWFzay5sZW5ndGgpXHJcbiAgICAgIGNoYW5nZUluUGF0dGVybi52YWx1ZSA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHBhdHRlcm5Db3VudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBJc1BhdHRlcm5NYXRjaGVzKG1hc2s6IHN0cmluZywgcGF0dGVybjogc3RyaW5nKTogYm9vbGVhbiB7XHJcblxyXG4gICAgZm9yIChsZXQgaTpudW1iZXIgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGg7IGkrKylcclxuICAgIGlmIChtYXNrID09IHBhdHRlcm5baV0pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=