/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, EventEmitter, Output, ViewChild } from '@angular/core'; import { ModalDirective } from 'ngx-bootstrap'; import { AppConfigService } from '../app-config/app-config.service'; import { Request } from '../_services/request.service'; import { Common } from '../_services/common.service'; import { FormBuilder, Validators } from '@angular/forms'; import { CustomValidators } from 'ng2-validation'; import { DxDataGridComponent } from 'devextreme-angular'; import * as _ from 'lodash'; import { DateService } from '../_services/date.service'; import { UploadAttachmentComponent } from '../upload-attachment/upload-attachment.component'; import { B2bService } from '../_services/b2b.service'; class Options { } if (false) { /** * title ที่ต้องการแสดง * @type {?} */ Options.prototype.title; /** * data * @type {?} */ Options.prototype.data; } export class ModalStepComponent extends Options { /** * @param {?} appConfigService * @param {?} request * @param {?} formBuilder * @param {?} common * @param {?} date * @param {?} b2bService */ constructor(appConfigService, request, formBuilder, common, date, b2bService) { super(); this.appConfigService = appConfigService; this.request = request; this.formBuilder = formBuilder; this.common = common; this.date = date; this.b2bService = b2bService; this.onUpdateModal = new EventEmitter(); this.submitted = false; this.submittedSend = false; this.submittedRecieve = false; this.title = ''; this.selectList = []; this.sendList = []; this.recieveList = []; this.modalConfig = { ignoreBackdropClick: true }; this.selectedStep = null; this.isMore = false; this.stepData = {}; this.sendData = {}; this.recieveData = {}; this.lastStep = ''; this.isSend = false; this.isRecieve = false; this.isEditSend = false; this.isEditRecieve = false; this.tmpData = {}; this.filteredDepartments = []; this.departmentList = []; this.departmentUrl = "/db/ct_ext_department"; this.causeUrl = "/db/ct_dropdown"; this.causeFilter = "system_id,eq,23)$and(dropdown_type,like,เรื่องส่งคืน"; this.tempId = -1; this.filter_ref_ext_department_id = false; this.filter_ref_ext_department_id_show = true; this.config = appConfigService.getConfig(); this.attachmentUrl = _.get(this.config, 'apiServers.alfresco.url') || "https://203.154.32.126:2585/api/mfec/Alfresco"; this.system_id = _.get(this.config, 'system_id'); } /** * @return {?} */ ngOnInit() { this.th = this.common.fnLocalPCalendar('th'); this.recieveForm = this.formBuilder.group({ book_no: ['', [Validators.required]], recv_date: [''], }); this.sendForm = this.formBuilder.group({ send_to: [''], book_no: [''], send_date: [''], is_important: [''], }); this.registerForm = this.formBuilder.group({ name: [''], step_id: ['', Validators.required], step_date: [''], remark: [''], lastStep: [''], moreField: this.formBuilder.array([]), soc_recv_no: [''], soc_recv_date: [''], gtc_recv_no: [''], gtc_recv_date: [''], book_no: [''], book_date: [''], 'for': [''], dept_name: [''], ministry: [''] }); } /** * @param {?=} options * @return {?} */ open(options) { return tslib_1.__awaiter(this, void 0, void 0, function* () { console.log(options); this.stepData = {}; if (options) { this.title = options.title || ''; this.lastStep = options.data.lastStep; this.stepData = JSON.parse(JSON.stringify(options.data)); this.stepData.step_date = this.date.getNow(); delete this.stepData['lastStep']; this.selectList = yield this.request.get('/db/ct_step?_where=(category_id,eq,' + options.data.category_id + ')&_sort=seq_no'); } this.uploadAttachment.clearValue(); this.modal.show(); }); } /** * @return {?} */ f() { return this.registerForm.controls; } /** * @return {?} */ fs() { return this.sendForm.controls; } /** * @return {?} */ fr() { return this.recieveForm.controls; } /** * @return {?} */ closeModal() { this.submitted = false; this.selectList = []; this.sendList = []; this.selectedStep = null; this.isMore = false; this.isSend = false; this.moreField = []; this.stepData = {}; this.lastStep = ''; this.modal.hide(); } /** * @return {?} */ closeSendModal() { this.submittedSend = false; this.sendData = {}; this.isEditSend = false; this.tmpData = {}; this.sendModal.hide(); } /** * @return {?} */ closeRecieveModal() { this.submittedRecieve = false; this.recieveData = {}; this.isEditRecieve = false; this.tmpData = {}; this.recieveModal.hide(); } /** * @param {?} modal * @return {?} */ onYesClick(modal) { modal.hide(); } /** * @param {?} modal * @return {?} */ onNoClick(modal) { modal.hide(); } /** * @param {?} $event * @return {?} */ onHidden($event) { console.log('LOG MESSAGE: ModalConfirm -> onHidden -> $event', $event); } /** * @param {?} value * @return {?} */ valueSeleteMinistry(value) { this.filter_ref_ext_department_id_show = false; console.log('value', value); // this.stepData.ministry_id = value && value.id ? value.id : null if (value && value.id) { this.stepData.dept_name = null; this.filter_ref_ext_department_id = `&_where=(ref_ext_department_id,eq,${value.id})$and(type,in,2,3,4,5)`; } else { this.filter_ref_ext_department_id = false; } setTimeout(() => { this.filter_ref_ext_department_id_show = true; }, 50); } /** * @param {?} value * @return {?} */ valueSeleteDeptName(value) { console.log('value', value); this.stepData.code_dept = value && value.id ? value.id : null; } /** * @return {?} */ checkExtraField() { return tslib_1.__awaiter(this, void 0, void 0, function* () { this.stepData.step_id = this.selectedStep.id; this.stepData.step_name = this.selectedStep.name; console.log(this.isMore); this.moreField = []; if (this.selectedStep.flag && this.selectedStep.flag !== '') { for (let i = 0; i < this.selectedStep.flag.length; i++) { /** @type {?} */ const flag = this.selectedStep.flag.charAt(i); /** @type {?} */ const requireFlag = this.selectedStep.require_flag ? this.selectedStep.require_flag.charAt(i) : 0; /** @type {?} */ const ct_step_flag = yield this.request.get('/db/ct_step_flag?_where=(flag,eq,' + flag + ')'); /** @type {?} */ const newField = ct_step_flag[0]; yield this.addField(newField, +requireFlag); this.moreField.push(newField); console.log(this.f); } this.isMore = true; this.isSend = false; this.isRecieve = false; } else { this.isMore = false; if (this.selectedStep.type_id === 8 || this.selectedStep.type_id === 13) { this.departmentList = yield this.request.get('/db/ct_ext_department?_sort=name'); this.departmentList = this.departmentList.map(a => a.name); this.isSend = true; this.isRecieve = false; // } else if (this.selectedStep.type_id === 9 || this.selectedStep.type_id === 14) { // const data = await this.request.post('/sql/getLastSend', this.stepData); // if (data.resultData && data.resultData.length > 0) { // const ct_step_data_id = data.resultData[0].id; // const ct_sendList = await this.request.get('/db/ct_send?_where=(ct_step_data_id,eq,' + ct_step_data_id + ')'); // for (const ct_send of ct_sendList) { // const recvData: any = { // ct_send_id: ct_send.id, // send_book_no: ct_send.book_no, // send_date: ct_send.send_date, // recv_from: ct_send.send_to, // name: ct_send.name // }; // this.recieveList.push(recvData); // } // } // this.isRecieve = true; // this.isSend = false; } else { this.isSend = false; this.isRecieve = false; } } }); } /** * @param {?} data * @return {?} */ getFieldId(data) { /** @type {?} */ let id = ''; if (data.type === 'text') { id += 'txt'; } else if (data.type === 'datetime') { id += 'txt'; } else { id += 'txt'; } /** @type {?} */ const field = data.field_name.charAt(0).toLocaleUpperCase() + data.field_name.substring(1); id += field; return id; } /** * @param {?} data * @param {?} required * @return {?} */ addField(data, required) { /** @type {?} */ let control = /** @type {?} */ (this.registerForm.controls['moreField']); /** @type {?} */ let newgroup; this.stepData[data.field_name] = null; if (data.type === 'text') { if (required) { /** @type {?} */ const group = {}; group[data.field_name] = ['', Validators.required]; newgroup = this.formBuilder.group(group); } else { /** @type {?} */ const group = {}; group[data.field_name] = ['']; newgroup = this.formBuilder.group(group); } } else if (data.type === 'datetime') { if (required) { /** @type {?} */ const group = {}; group[data.field_name] = ['', Validators.required, CustomValidators.date]; newgroup = this.formBuilder.group(group); } else { /** @type {?} */ const group = {}; group[data.field_name] = ['']; newgroup = this.formBuilder.group(group); } this.stepData[data.field_name] = this.date.getNow(); } else if (data.type === 'number') { if (required) { /** @type {?} */ const group = {}; group[data.field_name] = [Validators.required]; newgroup = this.formBuilder.group(group); } else { /** @type {?} */ const group = {}; group[data.field_name] = ['']; newgroup = this.formBuilder.group(group); } } else if (data.type === 'special') { if (data.field_name === 'amount') { if (required) { /** @type {?} */ const group = {}; group[data.field_name] = ['', Validators.required]; group['amount_type'] = ['', Validators.required]; newgroup = this.formBuilder.group(group); } else { /** @type {?} */ const group = {}; group[data.field_name] = ['']; group['amount_type'] = ['']; newgroup = this.formBuilder.group(group); } } else if (data.field_name === 'follow') { if (required) { /** @type {?} */ const group = {}; group[data.field_name] = ['', Validators.required]; group['follow_remark'] = ['', Validators.required]; newgroup = this.formBuilder.group(group); } else { /** @type {?} */ const group = {}; group[data.field_name] = ['']; group['follow_remark'] = ['']; newgroup = this.formBuilder.group(group); } } else { if (required) { /** @type {?} */ const group = {}; group[data.field_name] = ['', Validators.required]; newgroup = this.formBuilder.group(group); } else { /** @type {?} */ const group = {}; group[data.field_name] = ['']; newgroup = this.formBuilder.group(group); } } } control.push(newgroup); } /** * @param {?} i * @param {?} field * @param {?=} validateType * @return {?} */ getValidateMoreField(i, field, validateType) { /** @type {?} */ let formMoreField = this.f()['moreField']; if (validateType) { formMoreField = formMoreField.controls[i]; formMoreField = formMoreField.controls[field]; if (formMoreField.errors) { return formMoreField.errors[validateType]; } else { return formMoreField.errors; } } else { return formMoreField.errors; } } /** * @param {?} data * @return {?} */ getRowIndex(data) { if (!data.data) { return ''; } /** @type {?} */ const no = data.row.dataIndex + 1; return no; } /** * @param {?} e * @return {?} */ onCellPrepared(e) { if (e.rowType === 'data') { for (const i in e.component.columns) { if (e.column.dataField === e.component.columns[i]) { e.cellElement.accessKey = e.component.columns[i]; } } } } /** * @return {?} */ addSend() { this.sendData.send_date = this.date.getNow(); this.sendModal.show(); } /** * @param {?} data * @return {?} */ editSend(data) { this.tmpData = data; this.sendData = JSON.parse(JSON.stringify(data)); // this.sendData.send_date = new Date(this.sendData.send_date); this.isEditSend = true; this.sendModal.show(); } /** * @param {?} data * @return {?} */ editRecieve(data) { this.tmpData = data; this.recieveData = JSON.parse(JSON.stringify(data)); this.recieveData.recv_date = this.recieveData.recv_date ? new Date(this.recieveData.recv_date) : this.recieveData.recv_date; this.isEditRecieve = true; this.recieveModal.show(); } /** * @param {?} event * @return {?} */ filterDepartments(event) { this.filteredDepartments = []; for (let i = 0; i < this.departmentList.length; i++) { /** @type {?} */ const department = this.departmentList[i]; if (department.toLowerCase().indexOf(event.query.toLowerCase()) == 0) { this.filteredDepartments.push(department); } } } /** * @return {?} */ onSubmit() { return tslib_1.__awaiter(this, void 0, void 0, function* () { this.submitted = true; // ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้ console.log('this.registerForm.invalid: ', this.registerForm.invalid); if (this.registerForm.invalid) { return; } /** @type {?} */ let postData = []; /** @type {?} */ let data = _.cloneDeep(this.stepData); data.action = "add"; /** @type {?} */ let userData = this.b2bService.getVerifyToken(); data.username = userData.username; if (data.remind_date) data.remind_date = this.date.getNow().add(data.remind_date, 'd').toDate(); delete data["ct_main_id"]; delete data["update_date"]; /** @type {?} */ let main = { "ct_step_data": [data] }; postData.push(main); if (this.sendList && this.sendList.length > 0) { /** @type {?} */ let ct_send = { "ct_send": [] }; /** @type {?} */ let ct_recieve = { "ct_recieve": [] }; for (let data of this.sendList) { data.name = data.name; data.action = "add"; delete data.id; ct_send.ct_send.push(data); } postData.push(ct_send); } if (this.recieveList && this.recieveList.length > 0) { /** @type {?} */ let ct_recieve = { "ct_recieve": [] }; for (let data of this.recieveList) { delete data['send_book_no']; delete data['send_date']; data.name = data.name; data.action = "add"; ct_recieve.ct_recieve.push(data); } postData.push(ct_recieve); } console.log('postData', postData); /** @type {?} */ let postResponse = yield this.request.post("/ct/main", postData); if (this.stepData.update_date) { /** @type {?} */ let stepList = yield this.getStepList(); console.log("stepList", stepList); if (stepList.length > 0) { yield this.request.put("/db/" + this.stepData.ref_table + "/" + this.stepData.ref_id, { status: stepList[0].step_name, status_date: stepList[0].step_date }); this.common.fnCheckResponse(postResponse, this.myModal); } } else { yield this.request.put("/db/" + this.stepData.ref_table + "/" + this.stepData.ref_id, { status: this.stepData.step_name }); this.common.fnCheckResponse(postResponse, this.myModal); } // }else{ // this.onCreateModal.emit(postData); // } }); } /** * @return {?} */ getStepList() { return tslib_1.__awaiter(this, void 0, void 0, function* () { console.log('getStepList'); /** @type {?} */ let filter = { filter: { ref_table: "=" + this.stepData.ref_table, ref_id: this.stepData.ref_id, system_id: this.stepData.system_id }, order_by: ["step_date desc"] }; /** @type {?} */ const data = yield this.request.post('/search/ct_step_data', filter); return data.resultData || []; }); } /** * @return {?} */ onClickBack() { this.onUpdateModal.emit(); this.closeModal(); } /** * @return {?} */ onSubmitSend() { return tslib_1.__awaiter(this, void 0, void 0, function* () { this.submittedSend = true; // ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้ if (this.sendForm.invalid) { return; } if (this.isEditSend) { /** @type {?} */ const tmpList = []; for (const tmpSend of this.sendList) { if (tmpSend.id === this.tmpData.id) { tmpList.push(this.sendData); } else { tmpList.push(tmpSend); } } this.sendList = tmpList; } else { this.sendData.id = this.tempId; this.tempId--; this.sendList.push(this.sendData); } this.closeSendModal(); }); } /** * @return {?} */ onSubmitRecieve() { return tslib_1.__awaiter(this, void 0, void 0, function* () { this.submittedSend = true; // ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้ if (this.recieveForm.invalid) { return; } if (this.isEditRecieve) { /** @type {?} */ const tmpList = []; for (const tmpSend of this.recieveList) { if (tmpSend.recv_from === this.tmpData.recv_from) { tmpList.push(this.recieveData); } else { tmpList.push(tmpSend); } } this.recieveList = tmpList; } else { this.recieveList.push(this.recieveData); } this.closeRecieveModal(); }); } /** * @param {?} data * @return {?} */ isImportant(data) { return data.is_important ? "สำคัญ" : ""; } /** * @param {?} data * @return {?} */ onUploaded(data) { this.stepData.url = this.attachmentUrl + '/' + data.uuid; this.stepData.uuid = data.uuid; } /** * @param {?} field * @return {?} */ checkDisable(field) { if (this.stepData[field.field_name] !== 'ไม่ทางการ') { return true; } else { return false; } } /** * @param {?} data * @return {?} */ getImageLink(data) { return tslib_1.__awaiter(this, void 0, void 0, function* () { /** @type {?} */ let url = yield this.request.getAttachmentLinkToken(data.url); return url; }); } } ModalStepComponent.decorators = [ { type: Component, args: [{ selector: 'modal-step', template: "
\n
\n
\n
\n

\n \n
\n
\n
\n
\n
\n
\n\n \n
\n \n \n \n
\n
\n \n \n
\n
\n
\n \n
\n \n \n \n
\n
\n
\n
\n \n \n \n \n \n \n \n
\n \n \n \n \n
\n
\n \n \n \n
\n
Date is required
\n
Date is invalid
\n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n \n
\n
\n
\n
\n
\n \n \n
\n\n
\n
\n
\n
\n \n \n \n
\n
\n \n
\n \n \n
\n
\n\n
\n
\n \n \n
\n \n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n \n \n
\n
* \u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01
\n
\n
\n
\n
\n \n
\n\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\u0E27\u0E31\u0E19
\n
\n
\n
* \u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01
\n
\n
\n
\n \n \n \n
\n
\n
\n\n
\n
\n
\n
\n \n \n
\n
* \u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n \n
\n \n \n
\n
\n
\n \n \n \n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
* \u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 :\n
\n \n
\n
\n \n \n \n \n \n \n \n
\n {{getRowIndex(data)}}\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A :\n
\n \n
\n
\n \n \n \n \n \n \n \n \n
\n {{getRowIndex(data)}}\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

\n \n
\n
\n
\n
\n
\n
\n \n
\n \n \n \n
\n
First Name is required
\n
\n
\n
\n
\n \n
\n \n
\n
First Name is required
\n
\n
\n
\n
\n \n
\n \n
\n
Date is required
\n
Date is invalid
\n
\n
\n
\n
\n \n \u0E2A\u0E33\u0E04\u0E31\u0E0D\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
First Name is required
\n
\n
\n
\n
\n \n
\n \n
\n
Date is required
\n
Date is invalid
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n\n" }] } ]; /** @nocollapse */ ModalStepComponent.ctorParameters = () => [ { type: AppConfigService }, { type: Request }, { type: FormBuilder }, { type: Common }, { type: DateService }, { type: B2bService } ]; ModalStepComponent.propDecorators = { onUpdateModal: [{ type: Output }], modal: [{ type: ViewChild, args: ['modal',] }], myModal: [{ type: ViewChild, args: ['myModal',] }], sendModal: [{ type: ViewChild, args: ['sendModal',] }], recieveModal: [{ type: ViewChild, args: ['recieveModal',] }], dxDataGridStepSendList: [{ type: ViewChild, args: ['dxDataGridStepSendList',] }], uploadAttachment: [{ type: ViewChild, args: ['uploadAttachment',] }] }; if (false) { /** @type {?} */ ModalStepComponent.prototype.onUpdateModal; /** @type {?} */ ModalStepComponent.prototype.modal; /** @type {?} */ ModalStepComponent.prototype.myModal; /** @type {?} */ ModalStepComponent.prototype.sendModal; /** @type {?} */ ModalStepComponent.prototype.recieveModal; /** @type {?} */ ModalStepComponent.prototype.dxDataGridStepSendList; /** @type {?} */ ModalStepComponent.prototype.uploadAttachment; /** @type {?} */ ModalStepComponent.prototype.registerForm; /** @type {?} */ ModalStepComponent.prototype.sendForm; /** @type {?} */ ModalStepComponent.prototype.recieveForm; /** @type {?} */ ModalStepComponent.prototype.submitted; /** @type {?} */ ModalStepComponent.prototype.submittedSend; /** @type {?} */ ModalStepComponent.prototype.submittedRecieve; /** @type {?} */ ModalStepComponent.prototype.title; /** @type {?} */ ModalStepComponent.prototype.selectList; /** @type {?} */ ModalStepComponent.prototype.sendList; /** @type {?} */ ModalStepComponent.prototype.recieveList; /** @type {?} */ ModalStepComponent.prototype.modalConfig; /** @type {?} */ ModalStepComponent.prototype.th; /** @type {?} */ ModalStepComponent.prototype.selectedStep; /** @type {?} */ ModalStepComponent.prototype.isMore; /** @type {?} */ ModalStepComponent.prototype.moreField; /** @type {?} */ ModalStepComponent.prototype.config; /** @type {?} */ ModalStepComponent.prototype.stepData; /** @type {?} */ ModalStepComponent.prototype.sendData; /** @type {?} */ ModalStepComponent.prototype.recieveData; /** @type {?} */ ModalStepComponent.prototype.lastStep; /** @type {?} */ ModalStepComponent.prototype.isSend; /** @type {?} */ ModalStepComponent.prototype.isRecieve; /** @type {?} */ ModalStepComponent.prototype.isEditSend; /** @type {?} */ ModalStepComponent.prototype.isEditRecieve; /** @type {?} */ ModalStepComponent.prototype.tmpData; /** @type {?} */ ModalStepComponent.prototype.filteredDepartments; /** @type {?} */ ModalStepComponent.prototype.departmentList; /** @type {?} */ ModalStepComponent.prototype.departmentUrl; /** @type {?} */ ModalStepComponent.prototype.causeUrl; /** @type {?} */ ModalStepComponent.prototype.causeFilter; /** @type {?} */ ModalStepComponent.prototype.tempId; /** @type {?} */ ModalStepComponent.prototype.attachmentUrl; /** @type {?} */ ModalStepComponent.prototype.system_id; /** @type {?} */ ModalStepComponent.prototype.filter_ref_ext_department_id; /** @type {?} */ ModalStepComponent.prototype.filter_ref_ext_department_id_show; /** @type {?} */ ModalStepComponent.prototype.appConfigService; /** @type {?} */ ModalStepComponent.prototype.request; /** @type {?} */ ModalStepComponent.prototype.formBuilder; /** @type {?} */ ModalStepComponent.prototype.common; /** @type {?} */ ModalStepComponent.prototype.date; /** @type {?} */ ModalStepComponent.prototype.b2bService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zb2MtYXBwLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvbW9kYWwtc3RlcC9tb2RhbC1zdGVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUE0QixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBZSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUF3QixVQUFVLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFdkQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRDtDQUtDOzs7Ozs7Ozs7Ozs7O0FBTUQsTUFBTSx5QkFBMEIsU0FBUSxPQUFPOzs7Ozs7Ozs7SUFnRDNDLFlBQW9CLGdCQUFrQyxFQUFVLE9BQWdCLEVBQVUsV0FBd0IsRUFBUyxNQUFjLEVBQVMsSUFBaUIsRUFBUyxVQUFzQjtRQUM5TCxLQUFLLEVBQUUsQ0FBQztRQURRLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FB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WCxVQUFVOzs7NEJBY2IsTUFBTTtvQkFFTixTQUFTLFNBQUMsT0FBTztzQkFDakIsU0FBUyxTQUFDLFNBQVM7d0JBQ25CLFNBQVMsU0FBQyxXQUFXOzJCQUNyQixTQUFTLFNBQUMsY0FBYztxQ0FDeEIsU0FBUyxTQUFDLHdCQUF3QjsrQkFFbEMsU0FBUyxTQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNb2RhbE9wdGlvbnMsIE1vZGFsRGlyZWN0aXZlfSBmcm9tICduZ3gtYm9vdHN0cmFwJztcbmltcG9ydCB7QXBwQ29uZmlnU2VydmljZX0gZnJvbSAnLi4vYXBwLWNvbmZpZy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJy4uL19zZXJ2aWNlcy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb259IGZyb20gJy4uL19zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtQXJyYXksIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0N1c3RvbVZhbGlkYXRvcnN9IGZyb20gJ25nMi12YWxpZGF0aW9uJztcbmltcG9ydCB7RHhEYXRhR3JpZENvbXBvbmVudH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyJztcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge0RhdGVTZXJ2aWNlfSBmcm9tICcuLi9fc2VydmljZXMvZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7VXBsb2FkQXR0YWNobWVudENvbXBvbmVudH0gZnJvbSAnLi4vdXBsb2FkLWF0dGFjaG1lbnQvdXBsb2FkLWF0dGFjaG1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7QjJiU2VydmljZX0gZnJvbSAnLi4vX3NlcnZpY2VzL2IyYi5zZXJ2aWNlJztcblxuY2xhc3MgT3B0aW9ucyB7XG4gICAgLyoqIHRpdGxlIOC4l+C4teC5iOC4leC5ieC4reC4h+C4geC4suC4o+C5geC4quC4lOC4hyAqL1xuICAgIHRpdGxlPzogU3RyaW5nO1xuICAgIC8qKiBkYXRhICovXG4gICAgZGF0YTogYW55O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21vZGFsLXN0ZXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1zdGVwLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxTdGVwQ29tcG9uZW50IGV4dGVuZHMgT3B0aW9ucyBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQE91dHB1dCgpIG9uVXBkYXRlTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgLy8gQE91dHB1dCgpIG9uQ3JlYXRlTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQFZpZXdDaGlsZCgnbW9kYWwnKSBtb2RhbDogTW9kYWxEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgnbXlNb2RhbCcpIG15TW9kYWw7XG4gICAgQFZpZXdDaGlsZCgnc2VuZE1vZGFsJykgc2VuZE1vZGFsOiBNb2RhbERpcmVjdGl2ZTtcbiAgICBAVmlld0NoaWxkKCdyZWNpZXZlTW9kYWwnKSByZWNpZXZlTW9kYWw6IE1vZGFsRGlyZWN0aXZlO1xuICAgIEBWaWV3Q2hpbGQoJ2R4RGF0YUdyaWRTdGVwU2VuZExpc3QnKVxuICAgIGR4RGF0YUdyaWRTdGVwU2VuZExpc3Q6IER4RGF0YUdyaWRDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgndXBsb2FkQXR0YWNobWVudCcpIHVwbG9hZEF0dGFjaG1lbnQ6IFVwbG9hZEF0dGFjaG1lbnRDb21wb25lbnQ7XG5cbiAgICByZWdpc3RlckZvcm06IEZvcm1Hcm91cDtcbiAgICBzZW5kRm9ybTogRm9ybUdyb3VwO1xuICAgIHJlY2lldmVGb3JtOiBGb3JtR3JvdXA7XG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgc3VibWl0dGVkU2VuZCA9IGZhbHNlO1xuICAgIHN1Ym1pdHRlZFJlY2lldmUgPSBmYWxzZTtcbiAgICB0aXRsZTogYW55ID0gJyc7XG4gICAgc2VsZWN0TGlzdDogYW55ID0gW107XG4gICAgc2VuZExpc3Q6IGFueSA9IFtdO1xuICAgIHJlY2lldmVMaXN0OiBhbnkgPSBbXTtcbiAgICBtb2RhbENvbmZpZzogTW9kYWxPcHRpb25zID0ge1xuICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgfTtcbiAgICB0aDtcbiAgICBzZWxlY3RlZFN0ZXA6IGFueSA9IG51bGw7XG4gICAgaXNNb3JlID0gZmFsc2U7XG4gICAgbW9yZUZpZWxkOiBhbnk7XG4gICAgcHVibGljIGNvbmZpZzogYW55O1xuICAgIHN0ZXBEYXRhOiBhbnkgPSB7fTtcbiAgICBzZW5kRGF0YTogYW55ID0ge307XG4gICAgcmVjaWV2ZURhdGE6IGFueSA9IHt9O1xuICAgIGxhc3RTdGVwID0gJyc7XG4gICAgaXNTZW5kID0gZmFsc2U7XG4gICAgaXNSZWNpZXZlID0gZmFsc2U7XG4gICAgaXNFZGl0U2VuZCA9IGZhbHNlO1xuICAgIGlzRWRpdFJlY2lldmUgPSBmYWxzZTtcbiAgICB0bXBEYXRhOmFueSA9IHt9O1xuICAgIGZpbHRlcmVkRGVwYXJ0bWVudHM6YW55ID0gW107XG4gICAgZGVwYXJ0bWVudExpc3Q6YW55ID0gW107XG4gICAgZGVwYXJ0bWVudFVybCA9IFwiL2RiL2N0X2V4dF9kZXBhcnRtZW50XCI7XG4gICAgY2F1c2VVcmwgPSBcIi9kYi9jdF9kcm9wZG93blwiO1xuICAgIGNhdXNlRmlsdGVyID0gXCJzeXN0ZW1faWQsZXEsMjMpJGFuZChkcm9wZG93bl90eXBlLGxpa2Us4LmA4Lij4Li34LmI4Lit4LiH4Liq4LmI4LiH4LiE4Li34LiZXCI7XG4gICAgdGVtcElkID0gLTE7XG4gICAgYXR0YWNobWVudFVybDtcbiAgICBzeXN0ZW1faWQ7XG4gICAgZmlsdGVyX3JlZl9leHRfZGVwYXJ0bWVudF9pZDogYW55ID0gZmFsc2U7XG4gICAgZmlsdGVyX3JlZl9leHRfZGVwYXJ0bWVudF9pZF9zaG93ID0gdHJ1ZTtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsIHByaXZhdGUgcmVxdWVzdDogUmVxdWVzdCwgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIHB1YmxpYyBjb21tb246IENvbW1vbiwgcHVibGljIGRhdGU6IERhdGVTZXJ2aWNlLCBwdWJsaWMgYjJiU2VydmljZTogQjJiU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudFVybCA9IF8uZ2V0KHRoaXMuY29uZmlnLCAnYXBpU2VydmVycy5hbGZyZXNjby51cmwnKSB8fCBcImh0dHBzOi8vMjAzLjE1NC4zMi4xMjY6MjU4NS9hcGkvbWZlYy9BbGZyZXNjb1wiO1xuICAgICAgICB0aGlzLnN5c3RlbV9pZCA9IF8uZ2V0KHRoaXMuY29uZmlnLCAnc3lzdGVtX2lkJyk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudGggPSB0aGlzLmNvbW1vbi5mbkxvY2FsUENhbGVuZGFyKCd0aCcpO1xuICAgICAgICB0aGlzLnJlY2lldmVGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBib29rX25vOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgICAgICByZWN2X2RhdGU6IFsnJ10sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbmRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBzZW5kX3RvOiBbJyddLFxuICAgICAgICAgICAgYm9va19ubzogWycnXSxcbiAgICAgICAgICAgIHNlbmRfZGF0ZTogWycnXSxcbiAgICAgICAgICAgIGlzX2ltcG9ydGFudDogWycnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBuYW1lOiBbJyddLFxuICAgICAgICAgICAgc3RlcF9pZDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIHN0ZXBfZGF0ZTogWycnXSxcbiAgICAgICAgICAgIHJlbWFyazogWycnXSxcbiAgICAgICAgICAgIGxhc3RTdGVwOiBbJyddLFxuICAgICAgICAgICAgbW9yZUZpZWxkOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcbiAgICAgICAgICAgIHNvY19yZWN2X25vOiBbJyddLFxuICAgICAgICAgICAgc29jX3JlY3ZfZGF0ZTogWycnXSxcbiAgICAgICAgICAgIGd0Y19yZWN2X25vOiBbJyddLFxuICAgICAgICAgICAgZ3RjX3JlY3ZfZGF0ZTogWycnXSxcbiAgICAgICAgICAgIGJvb2tfbm86IFsnJ10sXG4gICAgICAgICAgICBib29rX2RhdGU6IFsnJ10sXG4gICAgICAgICAgICAnZm9yJzogWycnXSxcbiAgICAgICAgICAgIGRlcHRfbmFtZTogWycnXSxcbiAgICAgICAgICAgIG1pbmlzdHJ5OiBbJyddXG5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgb3BlbihvcHRpb25zPzogT3B0aW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5zdGVwRGF0YSA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy50aXRsZSA9IG9wdGlvbnMudGl0bGUgfHwgJyc7XG4gICAgICAgICAgICB0aGlzLmxhc3RTdGVwID0gb3B0aW9ucy5kYXRhLmxhc3RTdGVwO1xuICAgICAgICAgICAgdGhpcy5zdGVwRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5kYXRhKSk7XG4gICAgICAgICAgICB0aGlzLnN0ZXBEYXRhLnN0ZXBfZGF0ZSA9IHRoaXMuZGF0ZS5nZXROb3coKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0ZXBEYXRhWydsYXN0U3RlcCddO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RMaXN0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL2RiL2N0X3N0ZXA/X3doZXJlPShjYXRlZ29yeV9pZCxlcSwnICsgb3B0aW9ucy5kYXRhLmNhdGVnb3J5X2lkICsgJykmX3NvcnQ9c2VxX25vJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGxvYWRBdHRhY2htZW50LmNsZWFyVmFsdWUoKTtcbiAgICAgICAgdGhpcy5tb2RhbC5zaG93KCk7XG4gICAgfVxuXG4gICAgZigpIHsgcmV0dXJuIHRoaXMucmVnaXN0ZXJGb3JtLmNvbnRyb2xzOyB9XG4gICAgZnMoKSB7IHJldHVybiB0aGlzLnNlbmRGb3JtLmNvbnRyb2xzOyB9XG4gICAgZnIoKSB7IHJldHVybiB0aGlzLnJlY2lldmVGb3JtLmNvbnRyb2xzOyB9XG5cbiAgICBjbG9zZU1vZGFsKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdExpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5zZW5kTGlzdCA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcCA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNNb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTZW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMubW9yZUZpZWxkID0gW107XG4gICAgICAgIHRoaXMuc3RlcERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5sYXN0U3RlcCA9ICcnO1xuICAgICAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBjbG9zZVNlbmRNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWRTZW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VuZERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5pc0VkaXRTZW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG1wRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLnNlbmRNb2RhbC5oaWRlKCk7XG4gICAgfVxuXG4gICAgY2xvc2VSZWNpZXZlTW9kYWwoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkUmVjaWV2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlY2lldmVEYXRhID0ge307XG4gICAgICAgIHRoaXMuaXNFZGl0UmVjaWV2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRtcERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5yZWNpZXZlTW9kYWwuaGlkZSgpO1xuICAgIH1cblxuICAgIG9uWWVzQ2xpY2sobW9kYWwpIHtcbiAgICAgICAgbW9kYWwuaGlkZSgpO1xuICAgIH1cblxuICAgIG9uTm9DbGljayhtb2RhbCkge1xuICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25IaWRkZW4oJGV2ZW50OiBNb2RhbERpcmVjdGl2ZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnTE9HIE1FU1NBR0U6IE1vZGFsQ29uZmlybSAtPiBvbkhpZGRlbiAtPiAkZXZlbnQnLCAkZXZlbnQpO1xuXG4gICAgfVxuICAgIFxuICAgIHZhbHVlU2VsZXRlTWluaXN0cnkodmFsdWUpIHtcbiAgICAgIHRoaXMuZmlsdGVyX3JlZl9leHRfZGVwYXJ0bWVudF9pZF9zaG93ID0gZmFsc2U7XG4gICAgICBjb25zb2xlLmxvZygndmFsdWUnLCB2YWx1ZSlcbiAgICAgIC8vIHRoaXMuc3RlcERhdGEubWluaXN0cnlfaWQgPSB2YWx1ZSAmJiB2YWx1ZS5pZCA/IHZhbHVlLmlkIDogbnVsbFxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlkKSB7XG4gICAgICAgIHRoaXMuc3RlcERhdGEuZGVwdF9uYW1lID0gbnVsbFxuICAgICAgICB0aGlzLmZpbHRlcl9yZWZfZXh0X2RlcGFydG1lbnRfaWQgPSBgJl93aGVyZT0ocmVmX2V4dF9kZXBhcnRtZW50X2lkLGVxLCR7dmFsdWUuaWR9KSRhbmQodHlwZSxpbiwyLDMsNCw1KWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyX3JlZl9leHRfZGVwYXJ0bWVudF9pZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyX3JlZl9leHRfZGVwYXJ0bWVudF9pZF9zaG93ID0gdHJ1ZTtcbiAgICAgIH0sIDUwKVxuXG4gICAgfVxuXG4gICAgdmFsdWVTZWxldGVEZXB0TmFtZSh2YWx1ZSkge1xuICAgICAgY29uc29sZS5sb2coJ3ZhbHVlJywgdmFsdWUpXG4gICAgICB0aGlzLnN0ZXBEYXRhLmNvZGVfZGVwdCA9IHZhbHVlICYmIHZhbHVlLmlkID8gdmFsdWUuaWQgOiBudWxsXG4gICAgfVxuXG5cbiAgICBhc3luYyBjaGVja0V4dHJhRmllbGQoKSB7XG4gICAgICAgIHRoaXMuc3RlcERhdGEuc3RlcF9pZCA9IHRoaXMuc2VsZWN0ZWRTdGVwLmlkO1xuICAgICAgICB0aGlzLnN0ZXBEYXRhLnN0ZXBfbmFtZSA9IHRoaXMuc2VsZWN0ZWRTdGVwLm5hbWU7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuaXNNb3JlKTtcbiAgICAgICAgdGhpcy5tb3JlRmllbGQgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwLmZsYWcgJiYgdGhpcy5zZWxlY3RlZFN0ZXAuZmxhZyAhPT0gJycpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFN0ZXAuZmxhZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYWcgPSB0aGlzLnNlbGVjdGVkU3RlcC5mbGFnLmNoYXJBdChpKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1aXJlRmxhZyA9IHRoaXMuc2VsZWN0ZWRTdGVwLnJlcXVpcmVfZmxhZyA/IHRoaXMuc2VsZWN0ZWRTdGVwLnJlcXVpcmVfZmxhZy5jaGFyQXQoaSkgOiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN0X3N0ZXBfZmxhZyA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy9kYi9jdF9zdGVwX2ZsYWc/X3doZXJlPShmbGFnLGVxLCcgKyBmbGFnICsgJyknKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdGaWVsZCA9IGN0X3N0ZXBfZmxhZ1swXTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFkZEZpZWxkKG5ld0ZpZWxkLCArcmVxdWlyZUZsYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMubW9yZUZpZWxkLnB1c2gobmV3RmllbGQpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzTW9yZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc1JlY2lldmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3JlID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFN0ZXAudHlwZV9pZCA9PT0gOCB8fCB0aGlzLnNlbGVjdGVkU3RlcC50eXBlX2lkID09PSAxMykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudExpc3QgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvZGIvY3RfZXh0X2RlcGFydG1lbnQ/X3NvcnQ9bmFtZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudExpc3QgPSB0aGlzLmRlcGFydG1lbnRMaXN0Lm1hcChhID0+IGEubmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNSZWNpZXZlID0gZmFsc2U7XG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwLnR5cGVfaWQgPT09IDkgfHwgdGhpcy5zZWxlY3RlZFN0ZXAudHlwZV9pZCA9PT0gMTQpIHtcbiAgICAgICAgICAgIC8vICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoJy9zcWwvZ2V0TGFzdFNlbmQnLCB0aGlzLnN0ZXBEYXRhKTtcbiAgICAgICAgICAgIC8vICAgICBpZiAoZGF0YS5yZXN1bHREYXRhICYmIGRhdGEucmVzdWx0RGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IGN0X3N0ZXBfZGF0YV9pZCA9IGRhdGEucmVzdWx0RGF0YVswXS5pZDtcbiAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgY3Rfc2VuZExpc3QgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvZGIvY3Rfc2VuZD9fd2hlcmU9KGN0X3N0ZXBfZGF0YV9pZCxlcSwnICsgY3Rfc3RlcF9kYXRhX2lkICsgJyknKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgZm9yIChjb25zdCBjdF9zZW5kIG9mIGN0X3NlbmRMaXN0KSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCByZWN2RGF0YTogYW55ID0ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGN0X3NlbmRfaWQ6IGN0X3NlbmQuaWQsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgc2VuZF9ib29rX25vOiBjdF9zZW5kLmJvb2tfbm8sXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgc2VuZF9kYXRlOiBjdF9zZW5kLnNlbmRfZGF0ZSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICByZWN2X2Zyb206IGN0X3NlbmQuc2VuZF90byxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBuYW1lOiBjdF9zZW5kLm5hbWVcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLnJlY2lldmVMaXN0LnB1c2gocmVjdkRhdGEpO1xuICAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gICAgIHRoaXMuaXNSZWNpZXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNSZWNpZXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRGaWVsZElkKGRhdGEpIHtcbiAgICAgICAgbGV0IGlkID0gJyc7XG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgaWQgKz0gJ3R4dCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgICAgICBpZCArPSAndHh0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlkICs9ICd0eHQnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZGF0YS5maWVsZF9uYW1lLmNoYXJBdCgwKS50b0xvY2FsZVVwcGVyQ2FzZSgpICsgZGF0YS5maWVsZF9uYW1lLnN1YnN0cmluZygxKTtcbiAgICAgICAgaWQgKz0gZmllbGQ7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBhZGRGaWVsZChkYXRhLCByZXF1aXJlZCkge1xuICAgICAgICBsZXQgY29udHJvbDphbnkgPSA8Rm9ybUFycmF5PnRoaXMucmVnaXN0ZXJGb3JtLmNvbnRyb2xzWydtb3JlRmllbGQnXTtcbiAgICAgICAgbGV0IG5ld2dyb3VwO1xuICAgICAgICB0aGlzLnN0ZXBEYXRhW2RhdGEuZmllbGRfbmFtZV0gPSBudWxsO1xuICAgICAgICBpZiAoZGF0YS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gWycnLFZhbGlkYXRvcnMucmVxdWlyZWQsIEN1c3RvbVZhbGlkYXRvcnMuZGF0ZV07XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbJyddO1xuICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0ZXBEYXRhW2RhdGEuZmllbGRfbmFtZV0gPSB0aGlzLmRhdGUuZ2V0Tm93KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbJyddO1xuICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnc3BlY2lhbCcpe1xuICAgICAgICAgICAgaWYoZGF0YS5maWVsZF9uYW1lID09PSAnYW1vdW50Jyl7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwWydhbW91bnRfdHlwZSddID0gWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbJyddO1xuICAgICAgICAgICAgICAgICAgICBncm91cFsnYW1vdW50X3R5cGUnXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYoZGF0YS5maWVsZF9uYW1lID09PSAnZm9sbG93Jyl7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwWydmb2xsb3dfcmVtYXJrJ10gPSBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwWydmb2xsb3dfcmVtYXJrJ10gPSBbJyddO1xuICAgICAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFsnJ107XG4gICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbC5wdXNoKG5ld2dyb3VwKTtcbiAgICB9XG5cbiAgICBnZXRWYWxpZGF0ZU1vcmVGaWVsZChpLCBmaWVsZCwgdmFsaWRhdGVUeXBlPykge1xuICAgICAgICBsZXQgZm9ybU1vcmVGaWVsZDogYW55ID0gdGhpcy5mKClbJ21vcmVGaWVsZCddO1xuICAgICAgICBpZiAodmFsaWRhdGVUeXBlKSB7XG4gICAgICAgICAgICBmb3JtTW9yZUZpZWxkID0gZm9ybU1vcmVGaWVsZC5jb250cm9sc1tpXTtcbiAgICAgICAgICAgIGZvcm1Nb3JlRmllbGQgPSBmb3JtTW9yZUZpZWxkLmNvbnRyb2xzW2ZpZWxkXTtcbiAgICAgICAgICAgIGlmIChmb3JtTW9yZUZpZWxkLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtTW9yZUZpZWxkLmVycm9yc1t2YWxpZGF0ZVR5cGVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybU1vcmVGaWVsZC5lcnJvcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybU1vcmVGaWVsZC5lcnJvcnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSb3dJbmRleChkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm8gPSBkYXRhLnJvdy5kYXRhSW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gbm87XG4gICAgfVxuXG4gICAgb25DZWxsUHJlcGFyZWQoZSkge1xuICAgICAgICBpZiAoZS5yb3dUeXBlID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiBlLmNvbXBvbmVudC5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuY29sdW1uLmRhdGFGaWVsZCA9PT0gZS5jb21wb25lbnQuY29sdW1uc1tpXSkge1xuICAgICAgICAgICAgICAgICAgICBlLmNlbGxFbGVtZW50LmFjY2Vzc0tleSA9IGUuY29tcG9uZW50LmNvbHVtbnNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkU2VuZCgpe1xuICAgICAgICB0aGlzLnNlbmREYXRhLnNlbmRfZGF0ZSA9IHRoaXMuZGF0ZS5nZXROb3coKTtcbiAgICAgICAgdGhpcy5zZW5kTW9kYWwuc2hvdygpO1xuICAgIH1cblxuICAgIGVkaXRTZW5kKGRhdGEpIHtcbiAgICAgICAgdGhpcy50bXBEYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5zZW5kRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICAvLyB0aGlzLnNlbmREYXRhLnNlbmRfZGF0ZSA9IG5ldyBEYXRlKHRoaXMuc2VuZERhdGEuc2VuZF9kYXRlKTtcbiAgICAgICAgdGhpcy5pc0VkaXRTZW5kID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZW5kTW9kYWwuc2hvdygpO1xuICAgIH1cblxuICAgIGVkaXRSZWNpZXZlKGRhdGEpIHtcbiAgICAgICAgdGhpcy50bXBEYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5yZWNpZXZlRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICB0aGlzLnJlY2lldmVEYXRhLnJlY3ZfZGF0ZSA9IHRoaXMucmVjaWV2ZURhdGEucmVjdl9kYXRlID8gbmV3IERhdGUodGhpcy5yZWNpZXZlRGF0YS5yZWN2X2RhdGUpIDogdGhpcy5yZWNpZXZlRGF0YS5yZWN2X2RhdGU7XG4gICAgICAgIHRoaXMuaXNFZGl0UmVjaWV2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVjaWV2ZU1vZGFsLnNob3coKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJEZXBhcnRtZW50cyhldmVudCkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkRGVwYXJ0bWVudHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRlcGFydG1lbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkZXBhcnRtZW50ID0gdGhpcy5kZXBhcnRtZW50TGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChkZXBhcnRtZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZERlcGFydG1lbnRzLnB1c2goZGVwYXJ0bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvblN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICAvLyDguJbguYnguLIgZm9ybSDguYTguKHguYjguITguKPguJrguKvguKPguLfguK3guJzguLTguJTguJXguLLguKHguYDguIfguLfguYjguK3guJnguYTguILguJfguLXguYjguJXguLHguYnguIfguYTguKfguYnguIjguLDguIjguJrguJfguLXguYjguJXguKPguIfguJnguLXguYlcbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMucmVnaXN0ZXJGb3JtLmludmFsaWQ6ICcsIHRoaXMucmVnaXN0ZXJGb3JtLmludmFsaWQpO1xuICAgICAgICBpZiAodGhpcy5yZWdpc3RlckZvcm0uaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwb3N0RGF0YSA9IFtdO1xuICAgICAgICBsZXQgZGF0YSA9IF8uY2xvbmVEZWVwKHRoaXMuc3RlcERhdGEpO1xuICAgICAgICBkYXRhLmFjdGlvbiA9IFwiYWRkXCI7XG4gICAgICAgIGxldCB1c2VyRGF0YTphbnkgPSB0aGlzLmIyYlNlcnZpY2UuZ2V0VmVyaWZ5VG9rZW4oKTtcbiAgICAgICAgZGF0YS51c2VybmFtZSA9IHVzZXJEYXRhLnVzZXJuYW1lO1xuICAgICAgICBpZihkYXRhLnJlbWluZF9kYXRlKSBkYXRhLnJlbWluZF9kYXRlID0gdGhpcy5kYXRlLmdldE5vdygpLmFkZChkYXRhLnJlbWluZF9kYXRlLCAnZCcpLnRvRGF0ZSgpO1xuICAgICAgICBkZWxldGUgZGF0YVtcImN0X21haW5faWRcIl07XG4gICAgICAgIGRlbGV0ZSBkYXRhW1widXBkYXRlX2RhdGVcIl07XG4gICAgICAgIGxldCBtYWluID0ge1xuICAgICAgICAgICAgXCJjdF9zdGVwX2RhdGFcIjpbZGF0YV1cbiAgICAgICAgfVxuICAgICAgICBwb3N0RGF0YS5wdXNoKG1haW4pO1xuICAgICAgICBpZih0aGlzLnNlbmRMaXN0ICYmIHRoaXMuc2VuZExpc3QubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICBsZXQgY3Rfc2VuZCA9IHtcbiAgICAgICAgICAgICAgICBcImN0X3NlbmRcIjpbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBjdF9yZWNpZXZlID0ge1xuICAgICAgICAgICAgICAgIFwiY3RfcmVjaWV2ZVwiOltdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yKGxldCBkYXRhIG9mIHRoaXMuc2VuZExpc3Qpe1xuICAgICAgICAgICAgICAgIGRhdGEubmFtZSA9IGRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICBkYXRhLmFjdGlvbiA9IFwiYWRkXCI7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGEuaWQ7XG4gICAgICAgICAgICAgICAgY3Rfc2VuZC5jdF9zZW5kLnB1c2goZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3N0RGF0YS5wdXNoKGN0X3NlbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMucmVjaWV2ZUxpc3QgJiYgdGhpcy5yZWNpZXZlTGlzdC5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIGxldCBjdF9yZWNpZXZlID0ge1xuICAgICAgICAgICAgICAgIFwiY3RfcmVjaWV2ZVwiOltdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yKGxldCBkYXRhIG9mIHRoaXMucmVjaWV2ZUxpc3Qpe1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhWydzZW5kX2Jvb2tfbm8nXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVsnc2VuZF9kYXRlJ107XG4gICAgICAgICAgICAgICAgZGF0YS5uYW1lID0gZGF0YS5uYW1lO1xuICAgICAgICAgICAgICAgIGRhdGEuYWN0aW9uID0gXCJhZGRcIjtcbiAgICAgICAgICAgICAgICBjdF9yZWNpZXZlLmN0X3JlY2lldmUucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvc3REYXRhLnB1c2goY3RfcmVjaWV2ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ3Bvc3REYXRhJyxwb3N0RGF0YSk7XG4gICAgICAgIC8vIGlmKHRoaXMubW9kZSA9PT0gJ0VESVQnKXtcbiAgICAgICAgbGV0IHBvc3RSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0KFwiL2N0L21haW5cIixwb3N0RGF0YSk7XG4gICAgICAgIGlmKHRoaXMuc3RlcERhdGEudXBkYXRlX2RhdGUpe1xuICAgICAgICAgIGxldCBzdGVwTGlzdCA9IGF3YWl0IHRoaXMuZ2V0U3RlcExpc3QoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInN0ZXBMaXN0XCIsc3RlcExpc3QpXG4gICAgICAgICAgaWYoc3RlcExpc3QubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3QucHV0KFwiL2RiL1wiK3RoaXMuc3RlcERhdGEucmVmX3RhYmxlK1wiL1wiK3RoaXMuc3RlcERhdGEucmVmX2lkLHtzdGF0dXM6c3RlcExpc3RbMF0uc3RlcF9uYW1lLHN0YXR1c19kYXRlOnN0ZXBMaXN0WzBdLnN0ZXBfZGF0ZX0pO1xuICAgICAgICAgICAgdGhpcy5jb21tb24uZm5DaGVja1Jlc3BvbnNlKHBvc3RSZXNwb25zZSwgdGhpcy5teU1vZGFsKVxuICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0LnB1dChcIi9kYi9cIit0aGlzLnN0ZXBEYXRhLnJlZl90YWJsZStcIi9cIit0aGlzLnN0ZXBEYXRhLnJlZl9pZCx7c3RhdHVzOnRoaXMuc3RlcERhdGEuc3RlcF9uYW1lfSk7XG4gICAgICAgICAgdGhpcy5jb21tb24uZm5DaGVja1Jlc3BvbnNlKHBvc3RSZXNwb25zZSwgdGhpcy5teU1vZGFsKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gfWVsc2V7XG4gICAgICAgIC8vICAgICB0aGlzLm9uQ3JlYXRlTW9kYWwuZW1pdChwb3N0RGF0YSk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRTdGVwTGlzdCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFN0ZXBMaXN0Jyk7XG4gICAgICAgIGxldCBmaWx0ZXIgPSB7XG4gICAgICAgICAgICBmaWx0ZXI6e1xuICAgICAgICAgICAgICAgIHJlZl90YWJsZTpcIj1cIit0aGlzLnN0ZXBEYXRhLnJlZl90YWJsZSxcbiAgICAgICAgICAgICAgICByZWZfaWQ6dGhpcy5zdGVwRGF0YS5yZWZfaWQsXG4gICAgICAgICAgICAgICAgc3lzdGVtX2lkOnRoaXMuc3RlcERhdGEuc3lzdGVtX2lkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JkZXJfYnk6W1wic3RlcF9kYXRlIGRlc2NcIl1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoJy9zZWFyY2gvY3Rfc3RlcF9kYXRhJywgZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIGRhdGEucmVzdWx0RGF0YSB8fCBbXTtcbiAgICB9XG5cblxuICAgIG9uQ2xpY2tCYWNrKCl7XG4gICAgICAgIHRoaXMub25VcGRhdGVNb2RhbC5lbWl0KCk7XG4gICAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICAgIH1cblxuICAgIGFzeW5jIG9uU3VibWl0U2VuZCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWRTZW5kID0gdHJ1ZTtcbiAgICAgICAgLy8g4LiW4LmJ4LiyIGZvcm0g4LmE4Lih4LmI4LiE4Lij4Lia4Lir4Lij4Li34Lit4Lic4Li04LiU4LiV4Liy4Lih4LmA4LiH4Li34LmI4Lit4LiZ4LmE4LiC4LiX4Li14LmI4LiV4Lix4LmJ4LiH4LmE4Lin4LmJ4LiI4Liw4LiI4Lia4LiX4Li14LmI4LiV4Lij4LiH4LiZ4Li14LmJXG4gICAgICAgIGlmICh0aGlzLnNlbmRGb3JtLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0VkaXRTZW5kKSB7XG4gICAgICAgICAgICBjb25zdCB0bXBMaXN0ID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRtcFNlbmQgb2YgdGhpcy5zZW5kTGlzdCkge1xuICAgICAgICAgICAgICAgIGlmICh0bXBTZW5kLmlkID09PSB0aGlzLnRtcERhdGEuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdG1wTGlzdC5wdXNoKHRoaXMuc2VuZERhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRtcExpc3QucHVzaCh0bXBTZW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbmRMaXN0ID0gdG1wTGlzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZERhdGEuaWQgPSB0aGlzLnRlbXBJZDtcbiAgICAgICAgICAgIHRoaXMudGVtcElkLS07XG4gICAgICAgICAgICB0aGlzLnNlbmRMaXN0LnB1c2godGhpcy5zZW5kRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZVNlbmRNb2RhbCgpO1xuICAgIH1cblxuICAgIGFzeW5jIG9uU3VibWl0UmVjaWV2ZSgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWRTZW5kID0gdHJ1ZTtcblxuICAgICAgICAvLyDguJbguYnguLIgZm9ybSDguYTguKHguYjguITguKPguJrguKvguKPguLfguK3guJzguLTguJTguJXguLLguKHguYDguIfguLfguYjguK3guJnguYTguILguJfguLXguYjguJXguLHguYnguIfguYTguKfguYnguIjguLDguIjguJrguJfguLXguYjguJXguKPguIfguJnguLXguYlcbiAgICAgICAgaWYgKHRoaXMucmVjaWV2ZUZvcm0uaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRWRpdFJlY2lldmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRtcExpc3QgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdG1wU2VuZCBvZiB0aGlzLnJlY2lldmVMaXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRtcFNlbmQucmVjdl9mcm9tID09PSB0aGlzLnRtcERhdGEucmVjdl9mcm9tKSB7XG4gICAgICAgICAgICAgICAgICAgIHRtcExpc3QucHVzaCh0aGlzLnJlY2lldmVEYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0bXBMaXN0LnB1c2godG1wU2VuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWNpZXZlTGlzdCA9IHRtcExpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlY2lldmVMaXN0LnB1c2godGhpcy5yZWNpZXZlRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZVJlY2lldmVNb2RhbCgpO1xuICAgIH1cbiAgICBpc0ltcG9ydGFudChkYXRhKXtcbiAgICAgICAgcmV0dXJuIGRhdGEuaXNfaW1wb3J0YW50P1wi4Liq4Liz4LiE4Lix4LiNXCI6XCJcIjtcbiAgICB9XG4gICAgb25VcGxvYWRlZChkYXRhKXtcbiAgICAgICAgdGhpcy5zdGVwRGF0YS51cmwgPSB0aGlzLmF0dGFjaG1lbnRVcmwrJy8nK2RhdGEudXVpZDtcbiAgICAgICAgdGhpcy5zdGVwRGF0YS51dWlkID0gZGF0YS51dWlkO1xuICAgIH1cbiAgICBjaGVja0Rpc2FibGUoZmllbGQpe1xuICAgICAgICBpZih0aGlzLnN0ZXBEYXRhW2ZpZWxkLmZpZWxkX25hbWVdICE9PSAn4LmE4Lih4LmI4LiX4Liy4LiH4LiB4Liy4LijJyl7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRJbWFnZUxpbmsoZGF0YSl7XG4gICAgICAgIGxldCB1cmwgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0QXR0YWNobWVudExpbmtUb2tlbihkYXRhLnVybCk7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxufVxuIl19