nuxeo-development-framework 0.0.0-watch
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/README.md +24 -0
- package/esm2015/lib/components/activities-log/activities-log/activities-log.component.js +188 -0
- package/esm2015/lib/components/activities-log/activities-log/activities-log.service.js +35 -0
- package/esm2015/lib/components/activities-log/activities-log.module.js +41 -0
- package/esm2015/lib/components/activity/activity/activity.component.js +28 -0
- package/esm2015/lib/components/activity/activity.module.js +37 -0
- package/esm2015/lib/components/attachment-item/attachment-item/attachment-item.component.js +54 -0
- package/esm2015/lib/components/attachment-item/attachment-item.module.js +44 -0
- package/esm2015/lib/components/attachment-modal/attachment-modal.module.js +40 -0
- package/esm2015/lib/components/attachment-modal/attachments/attachments.component.js +157 -0
- package/esm2015/lib/components/avatar/avatar/avatar.component.js +55 -0
- package/esm2015/lib/components/avatar/avatar.module.js +32 -0
- package/esm2015/lib/components/card/card.component.js +48 -0
- package/esm2015/lib/components/card/card.module.js +23 -0
- package/esm2015/lib/components/charts/chart.const.js +3 -0
- package/esm2015/lib/components/charts/chart.token.js +3 -0
- package/esm2015/lib/components/charts/charts.module.js +19 -0
- package/esm2015/lib/components/charts/components/base-chart.component.js +44 -0
- package/esm2015/lib/components/charts/components/chart.component.js +135 -0
- package/esm2015/lib/components/charts/components/data-chart.component.js +156 -0
- package/esm2015/lib/components/charts/components/index.js +4 -0
- package/esm2015/lib/components/charts/defaults/bar.js +18 -0
- package/esm2015/lib/components/charts/defaults/doughnut.js +18 -0
- package/esm2015/lib/components/charts/defaults/index.js +5 -0
- package/esm2015/lib/components/charts/defaults/line.js +36 -0
- package/esm2015/lib/components/charts/defaults/pie.js +20 -0
- package/esm2015/lib/components/charts/index.js +10 -0
- package/esm2015/lib/components/charts/models/index.js +5 -0
- package/esm2015/lib/components/charts/models/options.js +2 -0
- package/esm2015/lib/components/charts/models/plugins-options.js +2 -0
- package/esm2015/lib/components/charts/models/response.js +2 -0
- package/esm2015/lib/components/charts/models/statistic-request-config.js +2 -0
- package/esm2015/lib/components/charts/plugins/doughnut-center-text.js +25 -0
- package/esm2015/lib/components/charts/plugins/doughnut-empty-state.js +34 -0
- package/esm2015/lib/components/charts/plugins/index.js +4 -0
- package/esm2015/lib/components/charts/plugins/legend-margin.js +16 -0
- package/esm2015/lib/components/charts/services/index.js +2 -0
- package/esm2015/lib/components/charts/services/statistic.service.js +71 -0
- package/esm2015/lib/components/charts/utility/colors.js +79 -0
- package/esm2015/lib/components/charts/utility/common.js +7 -0
- package/esm2015/lib/components/charts/utility/index.js +3 -0
- package/esm2015/lib/components/comments/comments.module.js +86 -0
- package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +94 -0
- package/esm2015/lib/components/comments/components/comments-dashlet/comments-dashlet.component.js +81 -0
- package/esm2015/lib/components/comments/components/comments-list/comments-list.component.js +74 -0
- package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +57 -0
- package/esm2015/lib/components/comments/constants/comment.js +25 -0
- package/esm2015/lib/components/comments/services/comment-api.service.js +71 -0
- package/esm2015/lib/components/confirm-caller/confirm-caller.dialog.js +77 -0
- package/esm2015/lib/components/confirm-caller/confirm-caller.module.js +28 -0
- package/esm2015/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.js +29 -0
- package/esm2015/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.js +30 -0
- package/esm2015/lib/components/confirmation-dialog/confirmation-dialog.module.js +30 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +148 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +150 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +111 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.js +69 -0
- package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +105 -0
- package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +119 -0
- package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +165 -0
- package/esm2015/lib/components/correspondence-relation/services/viewer-files.service.js +54 -0
- package/esm2015/lib/components/create-entity/create-entity/create-entity.component.js +69 -0
- package/esm2015/lib/components/create-entity/create-entity.module.js +36 -0
- package/esm2015/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.js +180 -0
- package/esm2015/lib/components/cts-tags/cts-tags.module.js +65 -0
- package/esm2015/lib/components/cts-tags/services/tags-api.service.js +86 -0
- package/esm2015/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.js +67 -0
- package/esm2015/lib/components/custom-toastr/custom-toastr.module.js +36 -0
- package/esm2015/lib/components/custom-toastr/interfaces/toast-type.interface.js +2 -0
- package/esm2015/lib/components/custom-toastr/services/custom-toastr.service.js +63 -0
- package/esm2015/lib/components/diagrams/components/base-node.component.js +41 -0
- package/esm2015/lib/components/diagrams/components/circle-node/circle-node.component.js +19 -0
- package/esm2015/lib/components/diagrams/components/connection-label.component.js +92 -0
- package/esm2015/lib/components/diagrams/components/content-node/content-node.component.js +20 -0
- package/esm2015/lib/components/diagrams/components/custom-connection.component.js +84 -0
- package/esm2015/lib/components/diagrams/components/custom-socket.component.js +37 -0
- package/esm2015/lib/components/diagrams/components/gateway-node/gateway-node.component.js +18 -0
- package/esm2015/lib/components/diagrams/components/gateway-ports.component.js +118 -0
- package/esm2015/lib/components/diagrams/components/index.js +16 -0
- package/esm2015/lib/components/diagrams/components/node-icon.component.js +35 -0
- package/esm2015/lib/components/diagrams/components/node-inputs.component.js +61 -0
- package/esm2015/lib/components/diagrams/components/node-outputs.component.js +57 -0
- package/esm2015/lib/components/diagrams/components/node-ports.component.js +98 -0
- package/esm2015/lib/components/diagrams/components/remove-button.component.js +68 -0
- package/esm2015/lib/components/diagrams/components/status-icon.component.js +37 -0
- package/esm2015/lib/components/diagrams/components/template-node/template-node.component.js +40 -0
- package/esm2015/lib/components/diagrams/components/zoom-control.component.js +62 -0
- package/esm2015/lib/components/diagrams/constants/defaults.js +19 -0
- package/esm2015/lib/components/diagrams/constants/direction.js +7 -0
- package/esm2015/lib/components/diagrams/constants/index.js +8 -0
- package/esm2015/lib/components/diagrams/constants/message-type.js +5 -0
- package/esm2015/lib/components/diagrams/constants/node-type.js +8 -0
- package/esm2015/lib/components/diagrams/constants/notify-events.js +4 -0
- package/esm2015/lib/components/diagrams/constants/sizes.js +8 -0
- package/esm2015/lib/components/diagrams/constants/status.js +12 -0
- package/esm2015/lib/components/diagrams/diagrams.module.js +81 -0
- package/esm2015/lib/components/diagrams/directive/diagram.directive.js +86 -0
- package/esm2015/lib/components/diagrams/directive/index.js +2 -0
- package/esm2015/lib/components/diagrams/editor/customize.js +62 -0
- package/esm2015/lib/components/diagrams/editor/editor.js +97 -0
- package/esm2015/lib/components/diagrams/editor/index.js +5 -0
- package/esm2015/lib/components/diagrams/editor/overrides/connection-path.transformers.js +50 -0
- package/esm2015/lib/components/diagrams/editor/overrides/index.js +2 -0
- package/esm2015/lib/components/diagrams/editor/path-plugin.js +18 -0
- package/esm2015/lib/components/diagrams/editor/socket-position-watcher.js +7 -0
- package/esm2015/lib/components/diagrams/index.js +2 -0
- package/esm2015/lib/components/diagrams/models/base-node.model.js +26 -0
- package/esm2015/lib/components/diagrams/models/circle-node.model.js +10 -0
- package/esm2015/lib/components/diagrams/models/connection.model.js +15 -0
- package/esm2015/lib/components/diagrams/models/content-node.model.js +7 -0
- package/esm2015/lib/components/diagrams/models/gate-way.model.js +11 -0
- package/esm2015/lib/components/diagrams/models/index.js +8 -0
- package/esm2015/lib/components/diagrams/models/ports.model.js +14 -0
- package/esm2015/lib/components/diagrams/models/socket.model.js +9 -0
- package/esm2015/lib/components/diagrams/models/template-node.model.js +12 -0
- package/esm2015/lib/components/diagrams/public-api.js +9 -0
- package/esm2015/lib/components/diagrams/services/diagram-plugins.service.js +19 -0
- package/esm2015/lib/components/diagrams/services/diagram.service.js +222 -0
- package/esm2015/lib/components/diagrams/services/index.js +5 -0
- package/esm2015/lib/components/diagrams/services/message.service.js +24 -0
- package/esm2015/lib/components/diagrams/services/workflow.service.js +239 -0
- package/esm2015/lib/components/diagrams/types/common.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/connection-config.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/connection-label.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/customization.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/diagram-config.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/diagram-editor.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/emitter-type.js +2 -0
- package/esm2015/lib/components/diagrams/types/index.js +18 -0
- package/esm2015/lib/components/diagrams/types/layout.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/node-content.js +2 -0
- package/esm2015/lib/components/diagrams/types/node-definition.js +2 -0
- package/esm2015/lib/components/diagrams/types/node-status.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/node.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/notify-event.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/path.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/ports-config.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/schemes.type.js +2 -0
- package/esm2015/lib/components/diagrams/types/socket.type.js +2 -0
- package/esm2015/lib/components/diagrams/utilities/common.js +35 -0
- package/esm2015/lib/components/diagrams/utilities/index.js +5 -0
- package/esm2015/lib/components/diagrams/utilities/random.js +11 -0
- package/esm2015/lib/components/diagrams/utilities/remove.util.js +95 -0
- package/esm2015/lib/components/diagrams/utilities/serialize.js +23 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.js +44 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/icon.service.js +140 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon.module.js +24 -0
- package/esm2015/lib/components/documents/components/attachments-list/attachments-list.component.js +159 -0
- package/esm2015/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.js +76 -0
- package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +251 -0
- package/esm2015/lib/components/documents/components/document-scan/document-scan.component.js +975 -0
- package/esm2015/lib/components/documents/components/document-scan/document-scan.service.js +30 -0
- package/esm2015/lib/components/documents/components/document-upload/document-upload.component.js +175 -0
- package/esm2015/lib/components/documents/components/documents/documents.component.js +63 -0
- package/esm2015/lib/components/documents/constants/document-templates.js +32 -0
- package/esm2015/lib/components/documents/constants/documents.js +86 -0
- package/esm2015/lib/components/documents/documents.module.js +123 -0
- package/esm2015/lib/components/documents/services/document-templates.service.js +115 -0
- package/esm2015/lib/components/documents/services/documents.service.js +223 -0
- package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +545 -0
- package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +38 -0
- package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +558 -0
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +201 -0
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +51 -0
- package/esm2015/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.js +137 -0
- package/esm2015/lib/components/dynamic-filter/dynamic-filter.module.js +27 -0
- package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +129 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.js +105 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/fields.adapter.js +127 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/form-builder.service.js +107 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.js +35 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.js +165 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.js +71 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.js +213 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.js +78 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/constants/department.js +13 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.js +230 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.js +253 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.js +104 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.js +85 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.js +139 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-item-dispatcher/dynamic-form-item-dispatcher.component.js +81 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.js +36 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.js +106 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.js +104 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.js +207 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.js +337 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.js +64 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.js +191 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.js +81 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.js +180 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.js +316 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.js +79 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.js +336 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.js +54 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.js +178 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.js +768 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.js +35 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.formio.js +17 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.js +34 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.formio.js +17 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.component.js +74 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.formio.js +30 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.js +32 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.formio.js +30 -0
- package/esm2015/lib/components/dynamic-form/directives/dynamic-form-content-proxy.directive.js +17 -0
- package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +306 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-boolitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-dateitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item-validator.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-keyvaluepairsitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-selectitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-textitem-pipe-property.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-textitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form.interfaces.js +10 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-baseitem.model.js +63 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-boolitem.model.js +20 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-dateitem.model.js +24 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-datetimeitem.model.js +12 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-mapitem.model.js +16 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-selectitem.model.js +17 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-textitem.model.js +32 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form.models.js +8 -0
- package/esm2015/lib/components/dynamic-form/services/card-item-types.service.js +46 -0
- package/esm2015/lib/components/dynamic-form/services/dynamic-component-mapper.service.js +60 -0
- package/esm2015/lib/components/dynamic-form/services/dynamic-form-update.service.js +83 -0
- package/esm2015/lib/components/dynamic-form/validators/length-validator.js +15 -0
- package/esm2015/lib/components/dynamic-form/validators/regex-validator.js +15 -0
- package/esm2015/lib/components/dynamic-form/validators/required-validator.js +9 -0
- package/esm2015/lib/components/dynamic-form/validators/value-validator.js +15 -0
- package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +342 -0
- package/esm2015/lib/components/dynamic-search/dynamic-search.module.js +61 -0
- package/esm2015/lib/components/dynamic-table/dynamic-table/dynamic-table.component.js +288 -0
- package/esm2015/lib/components/dynamic-table/dynamic-table.module.js +44 -0
- package/esm2015/lib/components/dynamic-table/services/dynamic-table.service.js +16 -0
- package/esm2015/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.js +39 -0
- package/esm2015/lib/components/dynamic-tabs/dynamic-tabs.module.js +34 -0
- package/esm2015/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.js +37 -0
- package/esm2015/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.js +59 -0
- package/esm2015/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.js +68 -0
- package/esm2015/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.js +33 -0
- package/esm2015/lib/components/dynamic-view/data-viewer/data-viewer.component.js +36 -0
- package/esm2015/lib/components/dynamic-view/date-viewer/date-viewer.component.js +56 -0
- package/esm2015/lib/components/dynamic-view/department-viewer/department-viewer.component.js +90 -0
- package/esm2015/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.js +72 -0
- package/esm2015/lib/components/dynamic-view/dynamic-view.module.js +70 -0
- package/esm2015/lib/components/dynamic-view/dynamic-viewe.service.js +62 -0
- package/esm2015/lib/components/dynamic-view/list-viewer/list-viewer.component.js +40 -0
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +150 -0
- package/esm2015/lib/components/file-manger/components/clipboard/clipboard.component.js +264 -0
- package/esm2015/lib/components/file-manger/components/copy/copy.component.js +151 -0
- package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +118 -0
- package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +526 -0
- package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +28 -0
- package/esm2015/lib/components/file-manger/components/delete/delete.component.js +103 -0
- package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +131 -0
- package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +107 -0
- package/esm2015/lib/components/file-manger/components/move/move.component.js +140 -0
- package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +152 -0
- package/esm2015/lib/components/file-manger/components/rename/rename.component.js +114 -0
- package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +347 -0
- package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +314 -0
- package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +257 -0
- package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +68 -0
- package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +102 -0
- package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +366 -0
- package/esm2015/lib/components/file-manger/directives/file-grid-infinite-scroll.directive.js +78 -0
- package/esm2015/lib/components/file-manger/file-manager.abstract.js +1202 -0
- package/esm2015/lib/components/file-manger/file-manger.module.js +304 -0
- package/esm2015/lib/components/file-manger/models/file-manager-config.model.js +7 -0
- package/esm2015/lib/components/file-manger/models/index.js +4 -0
- package/esm2015/lib/components/file-manger/models/pagination-payload.mode.js +2 -0
- package/esm2015/lib/components/file-manger/models/pagination-response.model.js +6 -0
- package/esm2015/lib/components/filter/filter/filter.component.js +102 -0
- package/esm2015/lib/components/filter/filter.module.js +45 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-datepicker.component.js +123 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-datepicker.component.js +126 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-gregorian-datepicker.component.js +165 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/provide-parent-form.directive.js +32 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/ngx-hijri-gregorian-datepicker.module.js +58 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/services/date-formatter.service.js +71 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/services/date-helper.service.js +30 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/CustomNgbDateParserFormatter.js +43 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/IslamicI18n.js +26 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/consts.js +5 -0
- package/esm2015/lib/components/latest-activity/components/activity-line/activity-line.component.js +80 -0
- package/esm2015/lib/components/latest-activity/components/latest-activity/latest-activity.component.js +78 -0
- package/esm2015/lib/components/latest-activity/components/single-activity/single-activity.component.js +38 -0
- package/esm2015/lib/components/latest-activity/constants/activitylog.js +80 -0
- package/esm2015/lib/components/latest-activity/latest-activity.module.js +61 -0
- package/esm2015/lib/components/latest-activity/services/activity-log.service.js +33 -0
- package/esm2015/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.js +51 -0
- package/esm2015/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.js +30 -0
- package/esm2015/lib/components/notifications/components/base-list-notfications.component.js +156 -0
- package/esm2015/lib/components/notifications/components/base-notifications.component.js +17 -0
- package/esm2015/lib/components/notifications/components/index.js +7 -0
- package/esm2015/lib/components/notifications/components/notification-item/get-icon.pipe.js +44 -0
- package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +55 -0
- package/esm2015/lib/components/notifications/components/notification-source-select/notification-source-select.component.js +38 -0
- package/esm2015/lib/components/notifications/components/notification-status-toggle/notification-status-toggle.component.js +26 -0
- package/esm2015/lib/components/notifications/components/notifications-button/notifications-button.component.js +148 -0
- package/esm2015/lib/components/notifications/components/notifications-date-select/notifications-date-select.component.js +63 -0
- package/esm2015/lib/components/notifications/components/notifications-list/notifications-list.component.js +69 -0
- package/esm2015/lib/components/notifications/components/notifications-list/options.js +24 -0
- package/esm2015/lib/components/notifications/components/notifications-list-actions/notifications-list-actions.component.js +43 -0
- package/esm2015/lib/components/notifications/components/notifications-settings/check-if-subscribed.pipe.js +29 -0
- package/esm2015/lib/components/notifications/components/notifications-settings/notifications-settings.adapter.js +30 -0
- package/esm2015/lib/components/notifications/components/notifications-settings/notifications-settings.component.js +163 -0
- package/esm2015/lib/components/notifications/components/notifications-sidebar/notifications-sidebar-content.js +28 -0
- package/esm2015/lib/components/notifications/components/notifications-sidebar/notifications-sidebar.component.js +158 -0
- package/esm2015/lib/components/notifications/constants/date.js +8 -0
- package/esm2015/lib/components/notifications/constants/index.js +5 -0
- package/esm2015/lib/components/notifications/constants/pagination.js +5 -0
- package/esm2015/lib/components/notifications/constants/panel.js +5 -0
- package/esm2015/lib/components/notifications/constants/status.js +10 -0
- package/esm2015/lib/components/notifications/containers/index.js +3 -0
- package/esm2015/lib/components/notifications/containers/notifications-list-container/notifications-list-container.component.js +98 -0
- package/esm2015/lib/components/notifications/containers/notifications-list-container/options.js +18 -0
- package/esm2015/lib/components/notifications/containers/notifications-settings-container/notifications-settings-container.component.js +68 -0
- package/esm2015/lib/components/notifications/directives/button.directive.js +28 -0
- package/esm2015/lib/components/notifications/directives/index.js +3 -0
- package/esm2015/lib/components/notifications/directives/notification.directive.js +28 -0
- package/esm2015/lib/components/notifications/index.js +2 -0
- package/esm2015/lib/components/notifications/models/common.js +2 -0
- package/esm2015/lib/components/notifications/models/index.js +12 -0
- package/esm2015/lib/components/notifications/models/notification-definition.model.js +2 -0
- package/esm2015/lib/components/notifications/models/notification-message.mode.js +2 -0
- package/esm2015/lib/components/notifications/models/notification-options.js +2 -0
- package/esm2015/lib/components/notifications/models/notification-setting.presenter.js +2 -0
- package/esm2015/lib/components/notifications/models/notification-subscription.model.js +2 -0
- package/esm2015/lib/components/notifications/models/notification.model.js +2 -0
- package/esm2015/lib/components/notifications/models/notifications-list-options.js +3 -0
- package/esm2015/lib/components/notifications/models/paging-response.model.js +2 -0
- package/esm2015/lib/components/notifications/models/params.model.js +2 -0
- package/esm2015/lib/components/notifications/models/vocabularies.js +2 -0
- package/esm2015/lib/components/notifications/notifications.module.js +147 -0
- package/esm2015/lib/components/notifications/public-api.js +12 -0
- package/esm2015/lib/components/notifications/services/index.js +2 -0
- package/esm2015/lib/components/notifications/services/listener.service.js +19 -0
- package/esm2015/lib/components/notifications/services/notifications.service.js +178 -0
- package/esm2015/lib/components/notifications/services/params.service.js +31 -0
- package/esm2015/lib/components/notifications/services/response.service.js +65 -0
- package/esm2015/lib/components/notifications/services/socket.service.js +84 -0
- package/esm2015/lib/components/notifications/utilities/index.js +2 -0
- package/esm2015/lib/components/notifications/utilities/response.adapter.js +12 -0
- package/esm2015/lib/components/pagination/pagination/pagination.component.js +124 -0
- package/esm2015/lib/components/pagination/pagination.module.js +32 -0
- package/esm2015/lib/components/pdf-tron/pdf-tron.module.js +24 -0
- package/esm2015/lib/components/pdf-tron/pdftron/pdftron.component.js +768 -0
- package/esm2015/lib/components/pdf-tron/pdftron/pdftron.service.js +241 -0
- package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +195 -0
- package/esm2015/lib/components/permissions/permission.service.js +118 -0
- package/esm2015/lib/components/permissions/permissions/permissions.component.js +278 -0
- package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +101 -0
- package/esm2015/lib/components/permissions/permissions.module.js +87 -0
- package/esm2015/lib/components/select/select/select.component.js +130 -0
- package/esm2015/lib/components/select/select.module.js +39 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-department.module.js +47 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/department-management.service.js +27 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +116 -0
- package/esm2015/lib/components/spell-checker-field/spell-checker-field.module.js +37 -0
- package/esm2015/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.js +88 -0
- package/esm2015/lib/components/table/dynamic-column/dynamic-column.component.js +64 -0
- package/esm2015/lib/components/table/dynamic-component.js +59 -0
- package/esm2015/lib/components/table/page-sizes-list/page-sizes-list.component.js +38 -0
- package/esm2015/lib/components/table/table/table.component.js +257 -0
- package/esm2015/lib/components/table/table.module.js +69 -0
- package/esm2015/lib/components/toasts/components/notification-toast/notification-toast.component.js +53 -0
- package/esm2015/lib/components/toasts/index.js +2 -0
- package/esm2015/lib/components/toasts/public-api.js +3 -0
- package/esm2015/lib/components/toasts/toasts.module.js +19 -0
- package/esm2015/lib/components/user/user/user.component.js +31 -0
- package/esm2015/lib/components/user/user.module.js +30 -0
- package/esm2015/lib/components/users-card/users-card.component.js +43 -0
- package/esm2015/lib/components/users-card/users-card.module.js +28 -0
- package/esm2015/lib/components/viewer-log/components/viewer-log/viewer-log.component.js +38 -0
- package/esm2015/lib/components/viewer-log/viewer-log.module.js +20 -0
- package/esm2015/lib/components/vocabulary/interfaces/op-type.interface.js +2 -0
- package/esm2015/lib/components/vocabulary/services/vocabulary-api.service.js +55 -0
- package/esm2015/lib/components/vocabulary/translated-vocabulary-select/translated-vocabulary-select.component.js +217 -0
- package/esm2015/lib/components/vocabulary/vocabulary/vocabulary.component.js +106 -0
- package/esm2015/lib/components/vocabulary/vocabulary.module.js +41 -0
- package/esm2015/lib/configuration/app-config.service.js +31 -0
- package/esm2015/lib/configuration/helpers/app-initializer.js +4 -0
- package/esm2015/lib/core/adapters/adapter.service.js +50 -0
- package/esm2015/lib/core/core.module.js +117 -0
- package/esm2015/lib/core/enums/language.enum.js +6 -0
- package/esm2015/lib/core/env/env-manager.js +15 -0
- package/esm2015/lib/core/env/index.js +2 -0
- package/esm2015/lib/core/models/api-response.model.js +2 -0
- package/esm2015/lib/core/models/automation-response.model.js +2 -0
- package/esm2015/lib/core/models/base-response.models.js +2 -0
- package/esm2015/lib/core/models/component.model.js +8 -0
- package/esm2015/lib/core/models/index.js +5 -0
- package/esm2015/lib/core/services/callApi/call-api.service.js +50 -0
- package/esm2015/lib/core/services/extension/action.extensions.js +9 -0
- package/esm2015/lib/core/services/extension/component-register.service.js +25 -0
- package/esm2015/lib/core/services/extension/extenion-utils.js +115 -0
- package/esm2015/lib/core/services/extension/extension-element.js +2 -0
- package/esm2015/lib/core/services/extension/extension-loader.service.js +127 -0
- package/esm2015/lib/core/services/extension/extension.service.js +120 -0
- package/esm2015/lib/core/services/initialization/initialization.service.js +138 -0
- package/esm2015/lib/core/services/localStorag/local-storag.service.js +123 -0
- package/esm2015/lib/core/services/nuxeo/new-nuxeo-overide.js +146 -0
- package/esm2015/lib/core/services/nuxeo/nuxeo-override.js +82 -0
- package/esm2015/lib/core/services/nuxeo/nuxeo.service.js +155 -0
- package/esm2015/lib/core/services/roles/roles.service.js +130 -0
- package/esm2015/lib/core/services/translation/translate-loader.service.js +150 -0
- package/esm2015/lib/core/services/translation/translation.service.js +176 -0
- package/esm2015/lib/core/services/user/user-preferences.service.js +171 -0
- package/esm2015/lib/core/utilities/moment-date-adapter.js +178 -0
- package/esm2015/lib/core/utilities/utility.service.js +81 -0
- package/esm2015/lib/directive/app-has-role/app-has-role.directive.js +61 -0
- package/esm2015/lib/directive/clickOutSide/click-outside.directive.js +29 -0
- package/esm2015/lib/directive/directive.module.js +52 -0
- package/esm2015/lib/directive/drag-and-drop/drag-and-drop.directive.js +46 -0
- package/esm2015/lib/directive/permissions/evaluators.service.js +152 -0
- package/esm2015/lib/directive/permissions/permissions.directive.js +69 -0
- package/esm2015/lib/directive/rtl/set-dir-rtl.directive.js +28 -0
- package/esm2015/lib/directive/rtl/set-rtl.directive.js +29 -0
- package/esm2015/lib/nuxeo-development-framework.component.js +26 -0
- package/esm2015/lib/nuxeo-development-framework.module.js +20 -0
- package/esm2015/lib/nuxeo-development-framework.service.js +14 -0
- package/esm2015/lib/pipes/file-size.pipe.js +57 -0
- package/esm2015/lib/pipes/hijri-date.pipe.js +46 -0
- package/esm2015/lib/pipes/localized-date.pipe.js +81 -0
- package/esm2015/lib/pipes/multi-value.pipe.js +42 -0
- package/esm2015/lib/pipes/pipes.module.js +29 -0
- package/esm2015/lib/pipes/secure-html.pipe.js +34 -0
- package/esm2015/lib/pipes/secure.pipe.js +40 -0
- package/esm2015/lib/pipes/time-ago.pipe.js +68 -0
- package/esm2015/lib/shared/components/base/base-column.component.js +18 -0
- package/esm2015/lib/shared/components/base/base-dialog.component.js +25 -0
- package/esm2015/lib/shared/components/base/base-selector.component.js +96 -0
- package/esm2015/lib/shared/components/base/base.component.js +57 -0
- package/esm2015/lib/shared/components/base/destroy.subject.js +19 -0
- package/esm2015/lib/shared/components/base/index.js +6 -0
- package/esm2015/lib/shared/components/button/button.component.js +90 -0
- package/esm2015/lib/shared/components/index.js +3 -0
- package/esm2015/lib/shared/components/item-list/item-list.component.js +78 -0
- package/esm2015/lib/shared/components/no-data/no-data.component.js +41 -0
- package/esm2015/lib/shared/components/nuxeo-dialog/confirmation/ndf-confirmation-dialog.component.js +23 -0
- package/esm2015/lib/shared/components/nuxeo-dialog/index.js +6 -0
- package/esm2015/lib/shared/components/nuxeo-dialog/models/confirm-options.model.js +22 -0
- package/esm2015/lib/shared/components/nuxeo-dialog/models/dialog-option.model.js +2 -0
- package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.js +47 -0
- package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +86 -0
- package/esm2015/lib/shared/components/nuxeo-dialog/services/nuxeo-dialog.service.js +56 -0
- package/esm2015/lib/shared/components/read-more/read-more.component.js +108 -0
- package/esm2015/lib/shared/components/search-autocomplete/search-autocomplete.component.js +146 -0
- package/esm2015/lib/shared/components/spinner/spinner.component.js +29 -0
- package/esm2015/lib/shared/components/user-card/user-card.component.js +49 -0
- package/esm2015/lib/shared/libraryShared.module.js +85 -0
- package/esm2015/lib/shared/models/index.js +4 -0
- package/esm2015/lib/shared/models/mapper/index.js +2 -0
- package/esm2015/lib/shared/models/mapper/nuxeo-mapper.js +32 -0
- package/esm2015/lib/shared/models/nuxeo-response.model.js +2 -0
- package/esm2015/lib/shared/models/task.model.js +2 -0
- package/esm2015/lib/shared/services/base/base.service.js +157 -0
- package/esm2015/lib/shared/services/base/cache-base.service.js +295 -0
- package/esm2015/lib/shared/services/base/config/default-ttl-config.js +9 -0
- package/esm2015/lib/shared/services/base/config/index.js +2 -0
- package/esm2015/lib/shared/services/base/constants/default-cache-options.js +28 -0
- package/esm2015/lib/shared/services/base/constants/index.js +2 -0
- package/esm2015/lib/shared/services/base/http-base.service.js +106 -0
- package/esm2015/lib/shared/services/base/index.js +3 -0
- package/esm2015/lib/shared/services/base/models/cache-info-model.js +12 -0
- package/esm2015/lib/shared/services/base/models/http-options.model.js +2 -0
- package/esm2015/lib/shared/services/base/models/index.js +6 -0
- package/esm2015/lib/shared/services/base/models/operation-options.model.js +2 -0
- package/esm2015/lib/shared/services/base/models/query-options.model.js +2 -0
- package/esm2015/lib/shared/services/base/models/request-options.model.js +2 -0
- package/esm2015/lib/shared/services/index.js +2 -0
- package/esm2015/lib/shared-services/dialog-mangment.service.js +102 -0
- package/esm2015/lib/shared-services/dynamic-form.service.js +241 -0
- package/esm2015/lib/shared-services/file-manager.adapter.js +74 -0
- package/esm2015/lib/shared-services/file-manager.service.js +1028 -0
- package/esm2015/lib/shared-services/global-admin.service.js +22 -0
- package/esm2015/lib/shared-services/global-pdftron.service.js +51 -0
- package/esm2015/lib/shared-services/mainfolder.service.js +170 -0
- package/esm2015/lib/shared-services/publishing-document.service.js +202 -0
- package/esm2015/lib/shared-services/recently-viewed.service.js +57 -0
- package/esm2015/lib/shared-services/shared-docs.service.js +129 -0
- package/esm2015/lib/shared-services/shared-services.module.js +20 -0
- package/esm2015/lib/shared-services/upload-file.service.js +29 -0
- package/esm2015/lib/shared-services/upload-managment.service.js +151 -0
- package/esm2015/lib/shared-services/user.service.js +64 -0
- package/esm2015/nuxeo-development-framework.js +5 -0
- package/esm2015/public-api.js +249 -0
- package/fesm2015/nuxeo-development-framework.js +33522 -0
- package/fesm2015/nuxeo-development-framework.js.map +1 -0
- package/lib/components/activities-log/activities-log/activities-log.component.d.ts +26 -0
- package/lib/components/activities-log/activities-log/activities-log.service.d.ts +9 -0
- package/lib/components/activities-log/activities-log.module.d.ts +12 -0
- package/lib/components/activity/activity/activity.component.d.ts +13 -0
- package/lib/components/activity/activity.module.d.ts +13 -0
- package/lib/components/attachment-item/attachment-item/attachment-item.component.d.ts +21 -0
- package/lib/components/attachment-item/attachment-item.module.d.ts +13 -0
- package/lib/components/attachment-modal/attachment-modal.module.d.ts +12 -0
- package/lib/components/attachment-modal/attachments/attachments.component.d.ts +50 -0
- package/lib/components/avatar/avatar/avatar.component.d.ts +23 -0
- package/lib/components/avatar/avatar.module.d.ts +13 -0
- package/lib/components/card/card.component.d.ts +32 -0
- package/lib/components/card/card.module.d.ts +12 -0
- package/lib/components/charts/chart.const.d.ts +2 -0
- package/lib/components/charts/chart.token.d.ts +8 -0
- package/lib/components/charts/charts.module.d.ts +9 -0
- package/lib/components/charts/components/base-chart.component.d.ts +21 -0
- package/lib/components/charts/components/chart.component.d.ts +28 -0
- package/lib/components/charts/components/data-chart.component.d.ts +36 -0
- package/lib/components/charts/components/index.d.ts +3 -0
- package/lib/components/charts/defaults/bar.d.ts +2 -0
- package/lib/components/charts/defaults/doughnut.d.ts +2 -0
- package/lib/components/charts/defaults/index.d.ts +4 -0
- package/lib/components/charts/defaults/line.d.ts +2 -0
- package/lib/components/charts/defaults/pie.d.ts +2 -0
- package/lib/components/charts/index.d.ts +9 -0
- package/lib/components/charts/models/index.d.ts +4 -0
- package/lib/components/charts/models/options.d.ts +12 -0
- package/lib/components/charts/models/plugins-options.d.ts +18 -0
- package/lib/components/charts/models/response.d.ts +5 -0
- package/lib/components/charts/models/statistic-request-config.d.ts +30 -0
- package/lib/components/charts/plugins/doughnut-center-text.d.ts +2 -0
- package/lib/components/charts/plugins/doughnut-empty-state.d.ts +2 -0
- package/lib/components/charts/plugins/index.d.ts +3 -0
- package/lib/components/charts/plugins/legend-margin.d.ts +2 -0
- package/lib/components/charts/services/index.d.ts +1 -0
- package/lib/components/charts/services/statistic.service.d.ts +23 -0
- package/lib/components/charts/utility/colors.d.ts +11 -0
- package/lib/components/charts/utility/common.d.ts +4 -0
- package/lib/components/charts/utility/index.d.ts +2 -0
- package/lib/components/comments/comments.module.d.ts +27 -0
- package/lib/components/comments/components/comment-item/comment-item.component.d.ts +26 -0
- package/lib/components/comments/components/comments-dashlet/comments-dashlet.component.d.ts +46 -0
- package/lib/components/comments/components/comments-list/comments-list.component.d.ts +28 -0
- package/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.d.ts +25 -0
- package/lib/components/comments/constants/comment.d.ts +25 -0
- package/lib/components/comments/services/comment-api.service.d.ts +16 -0
- package/lib/components/confirm-caller/confirm-caller.dialog.d.ts +46 -0
- package/lib/components/confirm-caller/confirm-caller.module.d.ts +17 -0
- package/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.d.ts +12 -0
- package/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +12 -0
- package/lib/components/confirmation-dialog/confirmation-dialog.module.d.ts +10 -0
- package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +34 -0
- package/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.d.ts +45 -0
- package/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.d.ts +31 -0
- package/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.d.ts +18 -0
- package/lib/components/correspondence-relation/components/versions/versions.component.d.ts +49 -0
- package/lib/components/correspondence-relation/correspondence-relation.module.d.ts +32 -0
- package/lib/components/correspondence-relation/services/correspondence-realation.service.d.ts +26 -0
- package/lib/components/correspondence-relation/services/viewer-files.service.d.ts +18 -0
- package/lib/components/create-entity/create-entity/create-entity.component.d.ts +17 -0
- package/lib/components/create-entity/create-entity.module.d.ts +11 -0
- package/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.d.ts +43 -0
- package/lib/components/cts-tags/cts-tags.module.d.ts +21 -0
- package/lib/components/cts-tags/services/tags-api.service.d.ts +17 -0
- package/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.d.ts +21 -0
- package/lib/components/custom-toastr/custom-toastr.module.d.ts +12 -0
- package/lib/components/custom-toastr/interfaces/toast-type.interface.d.ts +1 -0
- package/lib/components/custom-toastr/services/custom-toastr.service.d.ts +30 -0
- package/lib/components/diagrams/components/base-node.component.d.ts +30 -0
- package/lib/components/diagrams/components/circle-node/circle-node.component.d.ts +7 -0
- package/lib/components/diagrams/components/connection-label.component.d.ts +19 -0
- package/lib/components/diagrams/components/content-node/content-node.component.d.ts +8 -0
- package/lib/components/diagrams/components/custom-connection.component.d.ts +13 -0
- package/lib/components/diagrams/components/custom-socket.component.d.ts +6 -0
- package/lib/components/diagrams/components/gateway-node/gateway-node.component.d.ts +6 -0
- package/lib/components/diagrams/components/gateway-ports.component.d.ts +12 -0
- package/lib/components/diagrams/components/index.d.ts +15 -0
- package/lib/components/diagrams/components/node-icon.component.d.ts +8 -0
- package/lib/components/diagrams/components/node-inputs.component.d.ts +12 -0
- package/lib/components/diagrams/components/node-outputs.component.d.ts +12 -0
- package/lib/components/diagrams/components/node-ports.component.d.ts +13 -0
- package/lib/components/diagrams/components/remove-button.component.d.ts +7 -0
- package/lib/components/diagrams/components/status-icon.component.d.ts +8 -0
- package/lib/components/diagrams/components/template-node/template-node.component.d.ts +17 -0
- package/lib/components/diagrams/components/zoom-control.component.d.ts +11 -0
- package/lib/components/diagrams/constants/defaults.d.ts +2 -0
- package/lib/components/diagrams/constants/direction.d.ts +6 -0
- package/lib/components/diagrams/constants/index.d.ts +7 -0
- package/lib/components/diagrams/constants/message-type.d.ts +4 -0
- package/lib/components/diagrams/constants/node-type.d.ts +7 -0
- package/lib/components/diagrams/constants/notify-events.d.ts +3 -0
- package/lib/components/diagrams/constants/sizes.d.ts +7 -0
- package/lib/components/diagrams/constants/status.d.ts +11 -0
- package/lib/components/diagrams/diagrams.module.d.ts +29 -0
- package/lib/components/diagrams/directive/diagram.directive.d.ts +27 -0
- package/lib/components/diagrams/directive/index.d.ts +1 -0
- package/lib/components/diagrams/editor/customize.d.ts +25 -0
- package/lib/components/diagrams/editor/editor.d.ts +3 -0
- package/lib/components/diagrams/editor/index.d.ts +4 -0
- package/lib/components/diagrams/editor/overrides/connection-path.transformers.d.ts +2 -0
- package/lib/components/diagrams/editor/overrides/index.d.ts +1 -0
- package/lib/components/diagrams/editor/path-plugin.d.ts +4 -0
- package/lib/components/diagrams/editor/socket-position-watcher.d.ts +3 -0
- package/lib/components/diagrams/index.d.ts +1 -0
- package/lib/components/diagrams/models/base-node.model.d.ts +22 -0
- package/lib/components/diagrams/models/circle-node.model.d.ts +7 -0
- package/lib/components/diagrams/models/connection.model.d.ts +16 -0
- package/lib/components/diagrams/models/content-node.model.d.ts +5 -0
- package/lib/components/diagrams/models/gate-way.model.d.ts +8 -0
- package/lib/components/diagrams/models/index.d.ts +7 -0
- package/lib/components/diagrams/models/ports.model.d.ts +11 -0
- package/lib/components/diagrams/models/socket.model.d.ts +7 -0
- package/lib/components/diagrams/models/template-node.model.d.ts +8 -0
- package/lib/components/diagrams/public-api.d.ts +8 -0
- package/lib/components/diagrams/services/diagram-plugins.service.d.ts +16 -0
- package/lib/components/diagrams/services/diagram.service.d.ts +53 -0
- package/lib/components/diagrams/services/index.d.ts +4 -0
- package/lib/components/diagrams/services/message.service.d.ts +10 -0
- package/lib/components/diagrams/services/workflow.service.d.ts +80 -0
- package/lib/components/diagrams/types/common.type.d.ts +9 -0
- package/lib/components/diagrams/types/connection-config.type.d.ts +11 -0
- package/lib/components/diagrams/types/connection-label.type.d.ts +4 -0
- package/lib/components/diagrams/types/customization.type.d.ts +10 -0
- package/lib/components/diagrams/types/diagram-config.type.d.ts +42 -0
- package/lib/components/diagrams/types/diagram-editor.type.d.ts +26 -0
- package/lib/components/diagrams/types/emitter-type.d.ts +5 -0
- package/lib/components/diagrams/types/index.d.ts +17 -0
- package/lib/components/diagrams/types/layout.type.d.ts +13 -0
- package/lib/components/diagrams/types/node-content.d.ts +9 -0
- package/lib/components/diagrams/types/node-definition.d.ts +20 -0
- package/lib/components/diagrams/types/node-status.type.d.ts +2 -0
- package/lib/components/diagrams/types/node.type.d.ts +2 -0
- package/lib/components/diagrams/types/notify-event.type.d.ts +2 -0
- package/lib/components/diagrams/types/path.type.d.ts +18 -0
- package/lib/components/diagrams/types/ports-config.type.d.ts +11 -0
- package/lib/components/diagrams/types/schemes.type.d.ts +3 -0
- package/lib/components/diagrams/types/socket.type.d.ts +5 -0
- package/lib/components/diagrams/utilities/common.d.ts +19 -0
- package/lib/components/diagrams/utilities/index.d.ts +4 -0
- package/lib/components/diagrams/utilities/random.d.ts +1 -0
- package/lib/components/diagrams/utilities/remove.util.d.ts +30 -0
- package/lib/components/diagrams/utilities/serialize.d.ts +15 -0
- package/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.d.ts +17 -0
- package/lib/components/display-suitable-icon/display-suitable-icon/icon.service.d.ts +8 -0
- package/lib/components/display-suitable-icon/display-suitable-icon.module.d.ts +8 -0
- package/lib/components/documents/components/attachments-list/attachments-list.component.d.ts +55 -0
- package/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.d.ts +38 -0
- package/lib/components/documents/components/document-list/documents-list.component.d.ts +81 -0
- package/lib/components/documents/components/document-scan/document-scan.component.d.ts +112 -0
- package/lib/components/documents/components/document-scan/document-scan.service.d.ts +14 -0
- package/lib/components/documents/components/document-upload/document-upload.component.d.ts +60 -0
- package/lib/components/documents/components/documents/documents.component.d.ts +27 -0
- package/lib/components/documents/constants/document-templates.d.ts +33 -0
- package/lib/components/documents/constants/documents.d.ts +95 -0
- package/lib/components/documents/documents.module.d.ts +33 -0
- package/lib/components/documents/services/document-templates.service.d.ts +24 -0
- package/lib/components/documents/services/documents.service.d.ts +36 -0
- package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +78 -0
- package/lib/components/dynamic-chart/dynamic-chart.module.d.ts +15 -0
- package/lib/components/dynamic-chart/services/chart-data.service.d.ts +37 -0
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +142 -0
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +14 -0
- package/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.d.ts +55 -0
- package/lib/components/dynamic-filter/dynamic-filter.module.d.ts +17 -0
- package/lib/components/dynamic-form/components/department-form/department-form.component.d.ts +28 -0
- package/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.d.ts +27 -0
- package/lib/components/dynamic-form/components/dynamic-form/fields.adapter.d.ts +6 -0
- package/lib/components/dynamic-form/components/dynamic-form/form-builder.service.d.ts +21 -0
- package/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.d.ts +17 -0
- package/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.d.ts +57 -0
- package/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.d.ts +35 -0
- package/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.d.ts +71 -0
- package/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.d.ts +52 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/constants/department.d.ts +12 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.d.ts +85 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.d.ts +32 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.d.ts +23 -0
- package/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.d.ts +30 -0
- package/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.d.ts +64 -0
- package/lib/components/dynamic-form/components/dynamic-form-item-dispatcher/dynamic-form-item-dispatcher.component.d.ts +25 -0
- package/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.d.ts +15 -0
- package/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.d.ts +45 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.d.ts +43 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.d.ts +65 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.d.ts +92 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.d.ts +16 -0
- package/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.d.ts +80 -0
- package/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.d.ts +40 -0
- package/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.d.ts +71 -0
- package/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.d.ts +94 -0
- package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.d.ts +21 -0
- package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.d.ts +112 -0
- package/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.d.ts +20 -0
- package/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.d.ts +79 -0
- package/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.d.ts +599 -0
- package/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.d.ts +13 -0
- package/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.d.ts +13 -0
- package/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.component.d.ts +16 -0
- package/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.d.ts +13 -0
- package/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/directives/dynamic-form-content-proxy.directive.d.ts +9 -0
- package/lib/components/dynamic-form/dynamic-form.module.d.ts +68 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-boolitem-properties.interface.d.ts +5 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-dateitem-properties.interface.d.ts +5 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-item-properties.interface.d.ts +15 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-item-validator.interface.d.ts +4 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-item.interface.d.ts +12 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-keyvaluepairsitem-properties.interface.d.ts +8 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-selectitem-properties.interface.d.ts +10 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-textitem-pipe-property.interface.d.ts +5 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-textitem-properties.interface.d.ts +8 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form.interfaces.d.ts +9 -0
- package/lib/components/dynamic-form/models/dynamic-form-baseitem.model.d.ts +21 -0
- package/lib/components/dynamic-form/models/dynamic-form-boolitem.model.d.ts +11 -0
- package/lib/components/dynamic-form/models/dynamic-form-dateitem.model.d.ts +13 -0
- package/lib/components/dynamic-form/models/dynamic-form-datetimeitem.model.d.ts +9 -0
- package/lib/components/dynamic-form/models/dynamic-form-mapitem.model.d.ts +8 -0
- package/lib/components/dynamic-form/models/dynamic-form-selectitem.model.d.ts +11 -0
- package/lib/components/dynamic-form/models/dynamic-form-textitem.model.d.ts +15 -0
- package/lib/components/dynamic-form/models/dynamic-form.models.d.ts +7 -0
- package/lib/components/dynamic-form/services/card-item-types.service.d.ts +13 -0
- package/lib/components/dynamic-form/services/dynamic-component-mapper.service.d.ts +36 -0
- package/lib/components/dynamic-form/services/dynamic-form-update.service.d.ts +25 -0
- package/lib/components/dynamic-form/validators/length-validator.d.ts +7 -0
- package/lib/components/dynamic-form/validators/regex-validator.d.ts +7 -0
- package/lib/components/dynamic-form/validators/required-validator.d.ts +5 -0
- package/lib/components/dynamic-form/validators/value-validator.d.ts +7 -0
- package/lib/components/dynamic-search/dynamic-search/dynamic-search.component.d.ts +103 -0
- package/lib/components/dynamic-search/dynamic-search.module.d.ts +20 -0
- package/lib/components/dynamic-table/dynamic-table/dynamic-table.component.d.ts +130 -0
- package/lib/components/dynamic-table/dynamic-table.module.d.ts +16 -0
- package/lib/components/dynamic-table/services/dynamic-table.service.d.ts +8 -0
- package/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.d.ts +13 -0
- package/lib/components/dynamic-tabs/dynamic-tabs.module.d.ts +11 -0
- package/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.d.ts +13 -0
- package/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.d.ts +22 -0
- package/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.d.ts +28 -0
- package/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.d.ts +16 -0
- package/lib/components/dynamic-view/data-viewer/data-viewer.component.d.ts +13 -0
- package/lib/components/dynamic-view/date-viewer/date-viewer.component.d.ts +22 -0
- package/lib/components/dynamic-view/department-viewer/department-viewer.component.d.ts +30 -0
- package/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.d.ts +39 -0
- package/lib/components/dynamic-view/dynamic-view.module.d.ts +24 -0
- package/lib/components/dynamic-view/dynamic-viewe.service.d.ts +15 -0
- package/lib/components/dynamic-view/list-viewer/list-viewer.component.d.ts +20 -0
- package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +37 -0
- package/lib/components/file-manger/components/clipboard/clipboard.component.d.ts +41 -0
- package/lib/components/file-manger/components/copy/copy.component.d.ts +40 -0
- package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +29 -0
- package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +104 -0
- package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +13 -0
- package/lib/components/file-manger/components/delete/delete.component.d.ts +31 -0
- package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +57 -0
- package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +29 -0
- package/lib/components/file-manger/components/move/move.component.d.ts +40 -0
- package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +39 -0
- package/lib/components/file-manger/components/rename/rename.component.d.ts +30 -0
- package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +96 -0
- package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +57 -0
- package/lib/components/file-manger/components/sidepanel/sidepanel.component.d.ts +62 -0
- package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +35 -0
- package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +30 -0
- package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +196 -0
- package/lib/components/file-manger/directives/file-grid-infinite-scroll.directive.d.ts +12 -0
- package/lib/components/file-manger/file-manager.abstract.d.ts +188 -0
- package/lib/components/file-manger/file-manger.module.d.ts +61 -0
- package/lib/components/file-manger/models/file-manager-config.model.d.ts +8 -0
- package/lib/components/file-manger/models/index.d.ts +3 -0
- package/lib/components/file-manger/models/pagination-payload.mode.d.ts +3 -0
- package/lib/components/file-manger/models/pagination-response.model.d.ts +30 -0
- package/lib/components/filter/filter/filter.component.d.ts +31 -0
- package/lib/components/filter/filter.module.d.ts +15 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-datepicker.component.d.ts +35 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-datepicker.component.d.ts +35 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-gregorian-datepicker.component.d.ts +39 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/provide-parent-form.directive.d.ts +9 -0
- package/lib/components/hijri-gregorian-datepicker/ngx-hijri-gregorian-datepicker.module.d.ts +15 -0
- package/lib/components/hijri-gregorian-datepicker/services/date-formatter.service.d.ts +15 -0
- package/lib/components/hijri-gregorian-datepicker/services/date-helper.service.d.ts +9 -0
- package/lib/components/hijri-gregorian-datepicker/utils/CustomNgbDateParserFormatter.d.ts +11 -0
- package/lib/components/hijri-gregorian-datepicker/utils/IslamicI18n.d.ts +10 -0
- package/lib/components/hijri-gregorian-datepicker/utils/consts.d.ts +4 -0
- package/lib/components/latest-activity/components/activity-line/activity-line.component.d.ts +19 -0
- package/lib/components/latest-activity/components/latest-activity/latest-activity.component.d.ts +23 -0
- package/lib/components/latest-activity/components/single-activity/single-activity.component.d.ts +15 -0
- package/lib/components/latest-activity/constants/activitylog.d.ts +83 -0
- package/lib/components/latest-activity/latest-activity.module.d.ts +20 -0
- package/lib/components/latest-activity/services/activity-log.service.d.ts +12 -0
- package/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.d.ts +17 -0
- package/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.d.ts +10 -0
- package/lib/components/notifications/components/base-list-notfications.component.d.ts +42 -0
- package/lib/components/notifications/components/base-notifications.component.d.ts +11 -0
- package/lib/components/notifications/components/index.d.ts +6 -0
- package/lib/components/notifications/components/notification-item/get-icon.pipe.d.ts +8 -0
- package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +24 -0
- package/lib/components/notifications/components/notification-source-select/notification-source-select.component.d.ts +15 -0
- package/lib/components/notifications/components/notification-status-toggle/notification-status-toggle.component.d.ts +8 -0
- package/lib/components/notifications/components/notifications-button/notifications-button.component.d.ts +42 -0
- package/lib/components/notifications/components/notifications-date-select/notifications-date-select.component.d.ts +22 -0
- package/lib/components/notifications/components/notifications-list/notifications-list.component.d.ts +18 -0
- package/lib/components/notifications/components/notifications-list/options.d.ts +2 -0
- package/lib/components/notifications/components/notifications-list-actions/notifications-list-actions.component.d.ts +15 -0
- package/lib/components/notifications/components/notifications-settings/check-if-subscribed.pipe.d.ts +8 -0
- package/lib/components/notifications/components/notifications-settings/notifications-settings.adapter.d.ts +3 -0
- package/lib/components/notifications/components/notifications-settings/notifications-settings.component.d.ts +40 -0
- package/lib/components/notifications/components/notifications-sidebar/notifications-sidebar-content.d.ts +9 -0
- package/lib/components/notifications/components/notifications-sidebar/notifications-sidebar.component.d.ts +43 -0
- package/lib/components/notifications/constants/date.d.ts +7 -0
- package/lib/components/notifications/constants/index.d.ts +4 -0
- package/lib/components/notifications/constants/pagination.d.ts +4 -0
- package/lib/components/notifications/constants/panel.d.ts +4 -0
- package/lib/components/notifications/constants/status.d.ts +9 -0
- package/lib/components/notifications/containers/index.d.ts +2 -0
- package/lib/components/notifications/containers/notifications-list-container/notifications-list-container.component.d.ts +27 -0
- package/lib/components/notifications/containers/notifications-list-container/options.d.ts +2 -0
- package/lib/components/notifications/containers/notifications-settings-container/notifications-settings-container.component.d.ts +22 -0
- package/lib/components/notifications/directives/button.directive.d.ts +9 -0
- package/lib/components/notifications/directives/index.d.ts +2 -0
- package/lib/components/notifications/directives/notification.directive.d.ts +9 -0
- package/lib/components/notifications/index.d.ts +1 -0
- package/lib/components/notifications/models/common.d.ts +64 -0
- package/lib/components/notifications/models/index.d.ts +11 -0
- package/lib/components/notifications/models/notification-definition.model.d.ts +17 -0
- package/lib/components/notifications/models/notification-message.mode.d.ts +14 -0
- package/lib/components/notifications/models/notification-options.d.ts +7 -0
- package/lib/components/notifications/models/notification-setting.presenter.d.ts +24 -0
- package/lib/components/notifications/models/notification-subscription.model.d.ts +13 -0
- package/lib/components/notifications/models/notification.model.d.ts +16 -0
- package/lib/components/notifications/models/notifications-list-options.d.ts +38 -0
- package/lib/components/notifications/models/paging-response.model.d.ts +12 -0
- package/lib/components/notifications/models/params.model.d.ts +6 -0
- package/lib/components/notifications/models/vocabularies.d.ts +12 -0
- package/lib/components/notifications/notifications.module.d.ts +41 -0
- package/lib/components/notifications/public-api.d.ts +11 -0
- package/lib/components/notifications/services/index.d.ts +1 -0
- package/lib/components/notifications/services/listener.service.d.ts +8 -0
- package/lib/components/notifications/services/notifications.service.d.ts +60 -0
- package/lib/components/notifications/services/params.service.d.ts +19 -0
- package/lib/components/notifications/services/response.service.d.ts +19 -0
- package/lib/components/notifications/services/socket.service.d.ts +26 -0
- package/lib/components/notifications/utilities/index.d.ts +1 -0
- package/lib/components/notifications/utilities/response.adapter.d.ts +3 -0
- package/lib/components/pagination/pagination/pagination.component.d.ts +46 -0
- package/lib/components/pagination/pagination.module.d.ts +13 -0
- package/lib/components/pdf-tron/pdf-tron.module.d.ts +8 -0
- package/lib/components/pdf-tron/pdftron/pdftron.component.d.ts +107 -0
- package/lib/components/pdf-tron/pdftron/pdftron.service.d.ts +33 -0
- package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +46 -0
- package/lib/components/permissions/permission.service.d.ts +21 -0
- package/lib/components/permissions/permissions/permissions.component.d.ts +50 -0
- package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +22 -0
- package/lib/components/permissions/permissions.module.d.ts +22 -0
- package/lib/components/select/select/select.component.d.ts +43 -0
- package/lib/components/select/select.module.d.ts +12 -0
- package/lib/components/select-users-by-department/select-users-by-department.module.d.ts +13 -0
- package/lib/components/select-users-by-department/select-users-by-departments/department-management.service.d.ts +10 -0
- package/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.d.ts +33 -0
- package/lib/components/spell-checker-field/spell-checker-field.module.d.ts +10 -0
- package/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.d.ts +24 -0
- package/lib/components/table/dynamic-column/dynamic-column.component.d.ts +19 -0
- package/lib/components/table/dynamic-component.d.ts +20 -0
- package/lib/components/table/page-sizes-list/page-sizes-list.component.d.ts +15 -0
- package/lib/components/table/table/table.component.d.ts +122 -0
- package/lib/components/table/table.module.d.ts +25 -0
- package/lib/components/toasts/components/notification-toast/notification-toast.component.d.ts +17 -0
- package/lib/components/toasts/index.d.ts +1 -0
- package/lib/components/toasts/public-api.d.ts +2 -0
- package/lib/components/toasts/toasts.module.d.ts +8 -0
- package/lib/components/user/user/user.component.d.ts +13 -0
- package/lib/components/user/user.module.d.ts +10 -0
- package/lib/components/users-card/users-card.component.d.ts +22 -0
- package/lib/components/users-card/users-card.module.d.ts +17 -0
- package/lib/components/viewer-log/components/viewer-log/viewer-log.component.d.ts +14 -0
- package/lib/components/viewer-log/viewer-log.module.d.ts +10 -0
- package/lib/components/vocabulary/interfaces/op-type.interface.d.ts +1 -0
- package/lib/components/vocabulary/services/vocabulary-api.service.d.ts +19 -0
- package/lib/components/vocabulary/translated-vocabulary-select/translated-vocabulary-select.component.d.ts +81 -0
- package/lib/components/vocabulary/vocabulary/vocabulary.component.d.ts +37 -0
- package/lib/components/vocabulary/vocabulary.module.d.ts +13 -0
- package/lib/configuration/app-config.service.d.ts +14 -0
- package/lib/configuration/helpers/app-initializer.d.ts +2 -0
- package/lib/core/adapters/adapter.service.d.ts +11 -0
- package/lib/core/core.module.d.ts +17 -0
- package/lib/core/enums/language.enum.d.ts +4 -0
- package/lib/core/env/env-manager.d.ts +53 -0
- package/lib/core/env/index.d.ts +1 -0
- package/lib/core/models/api-response.model.d.ts +24 -0
- package/lib/core/models/automation-response.model.d.ts +24 -0
- package/lib/core/models/base-response.models.d.ts +12 -0
- package/lib/core/models/component.model.d.ts +6 -0
- package/lib/core/models/index.d.ts +4 -0
- package/lib/core/services/callApi/call-api.service.d.ts +18 -0
- package/lib/core/services/extension/action.extensions.d.ts +31 -0
- package/lib/core/services/extension/component-register.service.d.ts +17 -0
- package/lib/core/services/extension/extenion-utils.d.ts +14 -0
- package/lib/core/services/extension/extension-element.d.ts +5 -0
- package/lib/core/services/extension/extension-loader.service.d.ts +28 -0
- package/lib/core/services/extension/extension.service.d.ts +70 -0
- package/lib/core/services/initialization/initialization.service.d.ts +31 -0
- package/lib/core/services/localStorag/local-storag.service.d.ts +41 -0
- package/lib/core/services/nuxeo/new-nuxeo-overide.d.ts +14 -0
- package/lib/core/services/nuxeo/nuxeo-override.d.ts +8 -0
- package/lib/core/services/nuxeo/nuxeo.service.d.ts +37 -0
- package/lib/core/services/roles/roles.service.d.ts +12 -0
- package/lib/core/services/translation/translate-loader.service.d.ts +26 -0
- package/lib/core/services/translation/translation.service.d.ts +74 -0
- package/lib/core/services/user/user-preferences.service.d.ts +81 -0
- package/lib/core/utilities/moment-date-adapter.d.ts +37 -0
- package/lib/core/utilities/utility.service.d.ts +11 -0
- package/lib/directive/app-has-role/app-has-role.directive.d.ts +18 -0
- package/lib/directive/clickOutSide/click-outside.directive.d.ts +11 -0
- package/lib/directive/directive.module.d.ts +17 -0
- package/lib/directive/drag-and-drop/drag-and-drop.directive.d.ts +11 -0
- package/lib/directive/permissions/evaluators.service.d.ts +37 -0
- package/lib/directive/permissions/permissions.directive.d.ts +42 -0
- package/lib/directive/rtl/set-dir-rtl.directive.d.ts +13 -0
- package/lib/directive/rtl/set-rtl.directive.d.ts +13 -0
- package/lib/nuxeo-development-framework.component.d.ts +8 -0
- package/lib/nuxeo-development-framework.module.d.ts +10 -0
- package/lib/nuxeo-development-framework.service.d.ts +6 -0
- package/lib/pipes/file-size.pipe.d.ts +34 -0
- package/lib/pipes/hijri-date.pipe.d.ts +32 -0
- package/lib/pipes/localized-date.pipe.d.ts +44 -0
- package/lib/pipes/multi-value.pipe.d.ts +32 -0
- package/lib/pipes/pipes.module.d.ts +18 -0
- package/lib/pipes/secure-html.pipe.d.ts +26 -0
- package/lib/pipes/secure.pipe.d.ts +29 -0
- package/lib/pipes/time-ago.pipe.d.ts +34 -0
- package/lib/shared/components/base/base-column.component.d.ts +10 -0
- package/lib/shared/components/base/base-dialog.component.d.ts +12 -0
- package/lib/shared/components/base/base-selector.component.d.ts +43 -0
- package/lib/shared/components/base/base.component.d.ts +34 -0
- package/lib/shared/components/base/destroy.subject.d.ts +9 -0
- package/lib/shared/components/base/index.d.ts +5 -0
- package/lib/shared/components/button/button.component.d.ts +39 -0
- package/lib/shared/components/index.d.ts +2 -0
- package/lib/shared/components/item-list/item-list.component.d.ts +45 -0
- package/lib/shared/components/no-data/no-data.component.d.ts +22 -0
- package/lib/shared/components/nuxeo-dialog/confirmation/ndf-confirmation-dialog.component.d.ts +9 -0
- package/lib/shared/components/nuxeo-dialog/index.d.ts +5 -0
- package/lib/shared/components/nuxeo-dialog/models/confirm-options.model.d.ts +22 -0
- package/lib/shared/components/nuxeo-dialog/models/dialog-option.model.d.ts +16 -0
- package/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.d.ts +15 -0
- package/lib/shared/components/nuxeo-dialog/nuxeo.dialog.d.ts +23 -0
- package/lib/shared/components/nuxeo-dialog/services/nuxeo-dialog.service.d.ts +13 -0
- package/lib/shared/components/read-more/read-more.component.d.ts +37 -0
- package/lib/shared/components/search-autocomplete/search-autocomplete.component.d.ts +51 -0
- package/lib/shared/components/spinner/spinner.component.d.ts +18 -0
- package/lib/shared/components/user-card/user-card.component.d.ts +30 -0
- package/lib/shared/libraryShared.module.d.ts +27 -0
- package/lib/shared/models/index.d.ts +3 -0
- package/lib/shared/models/mapper/index.d.ts +1 -0
- package/lib/shared/models/mapper/nuxeo-mapper.d.ts +8 -0
- package/lib/shared/models/nuxeo-response.model.d.ts +61 -0
- package/lib/shared/models/task.model.d.ts +71 -0
- package/lib/shared/services/base/base.service.d.ts +29 -0
- package/lib/shared/services/base/cache-base.service.d.ts +17 -0
- package/lib/shared/services/base/config/default-ttl-config.d.ts +7 -0
- package/lib/shared/services/base/config/index.d.ts +1 -0
- package/lib/shared/services/base/constants/default-cache-options.d.ts +16 -0
- package/lib/shared/services/base/constants/index.d.ts +1 -0
- package/lib/shared/services/base/http-base.service.d.ts +17 -0
- package/lib/shared/services/base/index.d.ts +2 -0
- package/lib/shared/services/base/models/cache-info-model.d.ts +49 -0
- package/lib/shared/services/base/models/http-options.model.d.ts +7 -0
- package/lib/shared/services/base/models/index.d.ts +5 -0
- package/lib/shared/services/base/models/operation-options.model.d.ts +8 -0
- package/lib/shared/services/base/models/query-options.model.d.ts +5 -0
- package/lib/shared/services/base/models/request-options.model.d.ts +7 -0
- package/lib/shared/services/index.d.ts +1 -0
- package/lib/shared-services/dialog-mangment.service.d.ts +19 -0
- package/lib/shared-services/dynamic-form.service.d.ts +24 -0
- package/lib/shared-services/file-manager.adapter.d.ts +48 -0
- package/lib/shared-services/file-manager.service.d.ts +102 -0
- package/lib/shared-services/global-admin.service.d.ts +11 -0
- package/lib/shared-services/global-pdftron.service.d.ts +11 -0
- package/lib/shared-services/mainfolder.service.d.ts +32 -0
- package/lib/shared-services/publishing-document.service.d.ts +25 -0
- package/lib/shared-services/recently-viewed.service.d.ts +17 -0
- package/lib/shared-services/shared-docs.service.d.ts +23 -0
- package/lib/shared-services/shared-services.module.d.ts +7 -0
- package/lib/shared-services/upload-file.service.d.ts +10 -0
- package/lib/shared-services/upload-managment.service.d.ts +72 -0
- package/lib/shared-services/user.service.d.ts +12 -0
- package/nuxeo-development-framework.d.ts +5 -0
- package/package.json +82 -0
- package/public-api.d.ts +236 -0
|
@@ -0,0 +1,975 @@
|
|
|
1
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Inject, Input, Output, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import Dynamsoft from 'dwt';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@ngx-translate/core";
|
|
6
|
+
import * as i2 from "../../services/documents.service";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
import * as i4 from "./document-scan.service";
|
|
9
|
+
import * as i5 from "@angular/forms";
|
|
10
|
+
/**
|
|
11
|
+
* Document Scan is a reusable nuxeo API & Scanner integrated component,
|
|
12
|
+
* that utilizes the scanner to create and upload PDF file as a batch, then provide
|
|
13
|
+
* that batch for consumption
|
|
14
|
+
*
|
|
15
|
+
* @title
|
|
16
|
+
* Document Scan
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
*
|
|
20
|
+
* <app-document-scan
|
|
21
|
+
* (file)="onSuccess($event)"
|
|
22
|
+
* ></app-document-scan>
|
|
23
|
+
*/
|
|
24
|
+
export class ScanComponent {
|
|
25
|
+
constructor(translate, documentsService, datePipe, DocumentScanService, environment, baseHref) {
|
|
26
|
+
this.translate = translate;
|
|
27
|
+
this.documentsService = documentsService;
|
|
28
|
+
this.datePipe = datePipe;
|
|
29
|
+
this.DocumentScanService = DocumentScanService;
|
|
30
|
+
this.environment = environment;
|
|
31
|
+
this.baseHref = baseHref;
|
|
32
|
+
this.useStoredFile = false;
|
|
33
|
+
this.hideUploadButton = false;
|
|
34
|
+
/** Event emitted when a batch is uploaded */
|
|
35
|
+
this.file = new EventEmitter();
|
|
36
|
+
this.DWTSourceCount = 0;
|
|
37
|
+
this.filename = '';
|
|
38
|
+
this.containerId = 'dwtcontrolContainer';
|
|
39
|
+
this.bWASM = Dynamsoft.Lib.env.bMobile || Dynamsoft.DWT.UseLocalService;
|
|
40
|
+
this._strTempStr = '';
|
|
41
|
+
this.re = /^\d+$/;
|
|
42
|
+
this.strre = /^[\s\w]+$/;
|
|
43
|
+
this.refloat = /^\d+\.*\d*$/i;
|
|
44
|
+
// --------------------------------------------------------------------------------------
|
|
45
|
+
// ************************** Dynamic Web TWAIN Events***********************************
|
|
46
|
+
// --------------------------------------------------------------------------------------
|
|
47
|
+
this.Dynamsoft_OnPostTransfer = () => {
|
|
48
|
+
this.updatePageInfo();
|
|
49
|
+
};
|
|
50
|
+
this.Dynamsoft_OnPostLoadfunction = (path, name, type) => {
|
|
51
|
+
this.updatePageInfo();
|
|
52
|
+
};
|
|
53
|
+
this.Dynamsoft_OnPostAllTransfers = () => {
|
|
54
|
+
this.DWObject.CloseSource();
|
|
55
|
+
this.updatePageInfo();
|
|
56
|
+
this.checkErrorString();
|
|
57
|
+
};
|
|
58
|
+
this.Dynamsoft_OnMouseClick = index => {
|
|
59
|
+
this.updatePageInfo();
|
|
60
|
+
};
|
|
61
|
+
this.Dynamsoft_OnMouseRightClick = index => {
|
|
62
|
+
// To add
|
|
63
|
+
};
|
|
64
|
+
this.Dynamsoft_OnImageAreaSelected = (index, left, top, right, bottom) => {
|
|
65
|
+
this._iLeft = left;
|
|
66
|
+
this._iTop = top;
|
|
67
|
+
this._iRight = right;
|
|
68
|
+
this._iBottom = bottom;
|
|
69
|
+
};
|
|
70
|
+
this.Dynamsoft_OnImageAreaDeselected = index => {
|
|
71
|
+
this._iLeft = 0;
|
|
72
|
+
this._iTop = 0;
|
|
73
|
+
this._iRight = 0;
|
|
74
|
+
this._iBottom = 0;
|
|
75
|
+
};
|
|
76
|
+
this.Dynamsoft_OnTopImageInTheViewChanged = index => {
|
|
77
|
+
this._iLeft = 0;
|
|
78
|
+
this._iTop = 0;
|
|
79
|
+
this._iRight = 0;
|
|
80
|
+
this._iBottom = 0;
|
|
81
|
+
this.DWObject.CurrentImageIndexInBuffer = index;
|
|
82
|
+
this.updatePageInfo();
|
|
83
|
+
};
|
|
84
|
+
this.Dynamsoft_OnGetFilePath = (bSave, count, index, path, name) => { };
|
|
85
|
+
}
|
|
86
|
+
ngOnInit() {
|
|
87
|
+
Dynamsoft.DWT.ResourcesPath = this.baseHref + '/assets/dwt-resources';
|
|
88
|
+
///
|
|
89
|
+
Dynamsoft.DWT.AutoLoad = true;
|
|
90
|
+
///
|
|
91
|
+
// const width = window.outerWidth * 0.3;
|
|
92
|
+
// const height = window.outerHeight * 0.3;
|
|
93
|
+
Dynamsoft.DWT.Containers = [
|
|
94
|
+
{
|
|
95
|
+
WebTwainId: 'DWTObject',
|
|
96
|
+
ContainerId: 'dwtcontrolContainer',
|
|
97
|
+
Width: '100%',
|
|
98
|
+
Height: '100%'
|
|
99
|
+
}
|
|
100
|
+
];
|
|
101
|
+
Dynamsoft.DWT.ProductKey = this.environment.dynamsoftProductKey;
|
|
102
|
+
// Dynamsoft.DWT.Trial = false;
|
|
103
|
+
// Dynamsoft.DWT.Debug = false; // only for debugger output
|
|
104
|
+
///
|
|
105
|
+
Dynamsoft.DWT.IfAddMD5InUploadHeader = false;
|
|
106
|
+
///
|
|
107
|
+
Dynamsoft.DWT.IfConfineMaskWithinTheViewer = false;
|
|
108
|
+
Dynamsoft.MSG = {
|
|
109
|
+
ConvertingToBase64: this.translate.instant('scanner.ConvertingToBase64'),
|
|
110
|
+
ConvertingToBlob: this.translate.instant('scanner.ConvertingToBlob'),
|
|
111
|
+
Downloading: this.translate.instant('scanner.Downloading'),
|
|
112
|
+
Encoding: this.translate.instant('scanner.Encoding'),
|
|
113
|
+
Err_BrowserNotSupportWasm: this.translate.instant('scanner.Err_BrowserNotSupportWasm'),
|
|
114
|
+
Init_AllJsLoaded: Dynamsoft.MSG.Init_AllJsLoaded,
|
|
115
|
+
Init_CheckDWT: Dynamsoft.MSG.Init_CheckDWT,
|
|
116
|
+
Init_CheckDWTVersion: Dynamsoft.MSG.Init_CheckDWTVersion,
|
|
117
|
+
Init_CheckingLicense: Dynamsoft.MSG.Init_CheckingLicense,
|
|
118
|
+
Init_CompilingWasm: Dynamsoft.MSG.Init_CompilingWasm,
|
|
119
|
+
Init_ConfiguringDWT: Dynamsoft.MSG.Init_ConfiguringDWT,
|
|
120
|
+
Init_CreatingDWT: Dynamsoft.MSG.Init_CreatingDWT,
|
|
121
|
+
Init_DownloadingWasm: Dynamsoft.MSG.Init_DownloadingWasm,
|
|
122
|
+
Init_FireBeforeInitEvt: Dynamsoft.MSG.Init_FireBeforeInitEvt,
|
|
123
|
+
Init_GetLicenseInfoForDWT: Dynamsoft.MSG.Init_GetLicenseInfoForDWT,
|
|
124
|
+
Init_InitActiveX: Dynamsoft.MSG.Init_InitActiveX,
|
|
125
|
+
Init_InitDynamsoftService: Dynamsoft.MSG.Init_InitDynamsoftService,
|
|
126
|
+
Init_InitH5: Dynamsoft.MSG.Init_InitH5,
|
|
127
|
+
Init_InitWasm: Dynamsoft.MSG.Init_InitWasm,
|
|
128
|
+
Init_LoadingViewerJs: Dynamsoft.MSG.Init_LoadingViewerJs,
|
|
129
|
+
Init_LookingLicense: Dynamsoft.MSG.Init_LookingLicense,
|
|
130
|
+
Init_SetLicenseForDWT: Dynamsoft.MSG.Init_SetLicenseForDWT,
|
|
131
|
+
Loading: this.translate.instant('scanner.Loading'),
|
|
132
|
+
LoadingPdf: this.translate.instant('scanner.LoadingPdf'),
|
|
133
|
+
LoadingTiff: this.translate.instant('scanner.LoadingTiff'),
|
|
134
|
+
SavingPdf: this.translate.instant('scanner.SavingPdf'),
|
|
135
|
+
SavingTiff: this.translate.instant('scanner.SavingTiff'),
|
|
136
|
+
Uploading: this.translate.instant('scanner.Uploading')
|
|
137
|
+
};
|
|
138
|
+
Dynamsoft.DWT.CustomizableDisplayInfo = {
|
|
139
|
+
errorMessages: this.translate.instant('scanner.errorMessages'),
|
|
140
|
+
// launch
|
|
141
|
+
generalMessages: this.translate.instant('scanner.generalMessages'),
|
|
142
|
+
customProgressText: this.translate.instant('scanner.customProgressText'),
|
|
143
|
+
// image editor
|
|
144
|
+
buttons: this.translate.instant('scanner.buttons'),
|
|
145
|
+
dialogText: this.translate.instant('scanner.dialogText')
|
|
146
|
+
};
|
|
147
|
+
Dynamsoft.DWT.OnWebTwainReady = () => {
|
|
148
|
+
this.pageonload();
|
|
149
|
+
this.Dynamsoft_OnReady();
|
|
150
|
+
};
|
|
151
|
+
Dynamsoft.DWT.Load();
|
|
152
|
+
this.onMinimizingSubscription = this.DocumentScanService.onMinimizing.subscribe(res => {
|
|
153
|
+
this.convertToBlobForSaving();
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
ngAfterViewInit() {
|
|
157
|
+
this.pageonload();
|
|
158
|
+
if (this.useStoredFile) {
|
|
159
|
+
if (this.DocumentScanService.storedFile) {
|
|
160
|
+
setTimeout(() => {
|
|
161
|
+
this.setStoredFileToScanner(this.DocumentScanService.storedFile);
|
|
162
|
+
}, 2000);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
setStoredFileToScanner(result) {
|
|
167
|
+
this.DWObject.LoadImageFromBinary(result, function () {
|
|
168
|
+
console.log('success');
|
|
169
|
+
}, function (errorCode, errorString) {
|
|
170
|
+
console.log(errorString);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
pageonload() {
|
|
174
|
+
this.HideLoadImageForLinux();
|
|
175
|
+
const twainsource = document.getElementById('source');
|
|
176
|
+
if (twainsource) {
|
|
177
|
+
twainsource.options.length = 0;
|
|
178
|
+
twainsource.options.add(new Option(this.translate.instant('scanner.pleaseWait'), '0'));
|
|
179
|
+
twainsource.options[0].selected = true;
|
|
180
|
+
}
|
|
181
|
+
this.initiateInputs();
|
|
182
|
+
}
|
|
183
|
+
HideLoadImageForLinux() {
|
|
184
|
+
const o = document.getElementById('liLoadImage');
|
|
185
|
+
if (o) {
|
|
186
|
+
if (Dynamsoft.Lib.env.bLinux) {
|
|
187
|
+
o.style.display = 'none';
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
o.style.display = '';
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
initiateInputs() {
|
|
195
|
+
const allinputs = document.getElementsByTagName('input');
|
|
196
|
+
for (let i = 0; i < allinputs.length; i++) {
|
|
197
|
+
if (allinputs[i].type === 'checkbox') {
|
|
198
|
+
allinputs[i].checked = false;
|
|
199
|
+
}
|
|
200
|
+
else if (allinputs[i].type === 'text') {
|
|
201
|
+
allinputs[i].value = '';
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//@ts-ignore
|
|
205
|
+
if (Dynamsoft.Lib.env.bIE === true && Dynamsoft.Lib.env.bWin64 === true) {
|
|
206
|
+
let o = document.getElementById('samplesource64bit');
|
|
207
|
+
if (o) {
|
|
208
|
+
o.style.display = 'inline';
|
|
209
|
+
}
|
|
210
|
+
o = document.getElementById('samplesource32bit');
|
|
211
|
+
if (o) {
|
|
212
|
+
o.style.display = 'none';
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
initDllForChangeImageSize() {
|
|
217
|
+
const vInterpolationMethod = document.getElementById('InterpolationMethod');
|
|
218
|
+
vInterpolationMethod.options.length = 0;
|
|
219
|
+
vInterpolationMethod.options.add(new Option('NearestNeighbor', '1'));
|
|
220
|
+
vInterpolationMethod.options.add(new Option('Bilinear', '2'));
|
|
221
|
+
vInterpolationMethod.options.add(new Option('Bicubic', '3'));
|
|
222
|
+
}
|
|
223
|
+
setDefaultValue() {
|
|
224
|
+
const vGray = document.getElementById('Gray');
|
|
225
|
+
if (vGray) {
|
|
226
|
+
vGray.checked = true;
|
|
227
|
+
}
|
|
228
|
+
const varImgTypepng2 = document.getElementById('imgTypepng2');
|
|
229
|
+
if (varImgTypepng2) {
|
|
230
|
+
varImgTypepng2.checked = true;
|
|
231
|
+
}
|
|
232
|
+
const varImgTypepng = document.getElementById('imgTypepng');
|
|
233
|
+
if (varImgTypepng) {
|
|
234
|
+
varImgTypepng.checked = true;
|
|
235
|
+
}
|
|
236
|
+
const _strDefaultSaveImageName = 'WebTWAINImage';
|
|
237
|
+
const _txtFileNameforSave = document.getElementById('txt_fileNameforSave');
|
|
238
|
+
if (_txtFileNameforSave) {
|
|
239
|
+
_txtFileNameforSave.value = _strDefaultSaveImageName;
|
|
240
|
+
}
|
|
241
|
+
const _txtFileName = document.getElementById('txt_fileName');
|
|
242
|
+
if (_txtFileName) {
|
|
243
|
+
_txtFileName.value = _strDefaultSaveImageName;
|
|
244
|
+
}
|
|
245
|
+
const _chkMultiPageTIFF_save = document.getElementById('MultiPageTIFF_save');
|
|
246
|
+
if (_chkMultiPageTIFF_save) {
|
|
247
|
+
_chkMultiPageTIFF_save.disabled = true;
|
|
248
|
+
}
|
|
249
|
+
const _chkMultiPagePDF_save = document.getElementById('MultiPagePDF_save');
|
|
250
|
+
if (_chkMultiPagePDF_save) {
|
|
251
|
+
_chkMultiPagePDF_save.disabled = true;
|
|
252
|
+
}
|
|
253
|
+
const _chkMultiPageTIFF = document.getElementById('MultiPageTIFF');
|
|
254
|
+
if (_chkMultiPageTIFF) {
|
|
255
|
+
_chkMultiPageTIFF.disabled = true;
|
|
256
|
+
}
|
|
257
|
+
const _chkMultiPagePDF = document.getElementById('MultiPagePDF');
|
|
258
|
+
if (_chkMultiPagePDF) {
|
|
259
|
+
_chkMultiPagePDF.disabled = true;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Check if the control is fully loaded.
|
|
263
|
+
Dynamsoft_OnReady() {
|
|
264
|
+
const liNoScanner = document.getElementById('pNoScanner');
|
|
265
|
+
// If the ErrorCode is 0, it means everything is fine for the control. It is fully loaded.
|
|
266
|
+
this.DWObject = Dynamsoft.DWT.GetWebTwain('dwtcontrolContainer');
|
|
267
|
+
if (this.DWObject) {
|
|
268
|
+
if (this.DWObject.ErrorCode === 0) {
|
|
269
|
+
this.DWObject.LogLevel = 0;
|
|
270
|
+
this.DWObject.IfAllowLocalCache = true;
|
|
271
|
+
this.DWObject.ImageCaptureDriverType = 4;
|
|
272
|
+
this.setDefaultValue();
|
|
273
|
+
this.DWObject.RegisterEvent('OnTopImageInTheViewChanged', this.Dynamsoft_OnTopImageInTheViewChanged);
|
|
274
|
+
this.DWObject.RegisterEvent('OnMouseClick', this.Dynamsoft_OnMouseClick);
|
|
275
|
+
let twainsource = document.getElementById('source');
|
|
276
|
+
if (!twainsource) {
|
|
277
|
+
twainsource = document.getElementById('webcamsource');
|
|
278
|
+
}
|
|
279
|
+
const vCount = this.DWObject.SourceCount;
|
|
280
|
+
this.DWTSourceCount = vCount;
|
|
281
|
+
if (twainsource) {
|
|
282
|
+
twainsource.options.length = 0;
|
|
283
|
+
for (let i = 0; i < vCount; i++) {
|
|
284
|
+
twainsource.options.add(new Option(this.DWObject.GetSourceNameItems(i), i.toString()));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// If source list need to be displayed, fill in the source items.
|
|
288
|
+
if (vCount === 0) {
|
|
289
|
+
if (liNoScanner) {
|
|
290
|
+
if (Dynamsoft.Lib.env.bWin) {
|
|
291
|
+
liNoScanner.style.display = 'block';
|
|
292
|
+
liNoScanner.style.textAlign = 'center';
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
liNoScanner.style.display = 'none';
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (vCount > 0) {
|
|
300
|
+
this.source_onchange();
|
|
301
|
+
}
|
|
302
|
+
if (Dynamsoft.Lib.env.bWin) {
|
|
303
|
+
this.DWObject.MouseShape = false;
|
|
304
|
+
}
|
|
305
|
+
const btnScan = document.getElementById('btnScan');
|
|
306
|
+
if (btnScan) {
|
|
307
|
+
if (vCount === 0) {
|
|
308
|
+
btnScan.disabled = true;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
btnScan.disabled = false;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
if (!Dynamsoft.Lib.env.bWin && vCount > 0) {
|
|
315
|
+
if (document.getElementById('lblShowUI')) {
|
|
316
|
+
document.getElementById('lblShowUI').style.display = 'none';
|
|
317
|
+
}
|
|
318
|
+
if (document.getElementById('ShowUI')) {
|
|
319
|
+
document.getElementById('ShowUI').style.display = 'none';
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
if (document.getElementById('lblShowUI')) {
|
|
324
|
+
document.getElementById('lblShowUI').style.display = '';
|
|
325
|
+
}
|
|
326
|
+
if (document.getElementById('ShowUI')) {
|
|
327
|
+
document.getElementById('ShowUI').style.display = '';
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
this.initDllForChangeImageSize();
|
|
331
|
+
this._iLeft = 0;
|
|
332
|
+
this._iTop = 0;
|
|
333
|
+
this._iRight = 0;
|
|
334
|
+
this._iBottom = 0;
|
|
335
|
+
for (let i = 0; i < document.links.length; i++) {
|
|
336
|
+
if (document.links[i].className === 'ShowtblLoadImage') {
|
|
337
|
+
document.links[i].onclick = this.showtblLoadImage_onclick;
|
|
338
|
+
}
|
|
339
|
+
if (document.links[i].className === 'ClosetblLoadImage') {
|
|
340
|
+
document.links[i].onclick = this.closetblLoadImage_onclick;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (vCount === 0) {
|
|
344
|
+
if (Dynamsoft.Lib.env.bWin) {
|
|
345
|
+
if (document.getElementById('aNoScanner') &&
|
|
346
|
+
window['bDWTOnlineDemo']) {
|
|
347
|
+
if (document.getElementById('div_ScanImage').style.display === '') {
|
|
348
|
+
this.showtblLoadImage_onclick();
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (document.getElementById('Resolution')) {
|
|
352
|
+
document.getElementById('Resolution').style.display = 'none';
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
const divBlank = document.getElementById('divBlank');
|
|
358
|
+
if (divBlank) {
|
|
359
|
+
divBlank.style.display = 'none';
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
this.updatePageInfo();
|
|
363
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
364
|
+
if (!ua.indexOf('msie 6.0')) {
|
|
365
|
+
}
|
|
366
|
+
this.DWObject.RegisterEvent('OnPostTransfer', this.Dynamsoft_OnPostTransfer);
|
|
367
|
+
this.DWObject.RegisterEvent('OnPostLoad', this.Dynamsoft_OnPostLoadfunction);
|
|
368
|
+
this.DWObject.RegisterEvent('OnPostAllTransfers', this.Dynamsoft_OnPostAllTransfers);
|
|
369
|
+
this.DWObject.RegisterEvent('OnImageAreaSelected', this.Dynamsoft_OnImageAreaSelected);
|
|
370
|
+
this.DWObject.RegisterEvent('OnImageAreaDeSelected', this.Dynamsoft_OnImageAreaDeselected);
|
|
371
|
+
this.DWObject.RegisterEvent('OnGetFilePath', this.Dynamsoft_OnGetFilePath);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
showtblLoadImage_onclick() {
|
|
376
|
+
switch (document.getElementById('tblLoadImage').style.visibility) {
|
|
377
|
+
case 'hidden':
|
|
378
|
+
document.getElementById('tblLoadImage').style.visibility = 'visible';
|
|
379
|
+
document.getElementById('Resolution').style.visibility = 'hidden';
|
|
380
|
+
break;
|
|
381
|
+
case 'visible':
|
|
382
|
+
document.getElementById('tblLoadImage').style.visibility = 'hidden';
|
|
383
|
+
document.getElementById('Resolution').style.visibility = 'visible';
|
|
384
|
+
break;
|
|
385
|
+
default:
|
|
386
|
+
break;
|
|
387
|
+
}
|
|
388
|
+
if (document.getElementById('pNoScanner')) {
|
|
389
|
+
// document.getElementById("tblLoadImage").style.top = ds_gettop(document.getElementById("pNoScanner")) + pNoScanner.offsetHeight + "px";
|
|
390
|
+
// document.getElementById("tblLoadImage").style.left = ds_getleft(document.getElementById("pNoScanner")) + 0 + "px";
|
|
391
|
+
}
|
|
392
|
+
return false;
|
|
393
|
+
}
|
|
394
|
+
closetblLoadImage_onclick() {
|
|
395
|
+
document.getElementById('tblLoadImage').style.visibility = 'hidden';
|
|
396
|
+
document.getElementById('Resolution').style.visibility = 'visible';
|
|
397
|
+
return false;
|
|
398
|
+
}
|
|
399
|
+
// --------------------------------------------------------------------------------------
|
|
400
|
+
// ************************** Used a lot *****************************
|
|
401
|
+
// --------------------------------------------------------------------------------------
|
|
402
|
+
updatePageInfo() {
|
|
403
|
+
const totalImage = document.getElementById('DW_TotalImage');
|
|
404
|
+
const currentImage = document.getElementById('DW_CurrentImage');
|
|
405
|
+
if (totalImage) {
|
|
406
|
+
totalImage.value = this.DWObject.HowManyImagesInBuffer;
|
|
407
|
+
}
|
|
408
|
+
if (currentImage) {
|
|
409
|
+
currentImage.value = this.DWObject.CurrentImageIndexInBuffer + 1;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
appendMessage(strMessage) {
|
|
413
|
+
this._strTempStr += strMessage;
|
|
414
|
+
const _divMessageContainer = document.getElementById('DWTemessage');
|
|
415
|
+
if (_divMessageContainer) {
|
|
416
|
+
_divMessageContainer.innerHTML = this._strTempStr;
|
|
417
|
+
_divMessageContainer.scrollTop = _divMessageContainer.scrollHeight;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
checkIfImagesInBuffer() {
|
|
421
|
+
if (this.DWObject.HowManyImagesInBuffer === 0) {
|
|
422
|
+
this.appendMessage('There is no image in buffer.<br />');
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
return true;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
checkErrorString() {
|
|
430
|
+
return this.checkErrorStringWithErrorCode(this.DWObject.ErrorCode, this.DWObject.ErrorString);
|
|
431
|
+
}
|
|
432
|
+
checkErrorStringWithErrorCode(errorCode, errorString, responseString = null) {
|
|
433
|
+
if (errorCode === 0) {
|
|
434
|
+
this.appendMessage('<span style=\'color:#cE5E04\'><b>' + errorString + '</b></span><br />');
|
|
435
|
+
return true;
|
|
436
|
+
}
|
|
437
|
+
if (errorCode === -2115) {
|
|
438
|
+
// Cancel file dialog
|
|
439
|
+
return true;
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
if (errorCode === -2003) {
|
|
443
|
+
const ErrorMessageWin = window.open('', 'ErrorMessage', 'height=500,width=750,top=0,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no');
|
|
444
|
+
ErrorMessageWin.document.writeln(responseString); // this.DWObject.HTTPPostResponseString);
|
|
445
|
+
}
|
|
446
|
+
this.appendMessage('<span style=\'color:#cE5E04\'><b>' + errorString + '</b></span><br />');
|
|
447
|
+
return false;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
// --------------------------------------------------------------------------------------
|
|
451
|
+
// ************************** Used a lot *****************************
|
|
452
|
+
// --------------------------------------------------------------------------------------
|
|
453
|
+
ds_getleft(el) {
|
|
454
|
+
let tmp = el.offsetLeft;
|
|
455
|
+
el = el.offsetParent;
|
|
456
|
+
while (el) {
|
|
457
|
+
tmp += el.offsetLeft;
|
|
458
|
+
el = el.offsetParent;
|
|
459
|
+
}
|
|
460
|
+
return tmp;
|
|
461
|
+
}
|
|
462
|
+
ds_gettop(el) {
|
|
463
|
+
let tmp = el.offsetTop;
|
|
464
|
+
el = el.offsetParent;
|
|
465
|
+
while (el) {
|
|
466
|
+
tmp += el.offsetTop;
|
|
467
|
+
el = el.offsetParent;
|
|
468
|
+
}
|
|
469
|
+
return tmp;
|
|
470
|
+
}
|
|
471
|
+
Over_Out_DemoImage(obj, url) {
|
|
472
|
+
obj.src = url;
|
|
473
|
+
}
|
|
474
|
+
source_onchange() {
|
|
475
|
+
if (document.getElementById('divTwainType')) {
|
|
476
|
+
document.getElementById('divTwainType').style.display = '';
|
|
477
|
+
}
|
|
478
|
+
if (document.getElementById('source')) {
|
|
479
|
+
const cIndex = document.getElementById('source')
|
|
480
|
+
.selectedIndex;
|
|
481
|
+
if (Dynamsoft.Lib.env.bMac) {
|
|
482
|
+
const strSourceName = this.DWObject.GetSourceNameItems(cIndex);
|
|
483
|
+
if (strSourceName.indexOf('ICA') === 0) {
|
|
484
|
+
if (document.getElementById('lblShowUI')) {
|
|
485
|
+
document.getElementById('lblShowUI').style.display = 'none';
|
|
486
|
+
}
|
|
487
|
+
if (document.getElementById('ShowUI')) {
|
|
488
|
+
document.getElementById('ShowUI').style.display = 'none';
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
if (document.getElementById('lblShowUI')) {
|
|
493
|
+
document.getElementById('lblShowUI').style.display = '';
|
|
494
|
+
}
|
|
495
|
+
if (document.getElementById('ShowUI')) {
|
|
496
|
+
document.getElementById('ShowUI').style.display = '';
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
else {
|
|
501
|
+
this.DWObject.SelectSourceByIndex(cIndex);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
mediaType_onchange() {
|
|
506
|
+
const MediaType = document.getElementById('MediaType');
|
|
507
|
+
if (MediaType && MediaType.options.length > 0) {
|
|
508
|
+
const valueMediaType = MediaType.options[MediaType.selectedIndex].text;
|
|
509
|
+
if (valueMediaType !== '') {
|
|
510
|
+
if (!this.DWObject.Addon.Webcam.SetMediaType(valueMediaType)) {
|
|
511
|
+
this.appendMessage('<b>Error setting MediaType value: </b>');
|
|
512
|
+
this.appendMessage('<span style=\'color:#cE5E04\'><b>' +
|
|
513
|
+
this.DWObject.ErrorString +
|
|
514
|
+
'</b></span><br />');
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
const ResolutionWebcam = document.getElementById('ResolutionWebcam');
|
|
520
|
+
if (ResolutionWebcam) {
|
|
521
|
+
ResolutionWebcam.options.length = 0;
|
|
522
|
+
const aryResolution = this.DWObject.Addon.Webcam.GetResolution();
|
|
523
|
+
const countResolution = aryResolution.GetCount();
|
|
524
|
+
for (let i = 0; i < countResolution; i++) {
|
|
525
|
+
const value = aryResolution.Get(i);
|
|
526
|
+
ResolutionWebcam.options.add(new Option(value, value));
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
/*-----------------Acquire Image---------------------*/
|
|
531
|
+
acquireImage() {
|
|
532
|
+
const cIndex = document.getElementById('source')
|
|
533
|
+
.selectedIndex;
|
|
534
|
+
if (cIndex < 0) {
|
|
535
|
+
return;
|
|
536
|
+
}
|
|
537
|
+
this.DWObject.SelectSourceByIndex(cIndex);
|
|
538
|
+
this.DWObject.CloseSource();
|
|
539
|
+
this.DWObject.OpenSource();
|
|
540
|
+
this.DWObject.IfShowUI = document.getElementById('ShowUI').checked;
|
|
541
|
+
let i;
|
|
542
|
+
for (i = 0; i < 3; i++) {
|
|
543
|
+
if (document.getElementsByName('PixelType').item(i)
|
|
544
|
+
.checked === true) {
|
|
545
|
+
this.DWObject.PixelType = i;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
if (this.DWObject.ErrorCode !== 0) {
|
|
549
|
+
this.appendMessage('<b>Error setting PixelType value: </b>');
|
|
550
|
+
this.appendMessage('<span style=\'color:#cE5E04\'><b>' +
|
|
551
|
+
this.DWObject.ErrorString +
|
|
552
|
+
'</b></span><br />');
|
|
553
|
+
}
|
|
554
|
+
this.DWObject.Resolution = document.getElementById('Resolution').value;
|
|
555
|
+
if (this.DWObject.ErrorCode !== 0) {
|
|
556
|
+
this.appendMessage('<b>Error setting Resolution value: </b>');
|
|
557
|
+
this.appendMessage('<span style=\'color:#cE5E04\'><b>' +
|
|
558
|
+
this.DWObject.ErrorString +
|
|
559
|
+
'</b></span><br />');
|
|
560
|
+
}
|
|
561
|
+
const bADFChecked = document.getElementById('ADF')
|
|
562
|
+
.checked;
|
|
563
|
+
this.DWObject.IfFeederEnabled = bADFChecked;
|
|
564
|
+
if (bADFChecked === true && this.DWObject.ErrorCode !== 0) {
|
|
565
|
+
this.appendMessage('<b>Error setting ADF value: </b>');
|
|
566
|
+
this.appendMessage('<span style=\'color:#cE5E04\'><b>' +
|
|
567
|
+
this.DWObject.ErrorString +
|
|
568
|
+
'</b></span><br />');
|
|
569
|
+
}
|
|
570
|
+
const bDuplexChecked = document.getElementById('Duplex').checked;
|
|
571
|
+
this.DWObject.IfDuplexEnabled = bDuplexChecked;
|
|
572
|
+
if (bDuplexChecked === true && this.DWObject.ErrorCode !== 0) {
|
|
573
|
+
this.appendMessage('<b>Error setting Duplex value: </b>');
|
|
574
|
+
this.appendMessage('<span style=\'color:#cE5E04\'><b>' +
|
|
575
|
+
this.DWObject.ErrorString +
|
|
576
|
+
'</b></span><br />');
|
|
577
|
+
}
|
|
578
|
+
if (Dynamsoft.Lib.env.bWin ||
|
|
579
|
+
(!Dynamsoft.Lib.env.bWin && this.DWObject.ImageCaptureDriverType === 0)) {
|
|
580
|
+
this.appendMessage('Pixel Type: ' +
|
|
581
|
+
this.DWObject.PixelType +
|
|
582
|
+
'<br />Resolution: ' +
|
|
583
|
+
this.DWObject.Resolution +
|
|
584
|
+
'<br />');
|
|
585
|
+
}
|
|
586
|
+
this.DWObject.IfDisableSourceAfterAcquire = true;
|
|
587
|
+
this.DWObject.AcquireImage();
|
|
588
|
+
}
|
|
589
|
+
/*-----------------Load Image---------------------*/
|
|
590
|
+
btnLoadImagesOrPDFs_onclick() {
|
|
591
|
+
const OnPDFSuccess = () => {
|
|
592
|
+
this.appendMessage('Loaded an image successfully.<br/>');
|
|
593
|
+
this.updatePageInfo();
|
|
594
|
+
};
|
|
595
|
+
const OnPDFFailure = (errorCode, errorString) => {
|
|
596
|
+
this.checkErrorStringWithErrorCode(errorCode, errorString);
|
|
597
|
+
};
|
|
598
|
+
this.DWObject.IfShowFileDialog = true;
|
|
599
|
+
this.DWObject.Addon.PDF.SetResolution(200);
|
|
600
|
+
this.DWObject.Addon.PDF.SetConvertMode(Dynamsoft.DWT.EnumDWT_ConvertMode.CM_RENDERALL);
|
|
601
|
+
this.DWObject.LoadImageEx('', Dynamsoft.DWT.EnumDWT_ImageType.IT_ALL, OnPDFSuccess, OnPDFFailure);
|
|
602
|
+
}
|
|
603
|
+
// --------------------------------------------------------------------------------------
|
|
604
|
+
// ************************** Edit Image ******************************
|
|
605
|
+
// --------------------------------------------------------------------------------------
|
|
606
|
+
btnShowImageEditor_onclick() {
|
|
607
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
608
|
+
return;
|
|
609
|
+
}
|
|
610
|
+
this.DWObject.ShowImageEditor();
|
|
611
|
+
}
|
|
612
|
+
btnRotateRight_onclick() {
|
|
613
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
614
|
+
return;
|
|
615
|
+
}
|
|
616
|
+
this.DWObject.RotateRight(this.DWObject.CurrentImageIndexInBuffer);
|
|
617
|
+
this.appendMessage('<b>Rotate right: </b>');
|
|
618
|
+
if (this.checkErrorString()) {
|
|
619
|
+
return;
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
btnRotateLeft_onclick() {
|
|
623
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
624
|
+
return;
|
|
625
|
+
}
|
|
626
|
+
this.DWObject.RotateLeft(this.DWObject.CurrentImageIndexInBuffer);
|
|
627
|
+
this.appendMessage('<b>Rotate left: </b>');
|
|
628
|
+
if (this.checkErrorString()) {
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
btnRotate180_onclick() {
|
|
633
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
634
|
+
return;
|
|
635
|
+
}
|
|
636
|
+
this.DWObject.Rotate(this.DWObject.CurrentImageIndexInBuffer, 180, true);
|
|
637
|
+
this.appendMessage('<b>Rotate 180: </b>');
|
|
638
|
+
if (this.checkErrorString()) {
|
|
639
|
+
return;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
btnMirror_onclick() {
|
|
643
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
646
|
+
this.DWObject.Mirror(this.DWObject.CurrentImageIndexInBuffer);
|
|
647
|
+
this.appendMessage('<b>Mirror: </b>');
|
|
648
|
+
if (this.checkErrorString()) {
|
|
649
|
+
return;
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
btnFlip_onclick() {
|
|
653
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
654
|
+
return;
|
|
655
|
+
}
|
|
656
|
+
this.DWObject.Flip(this.DWObject.CurrentImageIndexInBuffer);
|
|
657
|
+
this.appendMessage('<b>Flip: </b>');
|
|
658
|
+
if (this.checkErrorString()) {
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
/*----------------------Crop Method---------------------*/
|
|
663
|
+
btnCrop_onclick() {
|
|
664
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
665
|
+
return;
|
|
666
|
+
}
|
|
667
|
+
if (this._iLeft !== 0 ||
|
|
668
|
+
this._iTop !== 0 ||
|
|
669
|
+
this._iRight !== 0 ||
|
|
670
|
+
this._iBottom !== 0) {
|
|
671
|
+
this.DWObject.Crop(this.DWObject.CurrentImageIndexInBuffer, this._iLeft, this._iTop, this._iRight, this._iBottom);
|
|
672
|
+
this._iLeft = 0;
|
|
673
|
+
this._iTop = 0;
|
|
674
|
+
this._iRight = 0;
|
|
675
|
+
this._iBottom = 0;
|
|
676
|
+
this.appendMessage('<b>Crop: </b>');
|
|
677
|
+
if (this.checkErrorString()) {
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
return;
|
|
681
|
+
}
|
|
682
|
+
else {
|
|
683
|
+
this.appendMessage('<b>Crop: </b>failed. Please first select the area you\'d like to crop.<br />');
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
/*----------------Change Image Size--------------------*/
|
|
687
|
+
btnChangeImageSize_onclick() {
|
|
688
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
|
+
switch (document.getElementById('ImgSizeEditor').style.visibility) {
|
|
692
|
+
case 'visible':
|
|
693
|
+
document.getElementById('ImgSizeEditor').style.visibility = 'hidden';
|
|
694
|
+
break;
|
|
695
|
+
case 'hidden':
|
|
696
|
+
document.getElementById('ImgSizeEditor').style.visibility = 'visible';
|
|
697
|
+
break;
|
|
698
|
+
default:
|
|
699
|
+
break;
|
|
700
|
+
}
|
|
701
|
+
// document.getElementById("ImgSizeEditor").style.top = ds_gettop(document.getElementById("btnChangeImageSize")) + document.getElementById("btnChangeImageSize").offsetHeight + 15 + "px";
|
|
702
|
+
// document.getElementById("ImgSizeEditor").style.left = ds_getleft(document.getElementById("btnChangeImageSize")) - 14 + "px";
|
|
703
|
+
const iWidth = this.DWObject.GetImageWidth(this.DWObject.CurrentImageIndexInBuffer);
|
|
704
|
+
if (iWidth !== -1) {
|
|
705
|
+
document.getElementById('img_width').value = iWidth;
|
|
706
|
+
}
|
|
707
|
+
const iHeight = this.DWObject.GetImageHeight(this.DWObject.CurrentImageIndexInBuffer);
|
|
708
|
+
if (iHeight !== -1) {
|
|
709
|
+
document.getElementById('img_height').value = iHeight;
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
btnCancelChange_onclick() {
|
|
713
|
+
document.getElementById('ImgSizeEditor').style.visibility = 'hidden';
|
|
714
|
+
}
|
|
715
|
+
btnChangeImageSizeOK_onclick() {
|
|
716
|
+
document.getElementById('img_height').className = '';
|
|
717
|
+
document.getElementById('img_width').className = '';
|
|
718
|
+
if (!this.re.test(document.getElementById('img_height').value)) {
|
|
719
|
+
document.getElementById('img_height').className += ' invalid';
|
|
720
|
+
document.getElementById('img_height').focus();
|
|
721
|
+
this.appendMessage('Please input a valid <b>height</b>.<br />');
|
|
722
|
+
return;
|
|
723
|
+
}
|
|
724
|
+
if (!this.re.test(document.getElementById('img_width').value)) {
|
|
725
|
+
document.getElementById('img_width').className += ' invalid';
|
|
726
|
+
document.getElementById('img_width').focus();
|
|
727
|
+
this.appendMessage('Please input a valid <b>width</b>.<br />');
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
this.DWObject.ChangeImageSize(this.DWObject.CurrentImageIndexInBuffer, document.getElementById('img_width').value, document.getElementById('img_height').value, document.getElementById('InterpolationMethod')
|
|
731
|
+
.selectedIndex + 1);
|
|
732
|
+
this.appendMessage('<b>Change Image Size: </b>');
|
|
733
|
+
if (this.checkErrorString()) {
|
|
734
|
+
document.getElementById('ImgSizeEditor').style.visibility = 'hidden';
|
|
735
|
+
return;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
// --------------------------------------------------------------------------------------
|
|
739
|
+
// ************************** Save Image***********************************
|
|
740
|
+
// --------------------------------------------------------------------------------------
|
|
741
|
+
btnSave_onclick() {
|
|
742
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
743
|
+
return;
|
|
744
|
+
}
|
|
745
|
+
const strimgType_save = 'pdf';
|
|
746
|
+
this.DWObject.IfShowFileDialog = true;
|
|
747
|
+
const _txtFileNameforSave = document.getElementById('txt_fileName');
|
|
748
|
+
if (_txtFileNameforSave) {
|
|
749
|
+
_txtFileNameforSave.className = '';
|
|
750
|
+
}
|
|
751
|
+
let bSave = false;
|
|
752
|
+
const strFilePath = _txtFileNameforSave.value + '.' + strimgType_save;
|
|
753
|
+
const OnSuccess = () => {
|
|
754
|
+
this.appendMessage('<b>Save Image: </b>');
|
|
755
|
+
this.checkErrorStringWithErrorCode(0, 'Successful.');
|
|
756
|
+
};
|
|
757
|
+
const OnFailure = (errorCode, errorString) => {
|
|
758
|
+
this.checkErrorStringWithErrorCode(errorCode, errorString);
|
|
759
|
+
};
|
|
760
|
+
bSave = this.DWObject.SaveAllAsPDF(strFilePath, OnSuccess, OnFailure);
|
|
761
|
+
if (bSave) {
|
|
762
|
+
this.appendMessage('<b>Save Image: </b>');
|
|
763
|
+
}
|
|
764
|
+
if (this.checkErrorString()) {
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
// --------------------------------------------------------------------------------------
|
|
769
|
+
// ************************** Upload Image***********************************
|
|
770
|
+
// --------------------------------------------------------------------------------------
|
|
771
|
+
makeid(length) {
|
|
772
|
+
let result = '';
|
|
773
|
+
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
774
|
+
const charactersLength = characters.length;
|
|
775
|
+
for (let i = 0; i < length; i++) {
|
|
776
|
+
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
777
|
+
}
|
|
778
|
+
return result;
|
|
779
|
+
}
|
|
780
|
+
convertToBlob() {
|
|
781
|
+
var _a;
|
|
782
|
+
this.DocumentScanService.uploadStart.emit(true);
|
|
783
|
+
const pages = [];
|
|
784
|
+
for (let index = 0; index < ((_a = this.DWObject) === null || _a === void 0 ? void 0 : _a.HowManyImagesInBuffer); index++) {
|
|
785
|
+
pages.push(index);
|
|
786
|
+
}
|
|
787
|
+
this.DWObject.ConvertToBlob(pages, Dynamsoft.DWT.EnumDWT_ImageType.IT_PDF, (result, indices, type) => {
|
|
788
|
+
result.lastModifiedDate = new Date();
|
|
789
|
+
result.name = 'scan-' + this.datePipe.transform(result.lastModifiedDate, 'dd-MM-yyyy') + '.pdf';
|
|
790
|
+
this.DocumentScanService.uploadBatch(result).subscribe((batch) => {
|
|
791
|
+
batch.forEach(doc => {
|
|
792
|
+
this.file.next(doc);
|
|
793
|
+
});
|
|
794
|
+
});
|
|
795
|
+
}, (errorCode, errorString) => {
|
|
796
|
+
console.log(errorString);
|
|
797
|
+
this.DocumentScanService.uploadStart.emit(false);
|
|
798
|
+
});
|
|
799
|
+
}
|
|
800
|
+
convertToBlobForSaving() {
|
|
801
|
+
var _a;
|
|
802
|
+
const pages = [];
|
|
803
|
+
for (let index = 0; index < ((_a = this.DWObject) === null || _a === void 0 ? void 0 : _a.HowManyImagesInBuffer); index++) {
|
|
804
|
+
pages.push(index);
|
|
805
|
+
}
|
|
806
|
+
this.DWObject.ConvertToBlob(pages, Dynamsoft.DWT.EnumDWT_ImageType.IT_PDF, (result, indices, type) => {
|
|
807
|
+
result.lastModifiedDate = new Date();
|
|
808
|
+
result.name = 'scan-' + this.datePipe.transform(result.lastModifiedDate, 'dd-MM-yyyy') + '.pdf';
|
|
809
|
+
this.DocumentScanService.storedFile = result;
|
|
810
|
+
this.onMinimizingSubscription ? this.onMinimizingSubscription.unsubscribe() : '';
|
|
811
|
+
}, (errorCode, errorString) => {
|
|
812
|
+
console.log(errorString);
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
// --------------------------------------------------------------------------------------
|
|
816
|
+
// ************************** Navigator functions***********************************
|
|
817
|
+
// --------------------------------------------------------------------------------------
|
|
818
|
+
btnFirstImage_onclick() {
|
|
819
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
820
|
+
return;
|
|
821
|
+
}
|
|
822
|
+
this.DWObject.CurrentImageIndexInBuffer = 0;
|
|
823
|
+
this.updatePageInfo();
|
|
824
|
+
}
|
|
825
|
+
btnPreImage_wheel() {
|
|
826
|
+
if (this.DWObject.HowManyImagesInBuffer !== 0) {
|
|
827
|
+
this.btnPreImage_onclick();
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
btnNextImage_wheel() {
|
|
831
|
+
if (this.DWObject.HowManyImagesInBuffer !== 0) {
|
|
832
|
+
this.btnNextImage_onclick();
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
btnPreImage_onclick() {
|
|
836
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
837
|
+
return;
|
|
838
|
+
}
|
|
839
|
+
else if (this.DWObject.CurrentImageIndexInBuffer === 0) {
|
|
840
|
+
return;
|
|
841
|
+
}
|
|
842
|
+
this.DWObject.CurrentImageIndexInBuffer =
|
|
843
|
+
this.DWObject.CurrentImageIndexInBuffer - 1;
|
|
844
|
+
this.updatePageInfo();
|
|
845
|
+
}
|
|
846
|
+
btnNextImage_onclick() {
|
|
847
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
850
|
+
else if (this.DWObject.CurrentImageIndexInBuffer ===
|
|
851
|
+
this.DWObject.HowManyImagesInBuffer - 1) {
|
|
852
|
+
return;
|
|
853
|
+
}
|
|
854
|
+
this.DWObject.CurrentImageIndexInBuffer =
|
|
855
|
+
this.DWObject.CurrentImageIndexInBuffer + 1;
|
|
856
|
+
this.updatePageInfo();
|
|
857
|
+
}
|
|
858
|
+
btnLastImage_onclick() {
|
|
859
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
860
|
+
return;
|
|
861
|
+
}
|
|
862
|
+
this.DWObject.CurrentImageIndexInBuffer =
|
|
863
|
+
this.DWObject.HowManyImagesInBuffer - 1;
|
|
864
|
+
this.updatePageInfo();
|
|
865
|
+
}
|
|
866
|
+
btnRemoveCurrentImage_onclick() {
|
|
867
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
868
|
+
return;
|
|
869
|
+
}
|
|
870
|
+
this.DWObject.RemoveAllSelectedImages();
|
|
871
|
+
if (this.DWObject.HowManyImagesInBuffer === 0) {
|
|
872
|
+
document.getElementById('DW_TotalImage').value = this.DWObject.HowManyImagesInBuffer;
|
|
873
|
+
document.getElementById('DW_CurrentImage').value =
|
|
874
|
+
'';
|
|
875
|
+
return;
|
|
876
|
+
}
|
|
877
|
+
else {
|
|
878
|
+
this.updatePageInfo();
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
btnRemoveAllImages_onclick() {
|
|
882
|
+
if (!this.checkIfImagesInBuffer()) {
|
|
883
|
+
return;
|
|
884
|
+
}
|
|
885
|
+
this.DWObject.RemoveAllImages();
|
|
886
|
+
document.getElementById('DW_TotalImage').value = '0';
|
|
887
|
+
document.getElementById('DW_CurrentImage').value = '';
|
|
888
|
+
}
|
|
889
|
+
setlPreviewMode() {
|
|
890
|
+
const varNum = parseInt((document.getElementById('DW_PreviewMode')
|
|
891
|
+
.selectedIndex + 1).toString(), 10);
|
|
892
|
+
const btnCrop = document.getElementById('btnCrop');
|
|
893
|
+
if (btnCrop) {
|
|
894
|
+
let tmpstr = btnCrop.src;
|
|
895
|
+
if (varNum > 1) {
|
|
896
|
+
tmpstr = tmpstr.replace('Crop.', 'Crop_gray.');
|
|
897
|
+
btnCrop.src = tmpstr;
|
|
898
|
+
btnCrop.onclick = function () { };
|
|
899
|
+
}
|
|
900
|
+
else {
|
|
901
|
+
tmpstr = tmpstr.replace('Crop_gray.', 'Crop.');
|
|
902
|
+
btnCrop.src = tmpstr;
|
|
903
|
+
btnCrop.onclick = () => {
|
|
904
|
+
this.btnCrop_onclick();
|
|
905
|
+
};
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
this.DWObject.SetViewMode(varNum, varNum);
|
|
909
|
+
if (Dynamsoft.Lib.env.bMac || Dynamsoft.Lib.env.bLinux) {
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
912
|
+
else if (document.getElementById('DW_PreviewMode')
|
|
913
|
+
.selectedIndex !== 0) {
|
|
914
|
+
this.DWObject.MouseShape = true;
|
|
915
|
+
}
|
|
916
|
+
else {
|
|
917
|
+
this.DWObject.MouseShape = false;
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
// --------------------------------------------------------------------------------------
|
|
921
|
+
// *********************************radio response***************************************
|
|
922
|
+
// --------------------------------------------------------------------------------------
|
|
923
|
+
rdTIFF_onclick() {
|
|
924
|
+
const _chkMultiPageTIFF = document.getElementById('MultiPageTIFF');
|
|
925
|
+
_chkMultiPageTIFF.disabled = false;
|
|
926
|
+
_chkMultiPageTIFF.checked = false;
|
|
927
|
+
const _chkMultiPagePDF = document.getElementById('MultiPagePDF');
|
|
928
|
+
_chkMultiPagePDF.checked = false;
|
|
929
|
+
_chkMultiPagePDF.disabled = true;
|
|
930
|
+
}
|
|
931
|
+
rdPDF_onclick() {
|
|
932
|
+
const _chkMultiPageTIFF = document.getElementById('MultiPageTIFF');
|
|
933
|
+
_chkMultiPageTIFF.checked = false;
|
|
934
|
+
_chkMultiPageTIFF.disabled = true;
|
|
935
|
+
const _chkMultiPagePDF = document.getElementById('MultiPagePDF');
|
|
936
|
+
_chkMultiPagePDF.disabled = false;
|
|
937
|
+
_chkMultiPagePDF.checked = true;
|
|
938
|
+
}
|
|
939
|
+
rd_onclick() {
|
|
940
|
+
const _chkMultiPageTIFF = document.getElementById('MultiPageTIFF');
|
|
941
|
+
_chkMultiPageTIFF.checked = false;
|
|
942
|
+
_chkMultiPageTIFF.disabled = true;
|
|
943
|
+
const _chkMultiPagePDF = document.getElementById('MultiPagePDF');
|
|
944
|
+
_chkMultiPagePDF.checked = false;
|
|
945
|
+
_chkMultiPagePDF.disabled = true;
|
|
946
|
+
}
|
|
947
|
+
Dynamsoft_OnMouseDoubleClick() {
|
|
948
|
+
return;
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
ScanComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScanComponent, deps: [{ token: i1.TranslateService }, { token: i2.DocumentsService }, { token: i3.DatePipe }, { token: i4.DocumentScanService }, { token: 'environment' }, { token: APP_BASE_HREF }], target: i0.ɵɵFactoryTarget.Component });
|
|
952
|
+
ScanComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ScanComponent, selector: "app-document-scan", inputs: { useStoredFile: "useStoredFile", hideUploadButton: "hideUploadButton" }, outputs: { file: "file" }, host: { classAttribute: "scanner" }, ngImport: i0, template: "<div id=\"DWTcontainer\">\r\n <div id=\"DWTcontainerTop\">\r\n <div id=\"divEdit\">\r\n <ul class=\"operateGrp\">\r\n <li>\r\n <img src=\"./assets/dwt-resources/Images/ShowEditor.png\" [title]=\"'scanner.showImageEditor' | translate\"\r\n [alt]=\"'scanner.showImageEditor' | translate\" id=\"btnEditor\" (click)=\"btnShowImageEditor_onclick()\" />\r\n </li>\r\n <li>\r\n <img src=\"./assets/dwt-resources/Images/RotateLeft.png\" [title]=\"'scanner.rotateLeft' | translate\"\r\n [alt]=\"'scanner.rotateLeft' | translate\" id=\"btnRotateL\" (click)=\"btnRotateLeft_onclick()\" />\r\n </li>\r\n <li>\r\n <img src=\"./assets/dwt-resources/Images/RotateRight.png\" [title]=\"'scanner.rotateRight' | translate\"\r\n [alt]=\"'scanner.rotateRight' | translate\" id=\"btnRotateR\" (click)=\"btnRotateRight_onclick()\" />\r\n </li>\r\n <li>\r\n <img src=\"./assets/dwt-resources/Images/Rotate180.png\" [alt]=\"'scanner.rotate180' | translate\"\r\n [title]=\"'scanner.rotate180' | translate\" (click)=\"btnRotate180_onclick()\" />\r\n </li>\r\n <li>\r\n <img src=\"./assets/dwt-resources/Images/Mirror.png\" [title]=\"'scanner.mirror' | translate\"\r\n [alt]=\"'scanner.mirror' | translate\" id=\"btnMirror\" (click)=\"btnMirror_onclick()\" />\r\n </li>\r\n <li>\r\n <img src=\"./assets/dwt-resources/Images/Flip.png\" [title]=\"'scanner.flip' | translate\"\r\n [alt]=\"'scanner.flip' | translate\" id=\"btnFlip\" (click)=\"btnFlip_onclick()\" />\r\n </li>\r\n <li>\r\n <img src=\"./assets/dwt-resources/Images/RemoveSelectedImages.png\"\r\n [title]=\"'scanner.removeSelected' | translate\" [alt]=\"'scanner.removeSelected' | translate\"\r\n id=\"DW_btnRemoveCurrentImage\" (click)=\"btnRemoveCurrentImage_onclick()\" />\r\n </li>\r\n <li>\r\n <img src=\"./assets/dwt-resources/Images/RemoveAllImages.png\" [title]=\"'scanner.removeAll' | translate\"\r\n [alt]=\"'scanner.removeAll' | translate\" id=\"DW_btnRemoveAllImages\" (click)=\"btnRemoveAllImages_onclick()\" />\r\n </li>\r\n <li>\r\n <img src=\"./assets/dwt-resources/Images/ChangeSize.png\" [title]=\"'scanner.resize' | translate\"\r\n [alt]=\"'scanner.resize' | translate\" id=\"btnChangeImageSize\" (click)=\"btnChangeImageSize_onclick()\" />\r\n </li>\r\n <li>\r\n <img src=\"./assets/dwt-resources/Images/Crop.png\" [title]=\"'scanner.crop' | translate\"\r\n [alt]=\"'scanner.crop' | translate\" id=\"btnCrop\" (click)=\"btnCrop_onclick()\" />\r\n </li>\r\n </ul>\r\n <div id=\"ImgSizeEditor\" style=\"visibility:hidden\">\r\n <ul>\r\n <li>\r\n <label for=\"img_height\">{{ 'scanner.newHeight' | translate }} :\r\n <input type=\"text\" id=\"img_height\" style=\"width:50%;\" size=\"10\" />\r\n {{ 'scanner.pixel' | translate }}</label>\r\n </li>\r\n <li>\r\n <label for=\"img_width\">{{ 'scanner.newWidth' | translate }} : \r\n <input type=\"text\" id=\"img_width\" style=\"width:50%;\" size=\"10\" />\r\n {{ 'scanner.pixel' | translate }}</label>\r\n </li>\r\n <li>\r\n {{ 'scanner.InterpolationMethod' | translate }}:\r\n <select size=\"1\" id=\"InterpolationMethod\">\r\n <option value=\"\"></option>\r\n </select>\r\n </li>\r\n <li style=\"text-align:center;\">\r\n <input type=\"button\" value=\" OK \" id=\"btnChangeImageSizeOK\" (click)=\"btnChangeImageSizeOK_onclick()\" />\r\n <input type=\"button\" value=\" Cancel \" id=\"btnCancelChange\" (click)=\"btnCancelChange_onclick()\" />\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div id=\"dwtcontrolContainer\"></div>\r\n <div id=\"btnGroupBtm\">\r\n <div class=\"ct-lt\">\r\n {{ 'scanner.page' | translate }}:\r\n <input id=\"DW_btnFirstImage\" (click)=\"btnFirstImage_onclick()\" type=\"button\" value=\" |< \" /> \r\n <input id=\"DW_btnPreImage\" (click)=\"btnPreImage_onclick()\" type=\"button\" value=\" < \" /> \r\n <input type=\"text\" size=\"2\" id=\"DW_CurrentImage\" readonly=\"readonly\" />\r\n /\r\n <input type=\"text\" size=\"2\" id=\"DW_TotalImage\" readonly=\"readonly\" /> \r\n <input id=\"DW_btnNextImage\" (click)=\"btnNextImage_onclick()\" type=\"button\" value=\"> \" /> \r\n <input id=\"DW_btnLastImage\" (click)=\"btnLastImage_onclick()\" type=\"button\" value=\">| \" />\r\n </div>\r\n <div class=\"ct-rt\">\r\n {{ 'scanner.preview' | translate }}:\r\n <select size=\"1\" id=\"DW_PreviewMode\" (change)=\"setlPreviewMode()\">\r\n <option value=\"0\">1X1</option>\r\n <option value=\"1\">2X2</option>\r\n <option value=\"2\">3X3</option>\r\n <option value=\"3\">4X4</option>\r\n <option value=\"4\">5X5</option>\r\n </select><br />\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"ScanWrapper\">\r\n <div id=\"divScanner\" class=\"divinput\">\r\n <div id=\"div_ScanImage\" class=\"divTableStyle\">\r\n <ul id=\"ulScaneImageHIDE\">\r\n <li>\r\n <label for=\"source\">\r\n <p>{{ 'scanner.source' | translate }}:</p>\r\n </label>\r\n <select size=\"1\" id=\"source\" style=\"position:relative;\" (change)=\"source_onchange()\">\r\n <option value=\"\"></option>\r\n </select>\r\n </li>\r\n <li style=\"display:none;\" id=\"pNoScanner\">\r\n <a href=\"javascript: void(0)\" class=\"ShowtblLoadImage\" style=\"color:#fe8e14\" id=\"aNoScanner\">(No TWAIN\r\n compatible drivers detected)</a>\r\n </li>\r\n <li id=\"divProductDetail\">\r\n <ul id=\"divTwainType\">\r\n <li>\r\n <label id=\"lblShowUI\" for=\"ShowUI\">\r\n <input type=\"checkbox\" id=\"ShowUI\" />{{\r\n 'scanner.ShowUI' | translate\r\n }} </label>\r\n <label for=\"ADF\">\r\n <input type=\"checkbox\" id=\"ADF\" />{{\r\n 'scanner.AutoFeeder' | translate\r\n }} </label>\r\n <label for=\"Duplex\">\r\n <input type=\"checkbox\" id=\"Duplex\" />{{\r\n 'scanner.Duplex' | translate\r\n }}</label>\r\n </li>\r\n <li>\r\n {{ 'scanner.PixelType' | translate }}:\r\n <label for=\"BW\" style=\"margin-left:5px;\">\r\n <input type=\"radio\" id=\"BW\" name=\"PixelType\" />{{\r\n 'scanner.B&W' | translate\r\n }}</label>\r\n <label for=\"Gray\">\r\n <input type=\"radio\" id=\"Gray\" name=\"PixelType\" />{{\r\n 'scanner.Gray' | translate\r\n }}</label>\r\n <label for=\"RGB\">\r\n <input type=\"radio\" id=\"RGB\" name=\"PixelType\" />{{\r\n 'scanner.Color' | translate\r\n }}</label>\r\n </li>\r\n <li>\r\n <span>{{ 'scanner.Resolution' | translate }}: </span><select size=\"1\" id=\"Resolution\">\r\n <option value=\"100\">100</option>\r\n <option value=\"150\">150</option>\r\n <option value=\"200\">200</option>\r\n <option value=\"300\" selected>300</option>\r\n </select>\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n <button id=\"btnScan\" disabled=\"disabled\" (click)=\"acquireImage()\" type=\"button\" class=\"btn mx-2\">\r\n <i class=\"bi bi-upc-upload icon\"></i>\r\n <span> {{ 'scanner.scan' | translate }}</span>\r\n </button>\r\n <button (click)=\"btnLoadImagesOrPDFs_onclick()\" type=\"button\" class=\"btn\">\r\n <i class=\"bi bi-upload icon\"></i>\r\n <span> {{ 'scanner.load' | translate }}</span>\r\n </button>\r\n \r\n </ul>\r\n </div>\r\n\r\n <div class=\"row gap\">\r\n <div class=\"col-12 mt-2\">\r\n <button class=\"btn\" [ngClass]=\"{'hide-upload-button' : hideUploadButton}\" #scannerUploadButton id=\"scannerUploadButton\" [disabled]=\"DWObject?.HowManyImagesInBuffer === 0\" color=\"primary\"\r\n (click)=\"convertToBlob()\">\r\n {{ 'scanner.save' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".scanner img{vertical-align:middle;border:0}.scanner p{margin:0;padding:0}.scanner a:link,.scanner a:visited{color:#606060;text-decoration:none}.scanner a:hover{color:#fe8e14}.scanner input{font:normal 12px verdana;color:#444}.scanner input.invalid{background-color:#ff9;border:2px red inset}.scanner a img{border:none}.scanner a img:hover{border:none}.scanner ul{list-style:none;padding-left:0;margin:0}.scanner .container{width:980px;margin:0 auto}.scanner .container:after,.scanner .clearfix:after{content:\"\";display:table;clear:both}.scanner .tc{text-align:center}.scanner .btnOrg{padding:0 15px;height:30px;line-height:28px;font-size:14px;color:#fff;background:#50a8e1;border:none;outline:none;cursor:pointer;border-radius:5px;-webkit-border-radius:5px;-moz-border-right-colors:5px;transition:all .2s ease-in-out}.scanner .btnOrg:hover{background:#61c2ec}.scanner .d-btn{display:inline-block;padding:0 25px;height:36px;line-height:30px;color:#fe8e14;font-size:14px;text-align:center;cursor:pointer;border:solid 2px #fe8e14;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;transition:all .2s ease-in-out}.scanner .d-btn:link,.scanner .d-btn:visited{color:#fe8e14}.scanner .d-btn:hover{color:#ffae38;border:solid 2px #ffae38}.scanner .d-btn.lgBtn{height:46px;line-height:40px}.scanner .d-btn.mdBtn{height:42px;line-height:36px}.scanner .d-btn.smBtn{height:38px;line-height:32px}.scanner .d-btn.bgOrange{background:#fe8e14;color:#fff}.scanner .d-btn.bgOrange:hover{background:#ffae38}.scanner .d-btn.bgBlue{border-color:#50a8e1;background:#50a8e1;color:#fff}.scanner .d-btn.bgBlue:hover{border-color:#61c2ec;background:#61c2ec}.scanner #dwtScanDemo{width:980px;margin:0 auto}.scanner #dwtScanDemo .ct-top{padding:0 0 15px}.scanner #dwtScanDemo .ct-top .title{font-size:18px;line-height:27px;color:#444}.scanner #dwtScanDemo .ct-top .desc{margin:0 15px 0 30px;font-size:14px;line-height:24px;color:#aaa}.scanner #DWTcontainer{display:flex;justify-content:space-between;flex-direction:row}.scanner #DWTcontainerTop{position:relative;float:left;flex:1;margin:0 10px;height:auto;border:1px solid #ccc;display:flex;justify-content:space-between;flex-direction:row}.scanner .ds-dwt-container-box>div{border:none!important}.scanner #divEdit{float:left;margin:0;padding:0;width:60px;background:#fff;border-right:1px solid #ccc}.scanner #divEdit .operateGrp li{margin:0;width:60px;height:57px;line-height:52px;border-bottom:solid 1px #ccc;text-align:center}.scanner #divEdit .operateGrp li:nth-last-child(2){height:58px}.scanner #divEdit .operateGrp li:last-child{height:56px;border-bottom:none}.scanner #divEdit .operateGrp li>img{cursor:pointer}.scanner #Crop{padding:10px 5px 5px;text-align:center;border-collapse:collapse;border:3px solid #ce5e04;position:absolute;height:80px;z-index:1;background-color:#f0f0f0;width:250px}.scanner #ImgSizeEditor{padding:10px 15px;position:absolute;z-index:1;top:513px;left:-1px;height:auto;width:320px;font-size:14px;color:#606060;text-align:left;background-color:#f5f5f5;border-collapse:collapse;border:1px solid #ccc;box-shadow:4px 4px 18px #ccc;-webkit-box-shadow:4px 4px 18px #ccc;-moz-box-shadow:4px 4px 18px #ccc}.scanner #ImgSizeEditor li{margin-bottom:5px}.scanner #ImgSizeEditor input{background:#fff;border:solid 1px #ccc}.scanner #ImgSizeEditor input[type=text]{padding-left:3px}.scanner #ImgSizeEditor input[type=button]{padding:5px;margin:6px 5px 0}.scanner #dwtcontrolContainer{float:left;width:100%;height:calc(100% - 58px)}.scanner #dwtcontrolContainer .dynamsoft-dwt-container-box>div{border:none!important}.scanner #dwt-NonInstallContainerID{float:left;width:560px;height:590px}.scanner #DWTcontainerTop #btnGroupBtm{position:absolute;bottom:0;padding:15px;width:calc(100% - 60px);height:58px;background:#f5f5f5;border-top:1px solid #ccc;font-size:14px;color:#606060;vertical-align:bottom;display:flex;justify-content:space-between;flex-direction:row;align-items:center;box-sizing:border-box;left:60px}.scanner #btnGroupBtm .ct-lt{float:left}.scanner #btnGroupBtm .ct-lt input{padding:0;margin-right:6px;width:25px;height:20px;font-size:10px;background:#f5f5f5;border:solid 1px #bbbcc0;outline:none;cursor:pointer}.scanner #btnGroupBtm .ct-lt input[type=text]{height:20px;font-size:12px;border:none;cursor:default}.scanner #btnGroupBtm .ct-lt #DW_btnFirstImage{margin-left:5px}.scanner #btnGroupBtm .ct-lt #DW_CurrentImage{margin:0 0 0 -13px;text-align:right}.scanner #btnGroupBtm .ct-lt #DW_TotalImage{margin:0 -7px 0 0;text-align:left}.scanner #btnGroupBtm .ct-rt{float:right}.scanner #DW_PreviewMode{padding:0 5px;margin-left:5px;height:26px;border:solid 1px #d8d8d8;color:#444;outline:none;border-radius:5px;cursor:pointer}.scanner #ScanWrapper{width:315px;height:570px;box-sizing:border-box}.scanner div.divinput{font-size:14px;color:#606060;line-height:24px;margin-bottom:20px}.scanner .divType,.scanner #ScanWrapper .toggle{padding-left:20px;height:38px;line-height:36px;font-size:14px;color:#444;border-bottom:solid 1px #ccc;background:#eee;cursor:pointer}.scanner #ScanWrapper .toggle{cursor:default}.scanner .mark_arrow{display:block;float:right;margin:15px 20px 0 0;width:12px;height:8px}.scanner .divTableStyle{border:3px solid #ccc;border-radius:5px;padding:10px;border-bottom:solid 1px #ccc}.scanner .divTableStyle input[type=radio],.scanner .divTableStyle input[type=checkbox]{margin:0 5px!important;height:13px;display:inline-block}.scanner #ScanWrapper select,.scanner #divUpload input[type=text]{margin-top:3px;margin-bottom:6px;height:26px;border:solid 1px #ccc;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;outline:none}.scanner #ScanWrapper input[type=checkbox],.scanner #ScanWrapper input[type=radio]{margin:0 3px 0 0}.scanner #divScanner{border-bottom:none}.scanner #PCollapse{list-style:none inside none;margin-left:0;padding-left:0}.scanner select#source{margin-top:3px;padding-left:3px;width:100%;font-size:12px;border:solid 1px #ccc;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;outline:none}.scanner select#Resolution{margin-left:3px;width:192px;height:26px}.scanner #divProductDetail li{margin-top:8px}.scanner #divProductDetail li:first-child{margin-top:3px}.scanner #divProductDetail li label{display:inline-block;margin:0 4px;font-size:12px}.scanner #divProductDetail li label:last-child{margin:0}.scanner #divProductDetail li label input{width:15px;height:15px;vertical-align:middle}.scanner #btnScan{margin-top:10px;margin-bottom:5px}.scanner #div_LoadLocalImage input[type=button]{margin:15px 0;width:90px;height:30px}.scanner #div_ScanImage{position:relative}.scanner #tblLoadImage{position:absolute;top:102px;z-index:1;padding:30px 22px;width:275px;height:128px;font-size:14px;line-height:30px;text-align:left;border:1px solid #fe8e14;background-color:#f5f5f5}.scanner #tblLoadImage>a{position:absolute;top:15px;right:15px;line-height:normal;text-decoration:none}.scanner #tblLoadImage a{color:#50a8e1}.scanner #tblLoadImage a:hover{color:#61c2ec}.scanner #divUpload input[type=text]{width:100%;padding-left:5px}.scanner #divUpload li label{display:inline-block;margin:0 8px 0 0;font-size:12px}.scanner #divUpload li img{margin-right:2px}.scanner #divUpload li label:last-child{margin-right:0}.scanner #divUpload li input{width:15px;height:15px;vertical-align:middle}.scanner #divUpload li:nth-child(3){margin:5px 0 8px}.scanner #divUpload li{padding:0 20px}.scanner #divUpload li:nth-child(2){padding-top:12px}.scanner #divUpload input[type=button]{margin:14px 0 20px}.scanner #divUpload #btnSave,.scanner #divUpload #btnUpload{padding:0;width:115px;height:30px;margin-right:15px;cursor:pointer}.scanner #divUpload #btnUpload{width:138px;margin-right:0}.scanner #DWTcontainerBtm{position:relative;float:left;width:980px}.scanner #DWTemessageContainer{float:left}.scanner #DWTemessageContainer input[type=text]{border:solid 1px #ccc;padding-left:3px}.scanner #DWTemessageContainer input[type=button]{cursor:pointer;margin:0 3px;outline:none}.scanner #DWTdivMsg{padding:5px 0 0;font-size:14px;color:#444}.scanner #DWTemessage{padding:6px 0 0 8px;margin-top:3px;width:632px;height:160px;border:solid 1px #ccc;overflow-y:scroll;background:#fff}.scanner #divNoteMessage{float:right;padding:10px 15px;margin-top:34px;width:315px;height:160px;font-size:12px;line-height:20px;border:1px solid #ccc;background:#e7f2fd;color:#606060}.scanner #divNoteMessage p{margin:0;color:#444}.scanner .ds-dialog-wrap,.scanner .ds-dialog-wrap div{box-sizing:content-box!important}.scanner .ds-dialog-wrap:before,.scanner .ds-dialog-wrap div:before,.scanner .ds-dialog-wrap:after,.scanner .ds-dialog-wrap div:after{box-sizing:content-box!important}.scanner .ks-overlay{position:absolute;left:-9999px;top:-9999px}.scanner .ks-ext-close{padding:0 20px;position:absolute;right:-5px;top:5px}.scanner .ks-ext-close,.scanner .ks-ext-close:link{color:#22a;text-decoration:none;cursor:pointer}.scanner .ks-ext-mask{background:#999;filter:alpha(opacity=70);-moz-opacity:.7;opacity:.7}.scanner .D-dailog .ks-ext-close .ks-ext-close-x{height:8px}.scanner .D-dailog .ks-ext-close,.scanner .D-dailog .ks-ext-close:hover{background:none;border:none}.scanner .D-dailog{position:absolute;left:-9999px;top:-99999px;margin:100px auto;padding:0;width:392px;height:262px;background-color:#f1f2f2}.scanner .D-dailog .D-dailog-body{width:350px;height:200px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.scanner .D-dailog .D-dailog-body-Mac{width:350px;height:235px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.scanner .D-dailog .D-dailog-body-NotAllowed{color:#444;line-height:1.8;width:350px;height:185px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.scanner .D-dailog .D-dailog-body-Scan{width:380px;height:240px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.scanner .D-dailog .D-dailog-body-Scan-sample{width:380px;height:200px;position:relative;top:5px;left:5px;margin:0;background-color:#fff;border:1px solid #e7e7e7;padding:15px}.scanner .D-dailog a{text-decoration:none}.scanner .link{text-decoration:underline}.scanner .D-dailog ul{margin:10px 0 10px 20px;list-style-type:disc}.scanner .red{color:red;margin-left:5px}.scanner #message{position:fixed;top:0px;left:0px;width:100%;z-index:105;text-align:center;font-weight:bold;font-size:100%;padding:10px 0;color:#239210;background-color:#e0f0d6;border:1px solid #54d33f;box-shadow:0 0 10px #3a3a3a}.scanner #MessageBody a{color:#6a9962;font-size:14px}.scanner #message span{text-align:center;width:95%;float:left}.scanner #MessageBoy a:hover{text-decoration:underline}.scanner .close-notify{white-space:nowrap;float:right;margin-right:10px;color:#fff;text-decoration:none;border:2px #fff solid;padding-left:3px;padding-right:3px}.scanner .close-notify a{color:#fff}.scanner .DWTPage{margin:0 auto}.hide-upload-button{opacity:0!important}\n"], directives: [{ type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i1.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
|
|
953
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScanComponent, decorators: [{
|
|
954
|
+
type: Component,
|
|
955
|
+
args: [{
|
|
956
|
+
selector: 'app-document-scan',
|
|
957
|
+
templateUrl: './document-scan.component.html',
|
|
958
|
+
styleUrls: ['./document-scan.component.scss'],
|
|
959
|
+
host: { class: 'scanner' },
|
|
960
|
+
encapsulation: ViewEncapsulation.None
|
|
961
|
+
}]
|
|
962
|
+
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.DocumentsService }, { type: i3.DatePipe }, { type: i4.DocumentScanService }, { type: undefined, decorators: [{
|
|
963
|
+
type: Inject,
|
|
964
|
+
args: ['environment']
|
|
965
|
+
}] }, { type: undefined, decorators: [{
|
|
966
|
+
type: Inject,
|
|
967
|
+
args: [APP_BASE_HREF]
|
|
968
|
+
}] }]; }, propDecorators: { useStoredFile: [{
|
|
969
|
+
type: Input
|
|
970
|
+
}], hideUploadButton: [{
|
|
971
|
+
type: Input
|
|
972
|
+
}], file: [{
|
|
973
|
+
type: Output
|
|
974
|
+
}] } });
|
|
975
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9jb21wb25lbnRzL2RvY3VtZW50LXNjYW4vZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9jb21wb25lbnRzL2RvY3VtZW50LXNjYW4vZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFZLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQUUsTUFBTSxFQUNwQixLQUFLLEVBRUwsTUFBTSxFQUNOLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLFNBQVMsTUFBTSxLQUFLLENBQUM7Ozs7Ozs7QUFLNUI7Ozs7Ozs7Ozs7Ozs7R0FhRztBQVFILE1BQU0sT0FBTyxhQUFhO0lBeUJ4QixZQUNTLFNBQTJCLEVBQzNCLGdCQUFrQyxFQUNsQyxRQUFrQixFQUNsQixtQkFBeUMsRUFDakIsV0FBVyxFQUNYLFFBQWdCO1FBTHhDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXNCO1FBQ2pCLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ1gsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQTNCeEMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIscUJBQWdCLEdBQUMs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TUFBTSxpQkFBaUIsR0FBUSxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hFLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDbEMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUVsQyxNQUFNLGdCQUFnQixHQUFRLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEUsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNqQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUEwQ0QsNEJBQTRCO1FBQzFCLE9BQU87SUFDVCxDQUFDOzsyR0FsbENVLGFBQWEsNklBOEJkLGFBQWEsYUFDYixhQUFhOytGQS9CWixhQUFhLDJNQ3JDMUIsbXlSQWdMQTs0RkQzSWEsYUFBYTtrQkFQekIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixXQUFXLEVBQUUsZ0NBQWdDO29CQUM3QyxTQUFTLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztvQkFDN0MsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtvQkFDMUIsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzswQkErQkksTUFBTTsyQkFBQyxhQUFhOzswQkFDcEIsTUFBTTsyQkFBQyxhQUFhOzRDQTNCZCxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHTixJQUFJO3NCQURILE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBfQkFTRV9IUkVGLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLCBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCBEeW5hbXNvZnQgZnJvbSAnZHd0JztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERvY3VtZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb2N1bWVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IERvY3VtZW50U2NhblNlcnZpY2UgfSBmcm9tICcuL2RvY3VtZW50LXNjYW4uc2VydmljZSc7XHJcblxyXG4vKipcclxuICogRG9jdW1lbnQgU2NhbiBpcyBhIHJldXNhYmxlIG51eGVvIEFQSSAmIFNjYW5uZXIgaW50ZWdyYXRlZCBjb21wb25lbnQsXHJcbiAqIHRoYXQgdXRpbGl6ZXMgdGhlIHNjYW5uZXIgdG8gY3JlYXRlIGFuZCB1cGxvYWQgUERGIGZpbGUgYXMgYSBiYXRjaCwgdGhlbiBwcm92aWRlXHJcbiAqIHRoYXQgYmF0Y2ggZm9yIGNvbnN1bXB0aW9uXHJcbiAqXHJcbiAqIEB0aXRsZVxyXG4gKiBEb2N1bWVudCBTY2FuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIDxhcHAtZG9jdW1lbnQtc2NhblxyXG4gKiAgIChmaWxlKT1cIm9uU3VjY2VzcygkZXZlbnQpXCJcclxuICogPjwvYXBwLWRvY3VtZW50LXNjYW4+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kb2N1bWVudC1zY2FuJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtc2Nhbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHsgY2xhc3M6ICdzY2FubmVyJyB9LFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjYW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIHVwbG9hZGVkRmlsZTtcclxuICBvbk1pbmltaXppbmdTdWJzY3JpcHRpb24gOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIEBJbnB1dCgpIHVzZVN0b3JlZEZpbGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBoaWRlVXBsb2FkQnV0dG9uPWZhbHNlO1xyXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBiYXRjaCBpcyB1cGxvYWRlZCAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIGZpbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBEV09iamVjdDtcclxuICBzZWxlY3RTb3VyY2VzOiBIVE1MU2VsZWN0RWxlbWVudDtcclxuICBEV1RTb3VyY2VDb3VudCA9IDA7XHJcbiAgZmlsZW5hbWUgPSAnJztcclxuICBjb250YWluZXJJZCA9ICdkd3Rjb250cm9sQ29udGFpbmVyJztcclxuICBiV0FTTSA9IER5bmFtc29mdC5MaWIuZW52LmJNb2JpbGUgfHwgRHluYW1zb2Z0LkRXVC5Vc2VMb2NhbFNlcnZpY2U7XHJcbiAgX2lMZWZ0O1xyXG4gIF9pVG9wO1xyXG4gIF9pUmlnaHQ7XHJcbiAgX2lCb3R0b207XHJcbiAgX3N0clRlbXBTdHIgPSAnJztcclxuICByZSA9IC9eXFxkKyQvO1xyXG4gIHN0cnJlID0gL15bXFxzXFx3XSskLztcclxuICByZWZsb2F0ID0gL15cXGQrXFwuKlxcZCokL2k7XHJcbiAgaW5uZXJIVE1MOiBzdHJpbmc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRvY3VtZW50c1NlcnZpY2U6IERvY3VtZW50c1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHVibGljIERvY3VtZW50U2NhblNlcnZpY2UgOiBEb2N1bWVudFNjYW5TZXJ2aWNlLFxyXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50LFxyXG4gICAgQEluamVjdChBUFBfQkFTRV9IUkVGKSBwcml2YXRlIGJhc2VIcmVmOiBzdHJpbmdcclxuICApIHsgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgRHluYW1zb2Z0LkRXVC5SZXNvdXJjZXNQYXRoID0gdGhpcy5iYXNlSHJlZiArICcvYXNzZXRzL2R3dC1yZXNvdXJjZXMnO1xyXG4gICAgLy8vXHJcbiAgICBEeW5hbXNvZnQuRFdULkF1dG9Mb2FkID0gdHJ1ZTtcclxuICAgIC8vL1xyXG4gICAgLy8gY29uc3Qgd2lkdGggPSB3aW5kb3cub3V0ZXJXaWR0aCAqIDAuMztcclxuICAgIC8vIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5vdXRlckhlaWdodCAqIDAuMztcclxuICAgIER5bmFtc29mdC5EV1QuQ29udGFpbmVycyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFdlYlR3YWluSWQ6ICdEV1RPYmplY3QnLFxyXG4gICAgICAgIENvbnRhaW5lcklkOiAnZHd0Y29udHJvbENvbnRhaW5lcicsXHJcbiAgICAgICAgV2lkdGg6ICcxMDAlJyxcclxuICAgICAgICBIZWlnaHQ6ICcxMDAlJ1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIER5bmFtc29mdC5EV1QuUHJvZHVjdEtleSA9IHRoaXMuZW52aXJvbm1lbnQuZHluYW1zb2Z0UHJvZHVjdEtleTtcclxuICAgICAgICAvLyBEeW5hbXNvZnQuRFdULlRyaWFsID0gZmFsc2U7XHJcbiAgICAvLyBEeW5hbXNvZnQuRFdULkRlYnVnID0gZmFsc2U7IC8vIG9ubHkgZm9yIGRlYnVnZ2VyIG91dHB1dFxyXG5cclxuICAgIC8vL1xyXG4gICAgRHluYW1zb2Z0LkRXVC5JZkFkZE1ENUluVXBsb2FkSGVhZGVyID0gZmFsc2U7XHJcblxyXG4gICAgLy8vXHJcbiAgICBEeW5hbXNvZnQuRFdULklmQ29uZmluZU1hc2tXaXRoaW5UaGVWaWV3ZXIgPSBmYWxzZTtcclxuICAgIER5bmFtc29mdC5NU0cgPSB7XHJcbiAgICAgIENvbnZlcnRpbmdUb0Jhc2U2NDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAnc2Nhbm5lci5Db252ZXJ0aW5nVG9CYXNlNjQnXHJcbiAgICAgICksXHJcbiAgICAgIENvbnZlcnRpbmdUb0Jsb2I6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ3NjYW5uZXIuQ29udmVydGluZ1RvQmxvYidcclxuICAgICAgKSxcclxuICAgICAgRG93bmxvYWRpbmc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuRG93bmxvYWRpbmcnKSxcclxuICAgICAgRW5jb2Rpbmc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuRW5jb2RpbmcnKSxcclxuICAgICAgRXJyX0Jyb3dzZXJOb3RTdXBwb3J0V2FzbTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAnc2Nhbm5lci5FcnJfQnJvd3Nlck5vdFN1cHBvcnRXYXNtJ1xyXG4gICAgICApLFxyXG4gICAgICBJbml0X0FsbEpzTG9hZGVkOiBEeW5hbXNvZnQuTVNHLkluaXRfQWxsSnNMb2FkZWQsXHJcbiAgICAgIEluaXRfQ2hlY2tEV1Q6IER5bmFtc29mdC5NU0cuSW5pdF9DaGVja0RXVCxcclxuICAgICAgSW5pdF9DaGVja0RXVFZlcnNpb246IER5bmFtc29mdC5NU0cuSW5pdF9DaGVja0RXVFZlcnNpb24sXHJcbiAgICAgIEluaXRfQ2hlY2tpbmdMaWNlbnNlOiBEeW5hbXNvZnQuTVNHLkluaXRfQ2hlY2tpbmdMaWNlbnNlLFxyXG4gICAgICBJbml0X0NvbXBpbGluZ1dhc206IER5bmFtc29mdC5NU0cuSW5pdF9Db21waWxpbmdXYXNtLFxyXG4gICAgICBJbml0X0NvbmZpZ3VyaW5nRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfQ29uZmlndXJpbmdEV1QsXHJcbiAgICAgIEluaXRfQ3JlYXRpbmdEV1Q6IER5bmFtc29mdC5NU0cuSW5pdF9DcmVhdGluZ0RXVCxcclxuICAgICAgSW5pdF9Eb3dubG9hZGluZ1dhc206IER5bmFtc29mdC5NU0cuSW5pdF9Eb3dubG9hZGluZ1dhc20sXHJcbiAgICAgIEluaXRfRmlyZUJlZm9yZUluaXRFdnQ6IER5bmFtc29mdC5NU0cuSW5pdF9GaXJlQmVmb3JlSW5pdEV2dCxcclxuICAgICAgSW5pdF9HZXRMaWNlbnNlSW5mb0ZvckRXVDogRHluYW1zb2Z0Lk1TRy5Jbml0X0dldExpY2Vuc2VJbmZvRm9yRFdULFxyXG4gICAgICBJbml0X0luaXRBY3RpdmVYOiBEeW5hbXNvZnQuTVNHLkluaXRfSW5pdEFjdGl2ZVgsXHJcbiAgICAgIEluaXRfSW5pdER5bmFtc29mdFNlcnZpY2U6IER5bmFtc29mdC5NU0cuSW5pdF9Jbml0RHluYW1zb2Z0U2VydmljZSxcclxuICAgICAgSW5pdF9Jbml0SDU6IER5bmFtc29mdC5NU0cuSW5pdF9Jbml0SDUsXHJcbiAgICAgIEluaXRfSW5pdFdhc206IER5bmFtc29mdC5NU0cuSW5pdF9Jbml0V2FzbSxcclxuICAgICAgSW5pdF9Mb2FkaW5nVmlld2VySnM6IER5bmFtc29mdC5NU0cuSW5pdF9Mb2FkaW5nVmlld2VySnMsXHJcbiAgICAgIEluaXRfTG9va2luZ0xpY2Vuc2U6IER5bmFtc29mdC5NU0cuSW5pdF9Mb29raW5nTGljZW5zZSxcclxuICAgICAgSW5pdF9TZXRMaWNlbnNlRm9yRFdUOiBEeW5hbXNvZnQuTVNHLkluaXRfU2V0TGljZW5zZUZvckRXVCxcclxuICAgICAgTG9hZGluZzogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5Mb2FkaW5nJyksXHJcbiAgICAgIExvYWRpbmdQZGY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuTG9hZGluZ1BkZicpLFxyXG4gICAgICBMb2FkaW5nVGlmZjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5Mb2FkaW5nVGlmZicpLFxyXG4gICAgICBTYXZpbmdQZGY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuU2F2aW5nUGRmJyksXHJcbiAgICAgIFNhdmluZ1RpZmY6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuU2F2aW5nVGlmZicpLFxyXG4gICAgICBVcGxvYWRpbmc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuVXBsb2FkaW5nJylcclxuICAgIH07XHJcbiAgICBEeW5hbXNvZnQuRFdULkN1c3RvbWl6YWJsZURpc3BsYXlJbmZvID0ge1xyXG4gICAgICBlcnJvck1lc3NhZ2VzOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzY2FubmVyLmVycm9yTWVzc2FnZXMnKSxcclxuXHJcbiAgICAgIC8vIGxhdW5jaFxyXG4gICAgICBnZW5lcmFsTWVzc2FnZXM6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuZ2VuZXJhbE1lc3NhZ2VzJyksXHJcblxyXG4gICAgICBjdXN0b21Qcm9ncmVzc1RleHQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ3NjYW5uZXIuY3VzdG9tUHJvZ3Jlc3NUZXh0J1xyXG4gICAgICApLFxyXG5cclxuICAgICAgLy8gaW1hZ2UgZWRpdG9yXHJcbiAgICAgIGJ1dHRvbnM6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIuYnV0dG9ucycpLFxyXG5cclxuICAgICAgZGlhbG9nVGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2Nhbm5lci5kaWFsb2dUZXh0JylcclxuICAgIH07XHJcblxyXG4gICAgRHluYW1zb2Z0LkRXVC5PbldlYlR3YWluUmVhZHkgPSAoKTogYW55ID0+IHtcclxuICAgICAgdGhpcy5wYWdlb25sb2FkKCk7XHJcbiAgICAgIHRoaXMuRHluYW1zb2Z0X09uUmVhZHkoKTtcclxuICAgIH07XHJcbiAgICBEeW5hbXNvZnQuRFdULkxvYWQoKTtcclxuXHJcbiAgICB0aGlzLm9uTWluaW1pemluZ1N1YnNjcmlwdGlvbiA9IHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS5vbk1pbmltaXppbmcuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuY29udmVydFRvQmxvYkZvclNhdmluZygpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5wYWdlb25sb2FkKCk7XHJcbiAgICBpZih0aGlzLnVzZVN0b3JlZEZpbGUpe1xyXG4gICAgICAgIGlmKHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS5zdG9yZWRGaWxlKXtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0b3JlZEZpbGVUb1NjYW5uZXIodGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnN0b3JlZEZpbGUpO1xyXG4gICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNldFN0b3JlZEZpbGVUb1NjYW5uZXIocmVzdWx0KXtcclxuICAgIHRoaXMuRFdPYmplY3QuTG9hZEltYWdlRnJvbUJpbmFyeShcclxuICAgICAgcmVzdWx0LFxyXG4gICAgICBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdzdWNjZXNzJyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGZ1bmN0aW9uKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICk7XHJcbiAgfVxyXG5cclxuICBwYWdlb25sb2FkKCkge1xyXG4gICAgdGhpcy5IaWRlTG9hZEltYWdlRm9yTGludXgoKTtcclxuICAgIGNvbnN0IHR3YWluc291cmNlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNlJyk7XHJcbiAgICBpZiAodHdhaW5zb3VyY2UpIHtcclxuICAgICAgdHdhaW5zb3VyY2Uub3B0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICB0d2FpbnNvdXJjZS5vcHRpb25zLmFkZChcclxuICAgICAgICBuZXcgT3B0aW9uKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NjYW5uZXIucGxlYXNlV2FpdCcpLCAnMCcpXHJcbiAgICAgICk7XHJcbiAgICAgIHR3YWluc291cmNlLm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdGlhdGVJbnB1dHMoKTtcclxuICB9XHJcblxyXG4gIEhpZGVMb2FkSW1hZ2VGb3JMaW51eCgpIHtcclxuICAgIGNvbnN0IG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlMb2FkSW1hZ2UnKTtcclxuICAgIGlmIChvKSB7XHJcbiAgICAgIGlmIChEeW5hbXNvZnQuTGliLmVudi5iTGludXgpIHsgby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9XHJcbiAgICAgIGVsc2UgeyBvLnN0eWxlLmRpc3BsYXkgPSAnJzsgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhdGVJbnB1dHMoKSB7XHJcbiAgICBjb25zdCBhbGxpbnB1dHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChhbGxpbnB1dHNbaV0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgIGFsbGlucHV0c1tpXS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAoYWxsaW5wdXRzW2ldLnR5cGUgPT09ICd0ZXh0Jykge1xyXG4gICAgICAgIGFsbGlucHV0c1tpXS52YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIGlmIChEeW5hbXNvZnQuTGliLmVudi5iSUUgPT09IHRydWUgJiYgRHluYW1zb2Z0LkxpYi5lbnYuYldpbjY0ID09PSB0cnVlKSB7XHJcbiAgICAgIGxldCBvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbXBsZXNvdXJjZTY0Yml0Jyk7XHJcbiAgICAgIGlmIChvKSB7IG8uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOyB9XHJcblxyXG4gICAgICBvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbXBsZXNvdXJjZTMyYml0Jyk7XHJcbiAgICAgIGlmIChvKSB7IG8uc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdERsbEZvckNoYW5nZUltYWdlU2l6ZSgpIHtcclxuICAgIGNvbnN0IHZJbnRlcnBvbGF0aW9uTWV0aG9kOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ0ludGVycG9sYXRpb25NZXRob2QnXHJcbiAgICApO1xyXG4gICAgdkludGVycG9sYXRpb25NZXRob2Qub3B0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgdkludGVycG9sYXRpb25NZXRob2Qub3B0aW9ucy5hZGQobmV3IE9wdGlvbignTmVhcmVzdE5laWdoYm9yJywgJzEnKSk7XHJcbiAgICB2SW50ZXJwb2xhdGlvbk1ldGhvZC5vcHRpb25zLmFkZChuZXcgT3B0aW9uKCdCaWxpbmVhcicsICcyJykpO1xyXG4gICAgdkludGVycG9sYXRpb25NZXRob2Qub3B0aW9ucy5hZGQobmV3IE9wdGlvbignQmljdWJpYycsICczJykpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFZhbHVlKCkge1xyXG4gICAgY29uc3QgdkdyYXk6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdHcmF5Jyk7XHJcbiAgICBpZiAodkdyYXkpIHsgdkdyYXkuY2hlY2tlZCA9IHRydWU7IH1cclxuXHJcbiAgICBjb25zdCB2YXJJbWdUeXBlcG5nMjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ1R5cGVwbmcyJyk7XHJcbiAgICBpZiAodmFySW1nVHlwZXBuZzIpIHsgdmFySW1nVHlwZXBuZzIuY2hlY2tlZCA9IHRydWU7IH1cclxuICAgIGNvbnN0IHZhckltZ1R5cGVwbmc6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdUeXBlcG5nJyk7XHJcbiAgICBpZiAodmFySW1nVHlwZXBuZykgeyB2YXJJbWdUeXBlcG5nLmNoZWNrZWQgPSB0cnVlOyB9XHJcblxyXG4gICAgY29uc3QgX3N0ckRlZmF1bHRTYXZlSW1hZ2VOYW1lID0gJ1dlYlRXQUlOSW1hZ2UnO1xyXG4gICAgY29uc3QgX3R4dEZpbGVOYW1lZm9yU2F2ZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICd0eHRfZmlsZU5hbWVmb3JTYXZlJ1xyXG4gICAgKTtcclxuICAgIGlmIChfdHh0RmlsZU5hbWVmb3JTYXZlKSB7XHJcbiAgICAgIF90eHRGaWxlTmFtZWZvclNhdmUudmFsdWUgPSBfc3RyRGVmYXVsdFNhdmVJbWFnZU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgX3R4dEZpbGVOYW1lOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHh0X2ZpbGVOYW1lJyk7XHJcbiAgICBpZiAoX3R4dEZpbGVOYW1lKSB7IF90eHRGaWxlTmFtZS52YWx1ZSA9IF9zdHJEZWZhdWx0U2F2ZUltYWdlTmFtZTsgfVxyXG5cclxuICAgIGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGX3NhdmU6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAnTXVsdGlQYWdlVElGRl9zYXZlJ1xyXG4gICAgKTtcclxuICAgIGlmIChfY2hrTXVsdGlQYWdlVElGRl9zYXZlKSB7IF9jaGtNdWx0aVBhZ2VUSUZGX3NhdmUuZGlzYWJsZWQgPSB0cnVlOyB9XHJcbiAgICBjb25zdCBfY2hrTXVsdGlQYWdlUERGX3NhdmU6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAnTXVsdGlQYWdlUERGX3NhdmUnXHJcbiAgICApO1xyXG4gICAgaWYgKF9jaGtNdWx0aVBhZ2VQREZfc2F2ZSkgeyBfY2hrTXVsdGlQYWdlUERGX3NhdmUuZGlzYWJsZWQgPSB0cnVlOyB9XHJcbiAgICBjb25zdCBfY2hrTXVsdGlQYWdlVElGRjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVRJRkYnKTtcclxuICAgIGlmIChfY2hrTXVsdGlQYWdlVElGRikgeyBfY2hrTXVsdGlQYWdlVElGRi5kaXNhYmxlZCA9IHRydWU7IH1cclxuICAgIGNvbnN0IF9jaGtNdWx0aVBhZ2VQREY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VQREYnKTtcclxuICAgIGlmIChfY2hrTXVsdGlQYWdlUERGKSB7IF9jaGtNdWx0aVBhZ2VQREYuZGlzYWJsZWQgPSB0cnVlOyB9XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiB0aGUgY29udHJvbCBpcyBmdWxseSBsb2FkZWQuXHJcbiAgRHluYW1zb2Z0X09uUmVhZHkoKSB7XHJcbiAgICBjb25zdCBsaU5vU2Nhbm5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwTm9TY2FubmVyJyk7XHJcbiAgICAvLyBJZiB0aGUgRXJyb3JDb2RlIGlzIDAsIGl0IG1lYW5zIGV2ZXJ5dGhpbmcgaXMgZmluZSBmb3IgdGhlIGNvbnRyb2wuIEl0IGlzIGZ1bGx5IGxvYWRlZC5cclxuICAgIHRoaXMuRFdPYmplY3QgPSBEeW5hbXNvZnQuRFdULkdldFdlYlR3YWluKCdkd3Rjb250cm9sQ29udGFpbmVyJyk7XHJcbiAgICBpZiAodGhpcy5EV09iamVjdCkge1xyXG4gICAgICBpZiAodGhpcy5EV09iamVjdC5FcnJvckNvZGUgPT09IDApIHtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LkxvZ0xldmVsID0gMDtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LklmQWxsb3dMb2NhbENhY2hlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LkltYWdlQ2FwdHVyZURyaXZlclR5cGUgPSA0O1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudChcclxuICAgICAgICAgICdPblRvcEltYWdlSW5UaGVWaWV3Q2hhbmdlZCcsXHJcbiAgICAgICAgICB0aGlzLkR5bmFtc29mdF9PblRvcEltYWdlSW5UaGVWaWV3Q2hhbmdlZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KFxyXG4gICAgICAgICAgJ09uTW91c2VDbGljaycsXHJcbiAgICAgICAgICB0aGlzLkR5bmFtc29mdF9Pbk1vdXNlQ2xpY2tcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgdHdhaW5zb3VyY2U6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VyY2UnKTtcclxuICAgICAgICBpZiAoIXR3YWluc291cmNlKSB7XHJcbiAgICAgICAgICB0d2FpbnNvdXJjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3ZWJjYW1zb3VyY2UnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHZDb3VudCA9IHRoaXMuRFdPYmplY3QuU291cmNlQ291bnQ7XHJcbiAgICAgICAgdGhpcy5EV1RTb3VyY2VDb3VudCA9IHZDb3VudDtcclxuXHJcbiAgICAgICAgaWYgKHR3YWluc291cmNlKSB7XHJcbiAgICAgICAgICB0d2FpbnNvdXJjZS5vcHRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHR3YWluc291cmNlLm9wdGlvbnMuYWRkKFxyXG4gICAgICAgICAgICAgIG5ldyBPcHRpb24odGhpcy5EV09iamVjdC5HZXRTb3VyY2VOYW1lSXRlbXMoaSksIGkudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIElmIHNvdXJjZSBsaXN0IG5lZWQgdG8gYmUgZGlzcGxheWVkLCBmaWxsIGluIHRoZSBzb3VyY2UgaXRlbXMuXHJcbiAgICAgICAgaWYgKHZDb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKGxpTm9TY2FubmVyKSB7XHJcbiAgICAgICAgICAgIGlmIChEeW5hbXNvZnQuTGliLmVudi5iV2luKSB7XHJcbiAgICAgICAgICAgICAgbGlOb1NjYW5uZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgbGlOb1NjYW5uZXIuc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IGxpTm9TY2FubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2Q291bnQgPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vbmNoYW5nZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKER5bmFtc29mdC5MaWIuZW52LmJXaW4pIHsgdGhpcy5EV09iamVjdC5Nb3VzZVNoYXBlID0gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgY29uc3QgYnRuU2NhbjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0blNjYW4nKTtcclxuICAgICAgICBpZiAoYnRuU2Nhbikge1xyXG4gICAgICAgICAgaWYgKHZDb3VudCA9PT0gMCkgeyBidG5TY2FuLmRpc2FibGVkID0gdHJ1ZTsgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGJ0blNjYW4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghRHluYW1zb2Z0LkxpYi5lbnYuYldpbiAmJiB2Q291bnQgPiAwKSB7XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd1VJJykuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbml0RGxsRm9yQ2hhbmdlSW1hZ2VTaXplKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2lMZWZ0ID0gMDtcclxuICAgICAgICB0aGlzLl9pVG9wID0gMDtcclxuICAgICAgICB0aGlzLl9pUmlnaHQgPSAwO1xyXG4gICAgICAgIHRoaXMuX2lCb3R0b20gPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvY3VtZW50LmxpbmtzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQubGlua3NbaV0uY2xhc3NOYW1lID09PSAnU2hvd3RibExvYWRJbWFnZScpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQubGlua3NbaV0ub25jbGljayA9IHRoaXMuc2hvd3RibExvYWRJbWFnZV9vbmNsaWNrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmxpbmtzW2ldLmNsYXNzTmFtZSA9PT0gJ0Nsb3NldGJsTG9hZEltYWdlJykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5saW5rc1tpXS5vbmNsaWNrID0gdGhpcy5jbG9zZXRibExvYWRJbWFnZV9vbmNsaWNrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodkNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoRHluYW1zb2Z0LkxpYi5lbnYuYldpbikge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FOb1NjYW5uZXInKSAmJlxyXG4gICAgICAgICAgICAgIHdpbmRvd1snYkRXVE9ubGluZURlbW8nXVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rpdl9TY2FuSW1hZ2UnKS5zdHlsZS5kaXNwbGF5ID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93dGJsTG9hZEltYWdlX29uY2xpY2soKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykpIHtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZGl2QmxhbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2QmxhbmsnKTtcclxuICAgICAgICAgIGlmIChkaXZCbGFuaykgeyBkaXZCbGFuay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgICAgICAgY29uc3QgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCF1YS5pbmRleE9mKCdtc2llIDYuMCcpKSB7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoXHJcbiAgICAgICAgICAnT25Qb3N0VHJhbnNmZXInLFxyXG4gICAgICAgICAgdGhpcy5EeW5hbXNvZnRfT25Qb3N0VHJhbnNmZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudChcclxuICAgICAgICAgICdPblBvc3RMb2FkJyxcclxuICAgICAgICAgIHRoaXMuRHluYW1zb2Z0X09uUG9zdExvYWRmdW5jdGlvblxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5SZWdpc3RlckV2ZW50KFxyXG4gICAgICAgICAgJ09uUG9zdEFsbFRyYW5zZmVycycsXHJcbiAgICAgICAgICB0aGlzLkR5bmFtc29mdF9PblBvc3RBbGxUcmFuc2ZlcnNcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudChcclxuICAgICAgICAgICdPbkltYWdlQXJlYVNlbGVjdGVkJyxcclxuICAgICAgICAgIHRoaXMuRHluYW1zb2Z0X09uSW1hZ2VBcmVhU2VsZWN0ZWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUmVnaXN0ZXJFdmVudChcclxuICAgICAgICAgICdPbkltYWdlQXJlYURlU2VsZWN0ZWQnLFxyXG4gICAgICAgICAgdGhpcy5EeW5hbXNvZnRfT25JbWFnZUFyZWFEZXNlbGVjdGVkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlJlZ2lzdGVyRXZlbnQoXHJcbiAgICAgICAgICAnT25HZXRGaWxlUGF0aCcsXHJcbiAgICAgICAgICB0aGlzLkR5bmFtc29mdF9PbkdldEZpbGVQYXRoXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd3RibExvYWRJbWFnZV9vbmNsaWNrKCkge1xyXG4gICAgc3dpdGNoIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsTG9hZEltYWdlJykuc3R5bGUudmlzaWJpbGl0eSkge1xyXG4gICAgICBjYXNlICdoaWRkZW4nOlxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YmxMb2FkSW1hZ2UnKS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd2aXNpYmxlJzpcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJsTG9hZEltYWdlJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdSZXNvbHV0aW9uJykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncE5vU2Nhbm5lcicpKSB7XHJcbiAgICAgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGJsTG9hZEltYWdlXCIpLnN0eWxlLnRvcCA9IGRzX2dldHRvcChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBOb1NjYW5uZXJcIikpICsgcE5vU2Nhbm5lci5vZmZzZXRIZWlnaHQgKyBcInB4XCI7XHJcbiAgICAgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGJsTG9hZEltYWdlXCIpLnN0eWxlLmxlZnQgPSBkc19nZXRsZWZ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicE5vU2Nhbm5lclwiKSkgKyAwICsgXCJweFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xvc2V0YmxMb2FkSW1hZ2Vfb25jbGljaygpIHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YmxMb2FkSW1hZ2UnKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVzb2x1dGlvbicpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqIFVzZWQgYSBsb3QgKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHVwZGF0ZVBhZ2VJbmZvKCkge1xyXG4gICAgY29uc3QgdG90YWxJbWFnZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX1RvdGFsSW1hZ2UnKTtcclxuICAgIGNvbnN0IGN1cnJlbnRJbWFnZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX0N1cnJlbnRJbWFnZScpO1xyXG4gICAgaWYgKHRvdGFsSW1hZ2UpIHsgdG90YWxJbWFnZS52YWx1ZSA9IHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyOyB9XHJcbiAgICBpZiAoY3VycmVudEltYWdlKSB7XHJcbiAgICAgIGN1cnJlbnRJbWFnZS52YWx1ZSA9IHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciArIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBlbmRNZXNzYWdlKHN0ck1lc3NhZ2UpIHtcclxuICAgIHRoaXMuX3N0clRlbXBTdHIgKz0gc3RyTWVzc2FnZTtcclxuICAgIGNvbnN0IF9kaXZNZXNzYWdlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXVGVtZXNzYWdlJyk7XHJcbiAgICBpZiAoX2Rpdk1lc3NhZ2VDb250YWluZXIpIHtcclxuICAgICAgX2Rpdk1lc3NhZ2VDb250YWluZXIuaW5uZXJIVE1MID0gdGhpcy5fc3RyVGVtcFN0cjtcclxuICAgICAgX2Rpdk1lc3NhZ2VDb250YWluZXIuc2Nyb2xsVG9wID0gX2Rpdk1lc3NhZ2VDb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tJZkltYWdlc0luQnVmZmVyKCkge1xyXG4gICAgaWYgKHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyID09PSAwKSB7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnVGhlcmUgaXMgbm8gaW1hZ2UgaW4gYnVmZmVyLjxiciAvPicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tFcnJvclN0cmluZygpIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKFxyXG4gICAgICB0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSxcclxuICAgICAgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcsIHJlc3BvbnNlU3RyaW5nID0gbnVsbCkge1xyXG4gICAgaWYgKGVycm9yQ29kZSA9PT0gMCkge1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcbiAgICAgICAgJzxzcGFuIHN0eWxlPVxcJ2NvbG9yOiNjRTVFMDRcXCc+PGI+JyArIGVycm9yU3RyaW5nICsgJzwvYj48L3NwYW4+PGJyIC8+J1xyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoZXJyb3JDb2RlID09PSAtMjExNSkge1xyXG4gICAgICAvLyBDYW5jZWwgZmlsZSBkaWFsb2dcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGVycm9yQ29kZSA9PT0gLTIwMDMpIHtcclxuICAgICAgICBjb25zdCBFcnJvck1lc3NhZ2VXaW4gPSB3aW5kb3cub3BlbihcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgJ0Vycm9yTWVzc2FnZScsXHJcbiAgICAgICAgICAnaGVpZ2h0PTUwMCx3aWR0aD03NTAsdG9wPTAsbGVmdD0wLHRvb2xiYXI9bm8sbWVudWJhcj1ubyxzY3JvbGxiYXJzPW5vLCByZXNpemFibGU9bm8sbG9jYXRpb249bm8sIHN0YXR1cz1ubydcclxuICAgICAgICApO1xyXG4gICAgICAgIEVycm9yTWVzc2FnZVdpbi5kb2N1bWVudC53cml0ZWxuKHJlc3BvbnNlU3RyaW5nKTsgLy8gdGhpcy5EV09iamVjdC5IVFRQUG9zdFJlc3BvbnNlU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcbiAgICAgICAgJzxzcGFuIHN0eWxlPVxcJ2NvbG9yOiNjRTVFMDRcXCc+PGI+JyArIGVycm9yU3RyaW5nICsgJzwvYj48L3NwYW4+PGJyIC8+J1xyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKiogVXNlZCBhIGxvdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgZHNfZ2V0bGVmdChlbCkge1xyXG4gICAgbGV0IHRtcCA9IGVsLm9mZnNldExlZnQ7XHJcbiAgICBlbCA9IGVsLm9mZnNldFBhcmVudDtcclxuICAgIHdoaWxlIChlbCkge1xyXG4gICAgICB0bXAgKz0gZWwub2Zmc2V0TGVmdDtcclxuICAgICAgZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG1wO1xyXG4gIH1cclxuICBkc19nZXR0b3AoZWwpIHtcclxuICAgIGxldCB0bXAgPSBlbC5vZmZzZXRUb3A7XHJcbiAgICBlbCA9IGVsLm9mZnNldFBhcmVudDtcclxuICAgIHdoaWxlIChlbCkge1xyXG4gICAgICB0bXAgKz0gZWwub2Zmc2V0VG9wO1xyXG4gICAgICBlbCA9IGVsLm9mZnNldFBhcmVudDtcclxuICAgIH1cclxuICAgIHJldHVybiB0bXA7XHJcbiAgfVxyXG5cclxuICBPdmVyX091dF9EZW1vSW1hZ2Uob2JqLCB1cmwpIHtcclxuICAgIG9iai5zcmMgPSB1cmw7XHJcbiAgfVxyXG4gIHNvdXJjZV9vbmNoYW5nZSgpIHtcclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2VHdhaW5UeXBlJykpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdlR3YWluVHlwZScpLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdXJjZScpKSB7XHJcbiAgICAgIGNvbnN0IGNJbmRleCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291cmNlJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQpXHJcbiAgICAgICAgLnNlbGVjdGVkSW5kZXg7XHJcbiAgICAgIGlmIChEeW5hbXNvZnQuTGliLmVudi5iTWFjKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyU291cmNlTmFtZSA9IHRoaXMuRFdPYmplY3QuR2V0U291cmNlTmFtZUl0ZW1zKGNJbmRleCk7XHJcbiAgICAgICAgaWYgKHN0clNvdXJjZU5hbWUuaW5kZXhPZignSUNBJykgPT09IDApIHtcclxuICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsU2hvd1VJJykpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xibFNob3dVSScpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dVSScpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93VUknKS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgeyB0aGlzLkRXT2JqZWN0LlNlbGVjdFNvdXJjZUJ5SW5kZXgoY0luZGV4KTsgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWVkaWFUeXBlX29uY2hhbmdlKCkge1xyXG4gICAgY29uc3QgTWVkaWFUeXBlOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTWVkaWFUeXBlJyk7XHJcbiAgICBpZiAoTWVkaWFUeXBlICYmIE1lZGlhVHlwZS5vcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgdmFsdWVNZWRpYVR5cGUgPSBNZWRpYVR5cGUub3B0aW9uc1tNZWRpYVR5cGUuc2VsZWN0ZWRJbmRleF0udGV4dDtcclxuICAgICAgaWYgKHZhbHVlTWVkaWFUeXBlICE9PSAnJykge1xyXG4gICAgICAgIGlmICghdGhpcy5EV09iamVjdC5BZGRvbi5XZWJjYW0uU2V0TWVkaWFUeXBlKHZhbHVlTWVkaWFUeXBlKSkge1xyXG4gICAgICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIE1lZGlhVHlwZSB2YWx1ZTogPC9iPicpO1xyXG4gICAgICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKFxyXG4gICAgICAgICAgICAnPHNwYW4gc3R5bGU9XFwnY29sb3I6I2NFNUUwNFxcJz48Yj4nICtcclxuICAgICAgICAgICAgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArXHJcbiAgICAgICAgICAgICc8L2I+PC9zcGFuPjxiciAvPidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgUmVzb2x1dGlvbldlYmNhbTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Jlc29sdXRpb25XZWJjYW0nKTtcclxuICAgIGlmIChSZXNvbHV0aW9uV2ViY2FtKSB7XHJcbiAgICAgIFJlc29sdXRpb25XZWJjYW0ub3B0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICBjb25zdCBhcnlSZXNvbHV0aW9uID0gdGhpcy5EV09iamVjdC5BZGRvbi5XZWJjYW0uR2V0UmVzb2x1dGlvbigpO1xyXG4gICAgICBjb25zdCBjb3VudFJlc29sdXRpb24gPSBhcnlSZXNvbHV0aW9uLkdldENvdW50KCk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRSZXNvbHV0aW9uOyBpKyspIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGFyeVJlc29sdXRpb24uR2V0KGkpO1xyXG4gICAgICAgIFJlc29sdXRpb25XZWJjYW0ub3B0aW9ucy5hZGQobmV3IE9wdGlvbih2YWx1ZSwgdmFsdWUpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyotLS0tLS0tLS0tLS0tLS0tLUFjcXVpcmUgSW1hZ2UtLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICBhY3F1aXJlSW1hZ2UoKSB7XHJcbiAgICBjb25zdCBjSW5kZXggPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdXJjZScpIGFzIEhUTUxTZWxlY3RFbGVtZW50KVxyXG4gICAgICAuc2VsZWN0ZWRJbmRleDtcclxuICAgIGlmIChjSW5kZXggPCAwKSB7IHJldHVybjsgfVxyXG5cclxuICAgIHRoaXMuRFdPYmplY3QuU2VsZWN0U291cmNlQnlJbmRleChjSW5kZXgpO1xyXG4gICAgdGhpcy5EV09iamVjdC5DbG9zZVNvdXJjZSgpO1xyXG4gICAgdGhpcy5EV09iamVjdC5PcGVuU291cmNlKCk7XHJcbiAgICB0aGlzLkRXT2JqZWN0LklmU2hvd1VJID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAnU2hvd1VJJ1xyXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG5cclxuICAgIGxldCBpO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdQaXhlbFR5cGUnKS5pdGVtKGkpIGFzIEhUTUxJbnB1dEVsZW1lbnQpXHJcbiAgICAgICAgICAuY2hlY2tlZCA9PT0gdHJ1ZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LlBpeGVsVHlwZSA9IGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSAhPT0gMCkge1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkVycm9yIHNldHRpbmcgUGl4ZWxUeXBlIHZhbHVlOiA8L2I+Jyk7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZShcclxuICAgICAgICAnPHNwYW4gc3R5bGU9XFwnY29sb3I6I2NFNUUwNFxcJz48Yj4nICtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nICtcclxuICAgICAgICAnPC9iPjwvc3Bhbj48YnIgLz4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LlJlc29sdXRpb24gPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICdSZXNvbHV0aW9uJ1xyXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcclxuICAgIGlmICh0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSAhPT0gMCkge1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkVycm9yIHNldHRpbmcgUmVzb2x1dGlvbiB2YWx1ZTogPC9iPicpO1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcbiAgICAgICAgJzxzcGFuIHN0eWxlPVxcJ2NvbG9yOiNjRTVFMDRcXCc+PGI+JyArXHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArXHJcbiAgICAgICAgJzwvYj48L3NwYW4+PGJyIC8+J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJBREZDaGVja2VkID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdBREYnKSBhcyBIVE1MSW5wdXRFbGVtZW50KVxyXG4gICAgICAuY2hlY2tlZDtcclxuICAgIHRoaXMuRFdPYmplY3QuSWZGZWVkZXJFbmFibGVkID0gYkFERkNoZWNrZWQ7XHJcbiAgICBpZiAoYkFERkNoZWNrZWQgPT09IHRydWUgJiYgdGhpcy5EV09iamVjdC5FcnJvckNvZGUgIT09IDApIHtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5FcnJvciBzZXR0aW5nIEFERiB2YWx1ZTogPC9iPicpO1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcbiAgICAgICAgJzxzcGFuIHN0eWxlPVxcJ2NvbG9yOiNjRTVFMDRcXCc+PGI+JyArXHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5FcnJvclN0cmluZyArXHJcbiAgICAgICAgJzwvYj48L3NwYW4+PGJyIC8+J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJEdXBsZXhDaGVja2VkID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAnRHVwbGV4J1xyXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG4gICAgdGhpcy5EV09iamVjdC5JZkR1cGxleEVuYWJsZWQgPSBiRHVwbGV4Q2hlY2tlZDtcclxuICAgIGlmIChiRHVwbGV4Q2hlY2tlZCA9PT0gdHJ1ZSAmJiB0aGlzLkRXT2JqZWN0LkVycm9yQ29kZSAhPT0gMCkge1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkVycm9yIHNldHRpbmcgRHVwbGV4IHZhbHVlOiA8L2I+Jyk7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZShcclxuICAgICAgICAnPHNwYW4gc3R5bGU9XFwnY29sb3I6I2NFNUUwNFxcJz48Yj4nICtcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LkVycm9yU3RyaW5nICtcclxuICAgICAgICAnPC9iPjwvc3Bhbj48YnIgLz4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIER5bmFtc29mdC5MaWIuZW52LmJXaW4gfHxcclxuICAgICAgKCFEeW5hbXNvZnQuTGliLmVudi5iV2luICYmIHRoaXMuRFdPYmplY3QuSW1hZ2VDYXB0dXJlRHJpdmVyVHlwZSA9PT0gMClcclxuICAgICkge1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcbiAgICAgICAgJ1BpeGVsIFR5cGU6ICcgK1xyXG4gICAgICAgIHRoaXMuRFdPYmplY3QuUGl4ZWxUeXBlICtcclxuICAgICAgICAnPGJyIC8+UmVzb2x1dGlvbjogJyArXHJcbiAgICAgICAgdGhpcy5EV09iamVjdC5SZXNvbHV0aW9uICtcclxuICAgICAgICAnPGJyIC8+J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5JZkRpc2FibGVTb3VyY2VBZnRlckFjcXVpcmUgPSB0cnVlO1xyXG4gICAgdGhpcy5EV09iamVjdC5BY3F1aXJlSW1hZ2UoKTtcclxuICB9XHJcblxyXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS1Mb2FkIEltYWdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICBidG5Mb2FkSW1hZ2VzT3JQREZzX29uY2xpY2soKSB7XHJcblxyXG4gICAgY29uc3QgT25QREZTdWNjZXNzID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJ0xvYWRlZCBhbiBpbWFnZSBzdWNjZXNzZnVsbHkuPGJyLz4nKTtcclxuICAgICAgdGhpcy51cGRhdGVQYWdlSW5mbygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBPblBERkZhaWx1cmUgPSAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLmNoZWNrRXJyb3JTdHJpbmdXaXRoRXJyb3JDb2RlKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLkRXT2JqZWN0LklmU2hvd0ZpbGVEaWFsb2cgPSB0cnVlO1xyXG4gICAgdGhpcy5EV09iamVjdC5BZGRvbi5QREYuU2V0UmVzb2x1dGlvbigyMDApO1xyXG4gICAgdGhpcy5EV09iamVjdC5BZGRvbi5QREYuU2V0Q29udmVydE1vZGUoXHJcbiAgICAgIER5bmFtc29mdC5EV1QuRW51bURXVF9Db252ZXJ0TW9kZS5DTV9SRU5ERVJBTExcclxuICAgICk7XHJcbiAgICB0aGlzLkRXT2JqZWN0LkxvYWRJbWFnZUV4KFxyXG4gICAgICAnJyxcclxuICAgICAgRHluYW1zb2Z0LkRXVC5FbnVtRFdUX0ltYWdlVHlwZS5JVF9BTEwsXHJcbiAgICAgIE9uUERGU3VjY2VzcyxcclxuICAgICAgT25QREZGYWlsdXJlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBFZGl0IEltYWdlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIGJ0blNob3dJbWFnZUVkaXRvcl9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuU2hvd0ltYWdlRWRpdG9yKCk7XHJcbiAgfVxyXG5cclxuICBidG5Sb3RhdGVSaWdodF9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuUm90YXRlUmlnaHQodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+Um90YXRlIHJpZ2h0OiA8L2I+Jyk7XHJcbiAgICBpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuICBidG5Sb3RhdGVMZWZ0X29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5Sb3RhdGVMZWZ0KHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcik7XHJcbiAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPlJvdGF0ZSBsZWZ0OiA8L2I+Jyk7XHJcbiAgICBpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnRuUm90YXRlMTgwX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5Sb3RhdGUodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyLCAxODAsIHRydWUpO1xyXG4gICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5Sb3RhdGUgMTgwOiA8L2I+Jyk7XHJcbiAgICBpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnRuTWlycm9yX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5NaXJyb3IodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyKTtcclxuICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnPGI+TWlycm9yOiA8L2I+Jyk7XHJcbiAgICBpZiAodGhpcy5jaGVja0Vycm9yU3RyaW5nKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuICBidG5GbGlwX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5GbGlwKHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlcik7XHJcbiAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPkZsaXA6IDwvYj4nKTtcclxuICAgIGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Dcm9wIE1ldGhvZC0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgYnRuQ3JvcF9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5faUxlZnQgIT09IDAgfHxcclxuICAgICAgdGhpcy5faVRvcCAhPT0gMCB8fFxyXG4gICAgICB0aGlzLl9pUmlnaHQgIT09IDAgfHxcclxuICAgICAgdGhpcy5faUJvdHRvbSAhPT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuRFdPYmplY3QuQ3JvcChcclxuICAgICAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIsXHJcbiAgICAgICAgdGhpcy5faUxlZnQsXHJcbiAgICAgICAgdGhpcy5faVRvcCxcclxuICAgICAgICB0aGlzLl9pUmlnaHQsXHJcbiAgICAgICAgdGhpcy5faUJvdHRvbVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLl9pTGVmdCA9IDA7XHJcbiAgICAgIHRoaXMuX2lUb3AgPSAwO1xyXG4gICAgICB0aGlzLl9pUmlnaHQgPSAwO1xyXG4gICAgICB0aGlzLl9pQm90dG9tID0gMDtcclxuICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5Dcm9wOiA8L2I+Jyk7XHJcbiAgICAgIGlmICh0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoXHJcbiAgICAgICAgJzxiPkNyb3A6IDwvYj5mYWlsZWQuIFBsZWFzZSBmaXJzdCBzZWxlY3QgdGhlIGFyZWEgeW91XFwnZCBsaWtlIHRvIGNyb3AuPGJyIC8+J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKi0tLS0tLS0tLS0tLS0tLS1DaGFuZ2UgSW1hZ2UgU2l6ZS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICBidG5DaGFuZ2VJbWFnZVNpemVfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbWdTaXplRWRpdG9yJykuc3R5bGUudmlzaWJpbGl0eSkge1xyXG4gICAgICBjYXNlICd2aXNpYmxlJzpcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW1nU2l6ZUVkaXRvcicpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaGlkZGVuJzpcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW1nU2l6ZUVkaXRvcicpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkltZ1NpemVFZGl0b3JcIikuc3R5bGUudG9wID0gZHNfZ2V0dG9wKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYnRuQ2hhbmdlSW1hZ2VTaXplXCIpKSArIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYnRuQ2hhbmdlSW1hZ2VTaXplXCIpLm9mZnNldEhlaWdodCArIDE1ICsgXCJweFwiO1xyXG4gICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJJbWdTaXplRWRpdG9yXCIpLnN0eWxlLmxlZnQgPSBkc19nZXRsZWZ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYnRuQ2hhbmdlSW1hZ2VTaXplXCIpKSAtIDE0ICsgXCJweFwiO1xyXG5cclxuICAgIGNvbnN0IGlXaWR0aCA9IHRoaXMuRFdPYmplY3QuR2V0SW1hZ2VXaWR0aChcclxuICAgICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyXHJcbiAgICApO1xyXG4gICAgaWYgKGlXaWR0aCAhPT0gLTEpIHtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9IGlXaWR0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IGlIZWlnaHQgPSB0aGlzLkRXT2JqZWN0LkdldEltYWdlSGVpZ2h0KFxyXG4gICAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXJcclxuICAgICk7XHJcbiAgICBpZiAoaUhlaWdodCAhPT0gLTEpIHtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAgICdpbWdfaGVpZ2h0J1xyXG4gICAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gaUhlaWdodDtcclxuICAgIH1cclxuICB9XHJcbiAgYnRuQ2FuY2VsQ2hhbmdlX29uY2xpY2soKSB7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW1nU2l6ZUVkaXRvcicpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICB9XHJcblxyXG4gIGJ0bkNoYW5nZUltYWdlU2l6ZU9LX29uY2xpY2soKSB7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpLmNsYXNzTmFtZSA9ICcnO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpLmNsYXNzTmFtZSA9ICcnO1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5yZS50ZXN0KFxyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlXHJcbiAgICAgIClcclxuICAgICkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpLmNsYXNzTmFtZSArPSAnIGludmFsaWQnO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX2hlaWdodCcpLmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnUGxlYXNlIGlucHV0IGEgdmFsaWQgPGI+aGVpZ2h0PC9iPi48YnIgLz4nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5yZS50ZXN0KFxyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nX3dpZHRoJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWVcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWdfd2lkdGgnKS5jbGFzc05hbWUgKz0gJyBpbnZhbGlkJztcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpLmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgnUGxlYXNlIGlucHV0IGEgdmFsaWQgPGI+d2lkdGg8L2I+LjxiciAvPicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LkNoYW5nZUltYWdlU2l6ZShcclxuICAgICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyLFxyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ193aWR0aCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLFxyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZ19oZWlnaHQnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSxcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbnRlcnBvbGF0aW9uTWV0aG9kJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQpXHJcbiAgICAgICAgLnNlbGVjdGVkSW5kZXggKyAxXHJcbiAgICApO1xyXG4gICAgdGhpcy5hcHBlbmRNZXNzYWdlKCc8Yj5DaGFuZ2UgSW1hZ2UgU2l6ZTogPC9iPicpO1xyXG4gICAgaWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbWdTaXplRWRpdG9yJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKiogU2F2ZSBJbWFnZSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gIGJ0blNhdmVfb25jbGljaygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmSW1hZ2VzSW5CdWZmZXIoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdHJpbWdUeXBlX3NhdmUgPSAncGRmJztcclxuXHJcbiAgICB0aGlzLkRXT2JqZWN0LklmU2hvd0ZpbGVEaWFsb2cgPSB0cnVlO1xyXG4gICAgY29uc3QgX3R4dEZpbGVOYW1lZm9yU2F2ZTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4dF9maWxlTmFtZScpO1xyXG4gICAgaWYgKF90eHRGaWxlTmFtZWZvclNhdmUpIHsgX3R4dEZpbGVOYW1lZm9yU2F2ZS5jbGFzc05hbWUgPSAnJzsgfVxyXG4gICAgbGV0IGJTYXZlOiBhbnkgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBzdHJGaWxlUGF0aCA9IF90eHRGaWxlTmFtZWZvclNhdmUudmFsdWUgKyAnLicgKyBzdHJpbWdUeXBlX3NhdmU7XHJcblxyXG4gICAgY29uc3QgT25TdWNjZXNzID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPlNhdmUgSW1hZ2U6IDwvYj4nKTtcclxuICAgICAgdGhpcy5jaGVja0Vycm9yU3RyaW5nV2l0aEVycm9yQ29kZSgwLCAnU3VjY2Vzc2Z1bC4nKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgT25GYWlsdXJlID0gKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5jaGVja0Vycm9yU3RyaW5nV2l0aEVycm9yQ29kZShlcnJvckNvZGUsIGVycm9yU3RyaW5nKTtcclxuICAgIH07XHJcblxyXG4gICAgYlNhdmUgPSB0aGlzLkRXT2JqZWN0LlNhdmVBbGxBc1BERihzdHJGaWxlUGF0aCwgT25TdWNjZXNzLCBPbkZhaWx1cmUpO1xyXG5cclxuICAgIGlmIChiU2F2ZSkgeyB0aGlzLmFwcGVuZE1lc3NhZ2UoJzxiPlNhdmUgSW1hZ2U6IDwvYj4nKTsgfVxyXG4gICAgaWYgKHRoaXMuY2hlY2tFcnJvclN0cmluZygpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBVcGxvYWQgSW1hZ2UqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgbWFrZWlkKGxlbmd0aCkge1xyXG4gICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgY29uc3QgY2hhcmFjdGVycyA9XHJcbiAgICAgICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XHJcbiAgICBjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHJlc3VsdCArPSBjaGFyYWN0ZXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRvQmxvYigpIHtcclxuICAgIHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS51cGxvYWRTdGFydC5lbWl0KHRydWUpO1xyXG4gICAgY29uc3QgcGFnZXMgPSBbXTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLkRXT2JqZWN0Py5Ib3dNYW55SW1hZ2VzSW5CdWZmZXI7IGluZGV4KyspIHtcclxuICAgICAgcGFnZXMucHVzaChpbmRleCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLkRXT2JqZWN0LkNvbnZlcnRUb0Jsb2IoXHJcbiAgICAgIHBhZ2VzLFxyXG4gICAgICBEeW5hbXNvZnQuRFdULkVudW1EV1RfSW1hZ2VUeXBlLklUX1BERixcclxuICAgICAgKHJlc3VsdCwgaW5kaWNlcywgdHlwZSkgPT4ge1xyXG4gICAgICAgIHJlc3VsdC5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICByZXN1bHQubmFtZSA9ICdzY2FuLScgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZXN1bHQubGFzdE1vZGlmaWVkRGF0ZSwgJ2RkLU1NLXl5eXknKSArICcucGRmJztcclxuICAgICAgICB0aGlzLkRvY3VtZW50U2NhblNlcnZpY2UudXBsb2FkQmF0Y2gocmVzdWx0KS5zdWJzY3JpYmUoKGJhdGNoKSA9PiB7XHJcbiAgICAgICAgICBiYXRjaC5mb3JFYWNoKGRvYyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZS5uZXh0KGRvYyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yQ29kZSwgZXJyb3JTdHJpbmcpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnJvclN0cmluZyk7XHJcbiAgICAgICAgdGhpcy5Eb2N1bWVudFNjYW5TZXJ2aWNlLnVwbG9hZFN0YXJ0LmVtaXQoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIGNvbnZlcnRUb0Jsb2JGb3JTYXZpbmcoKSB7XHJcbiAgICBjb25zdCBwYWdlcyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuRFdPYmplY3Q/Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlcjsgaW5kZXgrKykge1xyXG4gICAgICBwYWdlcy5wdXNoKGluZGV4KTtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuQ29udmVydFRvQmxvYihcclxuICAgICAgcGFnZXMsXHJcbiAgICAgIER5bmFtc29mdC5EV1QuRW51bURXVF9JbWFnZVR5cGUuSVRfUERGLFxyXG4gICAgICAocmVzdWx0LCBpbmRpY2VzLCB0eXBlKSA9PiB7XHJcbiAgICAgICAgcmVzdWx0Lmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHJlc3VsdC5uYW1lID0gJ3NjYW4tJyArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlc3VsdC5sYXN0TW9kaWZpZWREYXRlLCAnZGQtTU0teXl5eScpICsgJy5wZGYnO1xyXG4gICAgICAgIHRoaXMuRG9jdW1lbnRTY2FuU2VydmljZS5zdG9yZWRGaWxlID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMub25NaW5pbWl6aW5nU3Vic2NyaXB0aW9uID8gdGhpcy5vbk1pbmltaXppbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3JDb2RlLCBlcnJvclN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiBOYXZpZ2F0b3IgZnVuY3Rpb25zKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBidG5GaXJzdEltYWdlX29uY2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZkltYWdlc0luQnVmZmVyKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID0gMDtcclxuICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICB9XHJcblxyXG4gIGJ0blByZUltYWdlX3doZWVsKCkge1xyXG4gICAgaWYgKHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyICE9PSAwKSB7IHRoaXMuYnRuUHJlSW1hZ2Vfb25jbGljaygpOyB9XHJcbiAgfVxyXG5cclxuICBidG5OZXh0SW1hZ2Vfd2hlZWwoKSB7XHJcbiAgICBpZiAodGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgIT09IDApIHsgdGhpcy5idG5OZXh0SW1hZ2Vfb25jbGljaygpOyB9XHJcbiAgfVxyXG5cclxuICBidG5QcmVJbWFnZV9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciA9XHJcbiAgICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciAtIDE7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgfVxyXG4gIGJ0bk5leHRJbWFnZV9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciA9PT1cclxuICAgICAgdGhpcy5EV09iamVjdC5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgLSAxXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyID1cclxuICAgICAgdGhpcy5EV09iamVjdC5DdXJyZW50SW1hZ2VJbmRleEluQnVmZmVyICsgMTtcclxuICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICB9XHJcblxyXG4gIGJ0bkxhc3RJbWFnZV9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuQ3VycmVudEltYWdlSW5kZXhJbkJ1ZmZlciA9XHJcbiAgICAgIHRoaXMuRFdPYmplY3QuSG93TWFueUltYWdlc0luQnVmZmVyIC0gMTtcclxuICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICB9XHJcblxyXG4gIGJ0blJlbW92ZUN1cnJlbnRJbWFnZV9vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuUmVtb3ZlQWxsU2VsZWN0ZWRJbWFnZXMoKTtcclxuICAgIGlmICh0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlciA9PT0gMCkge1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICAgJ0RXX1RvdGFsSW1hZ2UnXHJcbiAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSB0aGlzLkRXT2JqZWN0Lkhvd01hbnlJbWFnZXNJbkJ1ZmZlcjtcclxuICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEV19DdXJyZW50SW1hZ2UnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9XHJcbiAgICAgICAgJyc7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ0blJlbW92ZUFsbEltYWdlc19vbmNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZJbWFnZXNJbkJ1ZmZlcigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRFdPYmplY3QuUmVtb3ZlQWxsSW1hZ2VzKCk7XHJcbiAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX1RvdGFsSW1hZ2UnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9ICcwJztcclxuICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRFdfQ3VycmVudEltYWdlJykgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSAnJztcclxuICB9XHJcbiAgc2V0bFByZXZpZXdNb2RlKCkge1xyXG4gICAgY29uc3QgdmFyTnVtID0gcGFyc2VJbnQoXHJcbiAgICAgIChcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX1ByZXZpZXdNb2RlJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQpXHJcbiAgICAgICAgICAuc2VsZWN0ZWRJbmRleCArIDFcclxuICAgICAgKS50b1N0cmluZygpLFxyXG4gICAgICAxMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGJ0bkNyb3A6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5Dcm9wJyk7XHJcbiAgICBpZiAoYnRuQ3JvcCkge1xyXG4gICAgICBsZXQgdG1wc3RyID0gYnRuQ3JvcC5zcmM7XHJcbiAgICAgIGlmICh2YXJOdW0gPiAxKSB7XHJcbiAgICAgICAgdG1wc3RyID0gdG1wc3RyLnJlcGxhY2UoJ0Nyb3AuJywgJ0Nyb3BfZ3JheS4nKTtcclxuICAgICAgICBidG5Dcm9wLnNyYyA9IHRtcHN0cjtcclxuICAgICAgICBidG5Dcm9wLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdG1wc3RyID0gdG1wc3RyLnJlcGxhY2UoJ0Nyb3BfZ3JheS4nLCAnQ3JvcC4nKTtcclxuICAgICAgICBidG5Dcm9wLnNyYyA9IHRtcHN0cjtcclxuICAgICAgICBidG5Dcm9wLm9uY2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmJ0bkNyb3Bfb25jbGljaygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLkRXT2JqZWN0LlNldFZpZXdNb2RlKHZhck51bSwgdmFyTnVtKTtcclxuICAgIGlmIChEeW5hbXNvZnQuTGliLmVudi5iTWFjIHx8IER5bmFtc29mdC5MaWIuZW52LmJMaW51eCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RXX1ByZXZpZXdNb2RlJykgYXMgSFRNTFNlbGVjdEVsZW1lbnQpXHJcbiAgICAgICAgLnNlbGVjdGVkSW5kZXggIT09IDBcclxuICAgICkge1xyXG4gICAgICB0aGlzLkRXT2JqZWN0Lk1vdXNlU2hhcGUgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5EV09iamVjdC5Nb3VzZVNoYXBlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnJhZGlvIHJlc3BvbnNlKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICByZFRJRkZfb25jbGljaygpIHtcclxuICAgIGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRicpO1xyXG4gICAgX2Noa011bHRpUGFnZVRJRkYuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIF9jaGtNdWx0aVBhZ2VUSUZGLmNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBfY2hrTXVsdGlQYWdlUERGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlUERGJyk7XHJcbiAgICBfY2hrTXVsdGlQYWdlUERGLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgIF9jaGtNdWx0aVBhZ2VQREYuZGlzYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmRQREZfb25jbGljaygpIHtcclxuICAgIGNvbnN0IF9jaGtNdWx0aVBhZ2VUSUZGOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTXVsdGlQYWdlVElGRicpO1xyXG4gICAgX2Noa011bHRpUGFnZVRJRkYuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgX2Noa011bHRpUGFnZVRJRkYuZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IF9jaGtNdWx0aVBhZ2VQREY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VQREYnKTtcclxuICAgIF9jaGtNdWx0aVBhZ2VQREYuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIF9jaGtNdWx0aVBhZ2VQREYuY2hlY2tlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZF9vbmNsaWNrKCkge1xyXG4gICAgY29uc3QgX2Noa011bHRpUGFnZVRJRkY6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdNdWx0aVBhZ2VUSUZGJyk7XHJcbiAgICBfY2hrTXVsdGlQYWdlVElGRi5jaGVja2VkID0gZmFsc2U7XHJcbiAgICBfY2hrTXVsdGlQYWdlVElGRi5kaXNhYmxlZCA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgX2Noa011bHRpUGFnZVBERjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ011bHRpUGFnZVBERicpO1xyXG4gICAgX2Noa011bHRpUGFnZVBERi5jaGVja2VkID0gZmFsc2U7XHJcbiAgICBfY2hrTXVsdGlQYWdlUERGLmRpc2FibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKiogRHluYW1pYyBXZWIgVFdBSU4gRXZlbnRzKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBEeW5hbXNvZnRfT25Qb3N0VHJhbnNmZXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgfVxyXG5cclxuICBEeW5hbXNvZnRfT25Qb3N0TG9hZGZ1bmN0aW9uID0gKHBhdGgsIG5hbWUsIHR5cGUpID0+IHtcclxuICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICB9XHJcblxyXG4gIER5bmFtc29mdF9PblBvc3RBbGxUcmFuc2ZlcnMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLkRXT2JqZWN0LkNsb3NlU291cmNlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgICB0aGlzLmNoZWNrRXJyb3JTdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIER5bmFtc29mdF9Pbk1vdXNlQ2xpY2sgPSBpbmRleCA9PiB7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2VJbmZvKCk7XHJcbiAgfVxyXG5cclxuICBEeW5hbXNvZnRfT25Nb3VzZVJpZ2h0Q2xpY2sgPSBpbmRleCA9PiB7XHJcbiAgICAvLyBUbyBhZGRcclxuICB9XHJcblxyXG4gIER5bmFtc29mdF9PbkltYWdlQXJlYVNlbGVjdGVkID0gKGluZGV4LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pID0+IHtcclxuICAgIHRoaXMuX2lMZWZ0ID0gbGVmdDtcclxuICAgIHRoaXMuX2lUb3AgPSB0b3A7XHJcbiAgICB0aGlzLl9pUmlnaHQgPSByaWdodDtcclxuICAgIHRoaXMuX2lCb3R0b20gPSBib3R0b207XHJcbiAgfVxyXG5cclxuICBEeW5hbXNvZnRfT25JbWFnZUFyZWFEZXNlbGVjdGVkID0gaW5kZXggPT4ge1xyXG4gICAgdGhpcy5faUxlZnQgPSAwO1xyXG4gICAgdGhpcy5faVRvcCA9IDA7XHJcbiAgICB0aGlzLl9pUmlnaHQgPSAwO1xyXG4gICAgdGhpcy5faUJvdHRvbSA9IDA7XHJcbiAgfVxyXG5cclxuICBEeW5hbXNvZnRfT25Nb3VzZURvdWJsZUNsaWNrKCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgRHluYW1zb2Z0X09uVG9wSW1hZ2VJblRoZVZpZXdDaGFuZ2VkID0gaW5kZXggPT4ge1xyXG4gICAgdGhpcy5faUxlZnQgPSAwO1xyXG4gICAgdGhpcy5faVRvcCA9IDA7XHJcbiAgICB0aGlzLl9pUmlnaHQgPSAwO1xyXG4gICAgdGhpcy5faUJvdHRvbSA9IDA7XHJcbiAgICB0aGlzLkRXT2JqZWN0LkN1cnJlbnRJbWFnZUluZGV4SW5CdWZmZXIgPSBpbmRleDtcclxuICAgIHRoaXMudXBkYXRlUGFnZUluZm8oKTtcclxuICB9XHJcblxyXG4gIER5bmFtc29mdF9PbkdldEZpbGVQYXRoID0gKGJTYXZlLCBjb3VudCwgaW5kZXgsIHBhdGgsIG5hbWUpID0+IHsgfTtcclxufVxyXG4iLCI8ZGl2IGlkPVwiRFdUY29udGFpbmVyXCI+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+XHJcbiAgICAgICAgICAgIDxzcGFuPiB7eyAnc2Nhbm5lci5sb2FkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGdhcFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtMlwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIFtuZ0NsYXNzXT1cInsnaGlkZS11cGxvYWQtYnV0dG9uJyA6IGhpZGVVcGxvYWRCdXR0b259XCIgI3NjYW5uZXJVcGxvYWRCdXR0b24gaWQ9XCJzY2FubmVyVXBsb2FkQnV0dG9uXCIgW2Rpc2FibGVkXT1cIkRXT2JqZWN0Py5Ib3dNYW55SW1hZ2VzSW5CdWZmZXIgPT09IDBcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY29udmVydFRvQmxvYigpXCI+XHJcbiAgICAgICAgICAgIHt7ICdzY2FubmVyLnNhdmUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|