nuxeo-development-framework 6.1.5 → 6.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/nuxeo-development-framework.umd.js +71 -235
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/activities-log/activities-log/activities-log.component.js +1 -1
- package/esm2015/lib/components/activities-log/activities-log/activities-log.service.js +1 -1
- package/esm2015/lib/components/activities-log/activities-log.module.js +1 -1
- package/esm2015/lib/components/activity/activity/activity.component.js +1 -1
- package/esm2015/lib/components/activity/activity.module.js +1 -1
- package/esm2015/lib/components/attachment-item/attachment-item/attachment-item.component.js +2 -2
- package/esm2015/lib/components/attachment-item/attachment-item.module.js +1 -1
- package/esm2015/lib/components/attachment-modal/attachment-modal.module.js +1 -1
- package/esm2015/lib/components/attachment-modal/attachments/attachments.component.js +1 -1
- package/esm2015/lib/components/avatar/avatar/avatar.component.js +1 -1
- package/esm2015/lib/components/avatar/avatar.module.js +1 -1
- package/esm2015/lib/components/card/card.component.js +1 -1
- package/esm2015/lib/components/card/card.module.js +1 -1
- package/esm2015/lib/components/comments/comments.module.js +1 -1
- package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +2 -2
- package/esm2015/lib/components/comments/components/comments-dashlet/comments-dashlet.component.js +1 -1
- package/esm2015/lib/components/comments/components/comments-list/comments-list.component.js +1 -1
- package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +1 -1
- package/esm2015/lib/components/comments/constants/comment.js +1 -1
- package/esm2015/lib/components/comments/services/comment-api.service.js +1 -1
- package/esm2015/lib/components/confirm-caller/confirm-caller.dialog.js +1 -1
- package/esm2015/lib/components/confirm-caller/confirm-caller.module.js +1 -1
- package/esm2015/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.js +1 -1
- package/esm2015/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.js +1 -1
- package/esm2015/lib/components/confirmation-dialog/confirmation-dialog.module.js +1 -1
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +1 -1
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +1 -1
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +2 -2
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.js +1 -1
- package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +1 -1
- package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +1 -1
- package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +1 -1
- package/esm2015/lib/components/correspondence-relation/services/viewer-files.service.js +1 -1
- package/esm2015/lib/components/create-entity/create-entity/create-entity.component.js +1 -1
- package/esm2015/lib/components/create-entity/create-entity.module.js +1 -1
- package/esm2015/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.js +2 -2
- package/esm2015/lib/components/cts-tags/cts-tags.module.js +1 -1
- package/esm2015/lib/components/cts-tags/services/tags-api.service.js +1 -1
- package/esm2015/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.js +1 -1
- package/esm2015/lib/components/custom-toastr/custom-toastr.module.js +1 -1
- package/esm2015/lib/components/custom-toastr/interfaces/toast-type.interface.js +1 -1
- package/esm2015/lib/components/custom-toastr/services/custom-toastr.service.js +1 -1
- package/esm2015/lib/components/diagrams/components/base-node.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/circle-node/circle-node.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/connection-label.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/content-node/content-node.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/custom-connection.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/custom-socket.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/gateway-node/gateway-node.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/gateway-ports.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/index.js +1 -1
- package/esm2015/lib/components/diagrams/components/node-icon.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/node-inputs.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/node-outputs.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/node-ports.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/remove-button.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/status-icon.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/template-node/template-node.component.js +1 -1
- package/esm2015/lib/components/diagrams/components/zoom-control.component.js +1 -1
- package/esm2015/lib/components/diagrams/constants/defaults.js +1 -1
- package/esm2015/lib/components/diagrams/constants/direction.js +1 -1
- package/esm2015/lib/components/diagrams/constants/index.js +1 -1
- package/esm2015/lib/components/diagrams/constants/message-type.js +1 -1
- package/esm2015/lib/components/diagrams/constants/node-type.js +1 -1
- package/esm2015/lib/components/diagrams/constants/notify-events.js +1 -1
- package/esm2015/lib/components/diagrams/constants/sizes.js +1 -1
- package/esm2015/lib/components/diagrams/constants/status.js +1 -1
- package/esm2015/lib/components/diagrams/diagrams.module.js +1 -1
- package/esm2015/lib/components/diagrams/directive/diagram.directive.js +1 -1
- package/esm2015/lib/components/diagrams/directive/index.js +1 -1
- package/esm2015/lib/components/diagrams/editor/customize.js +1 -1
- package/esm2015/lib/components/diagrams/editor/editor.js +1 -1
- package/esm2015/lib/components/diagrams/editor/index.js +1 -1
- package/esm2015/lib/components/diagrams/editor/overrides/connection-path.transformers.js +1 -1
- package/esm2015/lib/components/diagrams/editor/overrides/index.js +1 -1
- package/esm2015/lib/components/diagrams/editor/path-plugin.js +1 -1
- package/esm2015/lib/components/diagrams/editor/socket-position-watcher.js +1 -1
- package/esm2015/lib/components/diagrams/index.js +1 -1
- package/esm2015/lib/components/diagrams/models/base-node.model.js +1 -1
- package/esm2015/lib/components/diagrams/models/circle-node.model.js +1 -1
- package/esm2015/lib/components/diagrams/models/connection.model.js +1 -1
- package/esm2015/lib/components/diagrams/models/content-node.model.js +1 -1
- package/esm2015/lib/components/diagrams/models/gate-way.model.js +1 -1
- package/esm2015/lib/components/diagrams/models/index.js +1 -1
- package/esm2015/lib/components/diagrams/models/ports.model.js +1 -1
- package/esm2015/lib/components/diagrams/models/socket.model.js +1 -1
- package/esm2015/lib/components/diagrams/models/template-node.model.js +1 -1
- package/esm2015/lib/components/diagrams/public-api.js +1 -1
- package/esm2015/lib/components/diagrams/services/diagram-plugins.service.js +1 -1
- package/esm2015/lib/components/diagrams/services/diagram.service.js +1 -1
- package/esm2015/lib/components/diagrams/services/index.js +1 -1
- package/esm2015/lib/components/diagrams/services/message.service.js +1 -1
- package/esm2015/lib/components/diagrams/services/workflow.service.js +1 -1
- package/esm2015/lib/components/diagrams/types/common.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/connection-config.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/connection-label.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/customization.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/diagram-config.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/diagram-editor.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/emitter-type.js +1 -1
- package/esm2015/lib/components/diagrams/types/index.js +1 -1
- package/esm2015/lib/components/diagrams/types/layout.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/node-content.js +1 -1
- package/esm2015/lib/components/diagrams/types/node-definition.js +1 -1
- package/esm2015/lib/components/diagrams/types/node-status.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/node.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/notify-event.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/path.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/ports-config.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/schemes.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/socket.type.js +1 -1
- package/esm2015/lib/components/diagrams/utilities/common.js +1 -1
- package/esm2015/lib/components/diagrams/utilities/index.js +1 -1
- package/esm2015/lib/components/diagrams/utilities/random.js +1 -1
- package/esm2015/lib/components/diagrams/utilities/remove.util.js +1 -1
- package/esm2015/lib/components/diagrams/utilities/serialize.js +1 -1
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.js +2 -2
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/icon.service.js +1 -1
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon.module.js +1 -1
- package/esm2015/lib/components/documents/components/attachments-list/attachments-list.component.js +1 -1
- package/esm2015/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.js +1 -1
- package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +1 -1
- package/esm2015/lib/components/documents/components/document-scan/document-scan.component.js +1 -1
- package/esm2015/lib/components/documents/components/document-scan/document-scan.service.js +1 -1
- package/esm2015/lib/components/documents/components/document-upload/document-upload.component.js +1 -1
- package/esm2015/lib/components/documents/components/documents/documents.component.js +1 -1
- package/esm2015/lib/components/documents/constants/document-templates.js +1 -1
- package/esm2015/lib/components/documents/constants/documents.js +1 -1
- package/esm2015/lib/components/documents/documents.module.js +1 -1
- package/esm2015/lib/components/documents/services/document-templates.service.js +1 -1
- package/esm2015/lib/components/documents/services/documents.service.js +1 -1
- package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +1 -1
- package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +1 -1
- package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +1 -1
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +1 -1
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +1 -1
- package/esm2015/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.js +2 -2
- package/esm2015/lib/components/dynamic-filter/dynamic-filter.module.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/fields.adapter.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/form-builder.service.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/constants/department.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-item-dispatcher/dynamic-form-item-dispatcher.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.js +2 -2
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.js +2 -2
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.formio.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.formio.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.formio.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.js +1 -1
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.formio.js +1 -1
- package/esm2015/lib/components/dynamic-form/directives/dynamic-form-content-proxy.directive.js +1 -1
- package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +1 -1
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-boolitem-properties.interface.js +1 -1
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-dateitem-properties.interface.js +1 -1
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item-properties.interface.js +1 -1
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item-validator.interface.js +1 -1
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item.interface.js +1 -1
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-keyvaluepairsitem-properties.interface.js +1 -1
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-selectitem-properties.interface.js +1 -1
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-textitem-pipe-property.interface.js +1 -1
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-textitem-properties.interface.js +1 -1
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form.interfaces.js +1 -1
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-baseitem.model.js +1 -1
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-boolitem.model.js +1 -1
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-dateitem.model.js +1 -1
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-datetimeitem.model.js +1 -1
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-mapitem.model.js +1 -1
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-selectitem.model.js +1 -1
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-textitem.model.js +1 -1
- package/esm2015/lib/components/dynamic-form/models/dynamic-form.models.js +1 -1
- package/esm2015/lib/components/dynamic-form/services/card-item-types.service.js +1 -1
- package/esm2015/lib/components/dynamic-form/services/dynamic-component-mapper.service.js +1 -1
- package/esm2015/lib/components/dynamic-form/services/dynamic-form-update.service.js +1 -1
- package/esm2015/lib/components/dynamic-form/services/vocabulary-api.service.js +1 -1
- package/esm2015/lib/components/dynamic-form/validators/length-validator.js +1 -1
- package/esm2015/lib/components/dynamic-form/validators/regex-validator.js +1 -1
- package/esm2015/lib/components/dynamic-form/validators/required-validator.js +1 -1
- package/esm2015/lib/components/dynamic-form/validators/value-validator.js +1 -1
- package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +1 -1
- package/esm2015/lib/components/dynamic-search/dynamic-search.module.js +1 -1
- package/esm2015/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.js +1 -1
- package/esm2015/lib/components/dynamic-tabs/dynamic-tabs.module.js +1 -1
- package/esm2015/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.js +2 -2
- package/esm2015/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.js +1 -1
- package/esm2015/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.js +1 -1
- package/esm2015/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.js +1 -1
- package/esm2015/lib/components/dynamic-view/data-viewer/data-viewer.component.js +2 -2
- package/esm2015/lib/components/dynamic-view/date-viewer/date-viewer.component.js +2 -2
- package/esm2015/lib/components/dynamic-view/department-viewer/department-viewer.component.js +2 -2
- package/esm2015/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.js +2 -2
- package/esm2015/lib/components/dynamic-view/dynamic-view.module.js +1 -1
- package/esm2015/lib/components/dynamic-view/dynamic-viewe.service.js +1 -1
- package/esm2015/lib/components/dynamic-view/list-viewer/list-viewer.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/clipboard/clipboard.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/copy/copy.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/delete/delete.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/move/move.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/rename/rename.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +2 -2
- package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +1 -1
- package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +1 -1
- package/esm2015/lib/components/file-manger/directives/file-grid-infinite-scroll.directive.js +1 -1
- package/esm2015/lib/components/file-manger/file-manager.abstract.js +1 -1
- package/esm2015/lib/components/file-manger/file-manger.module.js +1 -1
- package/esm2015/lib/components/file-manger/models/file-manager-config.model.js +1 -1
- package/esm2015/lib/components/file-manger/models/index.js +1 -1
- package/esm2015/lib/components/file-manger/models/pagination-payload.mode.js +1 -1
- package/esm2015/lib/components/file-manger/models/pagination-response.model.js +1 -1
- package/esm2015/lib/components/filter/filter/filter.component.js +1 -1
- package/esm2015/lib/components/filter/filter.module.js +1 -1
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-datepicker.component.js +1 -1
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-datepicker.component.js +1 -1
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-gregorian-datepicker.component.js +1 -1
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/provide-parent-form.directive.js +1 -1
- package/esm2015/lib/components/hijri-gregorian-datepicker/ngx-hijri-gregorian-datepicker.module.js +1 -1
- package/esm2015/lib/components/hijri-gregorian-datepicker/services/date-formatter.service.js +1 -1
- package/esm2015/lib/components/hijri-gregorian-datepicker/services/date-helper.service.js +1 -1
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/CustomNgbDateParserFormatter.js +1 -1
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/IslamicI18n.js +1 -1
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/consts.js +1 -1
- package/esm2015/lib/components/latest-activity/components/activity-line/activity-line.component.js +1 -1
- package/esm2015/lib/components/latest-activity/components/latest-activity/latest-activity.component.js +1 -1
- package/esm2015/lib/components/latest-activity/components/single-activity/single-activity.component.js +1 -1
- package/esm2015/lib/components/latest-activity/constants/activitylog.js +1 -1
- package/esm2015/lib/components/latest-activity/latest-activity.module.js +1 -1
- package/esm2015/lib/components/latest-activity/services/activity-log.service.js +1 -1
- package/esm2015/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.js +1 -1
- package/esm2015/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/components/config-editor-actions/config-editor-actions.component.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/components/editor-mode-switch.component.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/components/index.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/components/info-dialog/info-dialog.component.js +2 -2
- package/esm2015/lib/components/ndf-config-editor/config.token.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/constants/index.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/constants/mode.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/constants/query.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/containers/config-preview/config-preview.component.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/containers/editor-settings/editor-settings.component.js +2 -2
- package/esm2015/lib/components/ndf-config-editor/containers/index.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/containers/monaco-editor.component.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/containers/ndf-config-editor/ndf-config-editor.component.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/index.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/metadata-token.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/models/config.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/models/dialog-data.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/models/editor-model.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/models/index.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/models/payload-data.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/models/type-helper.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/ndf-config-editor.module.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/pipes/index.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/pipes/is-valid-json.pipe.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/pipes/validate-object.pipe.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/public/editor-navigate-button.js +2 -2
- package/esm2015/lib/components/ndf-config-editor/public/index.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/public-api.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/services/data-access.service.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/services/data-store.service.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/services/index.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/services/monaco.loader.service.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/utility/index.js +1 -1
- package/esm2015/lib/components/ndf-config-editor/utility/json.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/adapters/hijri-adapter.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/adapters/index.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/adapters/moment-adapter.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/base/base-value-accessor.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/base/index.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/components/base-datepicker.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/components/index.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/components/input-date.component.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/components/input-range-date.component.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/constants/date-locale-keys.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/constants/date-picker.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/constants/date-type.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/constants/formats.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/constants/hijri-dates-names.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/constants/index.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/containers/datepicker-container.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/containers/index.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/containers/ndf-gregorian-datepicker.component.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/containers/ndf-hijri-datepicker.component.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/index.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/models/data-types.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/models/index.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/models/value-object.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/ndf-datepicker.component.js +2 -2
- package/esm2015/lib/components/ndf-datepicker/ndf-datepicker.module.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/services/calendar.service.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/services/index.js +1 -1
- package/esm2015/lib/components/ndf-datepicker/services/localize-state.service.js +1 -1
- package/esm2015/lib/components/ndf-filters/base/base-aggregation-field.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/base/base-checkbox-radio.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/base/base-custom-field.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/base/base-predicate-field.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/base/base-value-accessor.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/base/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/__parts/field-header.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/__parts/filter-autocomplete-input/filter-autocomplete-input.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/__parts/filter-autocomplete-input/filter-autocomplete.service.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/__parts/filter-collapse-control/filter-collapse-control.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/__parts/filter-date-range/filter-date-range.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/__parts/filter-empty-message.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/__parts/filter-option-text/filter-option-text.component.js +2 -2
- package/esm2015/lib/components/ndf-filters/components/__parts/filter-options-sort/filter-options-sort.component.js +2 -2
- package/esm2015/lib/components/ndf-filters/components/__parts/filter-search-input/filter-search-input.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/__parts/html-dialog/html-dialog.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/__parts/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/aggregation-autocomplete/aggregation-autocomplete.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/aggregation-checkbox/aggregation-checkbox.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/aggregation-custom/aggregation-custom.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/aggregation-date-list/aggregation-date-list.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/aggregation-radio/aggregation-radio.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/aggregation-select/aggregation-select.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/aggregation-switch/aggregation-switch.component.js +2 -2
- package/esm2015/lib/components/ndf-filters/components/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/predicate-date-input/predicate-date-input.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/components/predicate-text-input/predicate-text-input.component.js +2 -2
- package/esm2015/lib/components/ndf-filters/constants/common.js +1 -1
- package/esm2015/lib/components/ndf-filters/constants/field.js +1 -1
- package/esm2015/lib/components/ndf-filters/constants/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/constants/operators.js +1 -1
- package/esm2015/lib/components/ndf-filters/constants/sort.js +1 -1
- package/esm2015/lib/components/ndf-filters/constants/type.js +1 -1
- package/esm2015/lib/components/ndf-filters/containers/aggregation-field/aggregation-field.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/containers/base-field.js +1 -1
- package/esm2015/lib/components/ndf-filters/containers/custom-field/custom-field.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/containers/filters-panel/base-filters-panel.js +1 -1
- package/esm2015/lib/components/ndf-filters/containers/filters-panel/filters-panel.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/containers/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/containers/predicate-field/predicate-field.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/custom-components/active-user-switch/active-user-switch.component.js +2 -2
- package/esm2015/lib/components/ndf-filters/custom-components/active-user-switch/active-user.service.js +1 -1
- package/esm2015/lib/components/ndf-filters/custom-components/active-user-switch/user-types.js +1 -1
- package/esm2015/lib/components/ndf-filters/custom-components/aggregation-group/aggregation-group.component.js +1 -1
- package/esm2015/lib/components/ndf-filters/custom-components/aggregation-group/map-aggregation-config.js +1 -1
- package/esm2015/lib/components/ndf-filters/custom-components/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/directives/autocomplete-template.directive.js +1 -1
- package/esm2015/lib/components/ndf-filters/directives/checkbox-template.directive.js +1 -1
- package/esm2015/lib/components/ndf-filters/directives/custom-template.directive.js +1 -1
- package/esm2015/lib/components/ndf-filters/directives/date-template.directive.js +1 -1
- package/esm2015/lib/components/ndf-filters/directives/dropdown-label-template.directive.js +1 -1
- package/esm2015/lib/components/ndf-filters/directives/dropdown-template.directive.js +1 -1
- package/esm2015/lib/components/ndf-filters/directives/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/directives/radio-template.directive.js +1 -1
- package/esm2015/lib/components/ndf-filters/directives/switch-template.directive.js +1 -1
- package/esm2015/lib/components/ndf-filters/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/aggregation-field-config.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/aggregation-response.model.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/base-field-config.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/common.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/custom-field-config.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-config.model.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/autocomplete-options.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/checkbox-options.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/common-utils.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/custom-fields-options.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/custom-options.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/date-list-options.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/date-options.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/dropdown-options.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/input-options.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/radio-options.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/field-options/switch-options.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/filter-option.model.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/form-query-request.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/operator-value-object.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/predicate-field-config.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/types-helper.js +1 -1
- package/esm2015/lib/components/ndf-filters/models/value-object.model.js +1 -1
- package/esm2015/lib/components/ndf-filters/ndf-filters-panel.module.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/autocomplete-filter.pipe.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/check-condition.pipe.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/evaluate-label.pipe.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/filter.pipe.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/hash-translate.pipe.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/localized-label.pipe.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/roles-filters.pipe.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/sanitizer.pipe.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/sort.pipe.js +1 -1
- package/esm2015/lib/components/ndf-filters/pipes/tooltip.pipe.js +1 -1
- package/esm2015/lib/components/ndf-filters/public-api.js +1 -1
- package/esm2015/lib/components/ndf-filters/services/aggregation-field.service.js +1 -1
- package/esm2015/lib/components/ndf-filters/services/dynamic-component-loader.service.js +1 -1
- package/esm2015/lib/components/ndf-filters/services/filters-mapper.service.js +1 -1
- package/esm2015/lib/components/ndf-filters/services/filters-query.service.js +1 -1
- package/esm2015/lib/components/ndf-filters/services/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/utility/index.js +1 -1
- package/esm2015/lib/components/ndf-filters/utility/nxql-query.js +1 -1
- package/esm2015/lib/components/ndf-filters/utility/nxql.js +1 -1
- package/esm2015/lib/components/ndf-filters/utility/object.js +1 -1
- package/esm2015/lib/components/ndf-panel/component/ndf-panel.component.js +1 -1
- package/esm2015/lib/components/ndf-panel/index.js +1 -1
- package/esm2015/lib/components/ndf-panel/ndf-panel.module.js +1 -1
- package/esm2015/lib/components/ndf-scanner/index.js +1 -1
- package/esm2015/lib/components/ndf-scanner/ndf-scanner.component.js +2 -2
- package/esm2015/lib/components/ndf-scanner/ndf-scanner.module.js +1 -1
- package/esm2015/lib/components/ndf-signatures/emdha/dialogs/auth/emdha-auth.dialog.js +1 -1
- package/esm2015/lib/components/ndf-signatures/emdha/dialogs/index.js +1 -1
- package/esm2015/lib/components/ndf-signatures/emdha/index.js +1 -1
- package/esm2015/lib/components/ndf-signatures/emdha/services/emdha.service.js +1 -1
- package/esm2015/lib/components/ndf-signatures/emdha/services/index.js +1 -1
- package/esm2015/lib/components/ndf-signatures/index.js +1 -1
- package/esm2015/lib/components/ndf-signatures/ndf-signature-panel/ndf-signature-panel.component.js +1 -1
- package/esm2015/lib/components/ndf-signatures/ndf-signatures.module.js +1 -1
- package/esm2015/lib/components/ndf-signatures/services/index.js +1 -1
- package/esm2015/lib/components/ndf-signatures/services/signatures.service.js +1 -1
- package/esm2015/lib/components/ndf-tabs/component/ndf-tabs.component.js +1 -1
- package/esm2015/lib/components/ndf-tabs/index.js +1 -1
- package/esm2015/lib/components/ndf-tabs/ndf-tabs.module.js +1 -1
- package/esm2015/lib/components/ndf-tabs/tab.type.js +1 -1
- package/esm2015/lib/components/ndf-uploader/components/bottom-sheet/ndf-uploader-bottom-sheet.component.js +2 -2
- package/esm2015/lib/components/ndf-uploader/components/index.js +1 -1
- package/esm2015/lib/components/ndf-uploader/config/index.js +1 -1
- package/esm2015/lib/components/ndf-uploader/config/uploader.config.js +1 -1
- package/esm2015/lib/components/ndf-uploader/constant/file-content.js +1 -1
- package/esm2015/lib/components/ndf-uploader/constant/index.js +1 -1
- package/esm2015/lib/components/ndf-uploader/helpers/index.js +1 -1
- package/esm2015/lib/components/ndf-uploader/helpers/uploader.helper.js +1 -1
- package/esm2015/lib/components/ndf-uploader/index.js +1 -1
- package/esm2015/lib/components/ndf-uploader/models/batch.model.js +1 -1
- package/esm2015/lib/components/ndf-uploader/models/index.js +1 -1
- package/esm2015/lib/components/ndf-uploader/models/ndf-file.model.js +1 -1
- package/esm2015/lib/components/ndf-uploader/models/provider.model.js +1 -1
- package/esm2015/lib/components/ndf-uploader/ndf-uploader-bottom-sheet.service.js +1 -1
- package/esm2015/lib/components/ndf-uploader/ndf-uploader.module.js +1 -1
- package/esm2015/lib/components/ndf-uploader/ndf-uploader.service.js +1 -1
- package/esm2015/lib/components/ndf-uploader/nuxeo-base-url.js +1 -1
- package/esm2015/lib/components/ndf-uploader/providers/index.js +1 -1
- package/esm2015/lib/components/ndf-uploader/providers/nuxeo-provider.service.js +1 -1
- package/esm2015/lib/components/ndf-uploader/providers/s3-provider.service.js +1 -1
- package/esm2015/lib/components/no-data-found/index.js +1 -1
- package/esm2015/lib/components/no-data-found/no-data-found.component.js +1 -1
- package/esm2015/lib/components/no-data-found/no-data.module.js +1 -1
- package/esm2015/lib/components/notifications/components/base-list-notfications.component.js +1 -1
- package/esm2015/lib/components/notifications/components/base-notifications.component.js +1 -1
- package/esm2015/lib/components/notifications/components/index.js +1 -1
- package/esm2015/lib/components/notifications/components/notification-item/get-icon.pipe.js +1 -1
- package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +2 -2
- package/esm2015/lib/components/notifications/components/notification-sortby-toggle/notification-sortby-toggle.component.js +2 -2
- package/esm2015/lib/components/notifications/components/notification-source-select/notification-source-select.component.js +2 -2
- package/esm2015/lib/components/notifications/components/notification-status-toggle/notification-status-toggle.component.js +2 -2
- package/esm2015/lib/components/notifications/components/notifications-button/notifications-button.component.js +2 -2
- package/esm2015/lib/components/notifications/components/notifications-date-select/notifications-date-select.component.js +2 -2
- package/esm2015/lib/components/notifications/components/notifications-list/notifications-list.component.js +2 -2
- package/esm2015/lib/components/notifications/components/notifications-list/options.js +1 -1
- package/esm2015/lib/components/notifications/components/notifications-list-actions/notifications-list-actions.component.js +2 -2
- package/esm2015/lib/components/notifications/components/notifications-settings/check-if-subscribed.pipe.js +1 -1
- package/esm2015/lib/components/notifications/components/notifications-settings/notifications-settings.adapter.js +1 -1
- package/esm2015/lib/components/notifications/components/notifications-settings/notifications-settings.component.js +2 -2
- package/esm2015/lib/components/notifications/components/notifications-sidebar/notifications-sidebar-content.js +1 -1
- package/esm2015/lib/components/notifications/components/notifications-sidebar/notifications-sidebar.component.js +1 -1
- package/esm2015/lib/components/notifications/constants/date.js +1 -1
- package/esm2015/lib/components/notifications/constants/index.js +1 -1
- package/esm2015/lib/components/notifications/constants/pagination.js +1 -1
- package/esm2015/lib/components/notifications/constants/panel.js +1 -1
- package/esm2015/lib/components/notifications/constants/status.js +1 -1
- package/esm2015/lib/components/notifications/containers/index.js +1 -1
- package/esm2015/lib/components/notifications/containers/notifications-list-container/notifications-list-container.component.js +2 -2
- package/esm2015/lib/components/notifications/containers/notifications-list-container/options.js +1 -1
- package/esm2015/lib/components/notifications/containers/notifications-settings-container/notifications-settings-container.component.js +1 -1
- package/esm2015/lib/components/notifications/directives/button.directive.js +1 -1
- package/esm2015/lib/components/notifications/directives/index.js +1 -1
- package/esm2015/lib/components/notifications/directives/notification.directive.js +1 -1
- package/esm2015/lib/components/notifications/index.js +1 -1
- package/esm2015/lib/components/notifications/models/common.js +1 -1
- package/esm2015/lib/components/notifications/models/index.js +1 -1
- package/esm2015/lib/components/notifications/models/notification-definition.model.js +1 -1
- package/esm2015/lib/components/notifications/models/notification-message.mode.js +1 -1
- package/esm2015/lib/components/notifications/models/notification-options.js +1 -1
- package/esm2015/lib/components/notifications/models/notification-setting.presenter.js +1 -1
- package/esm2015/lib/components/notifications/models/notification-subscription.model.js +1 -1
- package/esm2015/lib/components/notifications/models/notification.model.js +1 -1
- package/esm2015/lib/components/notifications/models/notifications-list-options.js +1 -1
- package/esm2015/lib/components/notifications/models/paging-response.model.js +1 -1
- package/esm2015/lib/components/notifications/models/params.model.js +1 -1
- package/esm2015/lib/components/notifications/models/vocabularies.js +1 -1
- package/esm2015/lib/components/notifications/notifications.module.js +1 -1
- package/esm2015/lib/components/notifications/public-api.js +1 -1
- package/esm2015/lib/components/notifications/services/index.js +1 -1
- package/esm2015/lib/components/notifications/services/listener.service.js +1 -1
- package/esm2015/lib/components/notifications/services/notifications.service.js +1 -1
- package/esm2015/lib/components/notifications/services/params.service.js +1 -1
- package/esm2015/lib/components/notifications/services/response.service.js +1 -1
- package/esm2015/lib/components/notifications/services/socket.service.js +1 -1
- package/esm2015/lib/components/notifications/utilities/index.js +1 -1
- package/esm2015/lib/components/notifications/utilities/response.adapter.js +1 -1
- package/esm2015/lib/components/pagination/pagination/pagination.component.js +1 -1
- package/esm2015/lib/components/pagination/pagination.module.js +1 -1
- package/esm2015/lib/components/pdf-tron/directives/index.js +1 -1
- package/esm2015/lib/components/pdf-tron/directives/ndf-tron-extract-text.directive.js +1 -1
- package/esm2015/lib/components/pdf-tron/models/index.js +1 -1
- package/esm2015/lib/components/pdf-tron/models/tron.model.js +1 -1
- package/esm2015/lib/components/pdf-tron/pdf-tron.module.js +1 -1
- package/esm2015/lib/components/pdf-tron/pdftron/pdftron.component.js +2 -1
- package/esm2015/lib/components/pdf-tron/pdftron/pdftron.service.js +1 -1
- package/esm2015/lib/components/pdf-tron/pdftron/silent-pdftron.service.js +2 -1
- package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +2 -2
- package/esm2015/lib/components/permissions/permission.service.js +1 -1
- package/esm2015/lib/components/permissions/permissions/permissions.component.js +1 -1
- package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +1 -1
- package/esm2015/lib/components/permissions/permissions.module.js +1 -1
- package/esm2015/lib/components/reports/chart-panel.js +1 -1
- package/esm2015/lib/components/reports/charts/chart.const.js +1 -1
- package/esm2015/lib/components/reports/charts/chart.token.js +1 -1
- package/esm2015/lib/components/reports/charts/charts.module.js +1 -1
- package/esm2015/lib/components/reports/charts/components/base-chart.component.js +1 -1
- package/esm2015/lib/components/reports/charts/components/chart.component.js +1 -1
- package/esm2015/lib/components/reports/charts/components/data-chart.component.js +1 -1
- package/esm2015/lib/components/reports/charts/components/index.js +1 -1
- package/esm2015/lib/components/reports/charts/defaults/bar.js +1 -1
- package/esm2015/lib/components/reports/charts/defaults/doughnut.js +1 -1
- package/esm2015/lib/components/reports/charts/defaults/index.js +1 -1
- package/esm2015/lib/components/reports/charts/defaults/line.js +1 -1
- package/esm2015/lib/components/reports/charts/defaults/pie.js +1 -1
- package/esm2015/lib/components/reports/charts/index.js +1 -1
- package/esm2015/lib/components/reports/charts/models/index.js +1 -1
- package/esm2015/lib/components/reports/charts/models/options.js +1 -1
- package/esm2015/lib/components/reports/charts/models/plugins-options.js +1 -1
- package/esm2015/lib/components/reports/charts/models/response.js +1 -1
- package/esm2015/lib/components/reports/charts/models/statistic-request-config.js +1 -1
- package/esm2015/lib/components/reports/charts/plugins/data-labels.js +1 -1
- package/esm2015/lib/components/reports/charts/plugins/doughnut-center-text.js +1 -1
- package/esm2015/lib/components/reports/charts/plugins/doughnut-empty-state.js +1 -1
- package/esm2015/lib/components/reports/charts/plugins/index.js +1 -1
- package/esm2015/lib/components/reports/charts/plugins/legend-margin.js +1 -1
- package/esm2015/lib/components/reports/charts/plugins/scrollable-legends.js +1 -1
- package/esm2015/lib/components/reports/charts/public-api.js +1 -1
- package/esm2015/lib/components/reports/charts/services/index.js +1 -1
- package/esm2015/lib/components/reports/charts/services/statistic.service.js +1 -1
- package/esm2015/lib/components/reports/charts/utility/colors.js +1 -1
- package/esm2015/lib/components/reports/charts/utility/common.js +1 -1
- package/esm2015/lib/components/reports/charts/utility/css.js +1 -1
- package/esm2015/lib/components/reports/charts/utility/index.js +1 -1
- package/esm2015/lib/components/reports/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/base/base-chart.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/base/base-custom-report.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/base/base-graph.report.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/base/base-report.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/base/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/charts-components/custom-chart/custom-chart.component.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/charts-components/digit-chart/digit-chart.component.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/charts-components/graph-chart/graph-chart.component.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/charts-components/graph-chart/graph-chart.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/charts-components/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/components/_parts/chart-type-selector/chart-type-selector.component.js +2 -2
- package/esm2015/lib/components/reports/ndf-reports/components/_parts/custom-chart-dialog/custom-chart-dialog.component.js +2 -2
- package/esm2015/lib/components/reports/ndf-reports/components/_parts/graph-dialog/graph-dialog.component.js +2 -2
- package/esm2015/lib/components/reports/ndf-reports/components/_parts/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/components/_parts/report-actions/report-actions.component.js +2 -2
- package/esm2015/lib/components/reports/ndf-reports/components/_parts/time-group-selector/time-group-selector.component.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/components/_parts/timeline-dialog/timeline-dialog.component.js +2 -2
- package/esm2015/lib/components/reports/ndf-reports/components/custom-report/custom-report.component.js +2 -2
- package/esm2015/lib/components/reports/ndf-reports/components/digit-report/digit-report.component.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/components/dynamic-timeline-report/dynamic-timeline-report.component.js +2 -2
- package/esm2015/lib/components/reports/ndf-reports/components/graph-report/graph-report.component.js +2 -2
- package/esm2015/lib/components/reports/ndf-reports/components/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/constants/charts-types.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/constants/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/constants/time-group.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/containers/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/containers/ndf-report/ndf-report.component.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/containers/ndf-reports/ndf-reports.component.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/directives/empty-content-template.directive.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/directives/header-panel-template.directive.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/directives/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/directives/scrollable-div.directive.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/base.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/common.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/custom-definition.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/details.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/dialog-data.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/digit.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/dynamic-line.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/graph-definition.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/ndf-reports.config.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/report-config.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/report-data-source.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/report-response.model.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/models/request.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/ndf-reports.module.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/options/doughnut.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/options/horizontal-bar.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/options/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/options/line.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/options/pie.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/options/vertical-bar.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/pipes/check-condition.pipe.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/public-api.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/base-chart-builder.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/chart-callbacks-register.services.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/chart-data-transformers.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/chart-manager.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/chart-plugins-registry.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/chart-theme.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/custom-reports-registry.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/digit-chart.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/dynamic-timeline-report.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/ndf-reports.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/report-config-mapper.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/report-configuration.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/report-transform.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/reports-data-transformers.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/reports-dialog.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/reports-hooks.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/services/reports-state.service.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/utilities/dataset-colors.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/utilities/index.js +1 -1
- package/esm2015/lib/components/reports/ndf-reports/utilities/reports-table.mapper.js +1 -1
- package/esm2015/lib/components/select/select/select.component.js +1 -1
- package/esm2015/lib/components/select/select.module.js +1 -1
- package/esm2015/lib/components/select-users-by-department/select-users-by-department.module.js +1 -1
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/department-management.service.js +1 -1
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +1 -1
- package/esm2015/lib/components/skeleton/index.js +1 -1
- package/esm2015/lib/components/skeleton/skeleton.component.js +1 -1
- package/esm2015/lib/components/skeleton/skeleton.module.js +1 -1
- package/esm2015/lib/components/skeleton/table-skeleton.component.js +1 -1
- package/esm2015/lib/components/spell-checker-field/spell-checker-field.module.js +1 -1
- package/esm2015/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.js +1 -1
- package/esm2015/lib/components/tables/dynamic-table/directives/empty-state.directive.js +1 -1
- package/esm2015/lib/components/tables/dynamic-table/dynamic-table/dynamic-table.component.js +1 -1
- package/esm2015/lib/components/tables/dynamic-table/dynamic-table.module.js +1 -1
- package/esm2015/lib/components/tables/dynamic-table/index.js +1 -1
- package/esm2015/lib/components/tables/dynamic-table/public-api.js +1 -1
- package/esm2015/lib/components/tables/dynamic-table/services/dynamic-table.service.js +1 -1
- package/esm2015/lib/components/tables/dynamic-table/services/table-hooks.service.js +1 -1
- package/esm2015/lib/components/tables/index.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/components/index.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/components/mode-toggler/mode-toggler.component.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/components/sorting-list/sorting-list.component.js +2 -2
- package/esm2015/lib/components/tables/ndf-table/components/table-columns-toggler/table-columns-toggler.component.js +2 -2
- package/esm2015/lib/components/tables/ndf-table/components/table-export/table-export.component.js +2 -2
- package/esm2015/lib/components/tables/ndf-table/components/text-search/text-search.component.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/constants/index.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/constants/sizes.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/containers/index.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/containers/ndf-table/ndf-table.component.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/directives/actions.directive.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/directives/filter-custom.directive.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/directives/index.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/directives/search.directive.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/index.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/models/index.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/models/payload-types.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/models/search.config.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/models/table-column.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/models/table-config.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/models/table-mode.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/models/table-options.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/models/types.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/ndf-table.module.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/public-api.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/services/index.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/services/ndf-table-configuration.service.js +1 -1
- package/esm2015/lib/components/tables/ndf-table/services/ndf-table.service.js +1 -1
- package/esm2015/lib/components/tables/public-api.js +1 -1
- package/esm2015/lib/components/tables/table/dynamic-column/dynamic-column.component.js +1 -1
- package/esm2015/lib/components/tables/table/dynamic-component.js +1 -1
- package/esm2015/lib/components/tables/table/index.js +1 -1
- package/esm2015/lib/components/tables/table/page-sizes-list/page-sizes-list.component.js +1 -1
- package/esm2015/lib/components/tables/table/public-api.js +1 -1
- package/esm2015/lib/components/tables/table/table/table.component.js +2 -2
- package/esm2015/lib/components/tables/table/table.module.js +1 -1
- package/esm2015/lib/components/toasts/components/notification-toast/notification-toast.component.js +1 -1
- package/esm2015/lib/components/toasts/index.js +1 -1
- package/esm2015/lib/components/toasts/public-api.js +1 -1
- package/esm2015/lib/components/toasts/toasts.module.js +1 -1
- package/esm2015/lib/components/user/user/user.component.js +1 -1
- package/esm2015/lib/components/user/user.module.js +1 -1
- package/esm2015/lib/components/users-card/users-card.component.js +2 -2
- package/esm2015/lib/components/users-card/users-card.module.js +1 -1
- package/esm2015/lib/components/viewer-log/components/viewer-log/viewer-log.component.js +1 -1
- package/esm2015/lib/components/viewer-log/viewer-log.module.js +1 -1
- package/esm2015/lib/components/vocabulary/interfaces/op-type.interface.js +1 -1
- package/esm2015/lib/components/vocabulary/services/vocabulary-api.service.js +1 -1
- package/esm2015/lib/components/vocabulary/translated-vocabulary-select/translated-vocabulary-select.component.js +1 -1
- package/esm2015/lib/components/vocabulary/vocabulary/vocabulary.component.js +1 -1
- package/esm2015/lib/components/vocabulary/vocabulary.module.js +1 -1
- package/esm2015/lib/configuration/app-config.service.js +1 -1
- package/esm2015/lib/configuration/helpers/app-initializer.js +1 -1
- package/esm2015/lib/core/adapters/adapter.service.js +1 -1
- package/esm2015/lib/core/core.module.js +1 -1
- package/esm2015/lib/core/enums/language.enum.js +1 -1
- package/esm2015/lib/core/env/env-manager.js +1 -1
- package/esm2015/lib/core/env/index.js +1 -1
- package/esm2015/lib/core/models/api-response.model.js +1 -1
- package/esm2015/lib/core/models/automation-response.model.js +1 -1
- package/esm2015/lib/core/models/base-response.models.js +1 -1
- package/esm2015/lib/core/models/component.model.js +1 -1
- package/esm2015/lib/core/models/index.js +1 -1
- package/esm2015/lib/core/services/callApi/call-api.service.js +1 -1
- package/esm2015/lib/core/services/column-renderer/column-renderer-registry.service.js +1 -1
- package/esm2015/lib/core/services/column-renderer/index.js +1 -1
- package/esm2015/lib/core/services/extension/action.extensions.js +1 -1
- package/esm2015/lib/core/services/extension/component-register.service.js +1 -1
- package/esm2015/lib/core/services/extension/extenion-utils.js +1 -1
- package/esm2015/lib/core/services/extension/extension-element.js +1 -1
- package/esm2015/lib/core/services/extension/extension-loader.service.js +1 -1
- package/esm2015/lib/core/services/extension/extension.service.js +1 -1
- package/esm2015/lib/core/services/index.js +1 -1
- package/esm2015/lib/core/services/initialization/initialization.service.js +1 -1
- package/esm2015/lib/core/services/localStorag/local-storag.service.js +1 -1
- package/esm2015/lib/core/services/ndf-transform.service.js +1 -1
- package/esm2015/lib/core/services/nuxeo/new-nuxeo-overide.js +1 -1
- package/esm2015/lib/core/services/nuxeo/nuxeo-override.js +1 -1
- package/esm2015/lib/core/services/nuxeo/nuxeo.service.js +1 -1
- package/esm2015/lib/core/services/roles/roles.service.js +1 -1
- package/esm2015/lib/core/services/translation/translate-loader.service.js +1 -1
- package/esm2015/lib/core/services/translation/translation.service.js +1 -1
- package/esm2015/lib/core/services/user/user-preferences.service.js +1 -1
- package/esm2015/lib/core/tokens/index.js +1 -1
- package/esm2015/lib/core/tokens/project.token.js +1 -1
- package/esm2015/lib/core/utilities/moment-date-adapter.js +1 -1
- package/esm2015/lib/core/utilities/utility.service.js +1 -1
- package/esm2015/lib/directive/app-has-role/app-has-role.directive.js +1 -1
- package/esm2015/lib/directive/clickOutSide/click-outside.directive.js +1 -1
- package/esm2015/lib/directive/directive.module.js +1 -1
- package/esm2015/lib/directive/drag-and-drop/drag-and-drop.directive.js +1 -1
- package/esm2015/lib/directive/permissions/evaluators.service.js +1 -1
- package/esm2015/lib/directive/permissions/permissions.directive.js +1 -1
- package/esm2015/lib/directive/rtl/set-dir-rtl.directive.js +1 -1
- package/esm2015/lib/directive/rtl/set-rtl.directive.js +1 -1
- package/esm2015/lib/nuxeo-development-framework.component.js +1 -1
- package/esm2015/lib/nuxeo-development-framework.module.js +1 -1
- package/esm2015/lib/nuxeo-development-framework.service.js +1 -1
- package/esm2015/lib/pipes/file-size.pipe.js +1 -1
- package/esm2015/lib/pipes/hijri-date.pipe.js +1 -1
- package/esm2015/lib/pipes/localized-date.pipe.js +1 -1
- package/esm2015/lib/pipes/multi-value.pipe.js +1 -1
- package/esm2015/lib/pipes/pipes.module.js +1 -1
- package/esm2015/lib/pipes/secure-html.pipe.js +1 -1
- package/esm2015/lib/pipes/secure.pipe.js +1 -1
- package/esm2015/lib/pipes/time-ago.pipe.js +1 -1
- package/esm2015/lib/shared/components/base/base-column.component.js +1 -1
- package/esm2015/lib/shared/components/base/base-dialog.component.js +1 -1
- package/esm2015/lib/shared/components/base/base-selector.component.js +1 -1
- package/esm2015/lib/shared/components/base/base.component.js +1 -1
- package/esm2015/lib/shared/components/base/destroy.subject.js +1 -1
- package/esm2015/lib/shared/components/base/index.js +1 -1
- package/esm2015/lib/shared/components/button/button.component.js +1 -1
- package/esm2015/lib/shared/components/general-notification-popup/general-notification-popup.component.js +1 -1
- package/esm2015/lib/shared/components/index.js +1 -1
- package/esm2015/lib/shared/components/item-list/item-list.component.js +2 -2
- package/esm2015/lib/shared/components/no-data/no-data.component.js +1 -1
- package/esm2015/lib/shared/components/nuxeo-dialog/confirmation/ndf-confirmation-dialog.component.js +1 -1
- package/esm2015/lib/shared/components/nuxeo-dialog/index.js +1 -1
- package/esm2015/lib/shared/components/nuxeo-dialog/models/confirm-options.model.js +1 -1
- package/esm2015/lib/shared/components/nuxeo-dialog/models/dialog-option.model.js +1 -1
- package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.js +1 -1
- package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +2 -2
- package/esm2015/lib/shared/components/nuxeo-dialog/services/nuxeo-dialog.service.js +1 -1
- package/esm2015/lib/shared/components/read-more/read-more.component.js +1 -1
- package/esm2015/lib/shared/components/search-autocomplete/search-autocomplete.component.js +1 -1
- package/esm2015/lib/shared/components/spinner/spinner.component.js +1 -1
- package/esm2015/lib/shared/components/user-card/user-card.component.js +1 -1
- package/esm2015/lib/shared/constants/editor-config-type.js +1 -1
- package/esm2015/lib/shared/constants/index.js +1 -1
- package/esm2015/lib/shared/directives/copy-to-clipboard.directive.js +1 -1
- package/esm2015/lib/shared/directives/element-height.directive.js +1 -1
- package/esm2015/lib/shared/directives/fluid-height.directive.js +1 -1
- package/esm2015/lib/shared/directives/index.js +1 -1
- package/esm2015/lib/shared/evaluator/evaluator.js +1 -1
- package/esm2015/lib/shared/evaluator/index.js +1 -1
- package/esm2015/lib/shared/evaluator/types.js +1 -1
- package/esm2015/lib/shared/index.js +1 -1
- package/esm2015/lib/shared/libraryShared.module.js +1 -1
- package/esm2015/lib/shared/models/index.js +1 -1
- package/esm2015/lib/shared/models/mapper/index.js +1 -1
- package/esm2015/lib/shared/models/mapper/nuxeo-mapper.js +1 -1
- package/esm2015/lib/shared/models/ndf-request.model.js +1 -1
- package/esm2015/lib/shared/models/nuxeo-response.model.js +1 -1
- package/esm2015/lib/shared/models/task.model.js +1 -1
- package/esm2015/lib/shared/models/type-helpers.js +1 -1
- package/esm2015/lib/shared/services/base/base-editor-config.service.js +1 -1
- package/esm2015/lib/shared/services/base/base.service.js +1 -1
- package/esm2015/lib/shared/services/base/cache-base.service.js +1 -1
- package/esm2015/lib/shared/services/base/config/default-ttl-config.js +1 -1
- package/esm2015/lib/shared/services/base/config/index.js +1 -1
- package/esm2015/lib/shared/services/base/constants/default-cache-options.js +1 -1
- package/esm2015/lib/shared/services/base/constants/index.js +1 -1
- package/esm2015/lib/shared/services/base/http-base.service.js +1 -1
- package/esm2015/lib/shared/services/base/index.js +1 -1
- package/esm2015/lib/shared/services/base/models/cache-info-model.js +1 -1
- package/esm2015/lib/shared/services/base/models/http-options.model.js +1 -1
- package/esm2015/lib/shared/services/base/models/index.js +1 -1
- package/esm2015/lib/shared/services/base/models/operation-options.model.js +1 -1
- package/esm2015/lib/shared/services/base/models/query-options.model.js +1 -1
- package/esm2015/lib/shared/services/base/models/request-options.model.js +1 -1
- package/esm2015/lib/shared/services/base/override-token.service.js +1 -1
- package/esm2015/lib/shared/services/index.js +1 -1
- package/esm2015/lib/shared-services/apis-errors-messages.service.js +1 -1
- package/esm2015/lib/shared-services/dialog-mangment.service.js +1 -1
- package/esm2015/lib/shared-services/dynamic-form.service.js +1 -1
- package/esm2015/lib/shared-services/file-manager.adapter.js +1 -1
- package/esm2015/lib/shared-services/file-manager.service.js +1 -1
- package/esm2015/lib/shared-services/global-admin.service.js +1 -1
- package/esm2015/lib/shared-services/global-pdftron.service.js +2 -1
- package/esm2015/lib/shared-services/mainfolder.service.js +1 -1
- package/esm2015/lib/shared-services/publishing-document.service.js +1 -1
- package/esm2015/lib/shared-services/recently-viewed.service.js +1 -1
- package/esm2015/lib/shared-services/shared-docs.service.js +1 -1
- package/esm2015/lib/shared-services/shared-services.module.js +1 -1
- package/esm2015/lib/shared-services/upload-file.service.js +1 -1
- package/esm2015/lib/shared-services/upload-managment.service.js +1 -1
- package/esm2015/lib/shared-services/user.service.js +1 -1
- package/esm2015/nuxeo-development-framework.js +1 -1
- package/esm2015/public-api.js +1 -1
- package/fesm2015/nuxeo-development-framework.js +60 -57
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/diagrams/components/custom-connection.component.d.ts +1 -1
- package/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.d.ts +1 -1
- package/lib/components/reports/charts/components/base-chart.component.d.ts +1 -1
- package/lib/components/reports/ndf-reports/base/base-chart.d.ts +1 -1
- package/lib/components/reports/ndf-reports/components/dynamic-timeline-report/dynamic-timeline-report.component.d.ts +17 -1
- package/lib/components/reports/ndf-reports/components/graph-report/graph-report.component.d.ts +1 -1
- package/lib/components/reports/ndf-reports/services/base-chart-builder.service.d.ts +14 -14
- package/lib/components/reports/ndf-reports/services/ndf-reports.service.d.ts +1 -1
- package/lib/components/tables/ndf-table/components/table-export/table-export.component.d.ts +1 -1
- package/package.json +1 -1
package/esm2015/lib/components/documents/components/document-scan/document-scan.component.js
CHANGED
|
@@ -975,4 +975,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
975
975
|
}], file: [{
|
|
976
976
|
type: Output
|
|
977
977
|
}] } });
|
|
978
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9jb21wb25lbnRzL2RvY3VtZW50LXNjYW4vZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9jb21wb25lbnRzL2RvY3VtZW50LXNjYW4vZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFZLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQUUsTUFBTSxFQUNwQixLQUFLLEVBRUwsTUFBTSxFQUNOLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLFNBQVMsTUFBTSxLQUFLLENBQUM7Ozs7Ozs7QUFLNUI7Ozs7Ozs7Ozs7Ozs7R0FhRztBQVFILE1BQU0sT0FBTyxhQUFhO0lBMEJ4QixZQUNTLFNBQTJCLEVBQzNCLGdCQUFrQyxFQUNsQyxRQUFrQixFQUNsQixtQkFBd0MsRUFDaEIsV0FBVyxFQUNYLFFBQWdCO1FBTHhDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ1gsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQTVCeEMsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQUNwQixrQkFBYSxHQUFHLEtB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SUFDbEMsQ0FBQztJQUVELFVBQVU7UUFDUixNQUFNLGlCQUFpQixHQUFRLFFBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEUsaUJBQWlCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNsQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBRWxDLE1BQU0sZ0JBQWdCLEdBQVEsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RSxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQTBDRCw0QkFBNEI7UUFDMUIsT0FBTztJQUNULENBQUM7OzJHQW5sQ1UsYUFBYSw2SUErQmQsYUFBYSxhQUNiLGFBQWE7K0ZBaENaLGFBQWEsNk5DckMxQiw4elJBZ0xNOzRGRDNJTyxhQUFhO2tCQVB6QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFdBQVcsRUFBRSxnQ0FBZ0M7b0JBQzdDLFNBQVMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO29CQUM3QyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO29CQUMxQixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7OzBCQWdDSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUNwQixNQUFNOzJCQUFDLGFBQWE7NENBNUJkLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHTixJQUFJO3NCQURILE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBfQkFTRV9IUkVGLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLCBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCBEeW5hbXNvZnQgZnJvbSAnZHd0JztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERvY3VtZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb2N1bWVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IERvY3VtZW50U2NhblNlcnZpY2UgfSBmcm9tICcuL2RvY3VtZW50LXNjYW4uc2VydmljZSc7XHJcblxyXG4vKipcclxuICogRG9jdW1lbnQgU2NhbiBpcyBhIHJldXNhYmxlIG51eGVvIEFQSSAmIFNjYW5uZXIgaW50ZWdyYXRlZCBjb21wb25lbnQsXHJcbiAqIHRoYXQgdXRpbGl6ZXMgdGhlIHNjYW5uZXIgdG8gY3JlYXRlIGFuZCB1cGxvYWQgUERGIGZpbGUgYXMgYSBiYXRjaCwgdGhlbiBwcm92aWRlXHJcbiAqIHRoYXQgYmF0Y2ggZm9yIGNvbnN1bXB0aW9uXHJcbiAqXHJcbiAqIEB0aXRsZVxyXG4gKiBEb2N1bWVudCBTY2FuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIDxhcHAtZG9jdW1lbnQtc2NhblxyXG4gKiAgIChmaWxlKT1cIm9uU3VjY2VzcygkZXZlbnQpXCJcclxuICogPjwvYXBwLWRvY3VtZW50LXNjYW4+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kb2N1bWVudC1zY2FuJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHsgY2xhc3M6ICdzY2FubmVyJyB9LFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjYW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIHVwbG9hZGVkRmlsZTtcclxuICBvbk1pbmltaXppbmdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSB1c2VTdG9yZWRGaWxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGlkZVVwbG9hZEJ1dHRvbiA9IGZhbHNlO1xyXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBiYXRjaCBpcyB1cGxvYWRlZCAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIGZpbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBEV09iamVjdDtcclxuICBzZWxlY3RTb3VyY2VzOiBIVE1MU2VsZWN0RWxlbWVudDtcclxuICBEV1RTb3VyY2VDb3VudCA9IDA7XHJcbiAgZmlsZW5hbWUgPSAnJztcclxuICBjb250YWluZXJJZCA9ICdkd3Rjb250cm9sQ29udGFpbmVyJztcclxuICBiV0FTTSA9IER5bmFtc29mdC5MaWIuZW52LmJNb2JpbGUgfHwgRHluYW1zb2Z0LkRXVC5Vc2VMb2NhbFNlcnZpY2U7XHJcbiAgX2lMZWZ0O1xyXG4gIF9pVG9wO1xyXG4gIF9pUmlnaHQ7XHJcbiAgX2lCb3R0b207XHJcbiAgX3N0clRlbXBTdHIgPSAnJztcclxuICByZSA9IC9eXFxkKyQvO1xyXG4gIHN0cnJlID0gL15bXFxzXFx3XSskLztcclxuICByZWZsb2F0ID0gL15cXGQrXFwuKlxcZCokL2k7XHJcbiAgaW5uZXJIVE1MOiBzdHJpbmc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRvY3VtZW50c1NlcnZpY2U6IERvY3VtZW50c1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHVibGljIERvY3VtZW50U2NhblNlcnZpY2U6IERvY3VtZW50U2NhblNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQsXHJcbiAgICBASW5qZWN0KEFQUF9CQVNFX0hSRUYpIHByaXZhdGUgYmFzZUhyZWY6IHN0cmluZ1xyXG4gICkgeyB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBEeW5hbXNvZnQuRFdULlJlc291cmNlc1BhdGggPSB0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvZHd0LXJlc291cmNlcyc7XHJcbiAgICAvLy9cclxuICAgIER5bmFtc29mdC5EV1QuQXV0b0xvYWQgPSB0cnVlO1xyXG4gICAgLy8vXHJcbiAgICAvLyBjb25zdCB3aWR0aCA9IHdpbmRvdy5vdXRlcldpZHRoICogMC4zO1xyXG4gICAgLy8gY29uc3QgaGVpZ2h0ID0gd2luZG93Lm91dGVySGVpZ2h0ICogMC4zO1xyXG4gICAgRHluYW1zb2Z0LkRXVC5Db250YWluZXJzID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgV2ViVHdhaW5JZDogJ0RXVE9iamVjdCcsXHJcbiAgICAgICAgQ29udGFpbmVySWQ6ICdkd3Rjb250cm9sQ29udGFpbmVyJyxcclxuICAgICAgICBXaWR0aDogJzEwMCUnLFxyXG4gICAgICAgIEhlaWdodDogJzEwMCUnXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgRHluYW1zb2Z0LkRXVC5Qcm9kdWN0S2V5ID0gdGhpcy5lbnZpcm9ubWVudC5keW5hbXNvZnRQcm9kdWN0S2V5O1xyXG4gICAgLy8gRHluYW1zb2Z0LkRXVC5UcmlhbCA9IGZhbHNlO1xyXG4gICAgLy8gRHluYW1zb2Z0LkRXVC5EZWJ1ZyA9IGZhbHNlOyAvLyBvbmx5IGZvciBkZWJ1Z2dlciBvdXRwdXRcclxuXHJcbiAgICAvLy9cclxuICAgIER5bmFtc29mdC5EV1QuSWZBZGRNRDVJblVwbG9hZEhlYWRlciA9IGZhbHNlO1xyXG5cclxuICAgIC8vL1xyXG4gICAgRHluYW1zb2Z0LkRXVC5JZkNvbmZpbmVNYXNrV2l0aGluVGhlVmlld2VyID0gZmFsc2U7XHJcbiAgICBEeW5hbXNvZnQuTVNHID0ge1xyXG4gICAgICBDb252ZXJ0aW5nVG9CYXNlNjQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ3NjYW5uZXIuQ29udmVydGluZ1RvQmFzZTY0J1xyXG4gICAgICApLFxyXG4gICAgICBDb252ZXJ0aW5nVG9CbG9iOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICdzY2FubmVyLkNvbnZlcnRpbmdUb0Jsb2InXHJcbiAgICAgICksXHJcbiAgICAgIERvd25sb2FkaW5nOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLkRvd25sb2FkaW5nJyksXHJcbiAgICAgIEVuY29kaW5nOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLkVuY29kaW5nJyksXHJcbiAgICAgIEVycl9Ccm93c2VyTm90U3VwcG9ydFdhc206IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ3NjYW5uZXIuRXJyX0Jyb3dzZXJOb3RTdXBwb3J0V2FzbSdcclxuICAgICAgKSxcclxuICAgICAgSW5pdF9BbGxKc0xvYWRlZDogRHluYW1zb2Z0Lk1TRy5Jbml0X0FsbEpzTG9hZGVkLFxyXG4gICAgICBJbml0X0NoZWNrRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfQ2hlY2tEV1QsXHJcbiAgICAgIEluaXRfQ2hlY2tEV1RWZXJzaW9uOiBEeW5hbXNvZnQuTVNHLkluaXRfQ2hlY2tEV1RWZXJzaW9uLFxyXG4gICAgICBJbml0X0NoZWNraW5nTGljZW5zZTogRHluYW1zb2Z0Lk1TRy5Jbml0X0NoZWNraW5nTGljZW5zZSxcclxuICAgICAgSW5pdF9Db21waWxpbmdXYXNtOiBEeW5hbXNvZnQuTVNHLkluaXRfQ29tcGlsaW5nV2FzbSxcclxuICAgICAgSW5pdF9Db25maWd1cmluZ0RXVDogRHluYW1zb2Z0Lk1TRy5Jbml0X0NvbmZpZ3VyaW5nRFdULFxyXG4gICAgICBJbml0X0NyZWF0aW5nRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfQ3JlYXRpbmdEV1QsXHJcbiAgICAgIEluaXRfRG93bmxvYWRpbmdXYXNtOiBEeW5hbXNvZnQuTVNHLkluaXRfRG93bmxvYWRpbmdXYXNtLFxyXG4gICAgICBJbml0X0ZpcmVCZWZvcmVJbml0RXZ0OiBEeW5hbXNvZnQuTVNHLkluaXRfRmlyZUJlZm9yZUluaXRFdnQsXHJcbiAgICAgIEluaXRfR2V0TGljZW5zZUluZm9Gb3JEV1Q6IER5bmFtc29mdC5NU0cuSW5pdF9HZXRMaWNlbnNlSW5mb0ZvckRXVCxcclxuICAgICAgSW5pdF9Jbml0QWN0aXZlWDogRHluYW1zb2Z0Lk1TRy5Jbml0X0luaXRBY3RpdmVYLFxyXG4gICAgICBJbml0X0luaXREeW5hbXNvZnRTZXJ2aWNlOiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdER5bmFtc29mdFNlcnZpY2UsXHJcbiAgICAgIEluaXRfSW5pdEg1OiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdEg1LFxyXG4gICAgICBJbml0X0luaXRXYXNtOiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdFdhc20sXHJcbiAgICAgIEluaXRfTG9hZGluZ1ZpZXdlckpzOiBEeW5hbXNvZnQuTVNHLkluaXRfTG9hZGluZ1ZpZXdlckpzLFxyXG4gICAgICBJbml0X0xvb2tpbmdMaWNlbnNlOiBEeW5hbXNvZnQuTVNHLkluaXRfTG9va2luZ0xpY2Vuc2UsXHJcbiAgICAgIEluaXRfU2V0TGljZW5zZUZvckRXVDogRHluYW1zb2Z0Lk1TRy5Jbml0X1NldExpY2Vuc2VGb3JEV1QsXHJcbiAgICAgIExvYWRpbmc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuTG9hZGluZycpLFxyXG4gICAgICBMb2FkaW5nUGRmOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLkxvYWRpbmdQZGYnKSxcclxuICAgICAgTG9hZGluZ1RpZmY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuTG9hZGluZ1RpZmYnKSxcclxuICAgICAgU2F2aW5nUGRmOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLlNhdmluZ1BkZicpLFxyXG4gICAgICBTYXZpbmdUaWZmOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLlNhdmluZ1RpZmYnKSxcclxuICAgICAgVXBsb2FkaW5nOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLlVwbG9hZGluZycpXHJcbiAgICB9O1xyXG4gICAgRHluYW1zb2Z0LkRXVC5DdXN0b21pemFibGVEaXNwbGF5SW5mbyA9IHtcclxuICAgICAgZXJyb3JNZXNzYWdlczogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5lcnJvck1lc3NhZ2VzJyksXHJcblxyXG4gICAgICAvLyBsYXVuY2hcclxuICAgICAgZ2VuZXJhbE1lc3NhZ2VzOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLmdlbmVyYWxNZXNzYWdlcycpLFxyXG5cclxuICAgICAgY3VzdG9tUHJvZ3Jlc3NUZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICdzY2FubmVyLmN1c3RvbVByb2dyZXNzVGV4dCdcclxuICAgICAgKSxcclxuXHJcbiAgICAgIC8vIGltYWdlIGVkaXRvclxyXG4gICAgICBidXR0b25zOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLmJ1dHRvbnMnKSxcclxuXHJcbiAgICAgIGRpYWxvZ1RleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuZGlhbG9nVGV4dCcpXHJcbiAgICB9O1xyXG5cclxuICAgIER5bmFtc29mdC5EV1QuT25XZWJUd2FpblJlYWR5ID0gKCk6IGFueSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZW9ubG9hZCgpO1xyXG4gICAgICB0aGlzLkR5bmFtc29mdF9PblJlYWR5KCk7XHJcbiAgICB9O1xyXG4gICAgRHluYW1zb2Z0LkRXVC5Mb2FkKCk7XHJcblxyXG4gICAgdGhpcy5vbk1pbmltaXppbmdTdWJzY3JpcHRpb24gPSB0aGlzLkRvY3VtZW50U2NhblNlcnZpY2Uub25NaW5pbWl6aW5nLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLmNvbnZlcnRUb0Jsb2JGb3JTYXZpbmcoKTtcclxuICAgIH0pXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMucGFnZW9ubG9hZCgpO1xyXG4gICAgaWYgKHRoaXMudXNlU3RvcmVkRmlsZSkge1xyXG4gICAgICBpZiAodGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnN0b3JlZEZpbGUpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0U3RvcmVkRmlsZVRvU2Nhbm5lcih0aGlzLkRvY3VtZW50U2NhblNlcnZpY2Uuc3RvcmVkRmlsZSk7XHJcbiAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBzZXRTdG9yZWRGaWxlVG9TY2FubmVyKHJlc3VsdCkge1xyXG4gICAgdGhpcy5EV09iamVjdC5Mb2FkSW1hZ2VGcm9tQmluYXJ5KFxyXG4gICAgICByZXN1bHQsXHJcbiAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnc3VjY2VzcycpO1xyXG4gICAgICB9LFxyXG4gICAgICBmdW5jdGlvbiAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHBhZ2VvbmxvYWQoKSB7XHJcbiAgICB0aGlzLkhpZGVMb2FkSW1hZ2VGb3JMaW51eCgpO1xyXG4gICAgY29uc3QgdHdhaW5zb3VyY2U6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKTtcclxuICAgIGlmICh0d2FpbnNvdXJjZSkge1xyXG4gICAgICB0d2FpbnNvdXJjZS5vcHRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgIHR3YWluc291cmNlLm9wdGlvbnMuYWRkKFxyXG4gICAgICAgIG5ldyBPcHRpb24odGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5wbGVhc2VXYWl0JyksICcwJylcclxuICAgICAgKTtcclxuICAgICAgdHdhaW5zb3VyY2Uub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0aWF0ZUlucHV0cygpO1xyXG4gIH1cclxuXHJcbiAgSGlkZUxvYWRJbWFnZUZvckxpbnV4KCkge1xyXG4gICAgY29uc3QgbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaUxvYWRJbWFnZScpO1xyXG4gICAgaWYgKG8pIHtcclxuICAgICAgaWYgKER5bmFtc29mdC5MaWIuZW52LmJMaW51eCkgeyBvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IH1cclxuICAgICAgZWxzZSB7IG8uc3R5bGUuZGlzcGxheSA9ICcnOyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWF0ZUlucHV0cygpIHtcclxuICAgIGNvbnN0IGFsbGlucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxpbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGFsbGlucHV0c1tpXS50eXBlID09PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgYWxsaW5wdXRzW2ldLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmIChhbGxpbnB1dHNbaV0udHlwZSA9PT0gJ3RleHQnKSB7XHJcbiAgICAgICAgYWxsaW5wdXRzW2ldLnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgaWYgKER5bmFtc29mdC5MaWIuZW52LmJJRSA9PT0gdHJ1ZSAmJiBEeW5hbXNvZnQuTGliLmVudi5iV2luNjQgPT09IHRydWUpIHtcclxuICAgICAgbGV0IG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlc291cmNlNjRiaXQnKTtcclxuICAgICAgaWYgKG8pIHsgby5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7IH1cclxuXHJcbiAgICAgIG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlc291cmNlMzJiaXQnKTtcclxuICAgICAgaWYgKG8pIHsgby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0RGxsRm9yQ2hhbmdlSW1hZ2VTaXplKCkge1xyXG4gICAgY29uc3QgdkludGVycG9sYXRpb25NZXRob2Q6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAnSW50ZXJwb2xhdGlvbk1ldGhvZCdcclxuICAgICk7XHJcbiAgICB2SW50ZXJwb2xhdGlvbk1ldGhvZC5vcHRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICB2SW50ZXJwb2xhdGlvbk1ldGhvZC5vcHRpb25zLmFkZChuZXcgT3B0aW9uKCdOZWFyZXN0TmVpZ2hib3InLCAnMScpKTtcclxuICAgIHZJbnRlcnBvbGF0aW9uTWV0aG9kLm9wdGlvbnMuYWRkKG5ldyBPcHRpb24oJ0JpbGluZWFyJywgJzInKSk7XHJcbiAgICB2SW50ZXJwb2xhdGlvbk1ldGhvZC5vcHRpb25zLmFkZChuZXcgT3B0aW9uKCdCaWN1YmljJywgJzMnKSk7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0VmFsdWUoKSB7XHJcbiAgICBjb25zdCB2R3JheTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0dyYXknKTtcclxuICAgIGlmICh2R3JheSkgeyB2R3JheS5jaGVja2VkID0gdHJ1ZTsgfVxyXG5cclxuICAgIGNvbnN0IHZhckltZ1R5cGVwbmcyOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nVHlwZXBuZzInKTtcclxuICAgIGlmICh2YXJJbWdUeXBlcG5nMikgeyB2YXJJbWdUeXBlcG5nMi5jaGVja2VkID0gdHJ1ZTsgfVxyXG4gICAgY29uc3QgdmFySW1nVHlwZXBuZzogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ1R5cGVwbmcnKTtcclxuICAgIGlmICh2YXJJbWdUeXBlcG5nKSB7IHZhckltZ1R5cGVwbmcuY2hlY2tlZCA9IHRydWU7IH1cclxuXHJcbiAgICBjb25zdCBfc3RyRGVmYXVsdFNhdmVJbWFnZU5hbWUgPSAnV2ViVFdBSU5JbWFnZSc7XHJcbiAgICBjb25zdCBfdHh0RmlsZU5hbWVmb3JTYXZlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ3R4dF9maWxlTmFtZWZvclNhdmUnXHJcbiAgICApO1xyXG4gICAgaWYgKF90eHRGaWxlTmFtZWZvclNhdmUpIHtcclxuICAgICAgX3R4dEZpbGVOYW1lZm9yU2F2ZS52YWx1ZSA9IF9zdHJEZWZhdWx0U2F2ZUltYWdlTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBfdHh0RmlsZU5hbWU6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eHRfZmlsZU5hbWUnKTtcclxuICAgIGlmIChfdHh0RmlsZU5hbWUpIHsgX3R4dEZpbGVOYW1lLnZhbHVlID0gX3N0ckRlZmF1bHRTYXZlSW1hZ2VOYW1lOyB9XHJcblxyXG4gICAgY29uc3QgX2Noa011bHRpUGFnZVRJRkZfc2F2ZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICdNdWx0aVBhZ2VUSUZGX3NhdmUnXHJcbiAgICApO1xyXG4gICAgaWYgKF9jaGtNdWx0aVBhZ2VUSUZGX3NhdmUpIHsgX2Noa011bHRpUGFnZVRJRkZfc2F2ZS5kaXNhYmxlZCA9IHRydWU7IH1cclxuICAgIGNvbnN0IF9jaGtNdWx0aVBhZ2VQREZfc2F2ZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICdNdWx0aVBhZ2VQREZfc2F2ZSdcclxuICAgICk7XHJcbiAgICBpZiAoX2Noa011bHRpUGFnZVBERl9zYXZlKSB7IF9jaGtNdWx0aVBhZ2VQREZfc2F2ZS5kaXNhYmxlZCA9IHRydWU7IH1cclxuICAgIGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRicpO1xyXG4gICAgaWYgKF9jaGtNdWx0aVBhZ2VUSUZGKSB7IF9jaGtNdWx0aVBhZ2VUSUZGLmRpc2FibGVkID0gdHJ1ZTsgfVxyXG4gICAgY29uc3QgX2Noa011bHRpUGFnZVBERjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVBERicpO1xyXG4gICAgaWYgKF9jaGtNdWx0aVBhZ2VQREYpIHsgX2Noa011bHRpUGFnZVBERi5kaXNhYmxlZCA9IHRydWU7IH1cclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIHRoZSBjb250cm9sIGlzIGZ1bGx5IGxvYWRlZC5cclxuICBEeW5hbXNvZnRfT25SZWFkeSgpIHtcclxuICAgIGNvbnN0IGxpTm9TY2FubmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BOb1NjYW5uZXInKTtcclxuICAgIC8vIElmIHRoZSBFcnJvckNvZGUgaXMgMCwgaXQgbWVhbnMgZXZlcnl0aGluZyBpcyBmaW5lIGZvciB0aGUgY29udHJvbC4gSXQgaXMgZnVsbHkgbG9hZGVkLlxyXG4gICAgdGhpcy5EV09iamVjdCA9IER5bmFtc29mdC5EV1QuR2V0V2ViVHdhaW4oJ2R3dGNvbnRyb2xDb250YWluZXInKTtcclxuICAgIGlmICh0aGlzLkRXT2JqZWN0KSB7XHJcbiAgICAgIGlmICh0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuTG9nTGV2ZWwgPSAwO1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuSWZBbGxvd0xvY2FsQ2FjaGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuSW1hZ2VDYXB0dXJlRHJpdmVyVHlwZSA9IDQ7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KFxyXG4gICAgICAgICAgJ09uVG9wSW1hZ2VJblRoZVZpZXdDaGFuZ2VkJyxcclxuICAgICAgICAgIHRoaXMuRHluYW1zb2Z0X09uVG9wSW1hZ2VJblRoZVZpZXdDaGFuZ2VkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoXHJcbiAgICAgICAgICAnT25Nb3VzZUNsaWNrJyxcclxuICAgICAgICAgIHRoaXMuRHluYW1zb2Z0X09uTW91c2VDbGlja1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCB0d2FpbnNvdXJjZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdXJjZScpO1xyXG4gICAgICAgIGlmICghdHdhaW5zb3VyY2UpIHtcclxuICAgICAgICAgIHR3YWluc291cmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dlYmNhbXNvdXJjZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdkNvdW50ID0gdGhpcy5EV09iamVjdC5Tb3VyY2VDb3VudDtcclxuICAgICAgICB0aGlzLkRXVFNvdXJjZUNvdW50ID0gdkNvdW50O1xyXG5cclxuICAgICAgICBpZiAodHdhaW5zb3VyY2UpIHtcclxuICAgICAgICAgIHR3YWluc291cmNlLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdkNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgdHdhaW5zb3VyY2Uub3B0aW9ucy5hZGQoXHJcbiAgICAgICAgICAgICAgbmV3IE9wdGlvbih0aGlzLkRXT2JqZWN0LkdldFNvdXJjZU5hbWVJdGVtcyhpKSwgaS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgc291cmNlIGxpc3QgbmVlZCB0byBiZSBkaXNwbGF5ZWQsIGZpbGwgaW4gdGhlIHNvdXJjZSBpdGVtcy5cclxuICAgICAgICBpZiAodkNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAobGlOb1NjYW5uZXIpIHtcclxuICAgICAgICAgICAgaWYgKER5bmFtc29mdC5MaWIuZW52LmJXaW4pIHtcclxuICAgICAgICAgICAgICBsaU5vU2Nhbm5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICBsaU5vU2Nhbm5lci5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICAgICAgfSBlbHNlIHsgbGlOb1NjYW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZDb3VudCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc291cmNlX29uY2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYldpbikgeyB0aGlzLkRXT2JqZWN0Lk1vdXNlU2hhcGUgPSBmYWxzZTsgfVxyXG5cclxuICAgICAgICBjb25zdCBidG5TY2FuOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuU2NhbicpO1xyXG4gICAgICAgIGlmIChidG5TY2FuKSB7XHJcbiAgICAgICAgICBpZiAodkNvdW50ID09PSAwKSB7IGJ0blNjYW4uZGlzYWJsZWQgPSB0cnVlOyB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYnRuU2Nhbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFEeW5hbXNvZnQuTGliLmVudi5iV2luICYmIHZDb3VudCA+IDApIHtcclxuICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluaXREbGxGb3JDaGFuZ2VJbWFnZVNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5faUxlZnQgPSAwO1xyXG4gICAgICAgIHRoaXMuX2lUb3AgPSAwO1xyXG4gICAgICAgIHRoaXMuX2lSaWdodCA9IDA7XHJcbiAgICAgICAgdGhpcy5faUJvdHRvbSA9IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jdW1lbnQubGlua3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChkb2N1bWVudC5saW5rc1tpXS5jbGFzc05hbWUgPT09ICdTaG93dGJsTG9hZEltYWdlJykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5saW5rc1tpXS5vbmNsaWNrID0gdGhpcy5zaG93dGJsTG9hZEltYWdlX29uY2xpY2s7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQubGlua3NbaV0uY2xhc3NOYW1lID09PSAnQ2xvc2V0YmxMb2FkSW1hZ2UnKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmxpbmtzW2ldLm9uY2xpY2sgPSB0aGlzLmNsb3NldGJsTG9hZEltYWdlX29uY2xpY2s7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2Q291bnQgPT09IDApIHtcclxuICAgICAgICAgIGlmIChEeW5hbXNvZnQuTGliLmVudi5iV2luKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYU5vU2Nhbm5lcicpICYmXHJcbiAgICAgICAgICAgICAgd2luZG93WydiRFdUT25saW5lRGVtbyddXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2X1NjYW5JbWFnZScpLnN0eWxlLmRpc3BsYXkgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3d0YmxMb2FkSW1hZ2Vfb25jbGljaygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Jlc29sdXRpb24nKSkge1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBkaXZCbGFuayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZCbGFuaycpO1xyXG4gICAgICAgICAgaWYgKGRpdkJsYW5rKSB7IGRpdkJsYW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICAgICAgICBjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoIXVhLmluZGV4T2YoJ21zaWUgNi4wJykpIHtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudChcclxuICAgICAgICAgICdPblBvc3RUcmFuc2ZlcicsXHJcbiAgICAgICAgICB0aGlzLkR5bmFtc29mdF9PblBvc3RUcmFuc2ZlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KFxyXG4gICAgICAgICAgJ09uUG9zdExvYWQnLFxyXG4gICAgICAgICAgdGhpcy5EeW5hbXNvZnRfT25Qb3N0TG9hZGZ1bmN0aW9uXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoXHJcbiAgICAgICAgICAnT25Qb3N0QWxsVHJhbnNmZXJzJyxcclxuICAgICAgICAgIHRoaXMuRHluYW1zb2Z0X09uUG9zdEFsbFRyYW5zZmVyc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KFxyXG4gICAgICAgICAgJ09uSW1hZ2VBcmVhU2VsZWN0ZWQnLFxyXG4gICAgICAgICAgdGhpcy5EeW5hbXNvZnRfT25JbWFnZUFyZWFTZWxlY3RlZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KFxyXG4gICAgICAgICAgJ09uSW1hZ2VBcmVhRGVTZWxlY3RlZCcsXHJcbiAgICAgICAgICB0aGlzLkR5bmFtc29mdF9PbkltYWdlQXJlYURlc2VsZWN0ZWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudChcclxuICAgICAgICAgICdPbkdldEZpbGVQYXRoJyxcclxuICAgICAgICAgIHRoaXMuRHluYW1zb2Z0X09uR2V0RmlsZVBhdGhcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93dGJsTG9hZEltYWdlX29uY2xpY2soKSB7XHJcbiAgICBzd2l0Y2ggKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YmxMb2FkSW1hZ2UnKS5zdHlsZS52aXNpYmlsaXR5KSB7XHJcbiAgICAgIGNhc2UgJ2hpZGRlbic6XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RibExvYWRJbWFnZScpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Jlc29sdXRpb24nKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Zpc2libGUnOlxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YmxMb2FkSW1hZ2UnKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Jlc29sdXRpb24nKS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwTm9TY2FubmVyJykpIHtcclxuICAgICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0YmxMb2FkSW1hZ2VcIikuc3R5bGUudG9wID0gZHNfZ2V0dG9wKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicE5vU2Nhbm5lclwiKSkgKyBwTm9TY2FubmVyLm9mZnNldEhlaWdodCArIFwicHhcIjtcclxuICAgICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0YmxMb2FkSW1hZ2VcIikuc3R5bGUubGVmdCA9IGRzX2dldGxlZnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwTm9TY2FubmVyXCIpKSArIDAgKyBcInB4XCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbG9zZXRibExvYWRJbWFnZV9vbmNsaWNrKCkge1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RibExvYWRJbWFnZScpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKiogVXNlZCBhIGxvdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgdXBkYXRlUGFnZUluZm8oKSB7XHJcbiAgICBjb25zdCB0b3RhbEltYWdlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfVG90YWxJbWFnZScpO1xyXG4gICAgY29uc3QgY3VycmVudEltYWdlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfQ3VycmVudEltYWdlJyk7XHJcbiAgICBpZiAodG90YWxJbWFnZSkgeyB0b3RhbEltYWdlLnZhbHVlID0gdGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXI7IH1cclxuICAgIGlmIChjdXJyZW50SW1hZ2UpIHtcclxuICAgICAgY3VycmVudEltYWdlLnZhbHVlID0gdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyICsgMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGVuZE1lc3NhZ2Uoc3RyTWVzc2FnZSkge1xyXG4gICAgdGhpcy5fc3RyVGVtcFN0ciArPSBzdHJNZXNzYWdlO1xyXG4gICAgY29uc3QgX2Rpdk1lc3NhZ2VDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdUZW1lc3NhZ2UnKTtcclxuICAgIGlmIChfZGl2TWVzc2FnZUNvbnRhaW5lcikge1xyXG4gICAgICBfZGl2TWVzc2FnZUNvbnRhaW5lci5pbm5lckhUTUwgPSB0aGlzLl9zdHJUZW1wU3RyO1xyXG4gICAgICBfZGl2TWVzc2FnZUNvbnRhaW5lci5zY3JvbGxUb3AgPSBfZGl2TWVzc2FnZUNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSB7XHJcbiAgICBpZiAodGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgPT09IDApIHtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCdUaGVyZSBpcyBubyBpbWFnZSBpbiBidWZmZXIuPGJyIC8+Jyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7IHJldHVybiB0cnVlOyB9XHJcbiAgfVxyXG5cclxuICBjaGVja0Vycm9yU3RyaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tFcnJvclN0cmluZ1dpdGhFcnJvckNvZGUoXHJcbiAgICAgIHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlLFxyXG4gICAgICB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tFcnJvclN0cmluZ1dpdGhFcnJvckNvZGUoZXJyb3JDb2RlLCBlcnJvclN0cmluZywgcmVzcG9uc2VTdHJpbmcgPSBudWxsKSB7XHJcbiAgICBpZiAoZXJyb3JDb2RlID09PSAwKSB7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZShcclxuICAgICAgICAnPHNwYW4gc3R5bGU9XFwnY29sb3I6I2NFNUUwNFxcJz48Yj4nICsgZXJyb3JTdHJpbmcgKyAnPC9iPjwvc3Bhbj48YnIgLz4nXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChlcnJvckNvZGUgPT09IC0yMTE1KSB7XHJcbiAgICAgIC8vIENhbmNlbCBmaWxlIGRpYWxvZ1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZXJyb3JDb2RlID09PSAtMjAwMykge1xyXG4gICAgICAgIGNvbnN0IEVycm9yTWVzc2FnZVdpbiA9IHdpbmRvdy5vcGVuKFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnRXJyb3JNZXNzYWdlJyxcclxuICAgICAgICAgICdoZWlnaHQ9NTAwLHdpZHRoPTc1MCx0b3A9MCxsZWZ0PTAsdG9vbGJhcj1ubyxtZW51YmFyPW5vLHNjcm9sbGJhcnM9bm8sIHJlc2l6YWJsZT1ubyxsb2NhdGlvbj1ubywgc3RhdHVzPW5vJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgRXJyb3JNZXNzYWdlV2luLmRvY3VtZW50LndyaXRlbG4ocmVzcG9uc2VTdHJpbmcpOyAvLyB0aGlzLkRXT2JqZWN0LkhUVFBQb3N0UmVzcG9uc2VTdHJpbmcpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZShcclxuICAgICAgICAnPHNwYW4gc3R5bGU9XFwnY29sb3I6I2NFNUUwNFxcJz48Yj4nICsgZXJyb3JTdHJpbmcgKyAnPC9iPjwvc3Bhbj48YnIgLz4nXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBVc2VkIGEgbG90ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBkc19nZXRsZWZ0KGVsKSB7XHJcbiAgICBsZXQgdG1wID0gZWwub2Zmc2V0TGVmdDtcclxuICAgIGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG4gICAgd2hpbGUgKGVsKSB7XHJcbiAgICAgIHRtcCArPSBlbC5vZmZzZXRMZWZ0O1xyXG4gICAgICBlbCA9IGVsLm9mZnNldFBhcmVudDtcclxuICAgIH1cclxuICAgIHJldHVybiB0bXA7XHJcbiAgfVxyXG4gIGRzX2dldHRvcChlbCkge1xyXG4gICAgbGV0IHRtcCA9IGVsLm9mZnNldFRvcDtcclxuICAgIGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG4gICAgd2hpbGUgKGVsKSB7XHJcbiAgICAgIHRtcCArPSBlbC5vZmZzZXRUb3A7XHJcbiAgICAgIGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRtcDtcclxuICB9XHJcblxyXG4gIE92ZXJfT3V0X0RlbW9JbWFnZShvYmosIHVybCkge1xyXG4gICAgb2JqLnNyYyA9IHVybDtcclxuICB9XHJcbiAgc291cmNlX29uY2hhbmdlKCkge1xyXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZUd2FpblR5cGUnKSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2VHdhaW5UeXBlJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNlJykpIHtcclxuICAgICAgY29uc3QgY0luZGV4ID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKSBhcyBIVE1MU2VsZWN0RWxlbWVudClcclxuICAgICAgICAuc2VsZWN0ZWRJbmRleDtcclxuICAgICAgaWYgKER5bmFtc29mdC5MaWIuZW52LmJNYWMpIHtcclxuICAgICAgICBjb25zdCBzdHJTb3VyY2VOYW1lID0gdGhpcy5EV09iamVjdC5HZXRTb3VyY2VOYW1lSXRlbXMoY0luZGV4KTtcclxuICAgICAgICBpZiAoc3RyU291cmNlTmFtZS5pbmRleE9mKCdJQ0EnKSA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7IHRoaXMuRFdPYmplY3QuU2VsZWN0U291cmNlQnlJbmRleChjSW5kZXgpOyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZWRpYVR5cGVfb25jaGFuZ2UoKSB7XHJcbiAgICBjb25zdCBNZWRpYVR5cGU6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNZWRpYVR5cGUnKTtcclxuICAgIGlmIChNZWRpYVR5cGUgJiYgTWVkaWFUeXBlLm9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCB2YWx1ZU1lZGlhVHlwZSA9IE1lZGlhVHlwZS5vcHRpb25zW01lZGlhVHlwZS5zZWxlY3RlZEluZGV4XS50ZXh0O1xyXG4gICAgICBpZiAodmFsdWVNZWRpYVR5cGUgIT09ICcnKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLkRXT2JqZWN0LkFkZG9uLldlYmNhbS5TZXRNZWRpYVR5cGUodmFsdWVNZWRpYVR5cGUpKSB7XHJcbiAgICAgICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkVycm9yIHNldHRpbmcgTWVkaWFUeXBlIHZhbHVlOiA8L2I+Jyk7XHJcbiAgICAgICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcbiAgICAgICAgICAgICc8c3BhbiBzdHlsZT1cXCdjb2xvcjojY0U1RTA0XFwnPjxiPicgK1xyXG4gICAgICAgICAgICB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nICtcclxuICAgICAgICAgICAgJzwvYj48L3NwYW4+PGJyIC8+J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBSZXNvbHV0aW9uV2ViY2FtOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbldlYmNhbScpO1xyXG4gICAgaWYgKFJlc29sdXRpb25XZWJjYW0pIHtcclxuICAgICAgUmVzb2x1dGlvbldlYmNhbS5vcHRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgIGNvbnN0IGFyeVJlc29sdXRpb24gPSB0aGlzLkRXT2JqZWN0LkFkZG9uLldlYmNhbS5HZXRSZXNvbHV0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGNvdW50UmVzb2x1dGlvbiA9IGFyeVJlc29sdXRpb24uR2V0Q291bnQoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudFJlc29sdXRpb247IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXJ5UmVzb2x1dGlvbi5HZXQoaSk7XHJcbiAgICAgICAgUmVzb2x1dGlvbldlYmNhbS5vcHRpb25zLmFkZChuZXcgT3B0aW9uKHZhbHVlLCB2YWx1ZSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tQWNxdWlyZSBJbWFnZS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gIGFjcXVpcmVJbWFnZSgpIHtcclxuICAgIGNvbnN0IGNJbmRleCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNlJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQpXHJcbiAgICAgIC5zZWxlY3RlZEluZGV4O1xyXG4gICAgaWYgKGNJbmRleCA8IDApIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgdGhpcy5EV09iamVjdC5TZWxlY3RTb3VyY2VCeUluZGV4KGNJbmRleCk7XHJcbiAgICB0aGlzLkRXT2JqZWN0LkNsb3NlU291cmNlKCk7XHJcbiAgICB0aGlzLkRXT2JqZWN0Lk9wZW5Tb3VyY2UoKTtcclxuICAgIHRoaXMuRFdPYmplY3QuSWZTaG93VUkgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICdTaG93VUknXHJcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XHJcblxyXG4gICAgbGV0IGk7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJ1BpeGVsVHlwZScpLml0ZW0oaSkgYXMgSFRNTElucHV0RWxlbWVudClcclxuICAgICAgICAgIC5jaGVja2VkID09PSB0cnVlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUGl4ZWxUeXBlID0gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlICE9PSAwKSB7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RXJyb3Igc2V0dGluZyBQaXhlbFR5cGUgdmFsdWU6IDwvYj4nKTtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKFxyXG4gICAgICAgICc8c3BhbiBzdHlsZT1cXCdjb2xvcjojY0U1RTA0XFwnPjxiPicgK1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcgK1xyXG4gICAgICAgICc8L2I+PC9zcGFuPjxiciAvPidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuUmVzb2x1dGlvbiA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ1Jlc29sdXRpb24nXHJcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlICE9PSAwKSB7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RXJyb3Igc2V0dGluZyBSZXNvbHV0aW9uIHZhbHVlOiA8L2I+Jyk7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZShcclxuICAgICAgICAnPHNwYW4gc3R5bGU9XFwnY29sb3I6I2NFNUUwNFxcJz48Yj4nICtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nICtcclxuICAgICAgICAnPC9iPjwvc3Bhbj48YnIgLz4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYkFERkNoZWNrZWQgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FERicpIGFzIEhUTUxJbnB1dEVsZW1lbnQpXHJcbiAgICAgIC5jaGVja2VkO1xyXG4gICAgdGhpcy5EV09iamVjdC5JZkZlZWRlckVuYWJsZWQgPSBiQURGQ2hlY2tlZDtcclxuICAgIGlmIChiQURGQ2hlY2tlZCA9PT0gdHJ1ZSAmJiB0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSAhPT0gMCkge1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkVycm9yIHNldHRpbmcgQURGIHZhbHVlOiA8L2I+Jyk7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZShcclxuICAgICAgICAnPHNwYW4gc3R5bGU9XFwnY29sb3I6I2NFNUUwNFxcJz48Yj4nICtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nICtcclxuICAgICAgICAnPC9iPjwvc3Bhbj48YnIgLz4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYkR1cGxleENoZWNrZWQgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICdEdXBsZXgnXHJcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XHJcbiAgICB0aGlzLkRXT2JqZWN0LklmRHVwbGV4RW5hYmxlZCA9IGJEdXBsZXhDaGVja2VkO1xyXG4gICAgaWYgKGJEdXBsZXhDaGVja2VkID09PSB0cnVlICYmIHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlICE9PSAwKSB7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RXJyb3Igc2V0dGluZyBEdXBsZXggdmFsdWU6IDwvYj4nKTtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKFxyXG4gICAgICAgICc8c3BhbiBzdHlsZT1cXCdjb2xvcjojY0U1RTA0XFwnPjxiPicgK1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcgK1xyXG4gICAgICAgICc8L2I+PC9zcGFuPjxiciAvPidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgRHluYW1zb2Z0LkxpYi5lbnYuYldpbiB8fFxyXG4gICAgICAoIUR5bmFtc29mdC5MaWIuZW52LmJXaW4gJiYgdGhpcy5EV09iamVjdC5JbWFnZUNhcHR1cmVEcml2ZXJUeXBlID09PSAwKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZShcclxuICAgICAgICAnUGl4ZWwgVHlwZTogJyArXHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5QaXhlbFR5cGUgK1xyXG4gICAgICAgICc8YnIgLz5SZXNvbHV0aW9uOiAnICtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlJlc29sdXRpb24gK1xyXG4gICAgICAgICc8YnIgLz4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LklmRGlzYWJsZVNvdXJjZUFmdGVyQWNxdWlyZSA9IHRydWU7XHJcbiAgICB0aGlzLkRXT2JqZWN0LkFjcXVpcmVJbWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgLyotLS0tLS0tLS0tLS0tLS0tLUxvYWQgSW1hZ2UtLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gIGJ0bkxvYWRJbWFnZXNPclBERnNfb25jbGljaygpIHtcclxuXHJcbiAgICBjb25zdCBPblBERlN1Y2Nlc3MgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnTG9hZGVkIGFuIGltYWdlIHN1Y2Nlc3NmdWxseS48YnIvPicpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IE9uUERGRmFpbHVyZSA9IChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hlY2tFcnJvclN0cmluZ1dpdGhFcnJvckNvZGUoZXJyb3JDb2RlLCBlcnJvclN0cmluZyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuRFdPYmplY3QuSWZTaG93RmlsZURpYWxvZyA9IHRydWU7XHJcbiAgICB0aGlzLkRXT2JqZWN0LkFkZG9uLlBERi5TZXRSZXNvbHV0aW9uKDIwMCk7XHJcbiAgICB0aGlzLkRXT2JqZWN0LkFkZG9uLlBERi5TZXRDb252ZXJ0TW9kZShcclxuICAgICAgRHluYW1zb2Z0LkRXVC5FbnVtRFdUX0NvbnZlcnRNb2RlLkNNX1JFTkRFUkFMTFxyXG4gICAgKTtcclxuICAgIHRoaXMuRFdPYmplY3QuTG9hZEltYWdlRXgoXHJcbiAgICAgICcnLFxyXG4gICAgICBEeW5hbXNvZnQuRFdULkVudW1EV1RfSW1hZ2VUeXBlLklUX0FMTCxcclxuICAgICAgT25QREZTdWNjZXNzLFxyXG4gICAgICBPblBERkZhaWx1cmVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIEVkaXQgSW1hZ2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgYnRuU2hvd0ltYWdlRWRpdG9yX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5TaG93SW1hZ2VFZGl0b3IoKTtcclxuICB9XHJcblxyXG4gIGJ0blJvdGF0ZVJpZ2h0X29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5Sb3RhdGVSaWdodCh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIpO1xyXG4gICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5Sb3RhdGUgcmlnaHQ6IDwvYj4nKTtcclxuICAgIGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG4gIGJ0blJvdGF0ZUxlZnRfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LlJvdGF0ZUxlZnQodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+Um90YXRlIGxlZnQ6IDwvYj4nKTtcclxuICAgIGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidG5Sb3RhdGUxODBfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LlJvdGF0ZSh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIsIDE4MCwgdHJ1ZSk7XHJcbiAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPlJvdGF0ZSAxODA6IDwvYj4nKTtcclxuICAgIGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidG5NaXJyb3Jfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0Lk1pcnJvcih0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIpO1xyXG4gICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5NaXJyb3I6IDwvYj4nKTtcclxuICAgIGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG4gIGJ0bkZsaXBfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LkZsaXAodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RmxpcDogPC9iPicpO1xyXG4gICAgaWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUNyb3AgTWV0aG9kLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICBidG5Dcm9wX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9pTGVmdCAhPT0gMCB8fFxyXG4gICAgICB0aGlzLl9pVG9wICE9PSAwIHx8XHJcbiAgICAgIHRoaXMuX2lSaWdodCAhPT0gMCB8fFxyXG4gICAgICB0aGlzLl9pQm90dG9tICE9PSAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5EV09iamVjdC5Dcm9wKFxyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcixcclxuICAgICAgICB0aGlzLl9pTGVmdCxcclxuICAgICAgICB0aGlzLl9pVG9wLFxyXG4gICAgICAgIHRoaXMuX2lSaWdodCxcclxuICAgICAgICB0aGlzLl9pQm90dG9tXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuX2lMZWZ0ID0gMDtcclxuICAgICAgdGhpcy5faVRvcCA9IDA7XHJcbiAgICAgIHRoaXMuX2lSaWdodCA9IDA7XHJcbiAgICAgIHRoaXMuX2lCb3R0b20gPSAwO1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkNyb3A6IDwvYj4nKTtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZShcclxuICAgICAgICAnPGI+Q3JvcDogPC9iPmZhaWxlZC4gUGxlYXNlIGZpcnN0IHNlbGVjdCB0aGUgYXJlYSB5b3VcXCdkIGxpa2UgdG8gY3JvcC48YnIgLz4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qLS0tLS0tLS0tLS0tLS0tLUNoYW5nZSBJbWFnZSBTaXplLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gIGJ0bkNoYW5nZUltYWdlU2l6ZV9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHN3aXRjaCAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5KSB7XHJcbiAgICAgIGNhc2UgJ3Zpc2libGUnOlxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbWdTaXplRWRpdG9yJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdoaWRkZW4nOlxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbWdTaXplRWRpdG9yJykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiSW1nU2l6ZUVkaXRvclwiKS5zdHlsZS50b3AgPSBkc19nZXR0b3AoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5DaGFuZ2VJbWFnZVNpemVcIikpICsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5DaGFuZ2VJbWFnZVNpemVcIikub2Zmc2V0SGVpZ2h0ICsgMTUgKyBcInB4XCI7XHJcbiAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkltZ1NpemVFZGl0b3JcIikuc3R5bGUubGVmdCA9IGRzX2dldGxlZnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidG5DaGFuZ2VJbWFnZVNpemVcIikpIC0gMTQgKyBcInB4XCI7XHJcblxyXG4gICAgY29uc3QgaVdpZHRoID0gdGhpcy5EV09iamVjdC5HZXRJbWFnZVdpZHRoKFxyXG4gICAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXJcclxuICAgICk7XHJcbiAgICBpZiAoaVdpZHRoICE9PSAtMSkge1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gaVdpZHRoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaUhlaWdodCA9IHRoaXMuRFdPYmplY3QuR2V0SW1hZ2VIZWlnaHQoXHJcbiAgICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlclxyXG4gICAgKTtcclxuICAgIGlmIChpSGVpZ2h0ICE9PSAtMSkge1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICAgJ2ltZ19oZWlnaHQnXHJcbiAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSBpSGVpZ2h0O1xyXG4gICAgfVxyXG4gIH1cclxuICBidG5DYW5jZWxDaGFuZ2Vfb25jbGljaygpIHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbWdTaXplRWRpdG9yJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gIH1cclxuXHJcbiAgYnRuQ2hhbmdlSW1hZ2VTaXplT0tfb25jbGljaygpIHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfaGVpZ2h0JykuY2xhc3NOYW1lID0gJyc7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykuY2xhc3NOYW1lID0gJyc7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnJlLnRlc3QoXHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfaGVpZ2h0JykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWVcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfaGVpZ2h0JykuY2xhc3NOYW1lICs9ICcgaW52YWxpZCc7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfaGVpZ2h0JykuZm9jdXMoKTtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCdQbGVhc2UgaW5wdXQgYSB2YWxpZCA8Yj5oZWlnaHQ8L2I+LjxiciAvPicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnJlLnRlc3QoXHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZVxyXG4gICAgICApXHJcbiAgICApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpLmNsYXNzTmFtZSArPSAnIGludmFsaWQnO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykuZm9jdXMoKTtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCdQbGVhc2UgaW5wdXQgYSB2YWxpZCA8Yj53aWR0aDwvYj4uPGJyIC8+Jyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuQ2hhbmdlSW1hZ2VTaXplKFxyXG4gICAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIsXHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsXHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLFxyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ludGVycG9sYXRpb25NZXRob2QnKSBhcyBIVE1MU2VsZWN0RWxlbWVudClcclxuICAgICAgICAuc2VsZWN0ZWRJbmRleCArIDFcclxuICAgICk7XHJcbiAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkNoYW5nZSBJbWFnZSBTaXplOiA8L2I+Jyk7XHJcbiAgICBpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBTYXZlIEltYWdlKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgYnRuU2F2ZV9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0cmltZ1R5cGVfc2F2ZSA9ICdwZGYnO1xyXG5cclxuICAgIHRoaXMuRFdPYmplY3QuSWZTaG93RmlsZURpYWxvZyA9IHRydWU7XHJcbiAgICBjb25zdCBfdHh0RmlsZU5hbWVmb3JTYXZlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHh0X2ZpbGVOYW1lJyk7XHJcbiAgICBpZiAoX3R4dEZpbGVOYW1lZm9yU2F2ZSkgeyBfdHh0RmlsZU5hbWVmb3JTYXZlLmNsYXNzTmFtZSA9ICcnOyB9XHJcbiAgICBsZXQgYlNhdmU6IGFueSA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHN0ckZpbGVQYXRoID0gX3R4dEZpbGVOYW1lZm9yU2F2ZS52YWx1ZSArICcuJyArIHN0cmltZ1R5cGVfc2F2ZTtcclxuXHJcbiAgICBjb25zdCBPblN1Y2Nlc3MgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+U2F2ZSBJbWFnZTogPC9iPicpO1xyXG4gICAgICB0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKDAsICdTdWNjZXNzZnVsLicpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBPbkZhaWx1cmUgPSAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpO1xyXG4gICAgfTtcclxuXHJcbiAgICBiU2F2ZSA9IHRoaXMuRFdPYmplY3QuU2F2ZUFsbEFzUERGKHN0ckZpbGVQYXRoLCBPblN1Y2Nlc3MsIE9uRmFpbHVyZSk7XHJcblxyXG4gICAgaWYgKGJTYXZlKSB7IHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+U2F2ZSBJbWFnZTogPC9iPicpOyB9XHJcbiAgICBpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIFVwbG9hZCBJbWFnZSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBtYWtlaWQobGVuZ3RoKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICBjb25zdCBjaGFyYWN0ZXJzID1cclxuICAgICAgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcclxuICAgIGNvbnN0IGNoYXJhY3RlcnNMZW5ndGggPSBjaGFyYWN0ZXJzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgcmVzdWx0ICs9IGNoYXJhY3RlcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9CbG9iKCkge1xyXG4gICAgdGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnVwbG9hZFN0YXJ0LmVtaXQodHJ1ZSk7XHJcbiAgICBjb25zdCBwYWdlcyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuRFdPYmplY3Q/Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlcjsgaW5kZXgrKykge1xyXG4gICAgICBwYWdlcy5wdXNoKGluZGV4KTtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuQ29udmVydFRvQmxvYihcclxuICAgICAgcGFnZXMsXHJcbiAgICAgIER5bmFtc29mdC5EV1QuRW51bURXVF9JbWFnZVR5cGUuSVRfUERGLFxyXG4gICAgICAocmVzdWx0LCBpbmRpY2VzLCB0eXBlKSA9PiB7XHJcbiAgICAgICAgcmVzdWx0Lmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHJlc3VsdC5uYW1lID0gJ3NjYW4tJyArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlc3VsdC5sYXN0TW9kaWZpZWREYXRlLCAnZGQtTU0teXl5eScpICsgJy5wZGYnO1xyXG4gICAgICAgIHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS51cGxvYWRCYXRjaChyZXN1bHQpLnN1YnNjcmliZSgoYmF0Y2gpID0+IHtcclxuICAgICAgICAgIGJhdGNoLmZvckVhY2goZG9jID0+IHtcclxuICAgICAgICAgICAgdGhpcy5maWxlLm5leHQoZG9jKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yU3RyaW5nKTtcclxuICAgICAgICB0aGlzLkRvY3VtZW50U2NhblNlcnZpY2UudXBsb2FkU3RhcnQuZW1pdChmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY29udmVydFRvQmxvYkZvclNhdmluZygpIHtcclxuICAgIGNvbnN0IHBhZ2VzID0gW107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5EV09iamVjdD8uSG93TWFueUltYWdlc0luQnVmZmVyOyBpbmRleCsrKSB7XHJcbiAgICAgIHBhZ2VzLnB1c2goaW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5Db252ZXJ0VG9CbG9iKFxyXG4gICAgICBwYWdlcyxcclxuICAgICAgRHluYW1zb2Z0LkRXVC5FbnVtRFdUX0ltYWdlVHlwZS5JVF9QREYsXHJcbiAgICAgIChyZXN1bHQsIGluZGljZXMsIHR5cGUpID0+IHtcclxuICAgICAgICByZXN1bHQubGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgcmVzdWx0Lm5hbWUgPSAnc2Nhbi0nICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVzdWx0Lmxhc3RNb2RpZmllZERhdGUsICdkZC1NTS15eXl5JykgKyAnLnBkZic7XHJcbiAgICAgICAgdGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnN0b3JlZEZpbGUgPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5vbk1pbmltaXppbmdTdWJzY3JpcHRpb24gPyB0aGlzLm9uTWluaW1pemluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogJyc7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3JTdHJpbmcpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIE5hdmlnYXRvciBmdW5jdGlvbnMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGJ0bkZpcnN0SW1hZ2Vfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPSAwO1xyXG4gICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gIH1cclxuXHJcbiAgYnRuUHJlSW1hZ2Vfd2hlZWwoKSB7XHJcbiAgICBpZiAodGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgIT09IDApIHsgdGhpcy5idG5QcmVJbWFnZV9vbmNsaWNrKCk7IH1cclxuICB9XHJcblxyXG4gIGJ0bk5leHRJbWFnZV93aGVlbCgpIHtcclxuICAgIGlmICh0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlciAhPT0gMCkgeyB0aGlzLmJ0bk5leHRJbWFnZV9vbmNsaWNrKCk7IH1cclxuICB9XHJcblxyXG4gIGJ0blByZUltYWdlX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID1cclxuICAgICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyIC0gMTtcclxuICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICB9XHJcbiAgYnRuTmV4dEltYWdlX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID09PVxyXG4gICAgICB0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlciAtIDFcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPVxyXG4gICAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgKyAxO1xyXG4gICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gIH1cclxuXHJcbiAgYnRuTGFzdEltYWdlX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID1cclxuICAgICAgdGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgLSAxO1xyXG4gICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gIH1cclxuXHJcbiAgYnRuUmVtb3ZlQ3VycmVudEltYWdlX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5SZW1vdmVBbGxTZWxlY3RlZEltYWdlcygpO1xyXG4gICAgaWYgKHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyID09PSAwKSB7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgICAnRFdfVG90YWxJbWFnZSdcclxuICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9IHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyO1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX0N1cnJlbnRJbWFnZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID1cclxuICAgICAgICAnJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnRuUmVtb3ZlQWxsSW1hZ2VzX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5SZW1vdmVBbGxJbWFnZXMoKTtcclxuICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfVG90YWxJbWFnZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gJzAnO1xyXG4gICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19DdXJyZW50SW1hZ2UnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9ICcnO1xyXG4gIH1cclxuICBzZXRsUHJldmlld01vZGUoKSB7XHJcbiAgICBjb25zdCB2YXJOdW0gPSBwYXJzZUludChcclxuICAgICAgKFxyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfUHJldmlld01vZGUnKSBhcyBIVE1MU2VsZWN0RWxlbWVudClcclxuICAgICAgICAgIC5zZWxlY3RlZEluZGV4ICsgMVxyXG4gICAgICApLnRvU3RyaW5nKCksXHJcbiAgICAgIDEwXHJcbiAgICApO1xyXG4gICAgY29uc3QgYnRuQ3JvcDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bkNyb3AnKTtcclxuICAgIGlmIChidG5Dcm9wKSB7XHJcbiAgICAgIGxldCB0bXBzdHIgPSBidG5Dcm9wLnNyYztcclxuICAgICAgaWYgKHZhck51bSA+IDEpIHtcclxuICAgICAgICB0bXBzdHIgPSB0bXBzdHIucmVwbGFjZSgnQ3JvcC4nLCAnQ3JvcF9ncmF5LicpO1xyXG4gICAgICAgIGJ0bkNyb3Auc3JjID0gdG1wc3RyO1xyXG4gICAgICAgIGJ0bkNyb3Aub25jbGljayA9IGZ1bmN0aW9uICgpIHsgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0bXBzdHIgPSB0bXBzdHIucmVwbGFjZSgnQ3JvcF9ncmF5LicsICdDcm9wLicpO1xyXG4gICAgICAgIGJ0bkNyb3Auc3JjID0gdG1wc3RyO1xyXG4gICAgICAgIGJ0bkNyb3Aub25jbGljayA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuYnRuQ3JvcF9vbmNsaWNrKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRFdPYmplY3QuU2V0Vmlld01vZGUodmFyTnVtLCB2YXJOdW0pO1xyXG4gICAgaWYgKER5bmFtc29mdC5MaWIuZW52LmJNYWMgfHwgRHluYW1zb2Z0LkxpYi5lbnYuYkxpbnV4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfUHJldmlld01vZGUnKSBhcyBIVE1MU2VsZWN0RWxlbWVudClcclxuICAgICAgICAuc2VsZWN0ZWRJbmRleCAhPT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuRFdPYmplY3QuTW91c2VTaGFwZSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLkRXT2JqZWN0Lk1vdXNlU2hhcGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqcmFkaW8gcmVzcG9uc2UqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHJkVElGRl9vbmNsaWNrKCkge1xyXG4gICAgY29uc3QgX2Noa011bHRpUGFnZVRJRkY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VUSUZGJyk7XHJcbiAgICBfY2hrTXVsdGlQYWdlVElGRi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgX2Noa011bHRpUGFnZVRJRkYuY2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IF9jaGtNdWx0aVBhZ2VQREY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VQREYnKTtcclxuICAgIF9jaGtNdWx0aVBhZ2VQREYuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgX2Noa011bHRpUGFnZVBERi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZFBERl9vbmNsaWNrKCkge1xyXG4gICAgY29uc3QgX2Noa011bHRpUGFnZVRJRkY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VUSUZGJyk7XHJcbiAgICBfY2hrTXVsdGlQYWdlVElGRi5jaGVja2VkID0gZmFsc2U7XHJcbiAgICBfY2hrTXVsdGlQYWdlVElGRi5kaXNhYmxlZCA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgX2Noa011bHRpUGFnZVBERjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVBERicpO1xyXG4gICAgX2Noa011bHRpUGFnZVBERi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgX2Noa011bHRpUGFnZVBERi5jaGVja2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJkX29uY2xpY2soKSB7XHJcbiAgICBjb25zdCBfY2hrTXVsdGlQYWdlVElGRjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVRJRkYnKTtcclxuICAgIF9jaGtNdWx0aVBhZ2VUSUZGLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgIF9jaGtNdWx0aVBhZ2VUSUZGLmRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBfY2hrTXVsdGlQYWdlUERGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlUERGJyk7XHJcbiAgICBfY2hrTXVsdGlQYWdlUERGLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgIF9jaGtNdWx0aVBhZ2VQREYuZGlzYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBEeW5hbWljIFdlYiBUV0FJTiBFdmVudHMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIER5bmFtc29mdF9PblBvc3RUcmFuc2ZlciA9ICgpID0+IHtcclxuICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICB9XHJcblxyXG4gIER5bmFtc29mdF9PblBvc3RMb2FkZnVuY3Rpb24gPSAocGF0aCwgbmFtZSwgdHlwZSkgPT4ge1xyXG4gICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gIH1cclxuXHJcbiAgRHluYW1zb2Z0X09uUG9zdEFsbFRyYW5zZmVycyA9ICgpID0+IHtcclxuICAgIHRoaXMuRFdPYmplY3QuQ2xvc2VTb3VyY2UoKTtcclxuICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICAgIHRoaXMuY2hlY2tFcnJvclN0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgRHluYW1zb2Z0X09uTW91c2VDbGljayA9IGluZGV4ID0+IHtcclxuICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICB9XHJcblxyXG4gIER5bmFtc29mdF9Pbk1vdXNlUmlnaHRDbGljayA9IGluZGV4ID0+IHtcclxuICAgIC8vIFRvIGFkZFxyXG4gIH1cclxuXHJcbiAgRHluYW1zb2Z0X09uSW1hZ2VBcmVhU2VsZWN0ZWQgPSAoaW5kZXgsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkgPT4ge1xyXG4gICAgdGhpcy5faUxlZnQgPSBsZWZ0O1xyXG4gICAgdGhpcy5faVRvcCA9IHRvcDtcclxuICAgIHRoaXMuX2lSaWdodCA9IHJpZ2h0O1xyXG4gICAgdGhpcy5faUJvdHRvbSA9IGJvdHRvbTtcclxuICB9XHJcblxyXG4gIER5bmFtc29mdF9PbkltYWdlQXJlYURlc2VsZWN0ZWQgPSBpbmRleCA9PiB7XHJcbiAgICB0aGlzLl9pTGVmdCA9IDA7XHJcbiAgICB0aGlzLl9pVG9wID0gMDtcclxuICAgIHRoaXMuX2lSaWdodCA9IDA7XHJcbiAgICB0aGlzLl9pQm90dG9tID0gMDtcclxuICB9XHJcblxyXG4gIER5bmFtc29mdF9Pbk1vdXNlRG91YmxlQ2xpY2soKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBEeW5hbXNvZnRfT25Ub3BJbWFnZUluVGhlVmlld0NoYW5nZWQgPSBpbmRleCA9PiB7XHJcbiAgICB0aGlzLl9pTGVmdCA9IDA7XHJcbiAgICB0aGlzLl9pVG9wID0gMDtcclxuICAgIHRoaXMuX2lSaWdodCA9IDA7XHJcbiAgICB0aGlzLl9pQm90dG9tID0gMDtcclxuICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciA9IGluZGV4O1xyXG4gICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gIH1cclxuXHJcbiAgRHluYW1zb2Z0X09uR2V0RmlsZVBhdGggPSAoYlNhdmUsIGNvdW50LCBpbmRleCwgcGF0aCwgbmFtZSkgPT4geyB9O1xyXG59XHJcbiIsIjxkaXYgaWQ9XCJEV1Rjb250YWluZXJcIiBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiPlxyXG4gIDxkaXYgaWQ9XCJEV1Rjb250YWluZXJUb3BcIj5cclxuICAgIDxkaXYgaWQ9XCJkaXZFZGl0XCI+XHJcbiAgICAgIDx1bCBjbGFzcz1cIm9wZXJhdGVHcnBcIj5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2R3dC1yZXNvdXJjZXMvSW1hZ2VzL1Nob3dFZGl0b3IucG5nXCIgW3RpdGxlXT1cIidzY2FubmVyLnNob3dJbWFnZUVkaXRvcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbYWx0XT1cIidzY2FubmVyLnNob3dJbWFnZUVkaXRvcicgfCB0cmFuc2xhdGVcIiBpZD1cImJ0bkVkaXRvclwiIChjbGljayk9XCJidG5TaG93SW1hZ2VFZGl0b3Jfb25jbGljaygpXCIgLz5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvZHd0LXJlc291cmNlcy9JbWFnZXMvUm90YXRlTGVmdC5wbmdcIiBbdGl0bGVdPVwiJ3NjYW5uZXIucm90YXRlTGVmdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbYWx0XT1cIidzY2FubmVyLnJvdGF0ZUxlZnQnIHwgdHJhbnNsYXRlXCIgaWQ9XCJidG5Sb3RhdGVMXCIgKGNsaWNrKT1cImJ0blJvdGF0ZUxlZnRfb25jbGljaygpXCIgLz5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvZHd0LXJlc291cmNlcy9JbWFnZXMvUm90YXRlUmlnaHQucG5nXCIgW3RpdGxlXT1cIidzY2FubmVyLnJvdGF0ZVJpZ2h0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFthbHRdPVwiJ3NjYW5uZXIucm90YXRlUmlnaHQnIHwgdHJhbnNsYXRlXCIgaWQ9XCJidG5Sb3RhdGVSXCIgKGNsaWNrKT1cImJ0blJvdGF0ZVJpZ2h0X29uY2xpY2soKVwiIC8+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2R3dC1yZXNvdXJjZXMvSW1hZ2VzL1JvdGF0ZTE4MC5wbmdcIiBbYWx0XT1cIidzY2FubmVyLnJvdGF0ZTE4MCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ3NjYW5uZXIucm90YXRlMTgwJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJidG5Sb3RhdGUxODBfb25jbGljaygpXCIgLz5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvZHd0LXJlc291cmNlcy9JbWFnZXMvTWlycm9yLnBuZ1wiIFt0aXRsZV09XCInc2Nhbm5lci5taXJyb3InIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgW2FsdF09XCInc2Nhbm5lci5taXJyb3InIHwgdHJhbnNsYXRlXCIgaWQ9XCJidG5NaXJyb3JcIiAoY2xpY2spPVwiYnRuTWlycm9yX29uY2xpY2soKVwiIC8+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2R3dC1yZXNvdXJjZXMvSW1hZ2VzL0ZsaXAucG5nXCIgW3RpdGxlXT1cIidzY2FubmVyLmZsaXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgW2FsdF09XCInc2Nhbm5lci5mbGlwJyB8IHRyYW5zbGF0ZVwiIGlkPVwiYnRuRmxpcFwiIChjbGljayk9XCJidG5GbGlwX29uY2xpY2soKVwiIC8+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2R3dC1yZXNvdXJjZXMvSW1hZ2VzL1JlbW92ZVNlbGVjdGVkSW1hZ2VzLnBuZ1wiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCInc2Nhbm5lci5yZW1vdmVTZWxlY3RlZCcgfCB0cmFuc2xhdGVcIiBbYWx0XT1cIidzY2FubmVyLnJlbW92ZVNlbGVjdGVkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIGlkPVwiRFdfYnRuUmVtb3ZlQ3VycmVudEltYWdlXCIgKGNsaWNrKT1cImJ0blJlbW92ZUN1cnJlbnRJbWFnZV9vbmNsaWNrKClcIiAvPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy9kd3QtcmVzb3VyY2VzL0ltYWdlcy9SZW1vdmVBbGxJbWFnZXMucG5nXCIgW3RpdGxlXT1cIidzY2FubmVyLnJlbW92ZUFsbCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbYWx0XT1cIidzY2FubmVyLnJlbW92ZUFsbCcgfCB0cmFuc2xhdGVcIiBpZD1cIkRXX2J0blJlbW92ZUFsbEltYWdlc1wiIChjbGljayk9XCJidG5SZW1vdmVBbGxJbWFnZXNfb25jbGljaygpXCIgLz5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvZHd0LXJlc291cmNlcy9JbWFnZXMvQ2hhbmdlU2l6ZS5wbmdcIiBbdGl0bGVdPVwiJ3NjYW5uZXIucmVzaXplJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFthbHRdPVwiJ3NjYW5uZXIucmVzaXplJyB8IHRyYW5zbGF0ZVwiIGlkPVwiYnRuQ2hhbmdlSW1hZ2VTaXplXCIgKGNsaWNrKT1cImJ0bkNoYW5nZUltYWdlU2l6ZV9vbmNsaWNrKClcIiAvPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy9kd3QtcmVzb3VyY2VzL0ltYWdlcy9Dcm9wLnBuZ1wiIFt0aXRsZV09XCInc2Nhbm5lci5jcm9wJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFthbHRdPVwiJ3NjYW5uZXIuY3JvcCcgfCB0cmFuc2xhdGVcIiBpZD1cImJ0bkNyb3BcIiAoY2xpY2spPVwiYnRuQ3JvcF9vbmNsaWNrKClcIiAvPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICAgIDxkaXYgaWQ9XCJJbWdTaXplRWRpdG9yXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OmhpZGRlblwiPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImltZ19oZWlnaHRcIj57eyAnc2Nhbm5lci5uZXdIZWlnaHQnIHwgdHJhbnNsYXRlIH19IDpcclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImltZ19oZWlnaHRcIiBzdHlsZT1cIndpZHRoOjUwJTtcIiBzaXplPVwiMTBcIiAvPlxyXG4gICAgICAgICAgICAgIHt7ICdzY2FubmVyLnBpeGVsJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiaW1nX3dpZHRoXCI+e3sgJ3NjYW5uZXIubmV3V2lkdGgnIHwgdHJhbnNsYXRlIH19IDombmJzcDtcclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImltZ193aWR0aFwiIHN0eWxlPVwid2lkdGg6NTAlO1wiIHNpemU9XCIxMFwiIC8+XHJcbiAgICAgICAgICAgICAge3sgJ3NjYW5uZXIucGl4ZWwnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIHt7ICdzY2FubmVyLkludGVycG9sYXRpb25NZXRob2QnIHwgdHJhbnNsYXRlIH19OlxyXG4gICAgICAgICAgICA8c2VsZWN0IHNpemU9XCIxXCIgaWQ9XCJJbnRlcnBvbGF0aW9uTWV0aG9kXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIiAgIE9LICAgXCIgaWQ9XCJidG5DaGFuZ2VJbWFnZVNpemVPS1wiIChjbGljayk9XCJidG5DaGFuZ2VJbWFnZVNpemVPS19vbmNsaWNrKClcIiAvPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiIENhbmNlbCBcIiBpZD1cImJ0bkNhbmNlbENoYW5nZVwiIChjbGljayk9XCJidG5DYW5jZWxDaGFuZ2Vfb25jbGljaygpXCIgLz5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJkd3Rjb250cm9sQ29udGFpbmVyXCI+PC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwiYnRuR3JvdXBCdG1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImN0LWx0XCI+XHJcbiAgICAgICAge3sgJ3NjYW5uZXIucGFnZScgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgPGlucHV0IGlkPVwiRFdfYnRuRmlyc3RJbWFnZVwiIChjbGljayk9XCJidG5GaXJzdEltYWdlX29uY2xpY2soKVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIiB8PCBcIiAvPiZuYnNwO1xyXG4gICAgICAgIDxpbnB1dCBpZD1cIkRXX2J0blByZUltYWdlXCIgKGNsaWNrKT1cImJ0blByZUltYWdlX29uY2xpY2soKVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIiA8IFwiIC8+Jm5ic3A7Jm5ic3A7XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjJcIiBpZD1cIkRXX0N1cnJlbnRJbWFnZVwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIiAvPlxyXG4gICAgICAgIC9cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPVwiMlwiIGlkPVwiRFdfVG90YWxJbWFnZVwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIiAvPiZuYnNwOyZuYnNwO1xyXG4gICAgICAgIDxpbnB1dCBpZD1cIkRXX2J0bk5leHRJbWFnZVwiIChjbGljayk9XCJidG5OZXh0SW1hZ2Vfb25jbGljaygpXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiPiBcIiAvPiZuYnNwO1xyXG4gICAgICAgIDxpbnB1dCBpZD1cIkRXX2J0bkxhc3RJbWFnZVwiIChjbGljayk9XCJidG5MYXN0SW1hZ2Vfb25jbGljaygpXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiPnwgXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjdC1ydFwiPlxyXG4gICAgICAgIHt7ICdzY2FubmVyLnByZXZpZXcnIHwgdHJhbnNsYXRlIH19OlxyXG4gICAgICAgIDxzZWxlY3Qgc2l6ZT1cIjFcIiBpZD1cIkRXX1ByZXZpZXdNb2RlXCIgKGNoYW5nZSk9XCJzZXRsUHJldmlld01vZGUoKVwiPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjBcIj4xWDE8L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+MlgyPC9vcHRpb24+XHJcbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiPjNYMzwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjNcIj40WDQ8L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI0XCI+NVg1PC9vcHRpb24+XHJcbiAgICAgICAgPC9zZWxlY3Q+PGJyIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBpZD1cIlNjYW5XcmFwcGVyXCI+XHJcbiAgICA8ZGl2IGlkPVwiZGl2U2Nhbm5lclwiIGNsYXNzPVwiZGl2aW5wdXRcIj5cclxuICAgICAgPGRpdiBpZD1cImRpdl9TY2FuSW1hZ2VcIiBjbGFzcz1cImRpdlRhYmxlU3R5bGVcIj5cclxuICAgICAgICA8dWwgaWQ9XCJ1bFNjYW5lSW1hZ2VISURFXCI+XHJcbiAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzb3VyY2VcIj5cclxuICAgICAgICAgICAgICA8cD57eyAnc2Nhbm5lci5zb3VyY2UnIHwgdHJhbnNsYXRlIH19OjwvcD5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCBzaXplPVwiMVwiIGlkPVwic291cmNlXCIgc3R5bGU9XCJwb3NpdGlvbjpyZWxhdGl2ZTtcIiAoY2hhbmdlKT1cInNvdXJjZV9vbmNoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgaWQ9XCJwTm9TY2FubmVyXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OiB2b2lkKDApXCIgY2xhc3M9XCJTaG93dGJsTG9hZEltYWdlXCIgc3R5bGU9XCJjb2xvcjojZmU4ZTE0XCIgaWQ9XCJhTm9TY2FubmVyXCI+KE5vIFRXQUlOXHJcbiAgICAgICAgICAgICAgY29tcGF0aWJsZSBkcml2ZXJzIGRldGVjdGVkKTwvYT5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgaWQ9XCJkaXZQcm9kdWN0RGV0YWlsXCI+XHJcbiAgICAgICAgICAgIDx1bCBpZD1cImRpdlR3YWluVHlwZVwiPlxyXG4gICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBpZD1cImxibFNob3dVSVwiIGZvcj1cIlNob3dVSVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJTaG93VUlcIiAvPnt7XHJcbiAgICAgICAgICAgICAgICAgICdzY2FubmVyLlNob3dVSScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgfX0mbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIkFERlwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJBREZcIiAvPnt7XHJcbiAgICAgICAgICAgICAgICAgICdzY2FubmVyLkF1dG9GZWVkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19Jm5ic3A7PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJEdXBsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiRHVwbGV4XCIgLz57e1xyXG4gICAgICAgICAgICAgICAgICAnc2Nhbm5lci5EdXBsZXgnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgIHt7ICdzY2FubmVyLlBpeGVsVHlwZScgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiQldcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGlkPVwiQldcIiBuYW1lPVwiUGl4ZWxUeXBlXCIgLz57e1xyXG4gICAgICAgICAgICAgICAgICAnc2Nhbm5lci5CJlcnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJHcmF5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cIkdyYXlcIiBuYW1lPVwiUGl4ZWxUeXBlXCIgLz57e1xyXG4gICAgICAgICAgICAgICAgICAnc2Nhbm5lci5HcmF5JyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cIlJHQlwiIG5hbWU9XCJQaXhlbFR5cGVcIiAvPnt7XHJcbiAgICAgICAgICAgICAgICAgICdzY2FubmVyLkNvbG9yJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnc2Nhbm5lci5SZXNvbHV0aW9uJyB8IHRyYW5zbGF0ZSB9fTombmJzcDs8L3NwYW4+PHNlbGVjdCBzaXplPVwiMVwiIGlkPVwiUmVzb2x1dGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwXCI+MTAwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxNTBcIj4xNTA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjIwMFwiPjIwMDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMzAwXCIgc2VsZWN0ZWQ+MzAwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuU2NhblwiIGRpc2FibGVkPVwiZGlzYWJsZWRcIiAoY2xpY2spPVwiYWNxdWlyZUltYWdlKClcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gbXgtMlwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXVwYy11cGxvYWQgaWNvblwiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4+IHt7ICdzY2FubmVyLnNjYW4nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJidG5Mb2FkSW1hZ2VzT3JQREZzX29uY2xpY2soKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0blwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXVwbG9hZCBpY29uXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj4ge3sgJ3NjYW5uZXIubG9hZCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGdhcFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtMlwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIFtuZ0NsYXNzXT1cInsnaGlkZS11cGxvYWQtYnV0dG9uJyA6IGhpZGVVcGxvYWRCdXR0b259XCIgI3NjYW5uZXJVcGxvYWRCdXR0b25cclxuICAgICAgICAgICAgaWQ9XCJzY2FubmVyVXBsb2FkQnV0dG9uXCIgW2Rpc2FibGVkXT1cIkRXT2JqZWN0Py5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgPT09IDBcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY29udmVydFRvQmxvYigpXCI+XHJcbiAgICAgICAgICAgIHt7ICdzY2FubmVyLnNhdmUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
978
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvY29tcG9uZW50cy9kb2N1bWVudC1zY2FuL2RvY3VtZW50LXNjYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZG9jdW1lbnRzL2NvbXBvbmVudHMvZG9jdW1lbnQtc2Nhbi9kb2N1bWVudC1zY2FuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sU0FBUyxNQUFNLEtBQUssQ0FBQzs7Ozs7OztBQUs1Qjs7Ozs7Ozs7Ozs7OztHQWFHO0FBUUgsTUFBTSxPQUFPLGFBQWE7SUEwQnhCLFlBQ1MsU0FBMkIsRUFDM0IsZ0JBQWtDLEVBQ2xDLFFBQWtCLEVBQ2xCLG1CQUF3QyxFQUNoQixXQUFXLEVBQ1gsUUFBZ0I7UUFMeEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQUE7UUFDWCxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBNUJ4QyxXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FB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O0lBRUQsVUFBVTtRQUNSLE1BQU0saUJBQWlCLEdBQVEsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4RSxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFbEMsTUFBTSxnQkFBZ0IsR0FBUSxRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RFLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDakMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBMENELDRCQUE0QjtRQUMxQixPQUFPO0lBQ1QsQ0FBQzs7MkdBbmxDVSxhQUFhLDZJQStCZCxhQUFhLGFBQ2IsYUFBYTsrRkFoQ1osYUFBYSw2TkNyQzFCLDh6UkFnTE07NEZEM0lPLGFBQWE7a0JBUHpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsV0FBVyxFQUFFLGdDQUFnQztvQkFDN0MsU0FBUyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7b0JBQzdDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7b0JBQzFCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUN0Qzs7MEJBZ0NJLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMsYUFBYTs0Q0E1QmQsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdOLElBQUk7c0JBREgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9CQVNFX0hSRUYsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IER5bmFtc29mdCBmcm9tICdkd3QnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRG9jdW1lbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RvY3VtZW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG9jdW1lbnRTY2FuU2VydmljZSB9IGZyb20gJy4vZG9jdW1lbnQtc2Nhbi5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBEb2N1bWVudCBTY2FuIGlzIGEgcmV1c2FibGUgbnV4ZW8gQVBJICYgU2Nhbm5lciBpbnRlZ3JhdGVkIGNvbXBvbmVudCxcclxuICogdGhhdCB1dGlsaXplcyB0aGUgc2Nhbm5lciB0byBjcmVhdGUgYW5kIHVwbG9hZCBQREYgZmlsZSBhcyBhIGJhdGNoLCB0aGVuIHByb3ZpZGVcclxuICogdGhhdCBiYXRjaCBmb3IgY29uc3VtcHRpb25cclxuICpcclxuICogQHRpdGxlXHJcbiAqIERvY3VtZW50IFNjYW5cclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogPGFwcC1kb2N1bWVudC1zY2FuXHJcbiAqICAgKGZpbGUpPVwib25TdWNjZXNzKCRldmVudClcIlxyXG4gKiA+PC9hcHAtZG9jdW1lbnQtc2Nhbj5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWRvY3VtZW50LXNjYW4nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudC1zY2FuLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudC1zY2FuLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaG9zdDogeyBjbGFzczogJ3NjYW5uZXInIH0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2NhbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgdXBsb2FkZWRGaWxlO1xyXG4gIG9uTWluaW1pemluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHVzZVN0b3JlZEZpbGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBoaWRlVXBsb2FkQnV0dG9uID0gZmFsc2U7XHJcbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGJhdGNoIGlzIHVwbG9hZGVkICovXHJcbiAgQE91dHB1dCgpXHJcbiAgZmlsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIERXT2JqZWN0O1xyXG4gIHNlbGVjdFNvdXJjZXM6IEhUTUxTZWxlY3RFbGVtZW50O1xyXG4gIERXVFNvdXJjZUNvdW50ID0gMDtcclxuICBmaWxlbmFtZSA9ICcnO1xyXG4gIGNvbnRhaW5lcklkID0gJ2R3dGNvbnRyb2xDb250YWluZXInO1xyXG4gIGJXQVNNID0gRHluYW1zb2Z0LkxpYi5lbnYuYk1vYmlsZSB8fCBEeW5hbXNvZnQuRFdULlVzZUxvY2FsU2VydmljZTtcclxuICBfaUxlZnQ7XHJcbiAgX2lUb3A7XHJcbiAgX2lSaWdodDtcclxuICBfaUJvdHRvbTtcclxuICBfc3RyVGVtcFN0ciA9ICcnO1xyXG4gIHJlID0gL15cXGQrJC87XHJcbiAgc3RycmUgPSAvXltcXHNcXHddKyQvO1xyXG4gIHJlZmxvYXQgPSAvXlxcZCtcXC4qXFxkKiQvaTtcclxuICBpbm5lckhUTUw6IHN0cmluZztcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZG9jdW1lbnRzU2VydmljZTogRG9jdW1lbnRzU2VydmljZSxcclxuICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwdWJsaWMgRG9jdW1lbnRTY2FuU2VydmljZTogRG9jdW1lbnRTY2FuU2VydmljZSxcclxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudCxcclxuICAgIEBJbmplY3QoQVBQX0JBU0VfSFJFRikgcHJpdmF0ZSBiYXNlSHJlZjogc3RyaW5nXHJcbiAgKSB7IH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIER5bmFtc29mdC5EV1QuUmVzb3VyY2VzUGF0aCA9IHRoaXMuYmFzZUhyZWYgKyAnL2Fzc2V0cy9kd3QtcmVzb3VyY2VzJztcclxuICAgIC8vL1xyXG4gICAgRHluYW1zb2Z0LkRXVC5BdXRvTG9hZCA9IHRydWU7XHJcbiAgICAvLy9cclxuICAgIC8vIGNvbnN0IHdpZHRoID0gd2luZG93Lm91dGVyV2lkdGggKiAwLjM7XHJcbiAgICAvLyBjb25zdCBoZWlnaHQgPSB3aW5kb3cub3V0ZXJIZWlnaHQgKiAwLjM7XHJcbiAgICBEeW5hbXNvZnQuRFdULkNvbnRhaW5lcnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBXZWJUd2FpbklkOiAnRFdUT2JqZWN0JyxcclxuICAgICAgICBDb250YWluZXJJZDogJ2R3dGNvbnRyb2xDb250YWluZXInLFxyXG4gICAgICAgIFdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgSGVpZ2h0OiAnMTAwJSdcclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICBEeW5hbXNvZnQuRFdULlByb2R1Y3RLZXkgPSB0aGlzLmVudmlyb25tZW50LmR5bmFtc29mdFByb2R1Y3RLZXk7XHJcbiAgICAvLyBEeW5hbXNvZnQuRFdULlRyaWFsID0gZmFsc2U7XHJcbiAgICAvLyBEeW5hbXNvZnQuRFdULkRlYnVnID0gZmFsc2U7IC8vIG9ubHkgZm9yIGRlYnVnZ2VyIG91dHB1dFxyXG5cclxuICAgIC8vL1xyXG4gICAgRHluYW1zb2Z0LkRXVC5JZkFkZE1ENUluVXBsb2FkSGVhZGVyID0gZmFsc2U7XHJcblxyXG4gICAgLy8vXHJcbiAgICBEeW5hbXNvZnQuRFdULklmQ29uZmluZU1hc2tXaXRoaW5UaGVWaWV3ZXIgPSBmYWxzZTtcclxuICAgIER5bmFtc29mdC5NU0cgPSB7XHJcbiAgICAgIENvbnZlcnRpbmdUb0Jhc2U2NDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAnc2Nhbm5lci5Db252ZXJ0aW5nVG9CYXNlNjQnXHJcbiAgICAgICksXHJcbiAgICAgIENvbnZlcnRpbmdUb0Jsb2I6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ3NjYW5uZXIuQ29udmVydGluZ1RvQmxvYidcclxuICAgICAgKSxcclxuICAgICAgRG93bmxvYWRpbmc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuRG93bmxvYWRpbmcnKSxcclxuICAgICAgRW5jb2Rpbmc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuRW5jb2RpbmcnKSxcclxuICAgICAgRXJyX0Jyb3dzZXJOb3RTdXBwb3J0V2FzbTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAnc2Nhbm5lci5FcnJfQnJvd3Nlck5vdFN1cHBvcnRXYXNtJ1xyXG4gICAgICApLFxyXG4gICAgICBJbml0X0FsbEpzTG9hZGVkOiBEeW5hbXNvZnQuTVNHLkluaXRfQWxsSnNMb2FkZWQsXHJcbiAgICAgIEluaXRfQ2hlY2tEV1Q6IER5bmFtc29mdC5NU0cuSW5pdF9DaGVja0RXVCxcclxuICAgICAgSW5pdF9DaGVja0RXVFZlcnNpb246IER5bmFtc29mdC5NU0cuSW5pdF9DaGVja0RXVFZlcnNpb24sXHJcbiAgICAgIEluaXRfQ2hlY2tpbmdMaWNlbnNlOiBEeW5hbXNvZnQuTVNHLkluaXRfQ2hlY2tpbmdMaWNlbnNlLFxyXG4gICAgICBJbml0X0NvbXBpbGluZ1dhc206IER5bmFtc29mdC5NU0cuSW5pdF9Db21waWxpbmdXYXNtLFxyXG4gICAgICBJbml0X0NvbmZpZ3VyaW5nRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfQ29uZmlndXJpbmdEV1QsXHJcbiAgICAgIEluaXRfQ3JlYXRpbmdEV1Q6IER5bmFtc29mdC5NU0cuSW5pdF9DcmVhdGluZ0RXVCxcclxuICAgICAgSW5pdF9Eb3dubG9hZGluZ1dhc206IER5bmFtc29mdC5NU0cuSW5pdF9Eb3dubG9hZGluZ1dhc20sXHJcbiAgICAgIEluaXRfRmlyZUJlZm9yZUluaXRFdnQ6IER5bmFtc29mdC5NU0cuSW5pdF9GaXJlQmVmb3JlSW5pdEV2dCxcclxuICAgICAgSW5pdF9HZXRMaWNlbnNlSW5mb0ZvckRXVDogRHluYW1zb2Z0Lk1TRy5Jbml0X0dldExpY2Vuc2VJbmZvRm9yRFdULFxyXG4gICAgICBJbml0X0luaXRBY3RpdmVYOiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdEFjdGl2ZVgsXHJcbiAgICAgIEluaXRfSW5pdER5bmFtc29mdFNlcnZpY2U6IER5bmFtc29mdC5NU0cuSW5pdF9Jbml0RHluYW1zb2Z0U2VydmljZSxcclxuICAgICAgSW5pdF9Jbml0SDU6IER5bmFtc29mdC5NU0cuSW5pdF9Jbml0SDUsXHJcbiAgICAgIEluaXRfSW5pdFdhc206IER5bmFtc29mdC5NU0cuSW5pdF9Jbml0V2FzbSxcclxuICAgICAgSW5pdF9Mb2FkaW5nVmlld2VySnM6IER5bmFtc29mdC5NU0cuSW5pdF9Mb2FkaW5nVmlld2VySnMsXHJcbiAgICAgIEluaXRfTG9va2luZ0xpY2Vuc2U6IER5bmFtc29mdC5NU0cuSW5pdF9Mb29raW5nTGljZW5zZSxcclxuICAgICAgSW5pdF9TZXRMaWNlbnNlRm9yRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfU2V0TGljZW5zZUZvckRXVCxcclxuICAgICAgTG9hZGluZzogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5Mb2FkaW5nJyksXHJcbiAgICAgIExvYWRpbmdQZGY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuTG9hZGluZ1BkZicpLFxyXG4gICAgICBMb2FkaW5nVGlmZjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5Mb2FkaW5nVGlmZicpLFxyXG4gICAgICBTYXZpbmdQZGY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuU2F2aW5nUGRmJyksXHJcbiAgICAgIFNhdmluZ1RpZmY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuU2F2aW5nVGlmZicpLFxyXG4gICAgICBVcGxvYWRpbmc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuVXBsb2FkaW5nJylcclxuICAgIH07XHJcbiAgICBEeW5hbXNvZnQuRFdULkN1c3RvbWl6YWJsZURpc3BsYXlJbmZvID0ge1xyXG4gICAgICBlcnJvck1lc3NhZ2VzOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLmVycm9yTWVzc2FnZXMnKSxcclxuXHJcbiAgICAgIC8vIGxhdW5jaFxyXG4gICAgICBnZW5lcmFsTWVzc2FnZXM6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuZ2VuZXJhbE1lc3NhZ2VzJyksXHJcblxyXG4gICAgICBjdXN0b21Qcm9ncmVzc1RleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ3NjYW5uZXIuY3VzdG9tUHJvZ3Jlc3NUZXh0J1xyXG4gICAgICApLFxyXG5cclxuICAgICAgLy8gaW1hZ2UgZWRpdG9yXHJcbiAgICAgIGJ1dHRvbnM6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuYnV0dG9ucycpLFxyXG5cclxuICAgICAgZGlhbG9nVGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5kaWFsb2dUZXh0JylcclxuICAgIH07XHJcblxyXG4gICAgRHluYW1zb2Z0LkRXVC5PbldlYlR3YWluUmVhZHkgPSAoKTogYW55ID0+IHtcclxuICAgICAgdGhpcy5wYWdlb25sb2FkKCk7XHJcbiAgICAgIHRoaXMuRHluYW1zb2Z0X09uUmVhZHkoKTtcclxuICAgIH07XHJcbiAgICBEeW5hbXNvZnQuRFdULkxvYWQoKTtcclxuXHJcbiAgICB0aGlzLm9uTWluaW1pemluZ1N1YnNjcmlwdGlvbiA9IHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS5vbk1pbmltaXppbmcuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuY29udmVydFRvQmxvYkZvclNhdmluZygpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5wYWdlb25sb2FkKCk7XHJcbiAgICBpZiAodGhpcy51c2VTdG9yZWRGaWxlKSB7XHJcbiAgICAgIGlmICh0aGlzLkRvY3VtZW50U2NhblNlcnZpY2Uuc3RvcmVkRmlsZSkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRTdG9yZWRGaWxlVG9TY2FubmVyKHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS5zdG9yZWRGaWxlKTtcclxuICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNldFN0b3JlZEZpbGVUb1NjYW5uZXIocmVzdWx0KSB7XHJcbiAgICB0aGlzLkRXT2JqZWN0LkxvYWRJbWFnZUZyb21CaW5hcnkoXHJcbiAgICAgIHJlc3VsdCxcclxuICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdzdWNjZXNzJyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGZ1bmN0aW9uIChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3JTdHJpbmcpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcGFnZW9ubG9hZCgpIHtcclxuICAgIHRoaXMuSGlkZUxvYWRJbWFnZUZvckxpbnV4KCk7XHJcbiAgICBjb25zdCB0d2FpbnNvdXJjZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdXJjZScpO1xyXG4gICAgaWYgKHR3YWluc291cmNlKSB7XHJcbiAgICAgIHR3YWluc291cmNlLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgdHdhaW5zb3VyY2Uub3B0aW9ucy5hZGQoXHJcbiAgICAgICAgbmV3IE9wdGlvbih0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLnBsZWFzZVdhaXQnKSwgJzAnKVxyXG4gICAgICApO1xyXG4gICAgICB0d2FpbnNvdXJjZS5vcHRpb25zWzBdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRpYXRlSW5wdXRzKCk7XHJcbiAgfVxyXG5cclxuICBIaWRlTG9hZEltYWdlRm9yTGludXgoKSB7XHJcbiAgICBjb25zdCBvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpTG9hZEltYWdlJyk7XHJcbiAgICBpZiAobykge1xyXG4gICAgICBpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYkxpbnV4KSB7IG8uc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfVxyXG4gICAgICBlbHNlIHsgby5zdHlsZS5kaXNwbGF5ID0gJyc7IH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRpYXRlSW5wdXRzKCkge1xyXG4gICAgY29uc3QgYWxsaW5wdXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbGlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoYWxsaW5wdXRzW2ldLnR5cGUgPT09ICdjaGVja2JveCcpIHtcclxuICAgICAgICBhbGxpbnB1dHNbaV0uY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKGFsbGlucHV0c1tpXS50eXBlID09PSAndGV4dCcpIHtcclxuICAgICAgICBhbGxpbnB1dHNbaV0udmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYklFID09PSB0cnVlICYmIER5bmFtc29mdC5MaWIuZW52LmJXaW42NCA9PT0gdHJ1ZSkge1xyXG4gICAgICBsZXQgbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYW1wbGVzb3VyY2U2NGJpdCcpO1xyXG4gICAgICBpZiAobykgeyBvLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsgfVxyXG5cclxuICAgICAgbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYW1wbGVzb3VyY2UzMmJpdCcpO1xyXG4gICAgICBpZiAobykgeyBvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXREbGxGb3JDaGFuZ2VJbWFnZVNpemUoKSB7XHJcbiAgICBjb25zdCB2SW50ZXJwb2xhdGlvbk1ldGhvZDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICdJbnRlcnBvbGF0aW9uTWV0aG9kJ1xyXG4gICAgKTtcclxuICAgIHZJbnRlcnBvbGF0aW9uTWV0aG9kLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuICAgIHZJbnRlcnBvbGF0aW9uTWV0aG9kLm9wdGlvbnMuYWRkKG5ldyBPcHRpb24oJ05lYXJlc3ROZWlnaGJvcicsICcxJykpO1xyXG4gICAgdkludGVycG9sYXRpb25NZXRob2Qub3B0aW9ucy5hZGQobmV3IE9wdGlvbignQmlsaW5lYXInLCAnMicpKTtcclxuICAgIHZJbnRlcnBvbGF0aW9uTWV0aG9kLm9wdGlvbnMuYWRkKG5ldyBPcHRpb24oJ0JpY3ViaWMnLCAnMycpKTtcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRWYWx1ZSgpIHtcclxuICAgIGNvbnN0IHZHcmF5OiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnR3JheScpO1xyXG4gICAgaWYgKHZHcmF5KSB7IHZHcmF5LmNoZWNrZWQgPSB0cnVlOyB9XHJcblxyXG4gICAgY29uc3QgdmFySW1nVHlwZXBuZzI6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdUeXBlcG5nMicpO1xyXG4gICAgaWYgKHZhckltZ1R5cGVwbmcyKSB7IHZhckltZ1R5cGVwbmcyLmNoZWNrZWQgPSB0cnVlOyB9XHJcbiAgICBjb25zdCB2YXJJbWdUeXBlcG5nOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nVHlwZXBuZycpO1xyXG4gICAgaWYgKHZhckltZ1R5cGVwbmcpIHsgdmFySW1nVHlwZXBuZy5jaGVja2VkID0gdHJ1ZTsgfVxyXG5cclxuICAgIGNvbnN0IF9zdHJEZWZhdWx0U2F2ZUltYWdlTmFtZSA9ICdXZWJUV0FJTkltYWdlJztcclxuICAgIGNvbnN0IF90eHRGaWxlTmFtZWZvclNhdmU6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAndHh0X2ZpbGVOYW1lZm9yU2F2ZSdcclxuICAgICk7XHJcbiAgICBpZiAoX3R4dEZpbGVOYW1lZm9yU2F2ZSkge1xyXG4gICAgICBfdHh0RmlsZU5hbWVmb3JTYXZlLnZhbHVlID0gX3N0ckRlZmF1bHRTYXZlSW1hZ2VOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IF90eHRGaWxlTmFtZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4dF9maWxlTmFtZScpO1xyXG4gICAgaWYgKF90eHRGaWxlTmFtZSkgeyBfdHh0RmlsZU5hbWUudmFsdWUgPSBfc3RyRGVmYXVsdFNhdmVJbWFnZU5hbWU7IH1cclxuXHJcbiAgICBjb25zdCBfY2hrTXVsdGlQYWdlVElGRl9zYXZlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ011bHRpUGFnZVRJRkZfc2F2ZSdcclxuICAgICk7XHJcbiAgICBpZiAoX2Noa011bHRpUGFnZVRJRkZfc2F2ZSkgeyBfY2hrTXVsdGlQYWdlVElGRl9zYXZlLmRpc2FibGVkID0gdHJ1ZTsgfVxyXG4gICAgY29uc3QgX2Noa011bHRpUGFnZVBERl9zYXZlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ011bHRpUGFnZVBERl9zYXZlJ1xyXG4gICAgKTtcclxuICAgIGlmIChfY2hrTXVsdGlQYWdlUERGX3NhdmUpIHsgX2Noa011bHRpUGFnZVBERl9zYXZlLmRpc2FibGVkID0gdHJ1ZTsgfVxyXG4gICAgY29uc3QgX2Noa011bHRpUGFnZVRJRkY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VUSUZGJyk7XHJcbiAgICBpZiAoX2Noa011bHRpUGFnZVRJRkYpIHsgX2Noa011bHRpUGFnZVRJRkYuZGlzYWJsZWQgPSB0cnVlOyB9XHJcbiAgICBjb25zdCBfY2hrTXVsdGlQYWdlUERGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlUERGJyk7XHJcbiAgICBpZiAoX2Noa011bHRpUGFnZVBERikgeyBfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gdHJ1ZTsgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRyb2wgaXMgZnVsbHkgbG9hZGVkLlxyXG4gIER5bmFtc29mdF9PblJlYWR5KCkge1xyXG4gICAgY29uc3QgbGlOb1NjYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncE5vU2Nhbm5lcicpO1xyXG4gICAgLy8gSWYgdGhlIEVycm9yQ29kZSBpcyAwLCBpdCBtZWFucyBldmVyeXRoaW5nIGlzIGZpbmUgZm9yIHRoZSBjb250cm9sLiBJdCBpcyBmdWxseSBsb2FkZWQuXHJcbiAgICB0aGlzLkRXT2JqZWN0ID0gRHluYW1zb2Z0LkRXVC5HZXRXZWJUd2FpbignZHd0Y29udHJvbENvbnRhaW5lcicpO1xyXG4gICAgaWYgKHRoaXMuRFdPYmplY3QpIHtcclxuICAgICAgaWYgKHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5Mb2dMZXZlbCA9IDA7XHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5JZkFsbG93TG9jYWxDYWNoZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5JbWFnZUNhcHR1cmVEcml2ZXJUeXBlID0gNDtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoXHJcbiAgICAgICAgICAnT25Ub3BJbWFnZUluVGhlVmlld0NoYW5nZWQnLFxyXG4gICAgICAgICAgdGhpcy5EeW5hbXNvZnRfT25Ub3BJbWFnZUluVGhlVmlld0NoYW5nZWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudChcclxuICAgICAgICAgICdPbk1vdXNlQ2xpY2snLFxyXG4gICAgICAgICAgdGhpcy5EeW5hbXNvZnRfT25Nb3VzZUNsaWNrXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IHR3YWluc291cmNlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNlJyk7XHJcbiAgICAgICAgaWYgKCF0d2FpbnNvdXJjZSkge1xyXG4gICAgICAgICAgdHdhaW5zb3VyY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2ViY2Ftc291cmNlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB2Q291bnQgPSB0aGlzLkRXT2JqZWN0LlNvdXJjZUNvdW50O1xyXG4gICAgICAgIHRoaXMuRFdUU291cmNlQ291bnQgPSB2Q291bnQ7XHJcblxyXG4gICAgICAgIGlmICh0d2FpbnNvdXJjZSkge1xyXG4gICAgICAgICAgdHdhaW5zb3VyY2Uub3B0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICB0d2FpbnNvdXJjZS5vcHRpb25zLmFkZChcclxuICAgICAgICAgICAgICBuZXcgT3B0aW9uKHRoaXMuRFdPYmplY3QuR2V0U291cmNlTmFtZUl0ZW1zKGkpLCBpLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiBzb3VyY2UgbGlzdCBuZWVkIHRvIGJlIGRpc3BsYXllZCwgZmlsbCBpbiB0aGUgc291cmNlIGl0ZW1zLlxyXG4gICAgICAgIGlmICh2Q291bnQgPT09IDApIHtcclxuICAgICAgICAgIGlmIChsaU5vU2Nhbm5lcikge1xyXG4gICAgICAgICAgICBpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYldpbikge1xyXG4gICAgICAgICAgICAgIGxpTm9TY2FubmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgIGxpTm9TY2FubmVyLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB9IGVsc2UgeyBsaU5vU2Nhbm5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodkNvdW50ID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5zb3VyY2Vfb25jaGFuZ2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChEeW5hbXNvZnQuTGliLmVudi5iV2luKSB7IHRoaXMuRFdPYmplY3QuTW91c2VTaGFwZSA9IGZhbHNlOyB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJ0blNjYW46IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5TY2FuJyk7XHJcbiAgICAgICAgaWYgKGJ0blNjYW4pIHtcclxuICAgICAgICAgIGlmICh2Q291bnQgPT09IDApIHsgYnRuU2Nhbi5kaXNhYmxlZCA9IHRydWU7IH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBidG5TY2FuLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUR5bmFtc29mdC5MaWIuZW52LmJXaW4gJiYgdkNvdW50ID4gMCkge1xyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdERsbEZvckNoYW5nZUltYWdlU2l6ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLl9pTGVmdCA9IDA7XHJcbiAgICAgICAgdGhpcy5faVRvcCA9IDA7XHJcbiAgICAgICAgdGhpcy5faVJpZ2h0ID0gMDtcclxuICAgICAgICB0aGlzLl9pQm90dG9tID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2N1bWVudC5saW5rcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmxpbmtzW2ldLmNsYXNzTmFtZSA9PT0gJ1Nob3d0YmxMb2FkSW1hZ2UnKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmxpbmtzW2ldLm9uY2xpY2sgPSB0aGlzLnNob3d0YmxMb2FkSW1hZ2Vfb25jbGljaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkb2N1bWVudC5saW5rc1tpXS5jbGFzc05hbWUgPT09ICdDbG9zZXRibExvYWRJbWFnZScpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQubGlua3NbaV0ub25jbGljayA9IHRoaXMuY2xvc2V0YmxMb2FkSW1hZ2Vfb25jbGljaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZDb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKER5bmFtc29mdC5MaWIuZW52LmJXaW4pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhTm9TY2FubmVyJykgJiZcclxuICAgICAgICAgICAgICB3aW5kb3dbJ2JEV1RPbmxpbmVEZW1vJ11cclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZfU2NhbkltYWdlJykuc3R5bGUuZGlzcGxheSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd3RibExvYWRJbWFnZV9vbmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Jlc29sdXRpb24nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGRpdkJsYW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdkJsYW5rJyk7XHJcbiAgICAgICAgICBpZiAoZGl2QmxhbmspIHsgZGl2Qmxhbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gICAgICAgIGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghdWEuaW5kZXhPZignbXNpZSA2LjAnKSkge1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KFxyXG4gICAgICAgICAgJ09uUG9zdFRyYW5zZmVyJyxcclxuICAgICAgICAgIHRoaXMuRHluYW1zb2Z0X09uUG9zdFRyYW5zZmVyXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoXHJcbiAgICAgICAgICAnT25Qb3N0TG9hZCcsXHJcbiAgICAgICAgICB0aGlzLkR5bmFtc29mdF9PblBvc3RMb2FkZnVuY3Rpb25cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudChcclxuICAgICAgICAgICdPblBvc3RBbGxUcmFuc2ZlcnMnLFxyXG4gICAgICAgICAgdGhpcy5EeW5hbXNvZnRfT25Qb3N0QWxsVHJhbnNmZXJzXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoXHJcbiAgICAgICAgICAnT25JbWFnZUFyZWFTZWxlY3RlZCcsXHJcbiAgICAgICAgICB0aGlzLkR5bmFtc29mdF9PbkltYWdlQXJlYVNlbGVjdGVkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoXHJcbiAgICAgICAgICAnT25JbWFnZUFyZWFEZVNlbGVjdGVkJyxcclxuICAgICAgICAgIHRoaXMuRHluYW1zb2Z0X09uSW1hZ2VBcmVhRGVzZWxlY3RlZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KFxyXG4gICAgICAgICAgJ09uR2V0RmlsZVBhdGgnLFxyXG4gICAgICAgICAgdGhpcy5EeW5hbXNvZnRfT25HZXRGaWxlUGF0aFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3d0YmxMb2FkSW1hZ2Vfb25jbGljaygpIHtcclxuICAgIHN3aXRjaCAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RibExvYWRJbWFnZScpLnN0eWxlLnZpc2liaWxpdHkpIHtcclxuICAgICAgY2FzZSAnaGlkZGVuJzpcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsTG9hZEltYWdlJykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlzaWJsZSc6XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RibExvYWRJbWFnZScpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BOb1NjYW5uZXInKSkge1xyXG4gICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRibExvYWRJbWFnZVwiKS5zdHlsZS50b3AgPSBkc19nZXR0b3AoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwTm9TY2FubmVyXCIpKSArIHBOb1NjYW5uZXIub2Zmc2V0SGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRibExvYWRJbWFnZVwiKS5zdHlsZS5sZWZ0ID0gZHNfZ2V0bGVmdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBOb1NjYW5uZXJcIikpICsgMCArIFwicHhcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNsb3NldGJsTG9hZEltYWdlX29uY2xpY2soKSB7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsTG9hZEltYWdlJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Jlc29sdXRpb24nKS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBVc2VkIGEgbG90ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICB1cGRhdGVQYWdlSW5mbygpIHtcclxuICAgIGNvbnN0IHRvdGFsSW1hZ2U6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19Ub3RhbEltYWdlJyk7XHJcbiAgICBjb25zdCBjdXJyZW50SW1hZ2U6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19DdXJyZW50SW1hZ2UnKTtcclxuICAgIGlmICh0b3RhbEltYWdlKSB7IHRvdGFsSW1hZ2UudmFsdWUgPSB0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlcjsgfVxyXG4gICAgaWYgKGN1cnJlbnRJbWFnZSkge1xyXG4gICAgICBjdXJyZW50SW1hZ2UudmFsdWUgPSB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgKyAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwZW5kTWVzc2FnZShzdHJNZXNzYWdlKSB7XHJcbiAgICB0aGlzLl9zdHJUZW1wU3RyICs9IHN0ck1lc3NhZ2U7XHJcbiAgICBjb25zdCBfZGl2TWVzc2FnZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV1RlbWVzc2FnZScpO1xyXG4gICAgaWYgKF9kaXZNZXNzYWdlQ29udGFpbmVyKSB7XHJcbiAgICAgIF9kaXZNZXNzYWdlQ29udGFpbmVyLmlubmVySFRNTCA9IHRoaXMuX3N0clRlbXBTdHI7XHJcbiAgICAgIF9kaXZNZXNzYWdlQ29udGFpbmVyLnNjcm9sbFRvcCA9IF9kaXZNZXNzYWdlQ29udGFpbmVyLnNjcm9sbEhlaWdodDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpIHtcclxuICAgIGlmICh0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlciA9PT0gMCkge1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJ1RoZXJlIGlzIG5vIGltYWdlIGluIGJ1ZmZlci48YnIgLz4nKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHsgcmV0dXJuIHRydWU7IH1cclxuICB9XHJcblxyXG4gIGNoZWNrRXJyb3JTdHJpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja0Vycm9yU3RyaW5nV2l0aEVycm9yQ29kZShcclxuICAgICAgdGhpcy5EV09iamVjdC5FcnJvckNvZGUsXHJcbiAgICAgIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjaGVja0Vycm9yU3RyaW5nV2l0aEVycm9yQ29kZShlcnJvckNvZGUsIGVycm9yU3RyaW5nLCByZXNwb25zZVN0cmluZyA9IG51bGwpIHtcclxuICAgIGlmIChlcnJvckNvZGUgPT09IDApIHtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKFxyXG4gICAgICAgICc8c3BhbiBzdHlsZT1cXCdjb2xvcjojY0U1RTA0XFwnPjxiPicgKyBlcnJvclN0cmluZyArICc8L2I+PC9zcGFuPjxiciAvPidcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGVycm9yQ29kZSA9PT0gLTIxMTUpIHtcclxuICAgICAgLy8gQ2FuY2VsIGZpbGUgZGlhbG9nXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChlcnJvckNvZGUgPT09IC0yMDAzKSB7XHJcbiAgICAgICAgY29uc3QgRXJyb3JNZXNzYWdlV2luID0gd2luZG93Lm9wZW4oXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICdFcnJvck1lc3NhZ2UnLFxyXG4gICAgICAgICAgJ2hlaWdodD01MDAsd2lkdGg9NzUwLHRvcD0wLGxlZnQ9MCx0b29sYmFyPW5vLG1lbnViYXI9bm8sc2Nyb2xsYmFycz1ubywgcmVzaXphYmxlPW5vLGxvY2F0aW9uPW5vLCBzdGF0dXM9bm8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBFcnJvck1lc3NhZ2VXaW4uZG9jdW1lbnQud3JpdGVsbihyZXNwb25zZVN0cmluZyk7IC8vIHRoaXMuRFdPYmplY3QuSFRUUFBvc3RSZXNwb25zZVN0cmluZyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKFxyXG4gICAgICAgICc8c3BhbiBzdHlsZT1cXCdjb2xvcjojY0U1RTA0XFwnPjxiPicgKyBlcnJvclN0cmluZyArICc8L2I+PC9zcGFuPjxiciAvPidcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIFVzZWQgYSBsb3QgKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIGRzX2dldGxlZnQoZWwpIHtcclxuICAgIGxldCB0bXAgPSBlbC5vZmZzZXRMZWZ0O1xyXG4gICAgZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XHJcbiAgICB3aGlsZSAoZWwpIHtcclxuICAgICAgdG1wICs9IGVsLm9mZnNldExlZnQ7XHJcbiAgICAgIGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRtcDtcclxuICB9XHJcbiAgZHNfZ2V0dG9wKGVsKSB7XHJcbiAgICBsZXQgdG1wID0gZWwub2Zmc2V0VG9wO1xyXG4gICAgZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XHJcbiAgICB3aGlsZSAoZWwpIHtcclxuICAgICAgdG1wICs9IGVsLm9mZnNldFRvcDtcclxuICAgICAgZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG1wO1xyXG4gIH1cclxuXHJcbiAgT3Zlcl9PdXRfRGVtb0ltYWdlKG9iaiwgdXJsKSB7XHJcbiAgICBvYmouc3JjID0gdXJsO1xyXG4gIH1cclxuICBzb3VyY2Vfb25jaGFuZ2UoKSB7XHJcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdlR3YWluVHlwZScpKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZUd2FpblR5cGUnKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKSkge1xyXG4gICAgICBjb25zdCBjSW5kZXggPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdXJjZScpIGFzIEhUTUxTZWxlY3RFbGVtZW50KVxyXG4gICAgICAgIC5zZWxlY3RlZEluZGV4O1xyXG4gICAgICBpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYk1hYykge1xyXG4gICAgICAgIGNvbnN0IHN0clNvdXJjZU5hbWUgPSB0aGlzLkRXT2JqZWN0LkdldFNvdXJjZU5hbWVJdGVtcyhjSW5kZXgpO1xyXG4gICAgICAgIGlmIChzdHJTb3VyY2VOYW1lLmluZGV4T2YoJ0lDQScpID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHsgdGhpcy5EV09iamVjdC5TZWxlY3RTb3VyY2VCeUluZGV4KGNJbmRleCk7IH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1lZGlhVHlwZV9vbmNoYW5nZSgpIHtcclxuICAgIGNvbnN0IE1lZGlhVHlwZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ01lZGlhVHlwZScpO1xyXG4gICAgaWYgKE1lZGlhVHlwZSAmJiBNZWRpYVR5cGUub3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlTWVkaWFUeXBlID0gTWVkaWFUeXBlLm9wdGlvbnNbTWVkaWFUeXBlLnNlbGVjdGVkSW5kZXhdLnRleHQ7XHJcbiAgICAgIGlmICh2YWx1ZU1lZGlhVHlwZSAhPT0gJycpIHtcclxuICAgICAgICBpZiAoIXRoaXMuRFdPYmplY3QuQWRkb24uV2ViY2FtLlNldE1lZGlhVHlwZSh2YWx1ZU1lZGlhVHlwZSkpIHtcclxuICAgICAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RXJyb3Igc2V0dGluZyBNZWRpYVR5cGUgdmFsdWU6IDwvYj4nKTtcclxuICAgICAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZShcclxuICAgICAgICAgICAgJzxzcGFuIHN0eWxlPVxcJ2NvbG9yOiNjRTVFMDRcXCc+PGI+JyArXHJcbiAgICAgICAgICAgIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcgK1xyXG4gICAgICAgICAgICAnPC9iPjwvc3Bhbj48YnIgLz4nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFJlc29sdXRpb25XZWJjYW06IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uV2ViY2FtJyk7XHJcbiAgICBpZiAoUmVzb2x1dGlvbldlYmNhbSkge1xyXG4gICAgICBSZXNvbHV0aW9uV2ViY2FtLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgY29uc3QgYXJ5UmVzb2x1dGlvbiA9IHRoaXMuRFdPYmplY3QuQWRkb24uV2ViY2FtLkdldFJlc29sdXRpb24oKTtcclxuICAgICAgY29uc3QgY291bnRSZXNvbHV0aW9uID0gYXJ5UmVzb2x1dGlvbi5HZXRDb3VudCgpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50UmVzb2x1dGlvbjsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhcnlSZXNvbHV0aW9uLkdldChpKTtcclxuICAgICAgICBSZXNvbHV0aW9uV2ViY2FtLm9wdGlvbnMuYWRkKG5ldyBPcHRpb24odmFsdWUsIHZhbHVlKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS1BY3F1aXJlIEltYWdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgYWNxdWlyZUltYWdlKCkge1xyXG4gICAgY29uc3QgY0luZGV4ID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKSBhcyBIVE1MU2VsZWN0RWxlbWVudClcclxuICAgICAgLnNlbGVjdGVkSW5kZXg7XHJcbiAgICBpZiAoY0luZGV4IDwgMCkgeyByZXR1cm47IH1cclxuXHJcbiAgICB0aGlzLkRXT2JqZWN0LlNlbGVjdFNvdXJjZUJ5SW5kZXgoY0luZGV4KTtcclxuICAgIHRoaXMuRFdPYmplY3QuQ2xvc2VTb3VyY2UoKTtcclxuICAgIHRoaXMuRFdPYmplY3QuT3BlblNvdXJjZSgpO1xyXG4gICAgdGhpcy5EV09iamVjdC5JZlNob3dVSSA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ1Nob3dVSSdcclxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuXHJcbiAgICBsZXQgaTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnUGl4ZWxUeXBlJykuaXRlbShpKSBhcyBIVE1MSW5wdXRFbGVtZW50KVxyXG4gICAgICAgICAgLmNoZWNrZWQgPT09IHRydWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5QaXhlbFR5cGUgPSBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5EV09iamVjdC5FcnJvckNvZGUgIT09IDApIHtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIFBpeGVsVHlwZSB2YWx1ZTogPC9iPicpO1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcbiAgICAgICAgJzxzcGFuIHN0eWxlPVxcJ2NvbG9yOiNjRTVFMDRcXCc+PGI+JyArXHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArXHJcbiAgICAgICAgJzwvYj48L3NwYW4+PGJyIC8+J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5SZXNvbHV0aW9uID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAnUmVzb2x1dGlvbidcclxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICBpZiAodGhpcy5EV09iamVjdC5FcnJvckNvZGUgIT09IDApIHtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIFJlc29sdXRpb24gdmFsdWU6IDwvYj4nKTtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKFxyXG4gICAgICAgICc8c3BhbiBzdHlsZT1cXCdjb2xvcjojY0U1RTA0XFwnPjxiPicgK1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcgK1xyXG4gICAgICAgICc8L2I+PC9zcGFuPjxiciAvPidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiQURGQ2hlY2tlZCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQURGJykgYXMgSFRNTElucHV0RWxlbWVudClcclxuICAgICAgLmNoZWNrZWQ7XHJcbiAgICB0aGlzLkRXT2JqZWN0LklmRmVlZGVyRW5hYmxlZCA9IGJBREZDaGVja2VkO1xyXG4gICAgaWYgKGJBREZDaGVja2VkID09PSB0cnVlICYmIHRoaXMuRFdPYmplY3QuRXJyb3JDb2RlICE9PSAwKSB7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+RXJyb3Igc2V0dGluZyBBREYgdmFsdWU6IDwvYj4nKTtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKFxyXG4gICAgICAgICc8c3BhbiBzdHlsZT1cXCdjb2xvcjojY0U1RTA0XFwnPjxiPicgK1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuRXJyb3JTdHJpbmcgK1xyXG4gICAgICAgICc8L2I+PC9zcGFuPjxiciAvPidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiRHVwbGV4Q2hlY2tlZCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ0R1cGxleCdcclxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuICAgIHRoaXMuRFdPYmplY3QuSWZEdXBsZXhFbmFibGVkID0gYkR1cGxleENoZWNrZWQ7XHJcbiAgICBpZiAoYkR1cGxleENoZWNrZWQgPT09IHRydWUgJiYgdGhpcy5EV09iamVjdC5FcnJvckNvZGUgIT09IDApIHtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIER1cGxleCB2YWx1ZTogPC9iPicpO1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcbiAgICAgICAgJzxzcGFuIHN0eWxlPVxcJ2NvbG9yOiNjRTVFMDRcXCc+PGI+JyArXHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArXHJcbiAgICAgICAgJzwvYj48L3NwYW4+PGJyIC8+J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBEeW5hbXNvZnQuTGliLmVudi5iV2luIHx8XHJcbiAgICAgICghRHluYW1zb2Z0LkxpYi5lbnYuYldpbiAmJiB0aGlzLkRXT2JqZWN0LkltYWdlQ2FwdHVyZURyaXZlclR5cGUgPT09IDApXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKFxyXG4gICAgICAgICdQaXhlbCBUeXBlOiAnICtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlBpeGVsVHlwZSArXHJcbiAgICAgICAgJzxiciAvPlJlc29sdXRpb246ICcgK1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUmVzb2x1dGlvbiArXHJcbiAgICAgICAgJzxiciAvPidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuSWZEaXNhYmxlU291cmNlQWZ0ZXJBY3F1aXJlID0gdHJ1ZTtcclxuICAgIHRoaXMuRFdPYmplY3QuQWNxdWlyZUltYWdlKCk7XHJcbiAgfVxyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tTG9hZCBJbWFnZS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgYnRuTG9hZEltYWdlc09yUERGc19vbmNsaWNrKCkge1xyXG5cclxuICAgIGNvbnN0IE9uUERGU3VjY2VzcyA9ICgpID0+IHtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCdMb2FkZWQgYW4gaW1hZ2Ugc3VjY2Vzc2Z1bGx5Ljxici8+Jyk7XHJcbiAgICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgT25QREZGYWlsdXJlID0gKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5jaGVja0Vycm9yU3RyaW5nV2l0aEVycm9yQ29kZShlcnJvckNvZGUsIGVycm9yU3RyaW5nKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5EV09iamVjdC5JZlNob3dGaWxlRGlhbG9nID0gdHJ1ZTtcclxuICAgIHRoaXMuRFdPYmplY3QuQWRkb24uUERGLlNldFJlc29sdXRpb24oMjAwKTtcclxuICAgIHRoaXMuRFdPYmplY3QuQWRkb24uUERGLlNldENvbnZlcnRNb2RlKFxyXG4gICAgICBEeW5hbXNvZnQuRFdULkVudW1EV1RfQ29udmVydE1vZGUuQ01fUkVOREVSQUxMXHJcbiAgICApO1xyXG4gICAgdGhpcy5EV09iamVjdC5Mb2FkSW1hZ2VFeChcclxuICAgICAgJycsXHJcbiAgICAgIER5bmFtc29mdC5EV1QuRW51bURXVF9JbWFnZVR5cGUuSVRfQUxMLFxyXG4gICAgICBPblBERlN1Y2Nlc3MsXHJcbiAgICAgIE9uUERGRmFpbHVyZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKiogRWRpdCBJbWFnZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBidG5TaG93SW1hZ2VFZGl0b3Jfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LlNob3dJbWFnZUVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgYnRuUm90YXRlUmlnaHRfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LlJvdGF0ZVJpZ2h0KHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcik7XHJcbiAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPlJvdGF0ZSByaWdodDogPC9iPicpO1xyXG4gICAgaWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbiAgYnRuUm90YXRlTGVmdF9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuUm90YXRlTGVmdCh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIpO1xyXG4gICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5Sb3RhdGUgbGVmdDogPC9iPicpO1xyXG4gICAgaWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ0blJvdGF0ZTE4MF9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuUm90YXRlKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciwgMTgwLCB0cnVlKTtcclxuICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+Um90YXRlIDE4MDogPC9iPicpO1xyXG4gICAgaWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ0bk1pcnJvcl9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuTWlycm9yKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcik7XHJcbiAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPk1pcnJvcjogPC9iPicpO1xyXG4gICAgaWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbiAgYnRuRmxpcF9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuRmxpcCh0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIpO1xyXG4gICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5GbGlwOiA8L2I+Jyk7XHJcbiAgICBpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ3JvcCBNZXRob2QtLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gIGJ0bkNyb3Bfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2lMZWZ0ICE9PSAwIHx8XHJcbiAgICAgIHRoaXMuX2lUb3AgIT09IDAgfHxcclxuICAgICAgdGhpcy5faVJpZ2h0ICE9PSAwIHx8XHJcbiAgICAgIHRoaXMuX2lCb3R0b20gIT09IDBcclxuICAgICkge1xyXG4gICAgICB0aGlzLkRXT2JqZWN0LkNyb3AoXHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyLFxyXG4gICAgICAgIHRoaXMuX2lMZWZ0LFxyXG4gICAgICAgIHRoaXMuX2lUb3AsXHJcbiAgICAgICAgdGhpcy5faVJpZ2h0LFxyXG4gICAgICAgIHRoaXMuX2lCb3R0b21cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5faUxlZnQgPSAwO1xyXG4gICAgICB0aGlzLl9pVG9wID0gMDtcclxuICAgICAgdGhpcy5faVJpZ2h0ID0gMDtcclxuICAgICAgdGhpcy5faUJvdHRvbSA9IDA7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+Q3JvcDogPC9iPicpO1xyXG4gICAgICBpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKFxyXG4gICAgICAgICc8Yj5Dcm9wOiA8L2I+ZmFpbGVkLiBQbGVhc2UgZmlyc3Qgc2VsZWN0IHRoZSBhcmVhIHlvdVxcJ2QgbGlrZSB0byBjcm9wLjxiciAvPidcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyotLS0tLS0tLS0tLS0tLS0tQ2hhbmdlIEltYWdlIFNpemUtLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgYnRuQ2hhbmdlSW1hZ2VTaXplX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW1nU2l6ZUVkaXRvcicpLnN0eWxlLnZpc2liaWxpdHkpIHtcclxuICAgICAgY2FzZSAndmlzaWJsZSc6XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2hpZGRlbic6XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJJbWdTaXplRWRpdG9yXCIpLnN0eWxlLnRvcCA9IGRzX2dldHRvcChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ0bkNoYW5nZUltYWdlU2l6ZVwiKSkgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ0bkNoYW5nZUltYWdlU2l6ZVwiKS5vZmZzZXRIZWlnaHQgKyAxNSArIFwicHhcIjtcclxuICAgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiSW1nU2l6ZUVkaXRvclwiKS5zdHlsZS5sZWZ0ID0gZHNfZ2V0bGVmdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ0bkNoYW5nZUltYWdlU2l6ZVwiKSkgLSAxNCArIFwicHhcIjtcclxuXHJcbiAgICBjb25zdCBpV2lkdGggPSB0aGlzLkRXT2JqZWN0LkdldEltYWdlV2lkdGgoXHJcbiAgICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlclxyXG4gICAgKTtcclxuICAgIGlmIChpV2lkdGggIT09IC0xKSB7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSBpV2lkdGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpSGVpZ2h0ID0gdGhpcy5EV09iamVjdC5HZXRJbWFnZUhlaWdodChcclxuICAgICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyXHJcbiAgICApO1xyXG4gICAgaWYgKGlIZWlnaHQgIT09IC0xKSB7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgICAnaW1nX2hlaWdodCdcclxuICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9IGlIZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGJ0bkNhbmNlbENoYW5nZV9vbmNsaWNrKCkge1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ltZ1NpemVFZGl0b3InKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgfVxyXG5cclxuICBidG5DaGFuZ2VJbWFnZVNpemVPS19vbmNsaWNrKCkge1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ19oZWlnaHQnKS5jbGFzc05hbWUgPSAnJztcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKS5jbGFzc05hbWUgPSAnJztcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMucmUudGVzdChcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ19oZWlnaHQnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZVxyXG4gICAgICApXHJcbiAgICApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ19oZWlnaHQnKS5jbGFzc05hbWUgKz0gJyBpbnZhbGlkJztcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ19oZWlnaHQnKS5mb2N1cygpO1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJ1BsZWFzZSBpbnB1dCBhIHZhbGlkIDxiPmhlaWdodDwvYj4uPGJyIC8+Jyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMucmUudGVzdChcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlXHJcbiAgICAgIClcclxuICAgICkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykuY2xhc3NOYW1lICs9ICcgaW52YWxpZCc7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKS5mb2N1cygpO1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJ1BsZWFzZSBpbnB1dCBhIHZhbGlkIDxiPndpZHRoPC9iPi48YnIgLz4nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5DaGFuZ2VJbWFnZVNpemUoXHJcbiAgICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcixcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSxcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfaGVpZ2h0JykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsXHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW50ZXJwb2xhdGlvbk1ldGhvZCcpIGFzIEhUTUxTZWxlY3RFbGVtZW50KVxyXG4gICAgICAgIC5zZWxlY3RlZEluZGV4ICsgMVxyXG4gICAgKTtcclxuICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+Q2hhbmdlIEltYWdlIFNpemU6IDwvYj4nKTtcclxuICAgIGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW1nU2l6ZUVkaXRvcicpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIFNhdmUgSW1hZ2UqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICBidG5TYXZlX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RyaW1nVHlwZV9zYXZlID0gJ3BkZic7XHJcblxyXG4gICAgdGhpcy5EV09iamVjdC5JZlNob3dGaWxlRGlhbG9nID0gdHJ1ZTtcclxuICAgIGNvbnN0IF90eHRGaWxlTmFtZWZvclNhdmU6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eHRfZmlsZU5hbWUnKTtcclxuICAgIGlmIChfdHh0RmlsZU5hbWVmb3JTYXZlKSB7IF90eHRGaWxlTmFtZWZvclNhdmUuY2xhc3NOYW1lID0gJyc7IH1cclxuICAgIGxldCBiU2F2ZTogYW55ID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3Qgc3RyRmlsZVBhdGggPSBfdHh0RmlsZU5hbWVmb3JTYXZlLnZhbHVlICsgJy4nICsgc3RyaW1nVHlwZV9zYXZlO1xyXG5cclxuICAgIGNvbnN0IE9uU3VjY2VzcyA9ICgpID0+IHtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5TYXZlIEltYWdlOiA8L2I+Jyk7XHJcbiAgICAgIHRoaXMuY2hlY2tFcnJvclN0cmluZ1dpdGhFcnJvckNvZGUoMCwgJ1N1Y2Nlc3NmdWwuJyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IE9uRmFpbHVyZSA9IChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hlY2tFcnJvclN0cmluZ1dpdGhFcnJvckNvZGUoZXJyb3JDb2RlLCBlcnJvclN0cmluZyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGJTYXZlID0gdGhpcy5EV09iamVjdC5TYXZlQWxsQXNQREYoc3RyRmlsZVBhdGgsIE9uU3VjY2VzcywgT25GYWlsdXJlKTtcclxuXHJcbiAgICBpZiAoYlNhdmUpIHsgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5TYXZlIEltYWdlOiA8L2I+Jyk7IH1cclxuICAgIGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKiogVXBsb2FkIEltYWdlKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIG1ha2VpZChsZW5ndGgpIHtcclxuICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgIGNvbnN0IGNoYXJhY3RlcnMgPVxyXG4gICAgICAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xyXG4gICAgY29uc3QgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0Jsb2IoKSB7XHJcbiAgICB0aGlzLkRvY3VtZW50U2NhblNlcnZpY2UudXBsb2FkU3RhcnQuZW1pdCh0cnVlKTtcclxuICAgIGNvbnN0IHBhZ2VzID0gW107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5EV09iamVjdD8uSG93TWFueUltYWdlc0luQnVmZmVyOyBpbmRleCsrKSB7XHJcbiAgICAgIHBhZ2VzLnB1c2goaW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5Db252ZXJ0VG9CbG9iKFxyXG4gICAgICBwYWdlcyxcclxuICAgICAgRHluYW1zb2Z0LkRXVC5FbnVtRFdUX0ltYWdlVHlwZS5JVF9QREYsXHJcbiAgICAgIChyZXN1bHQsIGluZGljZXMsIHR5cGUpID0+IHtcclxuICAgICAgICByZXN1bHQubGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgcmVzdWx0Lm5hbWUgPSAnc2Nhbi0nICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVzdWx0Lmxhc3RNb2RpZmllZERhdGUsICdkZC1NTS15eXl5JykgKyAnLnBkZic7XHJcbiAgICAgICAgdGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnVwbG9hZEJhdGNoKHJlc3VsdCkuc3Vic2NyaWJlKChiYXRjaCkgPT4ge1xyXG4gICAgICAgICAgYmF0Y2guZm9yRWFjaChkb2MgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGUubmV4dChkb2MpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvckNvZGUsIGVycm9yU3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3JTdHJpbmcpO1xyXG4gICAgICAgIHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS51cGxvYWRTdGFydC5lbWl0KGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICBjb252ZXJ0VG9CbG9iRm9yU2F2aW5nKCkge1xyXG4gICAgY29uc3QgcGFnZXMgPSBbXTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLkRXT2JqZWN0Py5Ib3dNYW55SW1hZ2VzSW5CdWZmZXI7IGluZGV4KyspIHtcclxuICAgICAgcGFnZXMucHVzaChpbmRleCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LkNvbnZlcnRUb0Jsb2IoXHJcbiAgICAgIHBhZ2VzLFxyXG4gICAgICBEeW5hbXNvZnQuRFdULkVudW1EV1RfSW1hZ2VUeXBlLklUX1BERixcclxuICAgICAgKHJlc3VsdCwgaW5kaWNlcywgdHlwZSkgPT4ge1xyXG4gICAgICAgIHJlc3VsdC5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICByZXN1bHQubmFtZSA9ICdzY2FuLScgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZXN1bHQubGFzdE1vZGlmaWVkRGF0ZSwgJ2RkLU1NLXl5eXknKSArICcucGRmJztcclxuICAgICAgICB0aGlzLkRvY3VtZW50U2NhblNlcnZpY2Uuc3RvcmVkRmlsZSA9IHJlc3VsdDtcclxuICAgICAgICB0aGlzLm9uTWluaW1pemluZ1N1YnNjcmlwdGlvbiA/IHRoaXMub25NaW5pbWl6aW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnJvclN0cmluZyk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKiogTmF2aWdhdG9yIGZ1bmN0aW9ucyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgYnRuRmlyc3RJbWFnZV9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciA9IDA7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgfVxyXG5cclxuICBidG5QcmVJbWFnZV93aGVlbCgpIHtcclxuICAgIGlmICh0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlciAhPT0gMCkgeyB0aGlzLmJ0blByZUltYWdlX29uY2xpY2soKTsgfVxyXG4gIH1cclxuXHJcbiAgYnRuTmV4dEltYWdlX3doZWVsKCkge1xyXG4gICAgaWYgKHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyICE9PSAwKSB7IHRoaXMuYnRuTmV4dEltYWdlX29uY2xpY2soKTsgfVxyXG4gIH1cclxuXHJcbiAgYnRuUHJlSW1hZ2Vfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPVxyXG4gICAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgLSAxO1xyXG4gICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gIH1cclxuICBidG5OZXh0SW1hZ2Vfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPT09XHJcbiAgICAgIHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyIC0gMVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciA9XHJcbiAgICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciArIDE7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgfVxyXG5cclxuICBidG5MYXN0SW1hZ2Vfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPVxyXG4gICAgICB0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlciAtIDE7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgfVxyXG5cclxuICBidG5SZW1vdmVDdXJyZW50SW1hZ2Vfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LlJlbW92ZUFsbFNlbGVjdGVkSW1hZ2VzKCk7XHJcbiAgICBpZiAodGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgPT09IDApIHtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAgICdEV19Ub3RhbEltYWdlJ1xyXG4gICAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gdGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXI7XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfQ3VycmVudEltYWdlJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPVxyXG4gICAgICAgICcnO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidG5SZW1vdmVBbGxJbWFnZXNfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LlJlbW92ZUFsbEltYWdlcygpO1xyXG4gICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19Ub3RhbEltYWdlJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSAnMCc7XHJcbiAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX0N1cnJlbnRJbWFnZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gJyc7XHJcbiAgfVxyXG4gIHNldGxQcmV2aWV3TW9kZSgpIHtcclxuICAgIGNvbnN0IHZhck51bSA9IHBhcnNlSW50KFxyXG4gICAgICAoXHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19QcmV2aWV3TW9kZScpIGFzIEhUTUxTZWxlY3RFbGVtZW50KVxyXG4gICAgICAgICAgLnNlbGVjdGVkSW5kZXggKyAxXHJcbiAgICAgICkudG9TdHJpbmcoKSxcclxuICAgICAgMTBcclxuICAgICk7XHJcbiAgICBjb25zdCBidG5Dcm9wOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuQ3JvcCcpO1xyXG4gICAgaWYgKGJ0bkNyb3ApIHtcclxuICAgICAgbGV0IHRtcHN0ciA9IGJ0bkNyb3Auc3JjO1xyXG4gICAgICBpZiAodmFyTnVtID4gMSkge1xyXG4gICAgICAgIHRtcHN0ciA9IHRtcHN0ci5yZXBsYWNlKCdDcm9wLicsICdDcm9wX2dyYXkuJyk7XHJcbiAgICAgICAgYnRuQ3JvcC5zcmMgPSB0bXBzdHI7XHJcbiAgICAgICAgYnRuQ3JvcC5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRtcHN0ciA9IHRtcHN0ci5yZXBsYWNlKCdDcm9wX2dyYXkuJywgJ0Nyb3AuJyk7XHJcbiAgICAgICAgYnRuQ3JvcC5zcmMgPSB0bXBzdHI7XHJcbiAgICAgICAgYnRuQ3JvcC5vbmNsaWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5idG5Dcm9wX29uY2xpY2soKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5EV09iamVjdC5TZXRWaWV3TW9kZSh2YXJOdW0sIHZhck51bSk7XHJcbiAgICBpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYk1hYyB8fCBEeW5hbXNvZnQuTGliLmVudi5iTGludXgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19QcmV2aWV3TW9kZScpIGFzIEhUTUxTZWxlY3RFbGVtZW50KVxyXG4gICAgICAgIC5zZWxlY3RlZEluZGV4ICE9PSAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5EV09iamVjdC5Nb3VzZVNoYXBlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuRFdPYmplY3QuTW91c2VTaGFwZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipyYWRpbyByZXNwb25zZSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcmRUSUZGX29uY2xpY2soKSB7XHJcbiAgICBjb25zdCBfY2hrTXVsdGlQYWdlVElGRjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVRJRkYnKTtcclxuICAgIF9jaGtNdWx0aVBhZ2VUSUZGLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBfY2hrTXVsdGlQYWdlVElGRi5jaGVja2VkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgX2Noa011bHRpUGFnZVBERjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVBERicpO1xyXG4gICAgX2Noa011bHRpUGFnZVBERi5jaGVja2VkID0gZmFsc2U7XHJcbiAgICBfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJkUERGX29uY2xpY2soKSB7XHJcbiAgICBjb25zdCBfY2hrTXVsdGlQYWdlVElGRjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVRJRkYnKTtcclxuICAgIF9jaGtNdWx0aVBhZ2VUSUZGLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgIF9jaGtNdWx0aVBhZ2VUSUZGLmRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBfY2hrTXVsdGlQYWdlUERGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlUERGJyk7XHJcbiAgICBfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBfY2hrTXVsdGlQYWdlUERGLmNoZWNrZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmRfb25jbGljaygpIHtcclxuICAgIGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRicpO1xyXG4gICAgX2Noa011bHRpUGFnZVRJRkYuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgX2Noa011bHRpUGFnZVRJRkYuZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IF9jaGtNdWx0aVBhZ2VQREY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VQREYnKTtcclxuICAgIF9jaGtNdWx0aVBhZ2VQREYuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgX2Noa011bHRpUGFnZVBERi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIER5bmFtaWMgV2ViIFRXQUlOIEV2ZW50cyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgRHluYW1zb2Z0X09uUG9zdFRyYW5zZmVyID0gKCkgPT4ge1xyXG4gICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gIH1cclxuXHJcbiAgRHluYW1zb2Z0X09uUG9zdExvYWRmdW5jdGlvbiA9IChwYXRoLCBuYW1lLCB0eXBlKSA9PiB7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgfVxyXG5cclxuICBEeW5hbXNvZnRfT25Qb3N0QWxsVHJhbnNmZXJzID0gKCkgPT4ge1xyXG4gICAgdGhpcy5EV09iamVjdC5DbG9zZVNvdXJjZSgpO1xyXG4gICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gICAgdGhpcy5jaGVja0Vycm9yU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBEeW5hbXNvZnRfT25Nb3VzZUNsaWNrID0gaW5kZXggPT4ge1xyXG4gICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gIH1cclxuXHJcbiAgRHluYW1zb2Z0X09uTW91c2VSaWdodENsaWNrID0gaW5kZXggPT4ge1xyXG4gICAgLy8gVG8gYWRkXHJcbiAgfVxyXG5cclxuICBEeW5hbXNvZnRfT25JbWFnZUFyZWFTZWxlY3RlZCA9IChpbmRleCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSA9PiB7XHJcbiAgICB0aGlzLl9pTGVmdCA9IGxlZnQ7XHJcbiAgICB0aGlzLl9pVG9wID0gdG9wO1xyXG4gICAgdGhpcy5faVJpZ2h0ID0gcmlnaHQ7XHJcbiAgICB0aGlzLl9pQm90dG9tID0gYm90dG9tO1xyXG4gIH1cclxuXHJcbiAgRHluYW1zb2Z0X09uSW1hZ2VBcmVhRGVzZWxlY3RlZCA9IGluZGV4ID0+IHtcclxuICAgIHRoaXMuX2lMZWZ0ID0gMDtcclxuICAgIHRoaXMuX2lUb3AgPSAwO1xyXG4gICAgdGhpcy5faVJpZ2h0ID0gMDtcclxuICAgIHRoaXMuX2lCb3R0b20gPSAwO1xyXG4gIH1cclxuXHJcbiAgRHluYW1zb2Z0X09uTW91c2VEb3VibGVDbGljaygpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIER5bmFtc29mdF9PblRvcEltYWdlSW5UaGVWaWV3Q2hhbmdlZCA9IGluZGV4ID0+IHtcclxuICAgIHRoaXMuX2lMZWZ0ID0gMDtcclxuICAgIHRoaXMuX2lUb3AgPSAwO1xyXG4gICAgdGhpcy5faVJpZ2h0ID0gMDtcclxuICAgIHRoaXMuX2lCb3R0b20gPSAwO1xyXG4gICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID0gaW5kZXg7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgfVxyXG5cclxuICBEeW5hbXNvZnRfT25HZXRGaWxlUGF0aCA9IChiU2F2ZSwgY291bnQsIGluZGV4LCBwYXRoLCBuYW1lKSA9PiB7IH07XHJcbn1cclxuIiwiPGRpdiBpZD1cIkRXVGNvbnRhaW5lclwiIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCI+XHJcbiAgPGRpdiBpZD1cIkRXVGNvbnRhaW5lclRvcFwiPlxyXG4gICAgPGRpdiBpZD1cImRpdkVkaXRcIj5cclxuICAgICAgPHVsIGNsYXNzPVwib3BlcmF0ZUdycFwiPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvZHd0LXJlc291cmNlcy9JbWFnZXMvU2hvd0VkaXRvci5wbmdcIiBbdGl0bGVdPVwiJ3NjYW5uZXIuc2hvd0ltYWdlRWRpdG9yJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFthbHRdPVwiJ3NjYW5uZXIuc2hvd0ltYWdlRWRpdG9yJyB8IHRyYW5zbGF0ZVwiIGlkPVwiYnRuRWRpdG9yXCIgKGNsaWNrKT1cImJ0blNob3dJbWFnZUVkaXRvcl9vbmNsaWNrKClcIiAvPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy9kd3QtcmVzb3VyY2VzL0ltYWdlcy9Sb3RhdGVMZWZ0LnBuZ1wiIFt0aXRsZV09XCInc2Nhbm5lci5yb3RhdGVMZWZ0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFthbHRdPVwiJ3NjYW5uZXIucm90YXRlTGVmdCcgfCB0cmFuc2xhdGVcIiBpZD1cImJ0blJvdGF0ZUxcIiAoY2xpY2spPVwiYnRuUm90YXRlTGVmdF9vbmNsaWNrKClcIiAvPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy9kd3QtcmVzb3VyY2VzL0ltYWdlcy9Sb3RhdGVSaWdodC5wbmdcIiBbdGl0bGVdPVwiJ3NjYW5uZXIucm90YXRlUmlnaHQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgW2FsdF09XCInc2Nhbm5lci5yb3RhdGVSaWdodCcgfCB0cmFuc2xhdGVcIiBpZD1cImJ0blJvdGF0ZVJcIiAoY2xpY2spPVwiYnRuUm90YXRlUmlnaHRfb25jbGljaygpXCIgLz5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvZHd0LXJlc291cmNlcy9JbWFnZXMvUm90YXRlMTgwLnBuZ1wiIFthbHRdPVwiJ3NjYW5uZXIucm90YXRlMTgwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCInc2Nhbm5lci5yb3RhdGUxODAnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImJ0blJvdGF0ZTE4MF9vbmNsaWNrKClcIiAvPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy9kd3QtcmVzb3VyY2VzL0ltYWdlcy9NaXJyb3IucG5nXCIgW3RpdGxlXT1cIidzY2FubmVyLm1pcnJvcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbYWx0XT1cIidzY2FubmVyLm1pcnJvcicgfCB0cmFuc2xhdGVcIiBpZD1cImJ0bk1pcnJvclwiIChjbGljayk9XCJidG5NaXJyb3Jfb25jbGljaygpXCIgLz5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvZHd0LXJlc291cmNlcy9JbWFnZXMvRmxpcC5wbmdcIiBbdGl0bGVdPVwiJ3NjYW5uZXIuZmxpcCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbYWx0XT1cIidzY2FubmVyLmZsaXAnIHwgdHJhbnNsYXRlXCIgaWQ9XCJidG5GbGlwXCIgKGNsaWNrKT1cImJ0bkZsaXBfb25jbGljaygpXCIgLz5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvZHd0LXJlc291cmNlcy9JbWFnZXMvUmVtb3ZlU2VsZWN0ZWRJbWFnZXMucG5nXCJcclxuICAgICAgICAgICAgW3RpdGxlXT1cIidzY2FubmVyLnJlbW92ZVNlbGVjdGVkJyB8IHRyYW5zbGF0ZVwiIFthbHRdPVwiJ3NjYW5uZXIucmVtb3ZlU2VsZWN0ZWQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgaWQ9XCJEV19idG5SZW1vdmVDdXJyZW50SW1hZ2VcIiAoY2xpY2spPVwiYnRuUmVtb3ZlQ3VycmVudEltYWdlX29uY2xpY2soKVwiIC8+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2R3dC1yZXNvdXJjZXMvSW1hZ2VzL1JlbW92ZUFsbEltYWdlcy5wbmdcIiBbdGl0bGVdPVwiJ3NjYW5uZXIucmVtb3ZlQWxsJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFthbHRdPVwiJ3NjYW5uZXIucmVtb3ZlQWxsJyB8IHRyYW5zbGF0ZVwiIGlkPVwiRFdfYnRuUmVtb3ZlQWxsSW1hZ2VzXCIgKGNsaWNrKT1cImJ0blJlbW92ZUFsbEltYWdlc19vbmNsaWNrKClcIiAvPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy9kd3QtcmVzb3VyY2VzL0ltYWdlcy9DaGFuZ2VTaXplLnBuZ1wiIFt0aXRsZV09XCInc2Nhbm5lci5yZXNpemUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgW2FsdF09XCInc2Nhbm5lci5yZXNpemUnIHwgdHJhbnNsYXRlXCIgaWQ9XCJidG5DaGFuZ2VJbWFnZVNpemVcIiAoY2xpY2spPVwiYnRuQ2hhbmdlSW1hZ2VTaXplX29uY2xpY2soKVwiIC8+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2R3dC1yZXNvdXJjZXMvSW1hZ2VzL0Nyb3AucG5nXCIgW3RpdGxlXT1cIidzY2FubmVyLmNyb3AnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgW2FsdF09XCInc2Nhbm5lci5jcm9wJyB8IHRyYW5zbGF0ZVwiIGlkPVwiYnRuQ3JvcFwiIChjbGljayk9XCJidG5Dcm9wX29uY2xpY2soKVwiIC8+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgICAgPGRpdiBpZD1cIkltZ1NpemVFZGl0b3JcIiBzdHlsZT1cInZpc2liaWxpdHk6aGlkZGVuXCI+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiaW1nX2hlaWdodFwiPnt7ICdzY2FubmVyLm5ld0hlaWdodCcgfCB0cmFuc2xhdGUgfX0gOlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiaW1nX2hlaWdodFwiIHN0eWxlPVwid2lkdGg6NTAlO1wiIHNpemU9XCIxMFwiIC8+XHJcbiAgICAgICAgICAgICAge3sgJ3NjYW5uZXIucGl4ZWwnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJpbWdfd2lkdGhcIj57eyAnc2Nhbm5lci5uZXdXaWR0aCcgfCB0cmFuc2xhdGUgfX0gOiZuYnNwO1xyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiaW1nX3dpZHRoXCIgc3R5bGU9XCJ3aWR0aDo1MCU7XCIgc2l6ZT1cIjEwXCIgLz5cclxuICAgICAgICAgICAgICB7eyAnc2Nhbm5lci5waXhlbCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAge3sgJ3NjYW5uZXIuSW50ZXJwb2xhdGlvbk1ldGhvZCcgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgICAgIDxzZWxlY3Qgc2l6ZT1cIjFcIiBpZD1cIkludGVycG9sYXRpb25NZXRob2RcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaSBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiICAgT0sgICBcIiBpZD1cImJ0bkNoYW5nZUltYWdlU2l6ZU9LXCIgKGNsaWNrKT1cImJ0bkNoYW5nZUltYWdlU2l6ZU9LX29uY2xpY2soKVwiIC8+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCIgQ2FuY2VsIFwiIGlkPVwiYnRuQ2FuY2VsQ2hhbmdlXCIgKGNsaWNrKT1cImJ0bkNhbmNlbENoYW5nZV9vbmNsaWNrKClcIiAvPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBpZD1cImR3dGNvbnRyb2xDb250YWluZXJcIj48L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJidG5Hcm91cEJ0bVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY3QtbHRcIj5cclxuICAgICAgICB7eyAnc2Nhbm5lci5wYWdlJyB8IHRyYW5zbGF0ZSB9fTpcclxuICAgICAgICA8aW5wdXQgaWQ9XCJEV19idG5GaXJzdEltYWdlXCIgKGNsaWNrKT1cImJ0bkZpcnN0SW1hZ2Vfb25jbGljaygpXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiIHw8IFwiIC8+Jm5ic3A7XHJcbiAgICAgICAgPGlucHV0IGlkPVwiRFdfYnRuUHJlSW1hZ2VcIiAoY2xpY2spPVwiYnRuUHJlSW1hZ2Vfb25jbGljaygpXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiIDwgXCIgLz4mbmJzcDsmbmJzcDtcclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPVwiMlwiIGlkPVwiRFdfQ3VycmVudEltYWdlXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIC8+XHJcbiAgICAgICAgL1xyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIyXCIgaWQ9XCJEV19Ub3RhbEltYWdlXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIC8+Jm5ic3A7Jm5ic3A7XHJcbiAgICAgICAgPGlucHV0IGlkPVwiRFdfYnRuTmV4dEltYWdlXCIgKGNsaWNrKT1cImJ0bk5leHRJbWFnZV9vbmNsaWNrKClcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI+IFwiIC8+Jm5ic3A7XHJcbiAgICAgICAgPGlucHV0IGlkPVwiRFdfYnRuTGFzdEltYWdlXCIgKGNsaWNrKT1cImJ0bkxhc3RJbWFnZV9vbmNsaWNrKClcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI+fCBcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImN0LXJ0XCI+XHJcbiAgICAgICAge3sgJ3NjYW5uZXIucHJldmlldycgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgPHNlbGVjdCBzaXplPVwiMVwiIGlkPVwiRFdfUHJldmlld01vZGVcIiAoY2hhbmdlKT1cInNldGxQcmV2aWV3TW9kZSgpXCI+XHJcbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMFwiPjFYMTwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjFcIj4yWDI8L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyXCI+M1gzPC9vcHRpb24+XHJcbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiM1wiPjRYNDwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjRcIj41WDU8L29wdGlvbj5cclxuICAgICAgICA8L3NlbGVjdD48YnIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGlkPVwiU2NhbldyYXBwZXJcIj5cclxuICAgIDxkaXYgaWQ9XCJkaXZTY2FubmVyXCIgY2xhc3M9XCJkaXZpbnB1dFwiPlxyXG4gICAgICA8ZGl2IGlkPVwiZGl2X1NjYW5JbWFnZVwiIGNsYXNzPVwiZGl2VGFibGVTdHlsZVwiPlxyXG4gICAgICAgIDx1bCBpZD1cInVsU2NhbmVJbWFnZUhJREVcIj5cclxuICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgIDxwPnt7ICdzY2FubmVyLnNvdXJjZScgfCB0cmFuc2xhdGUgfX06PC9wPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8c2VsZWN0IHNpemU9XCIxXCIgaWQ9XCJzb3VyY2VcIiBzdHlsZT1cInBvc2l0aW9uOnJlbGF0aXZlO1wiIChjaGFuZ2UpPVwic291cmNlX29uY2hhbmdlKClcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaSBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiBpZD1cInBOb1NjYW5uZXJcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6IHZvaWQoMClcIiBjbGFzcz1cIlNob3d0YmxMb2FkSW1hZ2VcIiBzdHlsZT1cImNvbG9yOiNmZThlMTRcIiBpZD1cImFOb1NjYW5uZXJcIj4oTm8gVFdBSU5cclxuICAgICAgICAgICAgICBjb21wYXRpYmxlIGRyaXZlcnMgZGV0ZWN0ZWQpPC9hPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaSBpZD1cImRpdlByb2R1Y3REZXRhaWxcIj5cclxuICAgICAgICAgICAgPHVsIGlkPVwiZGl2VHdhaW5UeXBlXCI+XHJcbiAgICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGlkPVwibGJsU2hvd1VJXCIgZm9yPVwiU2hvd1VJXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIlNob3dVSVwiIC8+e3tcclxuICAgICAgICAgICAgICAgICAgJ3NjYW5uZXIuU2hvd1VJJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICB9fSZuYnNwOzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiQURGXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIkFERlwiIC8+e3tcclxuICAgICAgICAgICAgICAgICAgJ3NjYW5uZXIuQXV0b0ZlZWRlcicgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgfX0mbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIkR1cGxleFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJEdXBsZXhcIiAvPnt7XHJcbiAgICAgICAgICAgICAgICAgICdzY2FubmVyLkR1cGxleCcgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAge3sgJ3NjYW5uZXIuUGl4ZWxUeXBlJyB8IHRyYW5zbGF0ZSB9fTpcclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJCV1wiIHN0eWxlPVwibWFyZ2luLWxlZnQ6NXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgaWQ9XCJCV1wiIG5hbWU9XCJQaXhlbFR5cGVcIiAvPnt7XHJcbiAgICAgICAgICAgICAgICAgICdzY2FubmVyLkImVycgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIkdyYXlcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGlkPVwiR3JheVwiIG5hbWU9XCJQaXhlbFR5cGVcIiAvPnt7XHJcbiAgICAgICAgICAgICAgICAgICdzY2FubmVyLkdyYXknIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGlkPVwiUkdCXCIgbmFtZT1cIlBpeGVsVHlwZVwiIC8+e3tcclxuICAgICAgICAgICAgICAgICAgJ3NjYW5uZXIuQ29sb3InIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdzY2FubmVyLlJlc29sdXRpb24nIHwgdHJhbnNsYXRlIH19OiZuYnNwOzwvc3Bhbj48c2VsZWN0IHNpemU9XCIxXCIgaWQ9XCJSZXNvbHV0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxMDBcIj4xMDA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjE1MFwiPjE1MDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjAwXCI+MjAwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIzMDBcIiBzZWxlY3RlZD4zMDA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5TY2FuXCIgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIChjbGljayk9XCJhY3F1aXJlSW1hZ2UoKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBteC0yXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktdXBjLXVwbG9hZCBpY29uXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj4ge3sgJ3NjYW5uZXIuc2NhbicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImJ0bkxvYWRJbWFnZXNPclBERnNfb25jbGljaygpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktdXBsb2FkIGljb25cIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuPiB7eyAnc2Nhbm5lci5sb2FkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZ2FwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC0yXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgW25nQ2xhc3NdPVwieydoaWRlLXVwbG9hZC1idXR0b24nIDogaGlkZVVwbG9hZEJ1dHRvbn1cIiAjc2Nhbm5lclVwbG9hZEJ1dHRvblxyXG4gICAgICAgICAgICBpZD1cInNjYW5uZXJVcGxvYWRCdXR0b25cIiBbZGlzYWJsZWRdPVwiRFdPYmplY3Q/Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlciA9PT0gMFwiIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjb252ZXJ0VG9CbG9iKClcIj5cclxuICAgICAgICAgICAge3sgJ3NjYW5uZXIuc2F2ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
@@ -27,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
27
27
|
providedIn: 'root'
|
|
28
28
|
}]
|
|
29
29
|
}], ctorParameters: function () { return [{ type: i1.DocumentsService }]; } });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtc2Nhbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZG9jdW1lbnRzL2NvbXBvbmVudHMvZG9jdW1lbnQtc2Nhbi9kb2N1bWVudC1zY2FuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFLckMsTUFBTSxPQUFPLG1CQUFtQjtJQU85QixZQUFvQixnQkFBbUM7UUFBbkMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQUx2RCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBR3lCLENBQUM7SUFFNUQsV0FBVyxDQUFDLFlBQVk7UUFDdEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDMUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQzs7aUhBakJVLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE91dHB1dCAsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb2N1bWVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG9jdW1lbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb2N1bWVudFNjYW5TZXJ2aWNlIHtcclxuXHJcbiAgZmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICB1cGxvYWRTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBvbk1pbmltaXppbmcgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHN0b3JlZEZpbGU7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkb2N1bWVudHNTZXJ2aWNlIDogRG9jdW1lbnRzU2VydmljZSkgeyB9XHJcblxyXG4gIHVwbG9hZEJhdGNoKGZpbGVUb1VwbG9hZCl7XHJcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudHNTZXJ2aWNlLnVwbG9hZEJhdGNoKFtmaWxlVG9VcGxvYWRdKS5waXBlKG1hcCgoYmF0Y2gpID0+IHtcclxuICAgICAgYmF0Y2guZm9yRWFjaChkb2MgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KGRvYyk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRTdGFydC5lbWl0KGZhbHNlKVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGJhdGNoXHJcbiAgICB9KSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|