iptdevs-design-system 3.1.768 → 3.1.769

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/cod/cod-documents-section/cod-documents-section.component.mjs +3 -3
  3. package/esm2020/lib/cod/cod-form/cod-form.component.mjs +6 -6
  4. package/esm2020/lib/cod/cod.module.mjs +1 -1
  5. package/esm2020/lib/cod/logic/calculate-quotes.service.mjs +1 -1
  6. package/esm2020/lib/cod/logic/cod-form-controls.mjs +1 -1
  7. package/esm2020/lib/cod/logic/cod-form-steps.mjs +1 -1
  8. package/esm2020/lib/cod/logic/communicator.service.mjs +1 -1
  9. package/esm2020/lib/cod/logic/local-storage-cod.service.mjs +1 -1
  10. package/esm2020/lib/cod/modal-referred/modal-referred.component.mjs +3 -3
  11. package/esm2020/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.mjs +3 -3
  12. package/esm2020/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.mjs +3 -3
  13. package/esm2020/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.mjs +3 -3
  14. package/esm2020/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.mjs +3 -3
  15. package/esm2020/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.mjs +3 -3
  16. package/esm2020/lib/cod-self-managed/cod-form-self-managed/cod-self-managed.component.mjs +3 -3
  17. package/esm2020/lib/cod-self-managed/cod-self-managed.module.mjs +1 -1
  18. package/esm2020/lib/cod-self-managed/logic/cod-self-managed-controls.mjs +1 -1
  19. package/esm2020/lib/cod-self-managed/logic/cod-self-managed-steps.mjs +1 -1
  20. package/esm2020/lib/cod-self-managed/logic/local-storage-cod.service.mjs +1 -1
  21. package/esm2020/lib/cod-self-managed/steps/cod-form-step-four/cod-self-form-step-four.component.mjs +3 -3
  22. package/esm2020/lib/cod-self-managed/steps/cod-form-step-one/cod-self-form-step-one.component.mjs +3 -3
  23. package/esm2020/lib/cod-self-managed/steps/cod-form-step-three/cod-self-form-step-three.component.mjs +3 -3
  24. package/esm2020/lib/cod-self-managed/steps/cod-form-step-two/cod-self-form-step-two.component.mjs +3 -3
  25. package/esm2020/lib/components/atoms/aside-button/aside-button.component.mjs +25 -25
  26. package/esm2020/lib/components/atoms/button/button.component.mjs +27 -27
  27. package/esm2020/lib/components/atoms/checkbox/checkbox.component.mjs +21 -21
  28. package/esm2020/lib/components/atoms/datalist/datalist.component.mjs +39 -39
  29. package/esm2020/lib/components/atoms/input/input.component.mjs +91 -91
  30. package/esm2020/lib/components/atoms/level-button/level-button.component.mjs +39 -39
  31. package/esm2020/lib/components/atoms/level-text/level-text.component.mjs +5 -5
  32. package/esm2020/lib/components/atoms/loader/loader.component.mjs +29 -29
  33. package/esm2020/lib/components/atoms/radio/radio.component.mjs +21 -21
  34. package/esm2020/lib/components/atoms/select/select.component.mjs +29 -29
  35. package/esm2020/lib/components/atoms/text-link/text-link.component.mjs +15 -15
  36. package/esm2020/lib/components/components.module.mjs +1 -1
  37. package/esm2020/lib/components/forms/create-user-form/create-user-form.component.mjs +3 -3
  38. package/esm2020/lib/components/forms/login-form/login-form.component.mjs +63 -63
  39. package/esm2020/lib/components/material.module.mjs +1 -1
  40. package/esm2020/lib/components/molecules/card-course/card-course.component.mjs +3 -3
  41. package/esm2020/lib/components/molecules/card-select-course/card-select-course.component.mjs +3 -3
  42. package/esm2020/lib/components/molecules/question-type/edit-question-types.component.mjs +291 -291
  43. package/esm2020/lib/components/molecules/sidenav/sidenav.component.mjs +95 -95
  44. package/esm2020/lib/core/core.module.mjs +1 -1
  45. package/esm2020/lib/core/models/PlacementTest/PlacementTest.models.mjs +1 -1
  46. package/esm2020/lib/core/models/PossibleStudent/PossibleStudent.models.mjs +1 -1
  47. package/esm2020/lib/core/models/academic/academic.component.mjs +1 -1
  48. package/esm2020/lib/core/models/activities/activities.interface.mjs +1 -1
  49. package/esm2020/lib/core/models/announcement/announcement-user-rq.model.mjs +1 -1
  50. package/esm2020/lib/core/models/announcement/announcement-user-rs.model.mjs +1 -1
  51. package/esm2020/lib/core/models/attendance/attendance.interface.mjs +1 -1
  52. package/esm2020/lib/core/models/budget/budget.model.mjs +1 -1
  53. package/esm2020/lib/core/models/calendar/calendar-rq.models.mjs +1 -1
  54. package/esm2020/lib/core/models/classroom/classroom-rq.model.mjs +1 -1
  55. package/esm2020/lib/core/models/cod/cod-rq.model.mjs +1 -1
  56. package/esm2020/lib/core/models/commercial/commercial.model.mjs +1 -1
  57. package/esm2020/lib/core/models/course/course-rq.model.mjs +1 -1
  58. package/esm2020/lib/core/models/course/courses.model.mjs +1 -1
  59. package/esm2020/lib/core/models/cronogram/cronogram.models.mjs +1 -1
  60. package/esm2020/lib/core/models/epayco/epayco.interfaces.mjs +1 -1
  61. package/esm2020/lib/core/models/homeTemplate/homeTemplate.models.mjs +1 -1
  62. package/esm2020/lib/core/models/marketing/marketing.model.mjs +1 -1
  63. package/esm2020/lib/core/models/media/media.interfaces.mjs +1 -1
  64. package/esm2020/lib/core/models/notes/INotesTemplate.mjs +1 -1
  65. package/esm2020/lib/core/models/notes/notes.interface.mjs +1 -1
  66. package/esm2020/lib/core/models/parameters/parameters-rs.model.mjs +1 -1
  67. package/esm2020/lib/core/models/payment/payment-rq.model.mjs +1 -1
  68. package/esm2020/lib/core/models/reports/reports.model.mjs +1 -1
  69. package/esm2020/lib/core/models/response/response.interface.mjs +1 -1
  70. package/esm2020/lib/core/models/session/session.model.mjs +1 -1
  71. package/esm2020/lib/core/models/student/student.interface.mjs +1 -1
  72. package/esm2020/lib/core/models/table/table-rs.model.mjs +1 -1
  73. package/esm2020/lib/core/models/test/test.model.mjs +1 -1
  74. package/esm2020/lib/core/models/url/url.model.mjs +1 -1
  75. package/esm2020/lib/core/models/user/user-rq.model.mjs +1 -1
  76. package/esm2020/lib/core/models/user/user-rs.model.mjs +1 -1
  77. package/esm2020/lib/core/pipes/course-pipes/schedule-form.pipe.mjs +1 -1
  78. package/esm2020/lib/core/pipes/course-pipes/time-form.pipe.mjs +1 -1
  79. package/esm2020/lib/core/pipes/course-pipes/type-level.pipe.mjs +1 -1
  80. package/esm2020/lib/core/pipes/pipe.module.mjs +1 -1
  81. package/esm2020/lib/core/services/academic-service/academic.service.mjs +1 -1
  82. package/esm2020/lib/core/services/activity-service/activity.service.mjs +1 -1
  83. package/esm2020/lib/core/services/announcement/announcement.service.mjs +1 -1
  84. package/esm2020/lib/core/services/attendance-service/attendance.service.mjs +1 -1
  85. package/esm2020/lib/core/services/budget-service/budget-service.mjs +1 -1
  86. package/esm2020/lib/core/services/calendar-service/calendar.service.mjs +1 -1
  87. package/esm2020/lib/core/services/certificate-service/certificate.service.mjs +1 -1
  88. package/esm2020/lib/core/services/classroom-service/classroom-service.service.mjs +1 -1
  89. package/esm2020/lib/core/services/commercial-service/comercial.service.mjs +1 -1
  90. package/esm2020/lib/core/services/commercial-service/validators.mjs +1 -1
  91. package/esm2020/lib/core/services/copies.service.mjs +1 -1
  92. package/esm2020/lib/core/services/course-service/course-service.model.mjs +1 -1
  93. package/esm2020/lib/core/services/ePayco/epayco.service.mjs +1 -1
  94. package/esm2020/lib/core/services/ekt-service/userekt.service.mjs +1 -1
  95. package/esm2020/lib/core/services/marketing-service/marketing-service.mjs +1 -1
  96. package/esm2020/lib/core/services/media-service/media.service.mjs +1 -1
  97. package/esm2020/lib/core/services/notes-service/notes.service.mjs +1 -1
  98. package/esm2020/lib/core/services/parameters-service/parameters.service.mjs +1 -1
  99. package/esm2020/lib/core/services/placement-service/placement.service.mjs +1 -1
  100. package/esm2020/lib/core/services/service-enviroments.mjs +1 -1
  101. package/esm2020/lib/core/services/storage-service/storage-service.mjs +1 -1
  102. package/esm2020/lib/core/services/student-service/student.service.mjs +1 -1
  103. package/esm2020/lib/core/services/switch-service/switch.service.mjs +1 -1
  104. package/esm2020/lib/core/services/test-service/test.service.mjs +1 -1
  105. package/esm2020/lib/core/services/user-service/user-service.mjs +1 -1
  106. package/esm2020/lib/core/utils/base-service/base.service.mjs +1 -1
  107. package/esm2020/lib/core/utils/copies.mjs +1 -1
  108. package/esm2020/lib/core/utils/route-service/route.service.mjs +1 -1
  109. package/esm2020/lib/design-system.module.mjs +1 -1
  110. package/esm2020/public-api.mjs +1 -1
  111. package/fesm2015/iptdevs-design-system.mjs +811 -811
  112. package/fesm2015/iptdevs-design-system.mjs.map +1 -1
  113. package/fesm2020/iptdevs-design-system.mjs +811 -811
  114. package/fesm2020/iptdevs-design-system.mjs.map +1 -1
  115. package/lib/core/models/payment/payment-rq.model.d.ts +0 -1
  116. package/package.json +1 -1
@@ -221,10 +221,10 @@ export class CodSelfFormStepFourComponent extends CodSelfManagedSteps {
221
221
  }
222
222
  }
223
223
  CodSelfFormStepFourComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfFormStepFourComponent, deps: [{ token: i1.FormBuilder }, { token: i2.MessageService }, { token: i3.CodSelfManagedControls }], target: i0.ɵɵFactoryTarget.Component });
224
- CodSelfFormStepFourComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CodSelfFormStepFourComponent, selector: "app-cod-self-form-step-four", inputs: { idTypes: "idTypes" }, outputs: { completed: "completed", action: "action" }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-main\">\n <div class=\"container-form\">\n <div class=\"title_step\">\n <h2>Datos de Facturaci\u00F3n</h2>\n <p-toast position=\"top-center\" key=\"confirm\" (onClose)=\"onReject()\" [baseZIndex]=\"10\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"flex flex-column align-items-start\" style=\"flex: 1\">\n <div class=\"flex align-items-center gap-2\">\n <img src=\"./assets/logos/reading.png\" style=\"width: 65px;\" shape=\"circle\" />\n <span class=\"font-bold text-900\">Jacob</span>\n </div>\n <div class=\"font-medium text-lg my-3 text-900\">{{ messageInfo }}</div>\n </div>\n </ng-template>\n </p-toast>\n </div>\n\n <i class=\"pi pi-exclamation-circle cursor-pointer w-auto \" (click)=\"showConfirm()\" pTooltip=\"M\u00E1s info.\" tooltipPosition=\"bottom\"></i>\n <div class=\"animate__animated animate__slideInRight ng-star-inserted\">\n <form autocomplete=\"off\" [formGroup]=\"codSelfFormStepFour\" class=\"grid mt-2 flex flex-column align-items-center\">\n <div class=\"container__body__select flex justify-content-center flex-wrap\">\n <div class=\"container__type__payments\" *ngIf=\"isSelectionOptionPayments\">\n <div class=\"flex flex-column gap-3\">\n <h3>\u00BFC\u00F3mo quieres pagar?</h3>\n <div *ngFor=\"let category of OptionPayments; index as ind\" class=\"field-checkbox\">\n <p-radioButton\n [inputId]=\"category.key\"\n name=\"category\"\n [value]=\"category\"\n [(ngModel)]=\"selectedOptionPayments\"\n [disabled]=\"disableweekdays[ind]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"selectOpcionsPayments($event)\"\n ></p-radioButton>\n <label [for]=\"category.key\" class=\"ml-2\">\n {{ category.name }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"container__option__instalations\" *ngIf=\"!isSelectionOptionPayments\">\n <!-- Vista para la opci\u00F3n de pago \"Instalaciones\" -->\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'in'\">\n <div class=\"container__info flex flex-column align-items-center justify-content-center mt-1 mb-4\" *ngIf=\"isEditBillingData\">\n <img src=\"./assets/logos/lobo-web.png\" alt=\"Receipt Icon\" shape=\"circle\" class=\"circular-image\" />\n <strong>{{ codSelfFormStepFour.get('invoicing_name')?.value }} {{ codSelfFormStepFour.get('invoicing_Apellido')?.value }}</strong>\n <span>{{ getIdTypeDescription(codSelfFormStepFour.get('invoicing_idType')?.value) }} {{ codSelfFormStepFour.get('invoicing_document')?.value }}</span>\n <div class=\"container-button\">\n <ipt-button [label]=\"'Modificar Datos'\" (onClick)=\"editBillingData()\" [primary]=\"false\"></ipt-button>\n </div>\n </div>\n <div class=\"m-2\" *ngIf=\"!isEditBillingData\">\n <h3>Completa los nuevos datos para la emisi\u00F3n de tu factura</h3>\n <div class=\"flex gap-1 md:gap-4 xl:gap-8 m-1 p-2 border-round bg-blue-500 text-white\">\n <div class=\"container_icon flex mr-4 justify-content-center align-items-start mt-1\">\n <i class=\"pi pi-info-circle cursor-pointer w-auto mb-4\" pTooltip=\"M\u00E1s info.\" tooltipPosition=\"bottom\"></i>\n </div>\n <div class=\"flex flex-column container_info_span flex align-items-center justify-content-center\">\n <span>Si proporcionas datos de un tercero, confirmas que los datos son correctos y que tienes su consentimiento para el uso de la informaci\u00F3n. Estos datos se tratar\u00E1n de acuerdo a nuestra <a href=\"\">Declaraci\u00F3n de Privacidad</a></span>\n </div>\n </div>\n <div>\n <ipt-input [inputType]=\"'text'\" [placeHolder]=\"'Nombres'\" [control]=\"codSelfFormStepFour.controls['invoicing_name']\"></ipt-input>\n <ipt-input [inputType]=\"'text'\" [placeHolder]=\"'Apellidos'\" [control]=\"codSelfFormStepFour.controls['invoicing_Apellido']\"></ipt-input>\n <ipt-select\n [initialValue]=\"codSelfFormStepFour.controls['invoicing_idType'].value\"\n [control]=\"codSelfFormStepFour.controls['invoicing_idType']\"\n [selectCode]=\"codSelfFormStepFour.controls['invoicing_idType'].value === null ? 'Tipo de documento' : codSelfFormStepFour.controls['invoicing_idType'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType($event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input [inputType]=\"'number'\" [placeHolder]=\"'N\u00FAmero de documento'\" [control]=\"codSelfFormStepFour.controls['invoicing_document']\"></ipt-input>\n </div>\n <div class=\"flex justify-content-end mt-3 align-items-center gap-3\">\n <button pButton [disabled]=\"!codSelfFormStepFour.valid\" label=\"Continuar\" type=\"button\" (click)=\"updateDatosBillingData()\"></button>\n </div>\n </div>\n </div>\n\n <!-- Vista para la opci\u00F3n de pago \"Transferencia\" -->\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'tr'\">\n <!-- TODO:<h3>Completa los datos para Transferencia</h3> -->\n <!-- Aqu\u00ED puedes agregar el formulario espec\u00EDfico para Transferencia -->\n </div>\n </div>\n </div>\n </form>\n\n <div class=\"flex justify-content-between mt-3 align-items-center gap-3\">\n <button pButton icon=\"pi pi-arrow-left\" type=\"button\" (click)=\"back()\"></button>\n <button *ngIf=\"!isSelectionOptionPayments && isEditBillingData && codSelfFormStepFour.valid\" pButton label=\"\u00A1Matricularme!\" type=\"button\" (click)=\"sendForm()\"></button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".container-form{margin:5px;border-radius:3px;border:1px solid #2563eb;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;padding:.5rem}.error-message{font-size:x-small;color:red}:host ::ng-deep .p-toast{width:20rem!important}.circular-image{width:50px;height:50px;border-radius:50%;object-fit:cover;border:none}.container-button{width:10rem;margin-top:3%}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.ButtonComponent, selector: "ipt-button", inputs: ["primary", "size", "label", "buttonType", "isEnabled"], outputs: ["onClick"] }, { kind: "component", type: i6.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal", "disabledSel"], outputs: ["dateSelected"] }, { kind: "component", type: i7.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "control"], outputs: ["eventSelect"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i10.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i11.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }] });
224
+ CodSelfFormStepFourComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CodSelfFormStepFourComponent, selector: "app-cod-self-form-step-four", inputs: { idTypes: "idTypes" }, outputs: { completed: "completed", action: "action" }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-main\">\r\n <div class=\"container-form\">\r\n <div class=\"title_step\">\r\n <h2>Datos de Facturaci\u00F3n</h2>\r\n <p-toast position=\"top-center\" key=\"confirm\" (onClose)=\"onReject()\" [baseZIndex]=\"10\">\r\n <ng-template let-message pTemplate=\"message\">\r\n <div class=\"flex flex-column align-items-start\" style=\"flex: 1\">\r\n <div class=\"flex align-items-center gap-2\">\r\n <img src=\"./assets/logos/reading.png\" style=\"width: 65px;\" shape=\"circle\" />\r\n <span class=\"font-bold text-900\">Jacob</span>\r\n </div>\r\n <div class=\"font-medium text-lg my-3 text-900\">{{ messageInfo }}</div>\r\n </div>\r\n </ng-template>\r\n </p-toast>\r\n </div>\r\n\r\n <i class=\"pi pi-exclamation-circle cursor-pointer w-auto \" (click)=\"showConfirm()\" pTooltip=\"M\u00E1s info.\" tooltipPosition=\"bottom\"></i>\r\n <div class=\"animate__animated animate__slideInRight ng-star-inserted\">\r\n <form autocomplete=\"off\" [formGroup]=\"codSelfFormStepFour\" class=\"grid mt-2 flex flex-column align-items-center\">\r\n <div class=\"container__body__select flex justify-content-center flex-wrap\">\r\n <div class=\"container__type__payments\" *ngIf=\"isSelectionOptionPayments\">\r\n <div class=\"flex flex-column gap-3\">\r\n <h3>\u00BFC\u00F3mo quieres pagar?</h3>\r\n <div *ngFor=\"let category of OptionPayments; index as ind\" class=\"field-checkbox\">\r\n <p-radioButton\r\n [inputId]=\"category.key\"\r\n name=\"category\"\r\n [value]=\"category\"\r\n [(ngModel)]=\"selectedOptionPayments\"\r\n [disabled]=\"disableweekdays[ind]\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (ngModelChange)=\"selectOpcionsPayments($event)\"\r\n ></p-radioButton>\r\n <label [for]=\"category.key\" class=\"ml-2\">\r\n {{ category.name }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"container__option__instalations\" *ngIf=\"!isSelectionOptionPayments\">\r\n <!-- Vista para la opci\u00F3n de pago \"Instalaciones\" -->\r\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'in'\">\r\n <div class=\"container__info flex flex-column align-items-center justify-content-center mt-1 mb-4\" *ngIf=\"isEditBillingData\">\r\n <img src=\"./assets/logos/lobo-web.png\" alt=\"Receipt Icon\" shape=\"circle\" class=\"circular-image\" />\r\n <strong>{{ codSelfFormStepFour.get('invoicing_name')?.value }} {{ codSelfFormStepFour.get('invoicing_Apellido')?.value }}</strong>\r\n <span>{{ getIdTypeDescription(codSelfFormStepFour.get('invoicing_idType')?.value) }} {{ codSelfFormStepFour.get('invoicing_document')?.value }}</span>\r\n <div class=\"container-button\">\r\n <ipt-button [label]=\"'Modificar Datos'\" (onClick)=\"editBillingData()\" [primary]=\"false\"></ipt-button>\r\n </div>\r\n </div>\r\n <div class=\"m-2\" *ngIf=\"!isEditBillingData\">\r\n <h3>Completa los nuevos datos para la emisi\u00F3n de tu factura</h3>\r\n <div class=\"flex gap-1 md:gap-4 xl:gap-8 m-1 p-2 border-round bg-blue-500 text-white\">\r\n <div class=\"container_icon flex mr-4 justify-content-center align-items-start mt-1\">\r\n <i class=\"pi pi-info-circle cursor-pointer w-auto mb-4\" pTooltip=\"M\u00E1s info.\" tooltipPosition=\"bottom\"></i>\r\n </div>\r\n <div class=\"flex flex-column container_info_span flex align-items-center justify-content-center\">\r\n <span>Si proporcionas datos de un tercero, confirmas que los datos son correctos y que tienes su consentimiento para el uso de la informaci\u00F3n. Estos datos se tratar\u00E1n de acuerdo a nuestra <a href=\"\">Declaraci\u00F3n de Privacidad</a></span>\r\n </div>\r\n </div>\r\n <div>\r\n <ipt-input [inputType]=\"'text'\" [placeHolder]=\"'Nombres'\" [control]=\"codSelfFormStepFour.controls['invoicing_name']\"></ipt-input>\r\n <ipt-input [inputType]=\"'text'\" [placeHolder]=\"'Apellidos'\" [control]=\"codSelfFormStepFour.controls['invoicing_Apellido']\"></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codSelfFormStepFour.controls['invoicing_idType'].value\"\r\n [control]=\"codSelfFormStepFour.controls['invoicing_idType']\"\r\n [selectCode]=\"codSelfFormStepFour.controls['invoicing_idType'].value === null ? 'Tipo de documento' : codSelfFormStepFour.controls['invoicing_idType'].value\"\r\n [isRequired]=\"true\"\r\n [data]=\"idTypes\"\r\n (eventSelect)=\"selectIdType($event)\"\r\n [defaultText]=\"'Tipo de documento'\"\r\n ></ipt-select>\r\n <ipt-input [inputType]=\"'number'\" [placeHolder]=\"'N\u00FAmero de documento'\" [control]=\"codSelfFormStepFour.controls['invoicing_document']\"></ipt-input>\r\n </div>\r\n <div class=\"flex justify-content-end mt-3 align-items-center gap-3\">\r\n <button pButton [disabled]=\"!codSelfFormStepFour.valid\" label=\"Continuar\" type=\"button\" (click)=\"updateDatosBillingData()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Vista para la opci\u00F3n de pago \"Transferencia\" -->\r\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'tr'\">\r\n <!-- TODO:<h3>Completa los datos para Transferencia</h3> -->\r\n <!-- Aqu\u00ED puedes agregar el formulario espec\u00EDfico para Transferencia -->\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n <div class=\"flex justify-content-between mt-3 align-items-center gap-3\">\r\n <button pButton icon=\"pi pi-arrow-left\" type=\"button\" (click)=\"back()\"></button>\r\n <button *ngIf=\"!isSelectionOptionPayments && isEditBillingData && codSelfFormStepFour.valid\" pButton label=\"\u00A1Matricularme!\" type=\"button\" (click)=\"sendForm()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".container-form{margin:5px;border-radius:3px;border:1px solid #2563eb;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;padding:.5rem}.error-message{font-size:x-small;color:red}:host ::ng-deep .p-toast{width:20rem!important}.circular-image{width:50px;height:50px;border-radius:50%;object-fit:cover;border:none}.container-button{width:10rem;margin-top:3%}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.ButtonComponent, selector: "ipt-button", inputs: ["primary", "size", "label", "buttonType", "isEnabled"], outputs: ["onClick"] }, { kind: "component", type: i6.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal", "disabledSel"], outputs: ["dateSelected"] }, { kind: "component", type: i7.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "control"], outputs: ["eventSelect"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i10.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i11.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }] });
225
225
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfFormStepFourComponent, decorators: [{
226
226
  type: Component,
227
- args: [{ selector: 'app-cod-self-form-step-four', template: "<div class=\"container-main\">\n <div class=\"container-form\">\n <div class=\"title_step\">\n <h2>Datos de Facturaci\u00F3n</h2>\n <p-toast position=\"top-center\" key=\"confirm\" (onClose)=\"onReject()\" [baseZIndex]=\"10\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"flex flex-column align-items-start\" style=\"flex: 1\">\n <div class=\"flex align-items-center gap-2\">\n <img src=\"./assets/logos/reading.png\" style=\"width: 65px;\" shape=\"circle\" />\n <span class=\"font-bold text-900\">Jacob</span>\n </div>\n <div class=\"font-medium text-lg my-3 text-900\">{{ messageInfo }}</div>\n </div>\n </ng-template>\n </p-toast>\n </div>\n\n <i class=\"pi pi-exclamation-circle cursor-pointer w-auto \" (click)=\"showConfirm()\" pTooltip=\"M\u00E1s info.\" tooltipPosition=\"bottom\"></i>\n <div class=\"animate__animated animate__slideInRight ng-star-inserted\">\n <form autocomplete=\"off\" [formGroup]=\"codSelfFormStepFour\" class=\"grid mt-2 flex flex-column align-items-center\">\n <div class=\"container__body__select flex justify-content-center flex-wrap\">\n <div class=\"container__type__payments\" *ngIf=\"isSelectionOptionPayments\">\n <div class=\"flex flex-column gap-3\">\n <h3>\u00BFC\u00F3mo quieres pagar?</h3>\n <div *ngFor=\"let category of OptionPayments; index as ind\" class=\"field-checkbox\">\n <p-radioButton\n [inputId]=\"category.key\"\n name=\"category\"\n [value]=\"category\"\n [(ngModel)]=\"selectedOptionPayments\"\n [disabled]=\"disableweekdays[ind]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"selectOpcionsPayments($event)\"\n ></p-radioButton>\n <label [for]=\"category.key\" class=\"ml-2\">\n {{ category.name }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"container__option__instalations\" *ngIf=\"!isSelectionOptionPayments\">\n <!-- Vista para la opci\u00F3n de pago \"Instalaciones\" -->\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'in'\">\n <div class=\"container__info flex flex-column align-items-center justify-content-center mt-1 mb-4\" *ngIf=\"isEditBillingData\">\n <img src=\"./assets/logos/lobo-web.png\" alt=\"Receipt Icon\" shape=\"circle\" class=\"circular-image\" />\n <strong>{{ codSelfFormStepFour.get('invoicing_name')?.value }} {{ codSelfFormStepFour.get('invoicing_Apellido')?.value }}</strong>\n <span>{{ getIdTypeDescription(codSelfFormStepFour.get('invoicing_idType')?.value) }} {{ codSelfFormStepFour.get('invoicing_document')?.value }}</span>\n <div class=\"container-button\">\n <ipt-button [label]=\"'Modificar Datos'\" (onClick)=\"editBillingData()\" [primary]=\"false\"></ipt-button>\n </div>\n </div>\n <div class=\"m-2\" *ngIf=\"!isEditBillingData\">\n <h3>Completa los nuevos datos para la emisi\u00F3n de tu factura</h3>\n <div class=\"flex gap-1 md:gap-4 xl:gap-8 m-1 p-2 border-round bg-blue-500 text-white\">\n <div class=\"container_icon flex mr-4 justify-content-center align-items-start mt-1\">\n <i class=\"pi pi-info-circle cursor-pointer w-auto mb-4\" pTooltip=\"M\u00E1s info.\" tooltipPosition=\"bottom\"></i>\n </div>\n <div class=\"flex flex-column container_info_span flex align-items-center justify-content-center\">\n <span>Si proporcionas datos de un tercero, confirmas que los datos son correctos y que tienes su consentimiento para el uso de la informaci\u00F3n. Estos datos se tratar\u00E1n de acuerdo a nuestra <a href=\"\">Declaraci\u00F3n de Privacidad</a></span>\n </div>\n </div>\n <div>\n <ipt-input [inputType]=\"'text'\" [placeHolder]=\"'Nombres'\" [control]=\"codSelfFormStepFour.controls['invoicing_name']\"></ipt-input>\n <ipt-input [inputType]=\"'text'\" [placeHolder]=\"'Apellidos'\" [control]=\"codSelfFormStepFour.controls['invoicing_Apellido']\"></ipt-input>\n <ipt-select\n [initialValue]=\"codSelfFormStepFour.controls['invoicing_idType'].value\"\n [control]=\"codSelfFormStepFour.controls['invoicing_idType']\"\n [selectCode]=\"codSelfFormStepFour.controls['invoicing_idType'].value === null ? 'Tipo de documento' : codSelfFormStepFour.controls['invoicing_idType'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType($event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input [inputType]=\"'number'\" [placeHolder]=\"'N\u00FAmero de documento'\" [control]=\"codSelfFormStepFour.controls['invoicing_document']\"></ipt-input>\n </div>\n <div class=\"flex justify-content-end mt-3 align-items-center gap-3\">\n <button pButton [disabled]=\"!codSelfFormStepFour.valid\" label=\"Continuar\" type=\"button\" (click)=\"updateDatosBillingData()\"></button>\n </div>\n </div>\n </div>\n\n <!-- Vista para la opci\u00F3n de pago \"Transferencia\" -->\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'tr'\">\n <!-- TODO:<h3>Completa los datos para Transferencia</h3> -->\n <!-- Aqu\u00ED puedes agregar el formulario espec\u00EDfico para Transferencia -->\n </div>\n </div>\n </div>\n </form>\n\n <div class=\"flex justify-content-between mt-3 align-items-center gap-3\">\n <button pButton icon=\"pi pi-arrow-left\" type=\"button\" (click)=\"back()\"></button>\n <button *ngIf=\"!isSelectionOptionPayments && isEditBillingData && codSelfFormStepFour.valid\" pButton label=\"\u00A1Matricularme!\" type=\"button\" (click)=\"sendForm()\"></button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".container-form{margin:5px;border-radius:3px;border:1px solid #2563eb;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;padding:.5rem}.error-message{font-size:x-small;color:red}:host ::ng-deep .p-toast{width:20rem!important}.circular-image{width:50px;height:50px;border-radius:50%;object-fit:cover;border:none}.container-button{width:10rem;margin-top:3%}\n"] }]
227
+ args: [{ selector: 'app-cod-self-form-step-four', template: "<div class=\"container-main\">\r\n <div class=\"container-form\">\r\n <div class=\"title_step\">\r\n <h2>Datos de Facturaci\u00F3n</h2>\r\n <p-toast position=\"top-center\" key=\"confirm\" (onClose)=\"onReject()\" [baseZIndex]=\"10\">\r\n <ng-template let-message pTemplate=\"message\">\r\n <div class=\"flex flex-column align-items-start\" style=\"flex: 1\">\r\n <div class=\"flex align-items-center gap-2\">\r\n <img src=\"./assets/logos/reading.png\" style=\"width: 65px;\" shape=\"circle\" />\r\n <span class=\"font-bold text-900\">Jacob</span>\r\n </div>\r\n <div class=\"font-medium text-lg my-3 text-900\">{{ messageInfo }}</div>\r\n </div>\r\n </ng-template>\r\n </p-toast>\r\n </div>\r\n\r\n <i class=\"pi pi-exclamation-circle cursor-pointer w-auto \" (click)=\"showConfirm()\" pTooltip=\"M\u00E1s info.\" tooltipPosition=\"bottom\"></i>\r\n <div class=\"animate__animated animate__slideInRight ng-star-inserted\">\r\n <form autocomplete=\"off\" [formGroup]=\"codSelfFormStepFour\" class=\"grid mt-2 flex flex-column align-items-center\">\r\n <div class=\"container__body__select flex justify-content-center flex-wrap\">\r\n <div class=\"container__type__payments\" *ngIf=\"isSelectionOptionPayments\">\r\n <div class=\"flex flex-column gap-3\">\r\n <h3>\u00BFC\u00F3mo quieres pagar?</h3>\r\n <div *ngFor=\"let category of OptionPayments; index as ind\" class=\"field-checkbox\">\r\n <p-radioButton\r\n [inputId]=\"category.key\"\r\n name=\"category\"\r\n [value]=\"category\"\r\n [(ngModel)]=\"selectedOptionPayments\"\r\n [disabled]=\"disableweekdays[ind]\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (ngModelChange)=\"selectOpcionsPayments($event)\"\r\n ></p-radioButton>\r\n <label [for]=\"category.key\" class=\"ml-2\">\r\n {{ category.name }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"container__option__instalations\" *ngIf=\"!isSelectionOptionPayments\">\r\n <!-- Vista para la opci\u00F3n de pago \"Instalaciones\" -->\r\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'in'\">\r\n <div class=\"container__info flex flex-column align-items-center justify-content-center mt-1 mb-4\" *ngIf=\"isEditBillingData\">\r\n <img src=\"./assets/logos/lobo-web.png\" alt=\"Receipt Icon\" shape=\"circle\" class=\"circular-image\" />\r\n <strong>{{ codSelfFormStepFour.get('invoicing_name')?.value }} {{ codSelfFormStepFour.get('invoicing_Apellido')?.value }}</strong>\r\n <span>{{ getIdTypeDescription(codSelfFormStepFour.get('invoicing_idType')?.value) }} {{ codSelfFormStepFour.get('invoicing_document')?.value }}</span>\r\n <div class=\"container-button\">\r\n <ipt-button [label]=\"'Modificar Datos'\" (onClick)=\"editBillingData()\" [primary]=\"false\"></ipt-button>\r\n </div>\r\n </div>\r\n <div class=\"m-2\" *ngIf=\"!isEditBillingData\">\r\n <h3>Completa los nuevos datos para la emisi\u00F3n de tu factura</h3>\r\n <div class=\"flex gap-1 md:gap-4 xl:gap-8 m-1 p-2 border-round bg-blue-500 text-white\">\r\n <div class=\"container_icon flex mr-4 justify-content-center align-items-start mt-1\">\r\n <i class=\"pi pi-info-circle cursor-pointer w-auto mb-4\" pTooltip=\"M\u00E1s info.\" tooltipPosition=\"bottom\"></i>\r\n </div>\r\n <div class=\"flex flex-column container_info_span flex align-items-center justify-content-center\">\r\n <span>Si proporcionas datos de un tercero, confirmas que los datos son correctos y que tienes su consentimiento para el uso de la informaci\u00F3n. Estos datos se tratar\u00E1n de acuerdo a nuestra <a href=\"\">Declaraci\u00F3n de Privacidad</a></span>\r\n </div>\r\n </div>\r\n <div>\r\n <ipt-input [inputType]=\"'text'\" [placeHolder]=\"'Nombres'\" [control]=\"codSelfFormStepFour.controls['invoicing_name']\"></ipt-input>\r\n <ipt-input [inputType]=\"'text'\" [placeHolder]=\"'Apellidos'\" [control]=\"codSelfFormStepFour.controls['invoicing_Apellido']\"></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codSelfFormStepFour.controls['invoicing_idType'].value\"\r\n [control]=\"codSelfFormStepFour.controls['invoicing_idType']\"\r\n [selectCode]=\"codSelfFormStepFour.controls['invoicing_idType'].value === null ? 'Tipo de documento' : codSelfFormStepFour.controls['invoicing_idType'].value\"\r\n [isRequired]=\"true\"\r\n [data]=\"idTypes\"\r\n (eventSelect)=\"selectIdType($event)\"\r\n [defaultText]=\"'Tipo de documento'\"\r\n ></ipt-select>\r\n <ipt-input [inputType]=\"'number'\" [placeHolder]=\"'N\u00FAmero de documento'\" [control]=\"codSelfFormStepFour.controls['invoicing_document']\"></ipt-input>\r\n </div>\r\n <div class=\"flex justify-content-end mt-3 align-items-center gap-3\">\r\n <button pButton [disabled]=\"!codSelfFormStepFour.valid\" label=\"Continuar\" type=\"button\" (click)=\"updateDatosBillingData()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Vista para la opci\u00F3n de pago \"Transferencia\" -->\r\n <div *ngIf=\"getViewBasedOnPaymentOption() === 'tr'\">\r\n <!-- TODO:<h3>Completa los datos para Transferencia</h3> -->\r\n <!-- Aqu\u00ED puedes agregar el formulario espec\u00EDfico para Transferencia -->\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n <div class=\"flex justify-content-between mt-3 align-items-center gap-3\">\r\n <button pButton icon=\"pi pi-arrow-left\" type=\"button\" (click)=\"back()\"></button>\r\n <button *ngIf=\"!isSelectionOptionPayments && isEditBillingData && codSelfFormStepFour.valid\" pButton label=\"\u00A1Matricularme!\" type=\"button\" (click)=\"sendForm()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".container-form{margin:5px;border-radius:3px;border:1px solid #2563eb;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;padding:.5rem}.error-message{font-size:x-small;color:red}:host ::ng-deep .p-toast{width:20rem!important}.circular-image{width:50px;height:50px;border-radius:50%;object-fit:cover;border:none}.container-button{width:10rem;margin-top:3%}\n"] }]
228
228
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.MessageService }, { type: i3.CodSelfManagedControls }]; }, propDecorators: { idTypes: [{
229
229
  type: Input
230
230
  }], completed: [{
@@ -244,4 +244,4 @@ function paymentOptionValidator(selectedOptionPayments) {
244
244
  return null;
245
245
  };
246
246
  }
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNlbGYtZm9ybS1zdGVwLWZvdXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvZC1zZWxmLW1hbmFnZWQvc3RlcHMvY29kLWZvcm0tc3RlcC1mb3VyL2NvZC1zZWxmLWZvcm0tc3RlcC1mb3VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb2Qtc2VsZi1tYW5hZ2VkL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtZm91ci9jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91ci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBMEIsVUFBVSxFQUFFLFdBQVcsRUFBZ0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvRyxPQUFPLEVBQUUsbUJBQW1CLEVBQXlCLE1BQU0sb0NBQW9DLENBQUM7QUFDaEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPL0UsTUFBTSxPQUFPLDRCQUE2QixTQUFRLG1CQUFtQjtJQXNCbkUsWUFDVSxFQUFlLEVBQ2YsY0FBOEIsRUFDOUIsZUFBdUM7UUFFL0MsS0FBSyxFQUFFLENBQUM7UUFKQSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQXRCdkMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDdkMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFOUMsYUFBUSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7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QyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDekUsSUFBSSxNQUFNLEtBQUssQ0FBQztnQkFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM1RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3lIQWpPVSw0QkFBNEI7NkdBQTVCLDRCQUE0QixpTENaekMsOHlNQWtHQTsyRkR0RmEsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDZCQUE2QjtvS0FNOUIsT0FBTztzQkFBZixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNOztBQWlPVCxzREFBc0Q7QUFDdEQsU0FBUyxzQkFBc0IsQ0FBQyxzQkFBbUM7SUFDakUsT0FBTyxDQUFDLE9BQXdCLEVBQWlDLEVBQUU7UUFDakUsSUFBSSxzQkFBc0IsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCO1lBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEtBQUs7Z0JBQ2xGLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRSxLQUFLLEVBQUU7Z0JBQ3hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUMxQztTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wsIEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IEl3ZWVrRGF5c1JxIH0gZnJvbSAnLi8uLi8uLi8uLi9jb3JlL21vZGVscy9hY2FkZW1pYy9hY2FkZW1pYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29kU2VsZk1hbmFnZWRTdGVwcywgbG9jYWxTdG9yYWdlVmFsdWVzVHdvIH0gZnJvbSAnLi4vLi4vbG9naWMvY29kLXNlbGYtbWFuYWdlZC1zdGVwcyc7XG5pbXBvcnQgeyBDb2RTZWxmTWFuYWdlZENvbnRyb2xzIH0gZnJvbSAnLi4vLi4vbG9naWMvY29kLXNlbGYtbWFuYWdlZC1jb250cm9scyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91cicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91ci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvZC1zZWxmLWZvcm0tc3RlcC1mb3VyLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29kU2VsZkZvcm1TdGVwRm91ckNvbXBvbmVudCBleHRlbmRzIENvZFNlbGZNYW5hZ2VkU3RlcHMgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGlkVHlwZXM6IGFueTtcbiAgQE91dHB1dCgpIGNvbXBsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY29udHJvbHMgPSBuZXcgQ29kU2VsZk1hbmFnZWRDb250cm9scygpLmNvbnRyb2xzWzNdO1xuICBtZXNzYWdlSW5mbzogc3RyaW5nID0gXCJEYXRvcyBkZSBmYWN0dXJhY2lvbiBkZSBhY3VlcmRvIGEgdHUgZWxlY2Npb25cIjtcbiAgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb2RTZWxmRm9ybVN0ZXBGb3VyITogRm9ybUdyb3VwO1xuICBzZWxlY3RlZE9wdGlvblBheW1lbnRzPzogSXdlZWtEYXlzUnE7XG4gIG1lc3NhZ2VBbGVydFBsYWNlbWVudFRlc3QgPSBmYWxzZTtcbiAgZGlzYWJsZXdlZWtkYXlzOiBib29sZWFuW10gPSBbXTtcbiAgaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyA9IHRydWU7XG4gIGlzRWRpdEJpbGxpbmdEYXRhID0gdHJ1ZTtcbiAgT3B0aW9uUGF5bWVudHM6IGFueVtdID0gW1xuICAgIHsgY29kZTogMSwga2V5OiAnaW4nLCBuYW1lOiAnSW5zdGFsYWNpb25lcycgfSxcbiAgICB7IGNvZGU6IDMsIGtleTogJ3RyJywgbmFtZTogJ1RyYW5zZmVyZW5jaWEnIH0sXG4gIF07XG5cbiAgc3R1ZGVudElkQ2FyZFR5cGUgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNvZEZvcm1Db250cm9sczogQ29kU2VsZk1hbmFnZWRDb250cm9scyxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXJ0TG9jYWxTdG9yYWdlV29yaygpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9TdHVkZW50SWRDYXJkVHlwZUNoYW5nZXMoKTtcbiAgICB0aGlzLmdldERhdGFVc2VyKCk7XG4gIH1cblxuICBpbml0Rm9ybSgpIHtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG9wdGlvbnNQYXltZW50czogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgaW52b2ljaW5nX25hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGludm9pY2luZ19BcGVsbGlkbzogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgaW52b2ljaW5nX2lkVHlwZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgaW52b2ljaW5nX2RvY3VtZW50OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjApLCBWYWxpZGF0b3JzLnBhdHRlcm4oL15bMC05XSokLyldXSxcbiAgICB9KTtcbiAgfVxuXG4gIHN1YnNjcmliZVRvU3R1ZGVudElkQ2FyZFR5cGVDaGFuZ2VzKCkge1xuICAgIHRoaXMuc3R1ZGVudElkQ2FyZFR5cGUudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUJpbGxpbmdEYXRhRmllbGRzKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFVc2VyKCkge1xuICAgIGNvbnN0IHR5cGVJZENhcmQgPSB0aGlzLmxvY2FsU3RvcmFnZUNPRC5nZXRDb2RGb3JtRGF0YSgxLCAnc3R1ZGVudF9pZF9jYXJkX3R5cGUnKTtcbiAgICB0aGlzLnN0dWRlbnRJZENhcmRUeXBlLnNldFZhbHVlKHR5cGVJZENhcmQpO1xuICB9XG5cbiAgdXBkYXRlQmlsbGluZ0RhdGFGaWVsZHModHlwZUlkQ2FyZDogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmICh0eXBlSWRDYXJkICE9IG51bGwgJiYgdHlwZUlkQ2FyZCAhPSBcIjJcIikge1xuICAgICAgY29uc3QgbmFtZVN0dWRlbnQgPSB0aGlzLmxvY2FsU3RvcmFnZUNPRC5nZXRDb2RGb3JtRGF0YSgxLCAnc3R1ZGVudF9uYW1lJyk7XG4gICAgICBjb25zdCBsYXN0TmFtZVN0dWRlbnQgPSB0aGlzLmxvY2FsU3RvcmFnZUNPRC5nZXRDb2RGb3JtRGF0YSgxLCAnc3R1ZGVudF9sYXN0X25hbWUnKTtcbiAgICAgIGNvbnN0IHR5cGVJZENhcmRTdHVkZW50ID0gdGhpcy5sb2NhbFN0b3JhZ2VDT0QuZ2V0Q29kRm9ybURhdGEoMSwgJ3N0dWRlbnRfaWRfY2FyZF90eXBlJyk7XG4gICAgICBjb25zdCBpZENhcmRTdHVkZW50ID0gdGhpcy5sb2NhbFN0b3JhZ2VDT0QuZ2V0Q29kRm9ybURhdGEoMSwgJ3N0dWRlbnRfaWRfY2FyZCcpO1xuXG5cbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX25hbWUnXS5zZXRWYWx1ZShuYW1lU3R1ZGVudCk7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19BcGVsbGlkbyddLnNldFZhbHVlKGxhc3ROYW1lU3R1ZGVudCk7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS5zZXRWYWx1ZSh0eXBlSWRDYXJkU3R1ZGVudCk7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19kb2N1bWVudCddLnNldFZhbHVlKGlkQ2FyZFN0dWRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaW1waWEgbG9zIGNhbXBvcyBzaSBlbCB0aXBvIGRlIGRvY3VtZW50byBlcyBcIjJcIlxuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfbmFtZSddLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX0FwZWxsaWRvJ10uc2V0VmFsdWUoJycpO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10uc2V0VmFsdWUoJycpO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfZG9jdW1lbnQnXS5zZXRWYWx1ZSgnJyk7XG4gICAgfVxuICB9XG5cbiAgYmFjaygpIHtcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyAmJiAhdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSkge1xuICAgICAgdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzICYmIHRoaXMuaXNFZGl0QmlsbGluZ0RhdGEpIHtcbiAgICAgIHRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29tcGxldGVkLmVtaXQoMik7XG4gICAgfVxuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzKSB7XG4gICAgICB0aGlzLmlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHMgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRWRpdEJpbGxpbmdEYXRhKSB7XG4gICAgICB0aGlzLmlzRWRpdEJpbGxpbmdEYXRhID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW5kRm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0TG9jYWxTdG9yYWdlV29yaygpIHtcbiAgICB0aGlzLmNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICBsZXQgbG9jYWxTdG9yYWdlVmFsdWU6IGxvY2FsU3RvcmFnZVZhbHVlc1R3byA9IHRoaXMucmVhZEFuZFdyaXRlTFMoNCwgY29udHJvbC5uYW1lKTtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1tjb250cm9sLm5hbWVdLnNldFZhbHVlKGxvY2FsU3RvcmFnZVZhbHVlLnZhbHVlKTtcbiAgICAgIHRoaXMubGlzdGVuRm9ybUNoYW5nZXMoNCwgY29udHJvbC5uYW1lLCB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbY29udHJvbC5uYW1lXS52YWx1ZUNoYW5nZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgZWRpdEJpbGxpbmdEYXRhKCkge1xuICAgIHRoaXMuaXNFZGl0QmlsbGluZ0RhdGEgPSBmYWxzZTtcbiAgfVxuXG4gIHVwZGF0ZURhdG9zQmlsbGluZ0RhdGEoKSB7XG4gICAgdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSA9IHRydWU7XG4gIH1cblxuICBzZW5kRm9ybSgpIHtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIHRoaXMuYWN0aW9uLmVtaXQoJ2NyZWF0ZScpO1xuICB9XG5cbiAgb25SZWplY3QoKSB7XG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5jbGVhcignY29uZmlybScpO1xuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgc2hvd0NvbmZpcm0oKSB7XG4gICAgaWYgKCF0aGlzLnZpc2libGUpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsga2V5OiAnY29uZmlybScsIHN0aWNreTogdHJ1ZSwgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0NhbiB5b3Ugc2VuZCBtZSB0aGUgcmVwb3J0PycsIGxpZmU6IDUwMDAgfSk7XG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE9wY2lvbnNQYXltZW50cyhldmU6IEl3ZWVrRGF5c1JxKSB7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzID0gZXZlO1xuICAgIHRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25QYXltZW50cyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydvcHRpb25zUGF5bWVudHMnXS5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkT3B0aW9uUGF5bWVudHMuY29kZSk7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uUGF5bWVudHMuY29kZSA9PT0gMSkgeyAvLyBJbnN0YWxhY2lvbmVzXG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdG9ycygpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uUGF5bWVudHMuY29kZSA9PT0gMykgeyAvLyBUcmFuc2ZlcmVuY2lhXG4gICAgICAgIHRoaXMucmVtb3ZlVmFsaWRhdG9ycygpO1xuICAgICAgfVxuXG4gICAgICAvLyBBcGxpY2FyIGVsIHZhbGlkYWRvciBwZXJzb25hbGl6YWRvIGJhc2FkbyBlbiBsYSBvcGNpw7NuIHNlbGVjY2lvbmFkYVxuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLnNldFZhbGlkYXRvcnMocGF5bWVudE9wdGlvblZhbGlkYXRvcih0aGlzLnNlbGVjdGVkT3B0aW9uUGF5bWVudHMpKTtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLnVwZGF0ZUdsb2JhbENvbnRyb2xzKHRoaXMuc2VsZWN0ZWRPcHRpb25QYXltZW50cy5jb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydvcHRpb25zUGF5bWVudHMnXS5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBhZGRWYWxpZGF0b3JzKCkge1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX25hbWUnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfQXBlbGxpZG8nXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2RvY3VtZW50J10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwKSwgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eWzAtOV0qJC8pXSk7XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfbmFtZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19BcGVsbGlkbyddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfZG9jdW1lbnQnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICByZW1vdmVWYWxpZGF0b3JzKCkge1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX25hbWUnXS5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19BcGVsbGlkbyddLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2lkVHlwZSddLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2RvY3VtZW50J10uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfbmFtZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19BcGVsbGlkbyddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfZG9jdW1lbnQnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBzZWxlY3RJZFR5cGUoaWRUeXBlOiBhbnkpIHtcbiAgICBpZiAoaWRUeXBlICE9PSAnVGlwbyBkZSBkb2N1bWVudG8nKSB7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS5zZXRWYWx1ZShpZFR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXRWaWV3QmFzZWRPblBheW1lbnRPcHRpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzPy5jb2RlID09PSAxKSB7XG4gICAgICByZXR1cm4gJ2luJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25QYXltZW50cz8uY29kZSA9PT0gMykge1xuICAgICAgcmV0dXJuICd0cic7XG4gICAgfVxuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH1cblxuICBnZXRJZFR5cGVEZXNjcmlwdGlvbihpZFR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChpZFR5cGUpIHtcbiAgICAgIGNhc2UgJzAnOlxuICAgICAgICByZXR1cm4gJ04vQSc7XG4gICAgICBjYXNlICcxJzpcbiAgICAgICAgcmV0dXJuICdDLkMnO1xuICAgICAgY2FzZSAnMic6XG4gICAgICAgIHJldHVybiAnVC5JJztcbiAgICAgIGNhc2UgJzMnOlxuICAgICAgICByZXR1cm4gJ0MuRSc7XG4gICAgICBjYXNlICc0JzpcbiAgICAgICAgcmV0dXJuICdQLkUuUCc7XG4gICAgICBjYXNlICc1JzpcbiAgICAgICAgcmV0dXJuICdSLlUuTSc7XG4gICAgICBjYXNlICc2JzpcbiAgICAgICAgcmV0dXJuICdQLlAuVCc7XG4gICAgICBjYXNlICc3JzpcbiAgICAgICAgcmV0dXJuICdQLkEnO1xuICAgICAgY2FzZSAnOCc6XG4gICAgICAgIHJldHVybiAnUi5DJztcbiAgICAgIGNhc2UgJzknOlxuICAgICAgICByZXR1cm4gJ0MuRCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG4gIHVwZGF0ZUdsb2JhbENvbnRyb2xzKGNoYW5nZTogbnVtYmVyKSB7XG4gICAgbGV0IGNvbnRyb2xzID0gdGhpcy5jb250cm9scy5maWx0ZXIoY29udHJvbCA9PiBjb250cm9sLm5hbWUgIT09ICdvcHRpb25zUGF5bWVudHMnKTtcbiAgICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgaWYgKGNoYW5nZSA9PT0gMSkgdGhpcy5jb2RGb3JtQ29udHJvbHMuY2hhbmdlVmFsdWUoNCwgY29udHJvbC5uYW1lLCB0cnVlKVxuICAgICAgaWYgKGNoYW5nZSA9PT0gMykgdGhpcy5jb2RGb3JtQ29udHJvbHMuY2hhbmdlVmFsdWUoNCwgY29udHJvbC5uYW1lLCBmYWxzZSlcbiAgICB9KTtcbiAgfVxufVxuXG5cbi8vIERlZmluaWNpw7NuIGRlIGxhIGZ1bmNpw7NuIGRlIHZhbGlkYWRvciBwZXJzb25hbGl6YWRhXG5mdW5jdGlvbiBwYXltZW50T3B0aW9uVmFsaWRhdG9yKHNlbGVjdGVkT3B0aW9uUGF5bWVudHM6IEl3ZWVrRGF5c1JxKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb25QYXltZW50cz8uY29kZSA9PT0gMSkgeyAvLyBJbnN0YWxhY2lvbmVzXG4gICAgICBpZiAoIWNvbnRyb2wuZ2V0KCdpbnZvaWNpbmdfbmFtZScpPy52YWx1ZSB8fCAhY29udHJvbC5nZXQoJ2ludm9pY2luZ19BcGVsbGlkbycpPy52YWx1ZSB8fFxuICAgICAgICAgICFjb250cm9sLmdldCgnaW52b2ljaW5nX2lkVHlwZScpPy52YWx1ZSB8fCAhY29udHJvbC5nZXQoJ2ludm9pY2luZ19kb2N1bWVudCcpPy52YWx1ZSkge1xuICAgICAgICByZXR1cm4geyAncmVxdWlyZWRGaWVsZHNNaXNzaW5nJzogdHJ1ZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXItbWFpblwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVfc3RlcFwiPlxuICAgICAgPGgyPkRhdG9zIGRlIEZhY3R1cmFjacOzbjwvaDI+XG4gICAgICA8cC10b2FzdCBwb3NpdGlvbj1cInRvcC1jZW50ZXJcIiBrZXk9XCJjb25maXJtXCIgKG9uQ2xvc2UpPVwib25SZWplY3QoKVwiIFtiYXNlWkluZGV4XT1cIjEwXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbWVzc2FnZSBwVGVtcGxhdGU9XCJtZXNzYWdlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtc3RhcnRcIiBzdHlsZT1cImZsZXg6IDFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2xvZ29zL3JlYWRpbmcucG5nXCIgc3R5bGU9XCJ3aWR0aDogNjVweDtcIiBzaGFwZT1cImNpcmNsZVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtOTAwXCI+SmFjb2I8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWxnIG15LTMgdGV4dC05MDBcIj57eyBtZXNzYWdlSW5mbyB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9wLXRvYXN0PlxuICAgIDwvZGl2PlxuXG4gICAgPGkgY2xhc3M9XCJwaSBwaS1leGNsYW1hdGlvbi1jaXJjbGUgY3Vyc29yLXBvaW50ZXIgdy1hdXRvIFwiIChjbGljayk9XCJzaG93Q29uZmlybSgpXCIgcFRvb2x0aXA9XCJNw6FzIGluZm8uXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCI+PC9pPlxuICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlX19hbmltYXRlZCBhbmltYXRlX19zbGlkZUluUmlnaHQgbmctc3Rhci1pbnNlcnRlZFwiPlxuICAgICAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJjb2RTZWxmRm9ybVN0ZXBGb3VyXCIgY2xhc3M9XCJncmlkIG10LTIgZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9fYm9keV9fc2VsZWN0IGZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LXdyYXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyX190eXBlX19wYXltZW50c1wiICpuZ0lmPVwiaXNTZWxlY3Rpb25PcHRpb25QYXltZW50c1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGgzPsK/Q8OzbW8gcXVpZXJlcyBwYWdhcj88L2gzPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBPcHRpb25QYXltZW50czsgaW5kZXggYXMgaW5kXCIgY2xhc3M9XCJmaWVsZC1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJjYXRlZ29yeS5rZXlcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkT3B0aW9uUGF5bWVudHNcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGV3ZWVrZGF5c1tpbmRdXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RPcGNpb25zUGF5bWVudHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPjwvcC1yYWRpb0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJjYXRlZ29yeS5rZXlcIiBjbGFzcz1cIm1sLTJcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGNhdGVnb3J5Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9fb3B0aW9uX19pbnN0YWxhdGlvbnNcIiAqbmdJZj1cIiFpc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzXCI+XG4gICAgICAgICAgICA8IS0tIFZpc3RhIHBhcmEgbGEgb3BjacOzbiBkZSBwYWdvIFwiSW5zdGFsYWNpb25lc1wiIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldFZpZXdCYXNlZE9uUGF5bWVudE9wdGlvbigpID09PSAnaW4nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfX2luZm8gZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xIG1iLTRcIiAqbmdJZj1cImlzRWRpdEJpbGxpbmdEYXRhXCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy9sb2dvcy9sb2JvLXdlYi5wbmdcIiBhbHQ9XCJSZWNlaXB0IEljb25cIiBzaGFwZT1cImNpcmNsZVwiIGNsYXNzPVwiY2lyY3VsYXItaW1hZ2VcIiAvPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgY29kU2VsZkZvcm1TdGVwRm91ci5nZXQoJ2ludm9pY2luZ19uYW1lJyk/LnZhbHVlIH19IHt7IGNvZFNlbGZGb3JtU3RlcEZvdXIuZ2V0KCdpbnZvaWNpbmdfQXBlbGxpZG8nKT8udmFsdWUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBnZXRJZFR5cGVEZXNjcmlwdGlvbihjb2RTZWxmRm9ybVN0ZXBGb3VyLmdldCgnaW52b2ljaW5nX2lkVHlwZScpPy52YWx1ZSkgfX0ge3sgY29kU2VsZkZvcm1TdGVwRm91ci5nZXQoJ2ludm9pY2luZ19kb2N1bWVudCcpPy52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgPGlwdC1idXR0b24gW2xhYmVsXT1cIidNb2RpZmljYXIgRGF0b3MnXCIgKG9uQ2xpY2spPVwiZWRpdEJpbGxpbmdEYXRhKClcIiBbcHJpbWFyeV09XCJmYWxzZVwiPjwvaXB0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTJcIiAqbmdJZj1cIiFpc0VkaXRCaWxsaW5nRGF0YVwiPlxuICAgICAgICAgICAgICAgIDxoMz5Db21wbGV0YSBsb3MgbnVldm9zIGRhdG9zIHBhcmEgbGEgZW1pc2nDs24gZGUgdHUgZmFjdHVyYTwvaDM+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTEgbWQ6Z2FwLTQgeGw6Z2FwLTggbS0xIHAtMiBib3JkZXItcm91bmQgYmctYmx1ZS01MDAgdGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9pY29uIGZsZXggbXItNCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLXN0YXJ0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZSBjdXJzb3ItcG9pbnRlciB3LWF1dG8gbWItNFwiIHBUb29sdGlwPVwiTcOhcyBpbmZvLlwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gY29udGFpbmVyX2luZm9fc3BhbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlNpIHByb3BvcmNpb25hcyBkYXRvcyBkZSB1biB0ZXJjZXJvLCBjb25maXJtYXMgcXVlIGxvcyBkYXRvcyBzb24gY29ycmVjdG9zIHkgcXVlIHRpZW5lcyBzdSBjb25zZW50aW1pZW50byBwYXJhIGVsIHVzbyBkZSBsYSBpbmZvcm1hY2nDs24uIEVzdG9zIGRhdG9zIHNlIHRyYXRhcsOhbiBkZSBhY3VlcmRvIGEgbnVlc3RyYSA8YSBocmVmPVwiXCI+RGVjbGFyYWNpw7NuIGRlIFByaXZhY2lkYWQ8L2E+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxpcHQtaW5wdXQgW2lucHV0VHlwZV09XCIndGV4dCdcIiBbcGxhY2VIb2xkZXJdPVwiJ05vbWJyZXMnXCIgW2NvbnRyb2xdPVwiY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX25hbWUnXVwiPjwvaXB0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgPGlwdC1pbnB1dCBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiIFtwbGFjZUhvbGRlcl09XCInQXBlbGxpZG9zJ1wiIFtjb250cm9sXT1cImNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19BcGVsbGlkbyddXCI+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICA8aXB0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cImNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RDb2RlXT1cImNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS52YWx1ZSA9PT0gbnVsbCA/ICdUaXBvIGRlIGRvY3VtZW50bycgOiBjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbaXNSZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiaWRUeXBlc1wiXG4gICAgICAgICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RJZFR5cGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0VGV4dF09XCInVGlwbyBkZSBkb2N1bWVudG8nXCJcbiAgICAgICAgICAgICAgICAgID48L2lwdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8aXB0LWlucHV0IFtpbnB1dFR5cGVdPVwiJ251bWJlcidcIiBbcGxhY2VIb2xkZXJdPVwiJ07Dum1lcm8gZGUgZG9jdW1lbnRvJ1wiIFtjb250cm9sXT1cImNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19kb2N1bWVudCddXCI+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0zIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIFtkaXNhYmxlZF09XCIhY29kU2VsZkZvcm1TdGVwRm91ci52YWxpZFwiIGxhYmVsPVwiQ29udGludWFyXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ1cGRhdGVEYXRvc0JpbGxpbmdEYXRhKClcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBWaXN0YSBwYXJhIGxhIG9wY2nDs24gZGUgcGFnbyBcIlRyYW5zZmVyZW5jaWFcIiAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRWaWV3QmFzZWRPblBheW1lbnRPcHRpb24oKSA9PT0gJ3RyJ1wiPlxuICAgICAgICAgICAgICA8IS0tIFRPRE86PGgzPkNvbXBsZXRhIGxvcyBkYXRvcyBwYXJhIFRyYW5zZmVyZW5jaWE8L2gzPiAtLT5cbiAgICAgICAgICAgICAgPCEtLSBBcXXDrSBwdWVkZXMgYWdyZWdhciBlbCBmb3JtdWxhcmlvIGVzcGVjw61maWNvIHBhcmEgVHJhbnNmZXJlbmNpYSAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS1hcnJvdy1sZWZ0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJiYWNrKClcIj48L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzICYmIGlzRWRpdEJpbGxpbmdEYXRhICYmIGNvZFNlbGZGb3JtU3RlcEZvdXIudmFsaWRcIiBwQnV0dG9uIGxhYmVsPVwiwqFNYXRyaWN1bGFybWUhXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZW5kRm9ybSgpXCI+PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNlbGYtZm9ybS1zdGVwLWZvdXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvZC1zZWxmLW1hbmFnZWQvc3RlcHMvY29kLWZvcm0tc3RlcC1mb3VyL2NvZC1zZWxmLWZvcm0tc3RlcC1mb3VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb2Qtc2VsZi1tYW5hZ2VkL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtZm91ci9jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91ci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBMEIsVUFBVSxFQUFFLFdBQVcsRUFBZ0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvRyxPQUFPLEVBQUUsbUJBQW1CLEVBQXlCLE1BQU0sb0NBQW9DLENBQUM7QUFDaEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPL0UsTUFBTSxPQUFPLDRCQUE2QixTQUFRLG1CQUFtQjtJQXNCbkUsWUFDVSxFQUFlLEVBQ2YsY0FBOEIsRUFDOUIsZUFBdUM7UUFFL0MsS0FBSyxFQUFFLENBQUM7UUFKQSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQXRCdkMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDdkMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFOUMsYUFBUSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7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QyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDekUsSUFBSSxNQUFNLEtBQUssQ0FBQztnQkFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM1RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3lIQWpPVSw0QkFBNEI7NkdBQTVCLDRCQUE0QixpTENaekMsay9NQWtHQTsyRkR0RmEsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDZCQUE2QjtvS0FNOUIsT0FBTztzQkFBZixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNOztBQWlPVCxzREFBc0Q7QUFDdEQsU0FBUyxzQkFBc0IsQ0FBQyxzQkFBbUM7SUFDakUsT0FBTyxDQUFDLE9BQXdCLEVBQWlDLEVBQUU7UUFDakUsSUFBSSxzQkFBc0IsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCO1lBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEtBQUs7Z0JBQ2xGLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRSxLQUFLLEVBQUU7Z0JBQ3hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUMxQztTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEl3ZWVrRGF5c1JxIH0gZnJvbSAnLi8uLi8uLi8uLi9jb3JlL21vZGVscy9hY2FkZW1pYy9hY2FkZW1pYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb2RTZWxmTWFuYWdlZFN0ZXBzLCBsb2NhbFN0b3JhZ2VWYWx1ZXNUd28gfSBmcm9tICcuLi8uLi9sb2dpYy9jb2Qtc2VsZi1tYW5hZ2VkLXN0ZXBzJztcclxuaW1wb3J0IHsgQ29kU2VsZk1hbmFnZWRDb250cm9scyB9IGZyb20gJy4uLy4uL2xvZ2ljL2NvZC1zZWxmLW1hbmFnZWQtY29udHJvbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY29kLXNlbGYtZm9ybS1zdGVwLWZvdXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2Qtc2VsZi1mb3JtLXN0ZXAtZm91ci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29kLXNlbGYtZm9ybS1zdGVwLWZvdXIuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29kU2VsZkZvcm1TdGVwRm91ckNvbXBvbmVudCBleHRlbmRzIENvZFNlbGZNYW5hZ2VkU3RlcHMgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBpZFR5cGVzOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNvbXBsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgY29udHJvbHMgPSBuZXcgQ29kU2VsZk1hbmFnZWRDb250cm9scygpLmNvbnRyb2xzWzNdO1xyXG4gIG1lc3NhZ2VJbmZvOiBzdHJpbmcgPSBcIkRhdG9zIGRlIGZhY3R1cmFjaW9uIGRlIGFjdWVyZG8gYSB0dSBlbGVjY2lvblwiO1xyXG4gIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb2RTZWxmRm9ybVN0ZXBGb3VyITogRm9ybUdyb3VwO1xyXG4gIHNlbGVjdGVkT3B0aW9uUGF5bWVudHM/OiBJd2Vla0RheXNScTtcclxuICBtZXNzYWdlQWxlcnRQbGFjZW1lbnRUZXN0ID0gZmFsc2U7XHJcbiAgZGlzYWJsZXdlZWtkYXlzOiBib29sZWFuW10gPSBbXTtcclxuICBpc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzID0gdHJ1ZTtcclxuICBpc0VkaXRCaWxsaW5nRGF0YSA9IHRydWU7XHJcbiAgT3B0aW9uUGF5bWVudHM6IGFueVtdID0gW1xyXG4gICAgeyBjb2RlOiAxLCBrZXk6ICdpbicsIG5hbWU6ICdJbnN0YWxhY2lvbmVzJyB9LFxyXG4gICAgeyBjb2RlOiAzLCBrZXk6ICd0cicsIG5hbWU6ICdUcmFuc2ZlcmVuY2lhJyB9LFxyXG4gIF07XHJcblxyXG4gIHN0dWRlbnRJZENhcmRUeXBlID0gbmV3IEZvcm1Db250cm9sKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgY29kRm9ybUNvbnRyb2xzOiBDb2RTZWxmTWFuYWdlZENvbnRyb2xzLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGFydExvY2FsU3RvcmFnZVdvcmsoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9TdHVkZW50SWRDYXJkVHlwZUNoYW5nZXMoKTtcclxuICAgIHRoaXMuZ2V0RGF0YVVzZXIoKTtcclxuICB9XHJcblxyXG4gIGluaXRGb3JtKCkge1xyXG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIG9wdGlvbnNQYXltZW50czogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBpbnZvaWNpbmdfbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBpbnZvaWNpbmdfQXBlbGxpZG86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgaW52b2ljaW5nX2lkVHlwZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBpbnZvaWNpbmdfZG9jdW1lbnQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyMCksIFZhbGlkYXRvcnMucGF0dGVybigvXlswLTldKiQvKV1dLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVUb1N0dWRlbnRJZENhcmRUeXBlQ2hhbmdlcygpIHtcclxuICAgIHRoaXMuc3R1ZGVudElkQ2FyZFR5cGUudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlQmlsbGluZ0RhdGFGaWVsZHModmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXREYXRhVXNlcigpIHtcclxuICAgIGNvbnN0IHR5cGVJZENhcmQgPSB0aGlzLmxvY2FsU3RvcmFnZUNPRC5nZXRDb2RGb3JtRGF0YSgxLCAnc3R1ZGVudF9pZF9jYXJkX3R5cGUnKTtcclxuICAgIHRoaXMuc3R1ZGVudElkQ2FyZFR5cGUuc2V0VmFsdWUodHlwZUlkQ2FyZCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVCaWxsaW5nRGF0YUZpZWxkcyh0eXBlSWRDYXJkOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICBpZiAodHlwZUlkQ2FyZCAhPSBudWxsICYmIHR5cGVJZENhcmQgIT0gXCIyXCIpIHtcclxuICAgICAgY29uc3QgbmFtZVN0dWRlbnQgPSB0aGlzLmxvY2FsU3RvcmFnZUNPRC5nZXRDb2RGb3JtRGF0YSgxLCAnc3R1ZGVudF9uYW1lJyk7XHJcbiAgICAgIGNvbnN0IGxhc3ROYW1lU3R1ZGVudCA9IHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDEsICdzdHVkZW50X2xhc3RfbmFtZScpO1xyXG4gICAgICBjb25zdCB0eXBlSWRDYXJkU3R1ZGVudCA9IHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDEsICdzdHVkZW50X2lkX2NhcmRfdHlwZScpO1xyXG4gICAgICBjb25zdCBpZENhcmRTdHVkZW50ID0gdGhpcy5sb2NhbFN0b3JhZ2VDT0QuZ2V0Q29kRm9ybURhdGEoMSwgJ3N0dWRlbnRfaWRfY2FyZCcpO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX25hbWUnXS5zZXRWYWx1ZShuYW1lU3R1ZGVudCk7XHJcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX0FwZWxsaWRvJ10uc2V0VmFsdWUobGFzdE5hbWVTdHVkZW50KTtcclxuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10uc2V0VmFsdWUodHlwZUlkQ2FyZFN0dWRlbnQpO1xyXG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19kb2N1bWVudCddLnNldFZhbHVlKGlkQ2FyZFN0dWRlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTGltcGlhIGxvcyBjYW1wb3Mgc2kgZWwgdGlwbyBkZSBkb2N1bWVudG8gZXMgXCIyXCJcclxuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfbmFtZSddLnNldFZhbHVlKCcnKTtcclxuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfQXBlbGxpZG8nXS5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2lkVHlwZSddLnNldFZhbHVlKCcnKTtcclxuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfZG9jdW1lbnQnXS5zZXRWYWx1ZSgnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiYWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHMgJiYgIXRoaXMuaXNFZGl0QmlsbGluZ0RhdGEpIHtcclxuICAgICAgdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHMgJiYgdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSkge1xyXG4gICAgICB0aGlzLmlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHMgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb21wbGV0ZWQuZW1pdCgyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKSB7XHJcbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzKSB7XHJcbiAgICAgIHRoaXMuaXNTZWxlY3Rpb25PcHRpb25QYXltZW50cyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pc0VkaXRCaWxsaW5nRGF0YSkge1xyXG4gICAgICB0aGlzLmlzRWRpdEJpbGxpbmdEYXRhID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VuZEZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0TG9jYWxTdG9yYWdlV29yaygpIHtcclxuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgbGV0IGxvY2FsU3RvcmFnZVZhbHVlOiBsb2NhbFN0b3JhZ2VWYWx1ZXNUd28gPSB0aGlzLnJlYWRBbmRXcml0ZUxTKDQsIGNvbnRyb2wubmFtZSk7XHJcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1tjb250cm9sLm5hbWVdLnNldFZhbHVlKGxvY2FsU3RvcmFnZVZhbHVlLnZhbHVlKTtcclxuICAgICAgdGhpcy5saXN0ZW5Gb3JtQ2hhbmdlcyg0LCBjb250cm9sLm5hbWUsIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1tjb250cm9sLm5hbWVdLnZhbHVlQ2hhbmdlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGVkaXRCaWxsaW5nRGF0YSgpIHtcclxuICAgIHRoaXMuaXNFZGl0QmlsbGluZ0RhdGEgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZURhdG9zQmlsbGluZ0RhdGEoKSB7XHJcbiAgICB0aGlzLmlzRWRpdEJpbGxpbmdEYXRhID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNlbmRGb3JtKCkge1xyXG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMuYWN0aW9uLmVtaXQoJ2NyZWF0ZScpO1xyXG4gIH1cclxuXHJcbiAgb25SZWplY3QoKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNsZWFyKCdjb25maXJtJyk7XHJcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNob3dDb25maXJtKCkge1xyXG4gICAgaWYgKCF0aGlzLnZpc2libGUpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBrZXk6ICdjb25maXJtJywgc3RpY2t5OiB0cnVlLCBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnQ2FuIHlvdSBzZW5kIG1lIHRoZSByZXBvcnQ/JywgbGlmZTogNTAwMCB9KTtcclxuICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdE9wY2lvbnNQYXltZW50cyhldmU6IEl3ZWVrRGF5c1JxKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uUGF5bWVudHMgPSBldmU7XHJcbiAgICB0aGlzLmlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHMgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snb3B0aW9uc1BheW1lbnRzJ10uc2V0VmFsdWUodGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzLmNvZGUpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25QYXltZW50cy5jb2RlID09PSAxKSB7IC8vIEluc3RhbGFjaW9uZXNcclxuICAgICAgICB0aGlzLmFkZFZhbGlkYXRvcnMoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9uUGF5bWVudHMuY29kZSA9PT0gMykgeyAvLyBUcmFuc2ZlcmVuY2lhXHJcbiAgICAgICAgdGhpcy5yZW1vdmVWYWxpZGF0b3JzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFwbGljYXIgZWwgdmFsaWRhZG9yIHBlcnNvbmFsaXphZG8gYmFzYWRvIGVuIGxhIG9wY2nDs24gc2VsZWNjaW9uYWRhXHJcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5zZXRWYWxpZGF0b3JzKHBheW1lbnRPcHRpb25WYWxpZGF0b3IodGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzKSk7XHJcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIHRoaXMudXBkYXRlR2xvYmFsQ29udHJvbHModGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzLmNvZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydvcHRpb25zUGF5bWVudHMnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFZhbGlkYXRvcnMoKSB7XHJcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19uYW1lJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfQXBlbGxpZG8nXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19kb2N1bWVudCddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyMCksIFZhbGlkYXRvcnMucGF0dGVybigvXlswLTldKiQvKV0pO1xyXG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfbmFtZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX0FwZWxsaWRvJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfZG9jdW1lbnQnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVWYWxpZGF0b3JzKCkge1xyXG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfbmFtZSddLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfQXBlbGxpZG8nXS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2lkVHlwZSddLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfZG9jdW1lbnQnXS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX25hbWUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19BcGVsbGlkbyddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2lkVHlwZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2RvY3VtZW50J10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0SWRUeXBlKGlkVHlwZTogYW55KSB7XHJcbiAgICBpZiAoaWRUeXBlICE9PSAnVGlwbyBkZSBkb2N1bWVudG8nKSB7XHJcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2lkVHlwZSddLnNldFZhbHVlKGlkVHlwZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFZpZXdCYXNlZE9uUGF5bWVudE9wdGlvbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25QYXltZW50cz8uY29kZSA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gJ2luJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZE9wdGlvblBheW1lbnRzPy5jb2RlID09PSAzKSB7XHJcbiAgICAgIHJldHVybiAndHInO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICdkZWZhdWx0JztcclxuICB9XHJcblxyXG4gIGdldElkVHlwZURlc2NyaXB0aW9uKGlkVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoaWRUeXBlKSB7XHJcbiAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgIHJldHVybiAnTi9BJztcclxuICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgcmV0dXJuICdDLkMnO1xyXG4gICAgICBjYXNlICcyJzpcclxuICAgICAgICByZXR1cm4gJ1QuSSc7XHJcbiAgICAgIGNhc2UgJzMnOlxyXG4gICAgICAgIHJldHVybiAnQy5FJztcclxuICAgICAgY2FzZSAnNCc6XHJcbiAgICAgICAgcmV0dXJuICdQLkUuUCc7XHJcbiAgICAgIGNhc2UgJzUnOlxyXG4gICAgICAgIHJldHVybiAnUi5VLk0nO1xyXG4gICAgICBjYXNlICc2JzpcclxuICAgICAgICByZXR1cm4gJ1AuUC5UJztcclxuICAgICAgY2FzZSAnNyc6XHJcbiAgICAgICAgcmV0dXJuICdQLkEnO1xyXG4gICAgICBjYXNlICc4JzpcclxuICAgICAgICByZXR1cm4gJ1IuQyc7XHJcbiAgICAgIGNhc2UgJzknOlxyXG4gICAgICAgIHJldHVybiAnQy5EJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVwZGF0ZUdsb2JhbENvbnRyb2xzKGNoYW5nZTogbnVtYmVyKSB7XHJcbiAgICBsZXQgY29udHJvbHMgPSB0aGlzLmNvbnRyb2xzLmZpbHRlcihjb250cm9sID0+IGNvbnRyb2wubmFtZSAhPT0gJ29wdGlvbnNQYXltZW50cycpO1xyXG4gICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgaWYgKGNoYW5nZSA9PT0gMSkgdGhpcy5jb2RGb3JtQ29udHJvbHMuY2hhbmdlVmFsdWUoNCwgY29udHJvbC5uYW1lLCB0cnVlKVxyXG4gICAgICBpZiAoY2hhbmdlID09PSAzKSB0aGlzLmNvZEZvcm1Db250cm9scy5jaGFuZ2VWYWx1ZSg0LCBjb250cm9sLm5hbWUsIGZhbHNlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gRGVmaW5pY2nDs24gZGUgbGEgZnVuY2nDs24gZGUgdmFsaWRhZG9yIHBlcnNvbmFsaXphZGFcclxuZnVuY3Rpb24gcGF5bWVudE9wdGlvblZhbGlkYXRvcihzZWxlY3RlZE9wdGlvblBheW1lbnRzOiBJd2Vla0RheXNScSk6IFZhbGlkYXRvckZuIHtcclxuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgIGlmIChzZWxlY3RlZE9wdGlvblBheW1lbnRzPy5jb2RlID09PSAxKSB7IC8vIEluc3RhbGFjaW9uZXNcclxuICAgICAgaWYgKCFjb250cm9sLmdldCgnaW52b2ljaW5nX25hbWUnKT8udmFsdWUgfHwgIWNvbnRyb2wuZ2V0KCdpbnZvaWNpbmdfQXBlbGxpZG8nKT8udmFsdWUgfHxcclxuICAgICAgICAgICFjb250cm9sLmdldCgnaW52b2ljaW5nX2lkVHlwZScpPy52YWx1ZSB8fCAhY29udHJvbC5nZXQoJ2ludm9pY2luZ19kb2N1bWVudCcpPy52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB7ICdyZXF1aXJlZEZpZWxkc01pc3NpbmcnOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH07XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1tYWluXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mb3JtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVfc3RlcFwiPlxyXG4gICAgICA8aDI+RGF0b3MgZGUgRmFjdHVyYWNpw7NuPC9oMj5cclxuICAgICAgPHAtdG9hc3QgcG9zaXRpb249XCJ0b3AtY2VudGVyXCIga2V5PVwiY29uZmlybVwiIChvbkNsb3NlKT1cIm9uUmVqZWN0KClcIiBbYmFzZVpJbmRleF09XCIxMFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbWVzc2FnZSBwVGVtcGxhdGU9XCJtZXNzYWdlXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1zdGFydFwiIHN0eWxlPVwiZmxleDogMVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2xvZ29zL3JlYWRpbmcucG5nXCIgc3R5bGU9XCJ3aWR0aDogNjVweDtcIiBzaGFwZT1cImNpcmNsZVwiIC8+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC05MDBcIj5KYWNvYjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWxnIG15LTMgdGV4dC05MDBcIj57eyBtZXNzYWdlSW5mbyB9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9wLXRvYXN0PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGkgY2xhc3M9XCJwaSBwaS1leGNsYW1hdGlvbi1jaXJjbGUgY3Vyc29yLXBvaW50ZXIgdy1hdXRvIFwiIChjbGljayk9XCJzaG93Q29uZmlybSgpXCIgcFRvb2x0aXA9XCJNw6FzIGluZm8uXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCI+PC9pPlxyXG4gICAgPGRpdiBjbGFzcz1cImFuaW1hdGVfX2FuaW1hdGVkIGFuaW1hdGVfX3NsaWRlSW5SaWdodCBuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiY29kU2VsZkZvcm1TdGVwRm91clwiIGNsYXNzPVwiZ3JpZCBtdC0yIGZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9fYm9keV9fc2VsZWN0IGZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LXdyYXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfX3R5cGVfX3BheW1lbnRzXCIgKm5nSWY9XCJpc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgPGgzPsK/Q8OzbW8gcXVpZXJlcyBwYWdhcj88L2gzPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIE9wdGlvblBheW1lbnRzOyBpbmRleCBhcyBpbmRcIiBjbGFzcz1cImZpZWxkLWNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8cC1yYWRpb0J1dHRvblxyXG4gICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJjYXRlZ29yeS5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiY2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkT3B0aW9uUGF5bWVudHNcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZXdlZWtkYXlzW2luZF1cIlxyXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RPcGNpb25zUGF5bWVudHMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY2F0ZWdvcnkua2V5XCIgY2xhc3M9XCJtbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGNhdGVnb3J5Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9fb3B0aW9uX19pbnN0YWxhdGlvbnNcIiAqbmdJZj1cIiFpc1NlbGVjdGlvbk9wdGlvblBheW1lbnRzXCI+XHJcbiAgICAgICAgICAgIDwhLS0gVmlzdGEgcGFyYSBsYSBvcGNpw7NuIGRlIHBhZ28gXCJJbnN0YWxhY2lvbmVzXCIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRWaWV3QmFzZWRPblBheW1lbnRPcHRpb24oKSA9PT0gJ2luJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfX2luZm8gZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xIG1iLTRcIiAqbmdJZj1cImlzRWRpdEJpbGxpbmdEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2xvZ29zL2xvYm8td2ViLnBuZ1wiIGFsdD1cIlJlY2VpcHQgSWNvblwiIHNoYXBlPVwiY2lyY2xlXCIgY2xhc3M9XCJjaXJjdWxhci1pbWFnZVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGNvZFNlbGZGb3JtU3RlcEZvdXIuZ2V0KCdpbnZvaWNpbmdfbmFtZScpPy52YWx1ZSB9fSB7eyBjb2RTZWxmRm9ybVN0ZXBGb3VyLmdldCgnaW52b2ljaW5nX0FwZWxsaWRvJyk/LnZhbHVlIH19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBnZXRJZFR5cGVEZXNjcmlwdGlvbihjb2RTZWxmRm9ybVN0ZXBGb3VyLmdldCgnaW52b2ljaW5nX2lkVHlwZScpPy52YWx1ZSkgfX0ge3sgY29kU2VsZkZvcm1TdGVwRm91ci5nZXQoJ2ludm9pY2luZ19kb2N1bWVudCcpPy52YWx1ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpcHQtYnV0dG9uIFtsYWJlbF09XCInTW9kaWZpY2FyIERhdG9zJ1wiIChvbkNsaWNrKT1cImVkaXRCaWxsaW5nRGF0YSgpXCIgW3ByaW1hcnldPVwiZmFsc2VcIj48L2lwdC1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yXCIgKm5nSWY9XCIhaXNFZGl0QmlsbGluZ0RhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxoMz5Db21wbGV0YSBsb3MgbnVldm9zIGRhdG9zIHBhcmEgbGEgZW1pc2nDs24gZGUgdHUgZmFjdHVyYTwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMSBtZDpnYXAtNCB4bDpnYXAtOCBtLTEgcC0yIGJvcmRlci1yb3VuZCBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfaWNvbiBmbGV4IG1yLTQganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1zdGFydCBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZSBjdXJzb3ItcG9pbnRlciB3LWF1dG8gbWItNFwiIHBUb29sdGlwPVwiTcOhcyBpbmZvLlwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGNvbnRhaW5lcl9pbmZvX3NwYW4gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlNpIHByb3BvcmNpb25hcyBkYXRvcyBkZSB1biB0ZXJjZXJvLCBjb25maXJtYXMgcXVlIGxvcyBkYXRvcyBzb24gY29ycmVjdG9zIHkgcXVlIHRpZW5lcyBzdSBjb25zZW50aW1pZW50byBwYXJhIGVsIHVzbyBkZSBsYSBpbmZvcm1hY2nDs24uIEVzdG9zIGRhdG9zIHNlIHRyYXRhcsOhbiBkZSBhY3VlcmRvIGEgbnVlc3RyYSA8YSBocmVmPVwiXCI+RGVjbGFyYWNpw7NuIGRlIFByaXZhY2lkYWQ8L2E+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGlwdC1pbnB1dCBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiIFtwbGFjZUhvbGRlcl09XCInTm9tYnJlcydcIiBbY29udHJvbF09XCJjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfbmFtZSddXCI+PC9pcHQtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgIDxpcHQtaW5wdXQgW2lucHV0VHlwZV09XCIndGV4dCdcIiBbcGxhY2VIb2xkZXJdPVwiJ0FwZWxsaWRvcydcIiBbY29udHJvbF09XCJjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfQXBlbGxpZG8nXVwiPjwvaXB0LWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICA8aXB0LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kU2VsZkZvcm1TdGVwRm91ci5jb250cm9sc1snaW52b2ljaW5nX2lkVHlwZSddLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RDb2RlXT1cImNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19pZFR5cGUnXS52YWx1ZSA9PT0gbnVsbCA/ICdUaXBvIGRlIGRvY3VtZW50bycgOiBjb2RTZWxmRm9ybVN0ZXBGb3VyLmNvbnRyb2xzWydpbnZvaWNpbmdfaWRUeXBlJ10udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc1JlcXVpcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImlkVHlwZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RJZFR5cGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRUZXh0XT1cIidUaXBvIGRlIGRvY3VtZW50bydcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8aXB0LWlucHV0IFtpbnB1dFR5cGVdPVwiJ251bWJlcidcIiBbcGxhY2VIb2xkZXJdPVwiJ07Dum1lcm8gZGUgZG9jdW1lbnRvJ1wiIFtjb250cm9sXT1cImNvZFNlbGZGb3JtU3RlcEZvdXIuY29udHJvbHNbJ2ludm9pY2luZ19kb2N1bWVudCddXCI+PC9pcHQtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtMyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIFtkaXNhYmxlZF09XCIhY29kU2VsZkZvcm1TdGVwRm91ci52YWxpZFwiIGxhYmVsPVwiQ29udGludWFyXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ1cGRhdGVEYXRvc0JpbGxpbmdEYXRhKClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVmlzdGEgcGFyYSBsYSBvcGNpw7NuIGRlIHBhZ28gXCJUcmFuc2ZlcmVuY2lhXCIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRWaWV3QmFzZWRPblBheW1lbnRPcHRpb24oKSA9PT0gJ3RyJ1wiPlxyXG4gICAgICAgICAgICAgIDwhLS0gVE9ETzo8aDM+Q29tcGxldGEgbG9zIGRhdG9zIHBhcmEgVHJhbnNmZXJlbmNpYTwvaDM+IC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gQXF1w60gcHVlZGVzIGFncmVnYXIgZWwgZm9ybXVsYXJpbyBlc3BlY8OtZmljbyBwYXJhIFRyYW5zZmVyZW5jaWEgLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTMgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS1hcnJvdy1sZWZ0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJiYWNrKClcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWlzU2VsZWN0aW9uT3B0aW9uUGF5bWVudHMgJiYgaXNFZGl0QmlsbGluZ0RhdGEgJiYgY29kU2VsZkZvcm1TdGVwRm91ci52YWxpZFwiIHBCdXR0b24gbGFiZWw9XCLCoU1hdHJpY3VsYXJtZSFcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNlbmRGb3JtKClcIj48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==