simpo-component-library 2.1.27 → 2.1.28

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,12 +1,19 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { Component, Input } from '@angular/core';
3
3
  import { FormsModule } from '@angular/forms';
4
+ import { MatOptionModule } from '@angular/material/core';
5
+ import { MatFormFieldModule } from '@angular/material/form-field';
6
+ import { MatSelectModule } from '@angular/material/select';
4
7
  import * as i0 from "@angular/core";
5
8
  import * as i1 from "@angular/common";
6
9
  import * as i2 from "@angular/forms";
10
+ import * as i3 from "@angular/material/core";
11
+ import * as i4 from "@angular/material/form-field";
12
+ import * as i5 from "@angular/material/select";
7
13
  export class PaymentDetailsComponent {
8
14
  constructor() {
9
15
  this.subscriptionsData = [];
16
+ this.termPaymentList = [];
10
17
  this.Object = Object;
11
18
  this.feeStructure = {
12
19
  "id": '1234',
@@ -111,13 +118,24 @@ export class PaymentDetailsComponent {
111
118
  }
112
119
  calculateTotalAmount() {
113
120
  this.feeStructure.totalAmount = 0;
114
- for (let config of this.feeStructure.feeConfigs) {
115
- this.feeStructure.totalAmount += config.amount;
121
+ if (this.admissionData.paymentPlanType === 'ANNUALLY') {
122
+ for (let config of this.feeStructure.feeConfigs) {
123
+ this.feeStructure.totalAmount += config.amount;
124
+ }
125
+ }
126
+ else {
127
+ for (let term of this.feeStructure?.termPaymentList || []) {
128
+ this.feeStructure.totalAmount += term.termAmount;
129
+ }
116
130
  }
117
131
  for (let subscription of this.feeStructure.subscriptionPlans) {
118
132
  this.feeStructure.totalAmount += subscription.pricing[subscription.frequency];
119
133
  }
120
134
  }
135
+ changeAnnualPaymentTerm(payentType) {
136
+ this.admissionData.paymentPlanType = payentType;
137
+ this.calculateTotalAmount();
138
+ }
121
139
  arrangeSubscriptionForAdmission(subscriptionList) {
122
140
  let response = {};
123
141
  for (let subscription of subscriptionList) {
@@ -138,14 +156,16 @@ export class PaymentDetailsComponent {
138
156
  return response;
139
157
  }
140
158
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PaymentDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
141
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: PaymentDetailsComponent, isStandalone: true, selector: "simpo-payment-details", inputs: { admissionData: "admissionData", subscriptionsData: "subscriptionsData" }, ngImport: i0, template: "<section class=\"main-section\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <div class=\"heading left-side\">\r\n Admission Fee\r\n </div>\r\n\r\n <div class=\"left-side mt-10\" *ngFor=\"let configList of Object.keys(feeConfig)\">\r\n <div class=\"heading mb-20\">{{configList}}</div>\r\n\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let config of feeConfig[configList]\">\r\n <p class=\"sub-heading mb-0\">{{config.feeHead}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{config.amount}}</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"left-side mt-10\" *ngFor=\"let type of Object.keys(subscriptions)\">\r\n <p class=\"heading\">{{type}}</p>\r\n\r\n <table class=\"subscription-table w-100\">\r\n <thead>\r\n <th>Subscription Title</th>\r\n <th>Monthly</th>\r\n <th>Quaterly</th>\r\n <th>Yearly</th>\r\n <th>On Demand</th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of subscriptions[type];let i = index\">\r\n <td>{{data.subName}}</td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['QUARTERLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'MONTHLY'\" (click)=\"toggleSelection(data, 'MONTHLY')\" [checked]=\"data.selectedOption === 'MONTHLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexRadioDefault2\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['MONTHLY']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['QUARTERLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['MONTHLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'QUARTERLY'\" (click)=\"toggleSelection(data, 'QUARTERLY')\" [checked]=\"data.selectedOption === 'QUARTERLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['QUARTERLY']}}\r\n </label>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['MONTHLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['ANNUALLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'ANNUALLY'\" (click)=\"toggleSelection(data, 'ANNUALLY')\" [checked]=\"data.selectedOption === 'ANNUALLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['ANNUALLY']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['ANNUALLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['ONDEMAND']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'ONDEMAND'\" (click)=\"toggleSelection(data, 'ONDEMAND')\" [checked]=\"data.selectedOption === 'ONDEMAND'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['ONDEMAND']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['ONDEMAND']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6 right-side\">\r\n <div class=\"heading mb-20\">\r\n Fee Calculation\r\n </div>\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let config of feeStructure.feeConfigs\">\r\n <p class=\"sub-heading mb-0\">{{config.feeHead}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{config.amount}}</p>\r\n </div>\r\n\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let subscripition of feeStructure.subscriptionPlans\">\r\n <p class=\"sub-heading mb-0\">{{subscripition.subName}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{subscripition.pricing[subscripition.frequency]}}</p>\r\n </div>\r\n\r\n <div class=\"total-fee\">\r\n <div class=\"heading mb-5\">\r\n Total Fee\r\n </div>\r\n <div class=\"amount\">\r\n \u20B9 {{feeStructure.totalAmount}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n", styles: [".heading{font-size:18px;font-weight:500}.left-side{background:#fafcff99;padding:2rem}.mt-10{margin-top:10px}.justify-space{justify-content:space-between}.sub-heading,.amount{font-size:16px;font-weight:500}.mb-0{margin-bottom:0}.mb-20{margin-bottom:20px}.mb-15{margin-bottom:15px}.subscription-table{width:50%}.subscription-table th{color:#434443;font-weight:400;font-size:16px;font-family:DM SANS}.subscription-table td{font-weight:500;color:#000;font-size:16px;margin-top:67px;padding-top:10px}.right-side{background-color:#fdfbfa;padding:2rem;position:relative}.right-side .sub-heading{font-size:18px}.right-side .amount{font-size:16px}.right-side .heading{font-weight:400}.mb-5{margin-bottom:5px}.total-fee{position:absolute;bottom:20px;width:90%}.total-fee .amount{background:#fff;height:87px;display:flex;align-items:center;justify-content:center;font-size:32px;border-radius:8px}.defaultImage{height:15px;width:15px}@media screen and (max-width: 475px){.row{margin-left:0;margin-right:0}.total-fee{position:relative;width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: PaymentDetailsComponent, isStandalone: true, selector: "simpo-payment-details", inputs: { admissionData: "admissionData", subscriptionsData: "subscriptionsData", termPaymentList: "termPaymentList" }, ngImport: i0, template: "<section class=\"main-section\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <div class=\"heading left-side\">\r\n Admission Fee\r\n </div>\r\n\r\n <div class=\"left-side mt-10\" *ngFor=\"let configList of Object.keys(feeConfig)\">\r\n <div class=\"heading mb-20\">{{configList}}</div>\r\n\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let config of feeConfig[configList]\">\r\n <p class=\"sub-heading mb-0\">{{config.feeHead}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{config.amount}}</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"left-side mt-10\" *ngFor=\"let type of Object.keys(subscriptions)\">\r\n <p class=\"heading\">{{type}}</p>\r\n\r\n <table class=\"subscription-table w-100\">\r\n <thead>\r\n <th>Subscription Title</th>\r\n <th>Monthly</th>\r\n <th>Quaterly</th>\r\n <th>Yearly</th>\r\n <th>On Demand</th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of subscriptions[type];let i = index\">\r\n <td>{{data.subName}}</td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['QUARTERLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'MONTHLY'\" (click)=\"toggleSelection(data, 'MONTHLY')\" [checked]=\"data.selectedOption === 'MONTHLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexRadioDefault2\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['MONTHLY']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['QUARTERLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['MONTHLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'QUARTERLY'\" (click)=\"toggleSelection(data, 'QUARTERLY')\" [checked]=\"data.selectedOption === 'QUARTERLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['QUARTERLY']}}\r\n </label>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['MONTHLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['ANNUALLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'ANNUALLY'\" (click)=\"toggleSelection(data, 'ANNUALLY')\" [checked]=\"data.selectedOption === 'ANNUALLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['ANNUALLY']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['ANNUALLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['ONDEMAND']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'ONDEMAND'\" (click)=\"toggleSelection(data, 'ONDEMAND')\" [checked]=\"data.selectedOption === 'ONDEMAND'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['ONDEMAND']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['ONDEMAND']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"left-side mt-10\">\r\n <p class=\"heading\">Payment Plan</p>\r\n\r\n <div class=\"d-flex g-2\">\r\n <div class=\"form-check\" (click)=\"changeAnnualPaymentTerm('ANNUALLY')\">\r\n <input class=\"form-check-input\" type=\"radio\" value=\"\" name=\"payment-plan\" id=\"flexCheckChecked\" [checked]=\"admissionData.paymentPlanType === 'ANNUALLY'\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n Annually\r\n </label>\r\n </div>\r\n <div class=\"form-check\" (click)=\"changeAnnualPaymentTerm('TERM')\">\r\n <input class=\"form-check-input\" type=\"radio\" value=\"\" name=\"payment-plan\" id=\"flexCheckChecked\" [checked]=\"admissionData.paymentPlanType === 'TERM'\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n Term\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"admission\" *ngIf=\"admissionData.paymentPlanType === 'TERM'\">\r\n <mat-form-field class=\"input-text\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"--Select--\" multiple=\"true\" [(ngModel)]=\"feeStructure.termPaymentList\" (ngModelChange)=\"calculateTotalAmount()\">\r\n <mat-option *ngFor=\"let term of termPaymentList\" [value]=\"term\">term {{term.termNumber}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"col-md-6 right-side\">\r\n <div class=\"heading mb-20\">\r\n Fee Calculation\r\n </div>\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let config of feeStructure.feeConfigs\">\r\n <p class=\"sub-heading mb-0\">{{config.feeHead}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{config.amount}}</p>\r\n </div>\r\n\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let subscripition of feeStructure.subscriptionPlans\">\r\n <p class=\"sub-heading mb-0\">{{subscripition.subName}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{subscripition.pricing[subscripition.frequency]}}</p>\r\n </div>\r\n\r\n <div class=\"total-fee\">\r\n <div class=\"heading mb-5\">\r\n Total Fee\r\n </div>\r\n <div class=\"amount\">\r\n \u20B9 {{feeStructure.totalAmount}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n", styles: [".heading{font-size:18px;font-weight:500}.left-side{background:#fafcff99;padding:2rem}.mt-10{margin-top:10px}.justify-space{justify-content:space-between}.sub-heading,.amount{font-size:16px;font-weight:500}.mb-20{margin-bottom:20px}.mb-15{margin-bottom:15px}.subscription-table{width:50%}.subscription-table th{color:#434443;font-weight:400;font-size:16px;font-family:DM SANS}.subscription-table td{font-weight:500;color:#000;font-size:16px;margin-top:67px;padding-top:10px}.right-side{background-color:#fdfbfa;padding:2rem;position:relative}.right-side .sub-heading{font-size:18px}.right-side .amount{font-size:16px}.right-side .heading{font-weight:400}.mb-5{margin-bottom:5px}.total-fee{position:absolute;bottom:20px;width:90%}.total-fee .amount{background:#fff;height:87px;display:flex;align-items:center;justify-content:center;font-size:32px;border-radius:8px}.defaultImage{height:15px;width:15px}.g-5{gap:5rem}.g-2{gap:2rem}.mb-2{margin-bottom:2rem!important}.mt-1{margin-top:1rem!important}.mb-0{margin-bottom:0}.input-text{border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;margin-top:5px;padding-left:10px;margin-top:1.5rem;width:100%}@media screen and (max-width: 475px){.row{margin-left:0;margin-right:0}.total-fee{position:relative;width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }] }); }
142
160
  }
143
161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PaymentDetailsComponent, decorators: [{
144
162
  type: Component,
145
- args: [{ selector: 'simpo-payment-details', standalone: true, imports: [CommonModule, FormsModule], template: "<section class=\"main-section\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <div class=\"heading left-side\">\r\n Admission Fee\r\n </div>\r\n\r\n <div class=\"left-side mt-10\" *ngFor=\"let configList of Object.keys(feeConfig)\">\r\n <div class=\"heading mb-20\">{{configList}}</div>\r\n\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let config of feeConfig[configList]\">\r\n <p class=\"sub-heading mb-0\">{{config.feeHead}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{config.amount}}</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"left-side mt-10\" *ngFor=\"let type of Object.keys(subscriptions)\">\r\n <p class=\"heading\">{{type}}</p>\r\n\r\n <table class=\"subscription-table w-100\">\r\n <thead>\r\n <th>Subscription Title</th>\r\n <th>Monthly</th>\r\n <th>Quaterly</th>\r\n <th>Yearly</th>\r\n <th>On Demand</th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of subscriptions[type];let i = index\">\r\n <td>{{data.subName}}</td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['QUARTERLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'MONTHLY'\" (click)=\"toggleSelection(data, 'MONTHLY')\" [checked]=\"data.selectedOption === 'MONTHLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexRadioDefault2\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['MONTHLY']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['QUARTERLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['MONTHLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'QUARTERLY'\" (click)=\"toggleSelection(data, 'QUARTERLY')\" [checked]=\"data.selectedOption === 'QUARTERLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['QUARTERLY']}}\r\n </label>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['MONTHLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['ANNUALLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'ANNUALLY'\" (click)=\"toggleSelection(data, 'ANNUALLY')\" [checked]=\"data.selectedOption === 'ANNUALLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['ANNUALLY']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['ANNUALLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['ONDEMAND']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'ONDEMAND'\" (click)=\"toggleSelection(data, 'ONDEMAND')\" [checked]=\"data.selectedOption === 'ONDEMAND'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['ONDEMAND']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['ONDEMAND']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6 right-side\">\r\n <div class=\"heading mb-20\">\r\n Fee Calculation\r\n </div>\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let config of feeStructure.feeConfigs\">\r\n <p class=\"sub-heading mb-0\">{{config.feeHead}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{config.amount}}</p>\r\n </div>\r\n\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let subscripition of feeStructure.subscriptionPlans\">\r\n <p class=\"sub-heading mb-0\">{{subscripition.subName}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{subscripition.pricing[subscripition.frequency]}}</p>\r\n </div>\r\n\r\n <div class=\"total-fee\">\r\n <div class=\"heading mb-5\">\r\n Total Fee\r\n </div>\r\n <div class=\"amount\">\r\n \u20B9 {{feeStructure.totalAmount}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n", styles: [".heading{font-size:18px;font-weight:500}.left-side{background:#fafcff99;padding:2rem}.mt-10{margin-top:10px}.justify-space{justify-content:space-between}.sub-heading,.amount{font-size:16px;font-weight:500}.mb-0{margin-bottom:0}.mb-20{margin-bottom:20px}.mb-15{margin-bottom:15px}.subscription-table{width:50%}.subscription-table th{color:#434443;font-weight:400;font-size:16px;font-family:DM SANS}.subscription-table td{font-weight:500;color:#000;font-size:16px;margin-top:67px;padding-top:10px}.right-side{background-color:#fdfbfa;padding:2rem;position:relative}.right-side .sub-heading{font-size:18px}.right-side .amount{font-size:16px}.right-side .heading{font-weight:400}.mb-5{margin-bottom:5px}.total-fee{position:absolute;bottom:20px;width:90%}.total-fee .amount{background:#fff;height:87px;display:flex;align-items:center;justify-content:center;font-size:32px;border-radius:8px}.defaultImage{height:15px;width:15px}@media screen and (max-width: 475px){.row{margin-left:0;margin-right:0}.total-fee{position:relative;width:100%}}\n"] }]
163
+ args: [{ selector: 'simpo-payment-details', standalone: true, imports: [CommonModule, FormsModule, MatOptionModule, MatFormFieldModule, MatSelectModule], template: "<section class=\"main-section\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <div class=\"heading left-side\">\r\n Admission Fee\r\n </div>\r\n\r\n <div class=\"left-side mt-10\" *ngFor=\"let configList of Object.keys(feeConfig)\">\r\n <div class=\"heading mb-20\">{{configList}}</div>\r\n\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let config of feeConfig[configList]\">\r\n <p class=\"sub-heading mb-0\">{{config.feeHead}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{config.amount}}</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"left-side mt-10\" *ngFor=\"let type of Object.keys(subscriptions)\">\r\n <p class=\"heading\">{{type}}</p>\r\n\r\n <table class=\"subscription-table w-100\">\r\n <thead>\r\n <th>Subscription Title</th>\r\n <th>Monthly</th>\r\n <th>Quaterly</th>\r\n <th>Yearly</th>\r\n <th>On Demand</th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of subscriptions[type];let i = index\">\r\n <td>{{data.subName}}</td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['QUARTERLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'MONTHLY'\" (click)=\"toggleSelection(data, 'MONTHLY')\" [checked]=\"data.selectedOption === 'MONTHLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexRadioDefault2\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['MONTHLY']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['QUARTERLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['MONTHLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'QUARTERLY'\" (click)=\"toggleSelection(data, 'QUARTERLY')\" [checked]=\"data.selectedOption === 'QUARTERLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['QUARTERLY']}}\r\n </label>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['MONTHLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['ANNUALLY']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'ANNUALLY'\" (click)=\"toggleSelection(data, 'ANNUALLY')\" [checked]=\"data.selectedOption === 'ANNUALLY'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['ANNUALLY']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['ANNUALLY']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n <td>\r\n <div class=\"form-check\" *ngIf=\"data.pricing['ONDEMAND']\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"subscription{{i}}\" [value]=\"'ONDEMAND'\" (click)=\"toggleSelection(data, 'ONDEMAND')\" [checked]=\"data.selectedOption === 'ONDEMAND'\" [(ngModel)]=\"data.selectedOption\" id=\"flexCheckChecked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n \u20B9 {{data.pricing['ONDEMAND']}}\r\n </label>\r\n </div>\r\n <img class=\"defaultImage\" *ngIf=\"!data.pricing['ONDEMAND']\" [src]=\"defaultImage\" alt=\"\">\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"left-side mt-10\">\r\n <p class=\"heading\">Payment Plan</p>\r\n\r\n <div class=\"d-flex g-2\">\r\n <div class=\"form-check\" (click)=\"changeAnnualPaymentTerm('ANNUALLY')\">\r\n <input class=\"form-check-input\" type=\"radio\" value=\"\" name=\"payment-plan\" id=\"flexCheckChecked\" [checked]=\"admissionData.paymentPlanType === 'ANNUALLY'\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n Annually\r\n </label>\r\n </div>\r\n <div class=\"form-check\" (click)=\"changeAnnualPaymentTerm('TERM')\">\r\n <input class=\"form-check-input\" type=\"radio\" value=\"\" name=\"payment-plan\" id=\"flexCheckChecked\" [checked]=\"admissionData.paymentPlanType === 'TERM'\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n Term\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"admission\" *ngIf=\"admissionData.paymentPlanType === 'TERM'\">\r\n <mat-form-field class=\"input-text\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"--Select--\" multiple=\"true\" [(ngModel)]=\"feeStructure.termPaymentList\" (ngModelChange)=\"calculateTotalAmount()\">\r\n <mat-option *ngFor=\"let term of termPaymentList\" [value]=\"term\">term {{term.termNumber}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"col-md-6 right-side\">\r\n <div class=\"heading mb-20\">\r\n Fee Calculation\r\n </div>\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let config of feeStructure.feeConfigs\">\r\n <p class=\"sub-heading mb-0\">{{config.feeHead}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{config.amount}}</p>\r\n </div>\r\n\r\n <div class=\"d-flex justify-space mt-10 mb-15\" *ngFor=\"let subscripition of feeStructure.subscriptionPlans\">\r\n <p class=\"sub-heading mb-0\">{{subscripition.subName}}</p>\r\n <p class=\"amount mb-0\">\u20B9 {{subscripition.pricing[subscripition.frequency]}}</p>\r\n </div>\r\n\r\n <div class=\"total-fee\">\r\n <div class=\"heading mb-5\">\r\n Total Fee\r\n </div>\r\n <div class=\"amount\">\r\n \u20B9 {{feeStructure.totalAmount}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n", styles: [".heading{font-size:18px;font-weight:500}.left-side{background:#fafcff99;padding:2rem}.mt-10{margin-top:10px}.justify-space{justify-content:space-between}.sub-heading,.amount{font-size:16px;font-weight:500}.mb-20{margin-bottom:20px}.mb-15{margin-bottom:15px}.subscription-table{width:50%}.subscription-table th{color:#434443;font-weight:400;font-size:16px;font-family:DM SANS}.subscription-table td{font-weight:500;color:#000;font-size:16px;margin-top:67px;padding-top:10px}.right-side{background-color:#fdfbfa;padding:2rem;position:relative}.right-side .sub-heading{font-size:18px}.right-side .amount{font-size:16px}.right-side .heading{font-weight:400}.mb-5{margin-bottom:5px}.total-fee{position:absolute;bottom:20px;width:90%}.total-fee .amount{background:#fff;height:87px;display:flex;align-items:center;justify-content:center;font-size:32px;border-radius:8px}.defaultImage{height:15px;width:15px}.g-5{gap:5rem}.g-2{gap:2rem}.mb-2{margin-bottom:2rem!important}.mt-1{margin-top:1rem!important}.mb-0{margin-bottom:0}.input-text{border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;margin-top:5px;padding-left:10px;margin-top:1.5rem;width:100%}@media screen and (max-width: 475px){.row{margin-left:0;margin-right:0}.total-fee{position:relative;width:100%}}\n"] }]
146
164
  }], ctorParameters: () => [], propDecorators: { admissionData: [{
147
165
  type: Input
148
166
  }], subscriptionsData: [{
149
167
  type: Input
168
+ }], termPaymentList: [{
169
+ type: Input
150
170
  }] } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvY29tcG9uZW50cy9wYXltZW50LWRldGFpbHMvcGF5bWVudC1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvY29tcG9uZW50cy9wYXltZW50LWRldGFpbHMvcGF5bWVudC1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFTN0MsTUFBTSxPQUFPLHVCQUF1QjtJQUtsQztRQUhTLHNCQUFpQixHQUFVLEVBQUUsQ0FBQTtRQUN0QyxXQUFNLEdBQUcsTUFBTSxDQUFBO1FBSWYsaUJBQVksR0FBUTtZQUNsQixJQUFJLEVBQUUsTUFBTTtZQUNaLGlCQUFpQixFQUFFO2dCQUNqQixJQUFJLEVBQUUsTUFBTTthQUNiO1lBQ0QsUUFBUSxFQUFFO2dCQUNSO29CQUNFLEtBQUssRUFBRSxNQUFNO29CQUNiLE1BQU0sRUFBRSxVQUFVO2lCQUNuQjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsTUFBTTtvQkFDYixNQUFNLEVBQUUsVUFBVTtpQkFDbkI7YUFDRjtZQUNELE9BQU8sRUFBRSxPQUFPO1lBQ2hCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixZQUFZLEVBQUU7Z0JBQ1o7b0JBQ0UsV0FBVyxFQUFFLE9BQU87b0JBQ3BCLFdBQVcsRUFBRSxNQUFNO29CQUNuQixTQUFTLEVBQUUsWUFBWTtvQkFDdkIs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bkMsSUFBSSxRQUFRLEdBQVEsRUFBRSxDQUFDO1FBRXZCLEtBQUksSUFBSSxNQUFNLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEMsSUFBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUMxQixRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUVoQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs4R0ExSlUsdUJBQXVCO2tHQUF2Qix1QkFBdUIscUtDWHBDLGsrSkFnR0EscWtDRHpGWSxZQUFZLCtQQUFFLFdBQVc7OzJGQUl4Qix1QkFBdUI7a0JBUG5DLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7d0RBSzNCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tcGF5bWVudC1kZXRhaWxzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGF5bWVudC1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcGF5bWVudC1kZXRhaWxzLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXltZW50RGV0YWlsc0NvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgYWRtaXNzaW9uRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIHN1YnNjcmlwdGlvbnNEYXRhOiBhbnlbXSA9IFtdXHJcbiAgT2JqZWN0ID0gT2JqZWN0XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgZmVlU3RydWN0dXJlOiBhbnkgPSB7XHJcbiAgICBcImlkXCI6ICcxMjM0JyxcclxuICAgIFwiYnVzaW5lc3NEZXRhaWxzXCI6IHtcclxuICAgICAgXCJpZFwiOiAnMTIzNCdcclxuICAgIH0sXHJcbiAgICBcImdyYWRlc1wiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIl9pZFwiOiBcIjEyMzRcIixcclxuICAgICAgICBcIm5hbWVcIjogXCJHcmFkZSBJSVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIl9pZFwiOiBcIjEyMzRcIixcclxuICAgICAgICBcIm5hbWVcIjogXCJHcmFkZSBJVlwiXHJcbiAgICAgIH1cclxuICAgIF0sXHJcbiAgICBcImJvYXJkXCI6IFwiU1RBVEVcIixcclxuICAgIFwiYWNhZGVtaWNZZWFyU3RhcnRcIjogMjAyNCxcclxuICAgIFwiYWNhZGVtaWNZZWFyRW5kXCI6IDIwMjUsXHJcbiAgICBcImZlZUNvbmZpZ3NcIjogW1xyXG4gICAgICB7XHJcbiAgICAgICAgXCJmZWVUeXBlSWRcIjogJzEyMzI0JyxcclxuICAgICAgICBcImZlZUhlYWRJZFwiOiAnMTIzNCcsXHJcbiAgICAgICAgXCJmZWVUeXBlXCI6IFwiVHV0aW9uIGZlZVwiLFxyXG4gICAgICAgIFwiZmVlSGVhZFwiOiBcImV4YW0gZmVlXCIsXHJcbiAgICAgICAgXCJhbW91bnRcIjogMzAwLFxyXG4gICAgICAgIFwiZGlzY291bnRBbW91bnRcIjogMCxcclxuICAgICAgICBcImlzRml4ZWRcIjogZmFsc2VcclxuICAgICAgfVxyXG4gICAgXSxcclxuICAgIFwic3Vic2NyaXB0aW9uUGxhbnNcIjogW10sXHJcbiAgICBcInRvdGFsQW1vdW50XCI6IDMwMCxcclxuICAgIFwiY3JlYXRlZFRpbWVzdGFtcFwiOiB7XHJcbiAgICAgIFwiJGRhdGVcIjogXCIyMDI0LTEyLTE1VDA3OjEwOjU0Ljg4OVpcIlxyXG4gICAgfSxcclxuICAgIFwidXBkYXRlZFRpbWVzdGFtcFwiOiB7XHJcbiAgICAgIFwiJGRhdGVcIjogXCIyMDI0LTEyLTE1VDA3OjEwOjU0Ljg4OVpcIlxyXG4gICAgfSxcclxuICAgIFwiYWN0aXZlXCI6IHRydWUsXHJcbiAgfVxyXG5cclxuXHJcbiAgZmVlQ29uZmlnOiBhbnk7XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmZlZVN0cnVjdHVyZSA9IHRoaXMuYWRtaXNzaW9uRGF0YS5zdHVkZW50RmVlU3RydWN0dXJlO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gdGhpcy5hcnJhbmdlU3Vic2NyaXB0aW9uRm9yQWRtaXNzaW9uKHRoaXMuc3Vic2NyaXB0aW9uc0RhdGEpO1xyXG4gICAgdGhpcy5mZWVDb25maWcgPSB0aGlzLmFycmFuZ2VGZWVDb25maWcodGhpcy5mZWVTdHJ1Y3R1cmUuZmVlQ29uZmlncyk7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsQW1vdW50KCk7XHJcbiAgfVxyXG5cclxuICBkZWZhdWx0SW1hZ2U6IHN0cmluZyA9ICdodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzkxNzA2N2MxNzM0MzM3MjgwMzAzY2FuY2VsLnBuZyc7XHJcbiAgc3Vic2NyaXB0aW9uczogYW55ID0ge1xyXG4gICAgXCJGb29kIEZlZVwiIDogW1xyXG4gICAgICB7XHJcbiAgICAgICAgc3Vic2NyaXB0aW9uVGl0bGUgOiAnQnJlYWtmYXN0JyxcclxuICAgICAgICBwcmljaW5nICA6IHtcclxuICAgICAgICAgIFwiV0VFS0xZXCIgOiAyMDAwLFxyXG4gICAgICAgICAgXCJNT05USExZXCIgIDogMzAwMCxcclxuICAgICAgICAgIFwiWUVBUkxZXCIgOiA0MDAwXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Vic2NyaXB0aW9uVGl0bGUgOiAnTHVuY2gnLFxyXG4gICAgICAgIHByaWNpbmcgIDoge1xyXG4gICAgICAgICAgXCJXRUVLTFlcIiA6IDIwMDAsXHJcbiAgICAgICAgICBcIk1PTlRITFlcIiAgOiAzMDAwLFxyXG4gICAgICAgICAgXCJZRUFSTFlcIiA6IDQwMDBcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBzdWJzY3JpcHRpb25UaXRsZSA6ICdTbmFja3MnLFxyXG4gICAgICAgIHByaWNpbmcgIDoge1xyXG4gICAgICAgICAgXCJXRUVLTFlcIiA6IDIwMDAsXHJcbiAgICAgICAgICBcIk1PTlRITFlcIiAgOiAzMDAwLFxyXG4gICAgICAgICAgXCJZRUFSTFlcIiA6IDQwMDBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlbGVjdGlvbihzdWJzY3JpcHRpb246IGFueSwgZnJlcXVlbmN5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmKCF0aGlzLmZlZVN0cnVjdHVyZS5zdWJzY3JpcHRpb25QbGFucylcclxuICAgICAgdGhpcy5mZWVTdHJ1Y3R1cmUuc3Vic2NyaXB0aW9uUGxhbnMgPSBbXTtcclxuXHJcbiAgICBsZXQgcmVtb3ZlSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gICAgZm9yKGxldCBpID0gMDtpPHRoaXMuZmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zLmxlbmd0aDtpKyspIHtcclxuICAgICAgbGV0IHN1YiA9IHRoaXMuZmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zW2ldO1xyXG5cclxuICAgICAgaWYoc3ViLnN1YklkID09PSBzdWJzY3JpcHRpb24uc3ViSWQpe1xyXG4gICAgICAgIHJlbW92ZUluZGV4ID0gaTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKHJlbW92ZUluZGV4ID09IC0xKSB7XHJcbiAgICAgIHRoaXMuZmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zLnB1c2goey4uLnN1YnNjcmlwdGlvbiwgZnJlcXVlbmN5OiBmcmVxdWVuY3l9KVxyXG4gICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsQW1vdW50KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZlZVN0cnVjdHVyZS5zdWJzY3JpcHRpb25QbGFucy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xyXG5cclxuICAgIGlmIChzdWJzY3JpcHRpb24uc2VsZWN0ZWRPcHRpb24gPT09IGZyZXF1ZW5jeSkge1xyXG4gICAgICBzdWJzY3JpcHRpb24uc2VsZWN0ZWRPcHRpb24gPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3Vic2NyaXB0aW9uLnNlbGVjdGVkT3B0aW9uID0gZnJlcXVlbmN5O1xyXG4gICAgICB0aGlzLmZlZVN0cnVjdHVyZS5zdWJzY3JpcHRpb25QbGFucy5wdXNoKHsuLi5zdWJzY3JpcHRpb24sIGZyZXF1ZW5jeTogZnJlcXVlbmN5fSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsQW1vdW50KCk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUb3RhbEFtb3VudCgpIHtcclxuICAgIHRoaXMuZmVlU3RydWN0dXJlLnRvdGFsQW1vdW50ID0gMDtcclxuXHJcbiAgICBmb3IobGV0IGNvbmZpZyBvZiB0aGlzLmZlZVN0cnVjdHVyZS5mZWVDb25maWdzKSB7XHJcbiAgICAgIHRoaXMuZmVlU3RydWN0dXJlLnRvdGFsQW1vdW50ICs9IGNvbmZpZy5hbW91bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yKGxldCBzdWJzY3JpcHRpb24gb2YgdGhpcy5mZWVTdHJ1Y3R1cmUuc3Vic2NyaXB0aW9uUGxhbnMpIHtcclxuICAgICAgdGhpcy5mZWVTdHJ1Y3R1cmUudG90YWxBbW91bnQgKz0gc3Vic2NyaXB0aW9uLnByaWNpbmdbc3Vic2NyaXB0aW9uLmZyZXF1ZW5jeV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcnJhbmdlU3Vic2NyaXB0aW9uRm9yQWRtaXNzaW9uKHN1YnNjcmlwdGlvbkxpc3Q6IGFueVtdKSB7XHJcbiAgICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xyXG5cclxuICAgIGZvcihsZXQgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbkxpc3QpIHtcclxuICAgICAgaWYoIXJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXSkge1xyXG4gICAgICAgIHJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXS5wdXNoKHN1YnNjcmlwdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgYXJyYW5nZUZlZUNvbmZpZyhmZWVDb25maWdMaXN0OiBhbnlbXSkge1xyXG4gICAgbGV0IHJlc3BvbnNlOiBhbnkgPSB7fTtcclxuXHJcbiAgICBmb3IobGV0IGNvbmZpZyBvZiBmZWVDb25maWdMaXN0KSB7XHJcbiAgICAgIGlmKCFyZXNwb25zZVtjb25maWcuZmVlVHlwZV0pXHJcbiAgICAgICAgcmVzcG9uc2VbY29uZmlnLmZlZVR5cGVdID0gW107XHJcblxyXG4gICAgICByZXNwb25zZVtjb25maWcuZmVlVHlwZV0ucHVzaChjb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJtYWluLXNlY3Rpb25cIj5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmcgbGVmdC1zaWRlXCI+XHJcbiAgICAgICAgQWRtaXNzaW9uIEZlZVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGUgbXQtMTBcIiAqbmdGb3I9XCJsZXQgY29uZmlnTGlzdCBvZiBPYmplY3Qua2V5cyhmZWVDb25maWcpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmcgbWItMjBcIj57e2NvbmZpZ0xpc3R9fTwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktc3BhY2UgbXQtMTAgbWItMTVcIiAqbmdGb3I9XCJsZXQgY29uZmlnIG9mIGZlZUNvbmZpZ1tjb25maWdMaXN0XVwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJzdWItaGVhZGluZyBtYi0wXCI+e3tjb25maWcuZmVlSGVhZH19PC9wPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJhbW91bnQgbWItMFwiPuKCuSB7e2NvbmZpZy5hbW91bnR9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdC1zaWRlIG10LTEwXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgT2JqZWN0LmtleXMoc3Vic2NyaXB0aW9ucylcIj5cclxuICAgICAgICA8cCBjbGFzcz1cImhlYWRpbmdcIj57e3R5cGV9fTwvcD5cclxuXHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwic3Vic2NyaXB0aW9uLXRhYmxlIHctMTAwXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0aD5TdWJzY3JpcHRpb24gVGl0bGU8L3RoPlxyXG4gICAgICAgICAgICA8dGg+TW9udGhseTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5RdWF0ZXJseTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5ZZWFybHk8L3RoPlxyXG4gICAgICAgICAgICA8dGg+T24gRGVtYW5kPC90aD5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBzdWJzY3JpcHRpb25zW3R5cGVdO2xldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8dGQ+e3tkYXRhLnN1Yk5hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIiAqbmdJZj1cImRhdGEucHJpY2luZ1snUVVBUlRFUkxZJ11cIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdWJzY3JpcHRpb257e2l9fVwiICBbdmFsdWVdPVwiJ01PTlRITFknXCIgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGlvbihkYXRhLCAnTU9OVEhMWScpXCIgIFtjaGVja2VkXT1cImRhdGEuc2VsZWN0ZWRPcHRpb24gPT09ICdNT05USExZJ1wiICBbKG5nTW9kZWwpXT1cImRhdGEuc2VsZWN0ZWRPcHRpb25cIiBpZD1cImZsZXhSYWRpb0RlZmF1bHQyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmbGV4Q2hlY2tDaGVja2VkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAg4oK5IHt7ZGF0YS5wcmljaW5nWydNT05USExZJ119fVxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZGVmYXVsdEltYWdlXCIgKm5nSWY9XCIhZGF0YS5wcmljaW5nWydRVUFSVEVSTFknXVwiIFtzcmNdPVwiZGVmYXVsdEltYWdlXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIiAqbmdJZj1cImRhdGEucHJpY2luZ1snTU9OVEhMWSddXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3Vic2NyaXB0aW9ue3tpfX1cIiBbdmFsdWVdPVwiJ1FVQVJURVJMWSdcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0aW9uKGRhdGEsICdRVUFSVEVSTFknKVwiICBbY2hlY2tlZF09XCJkYXRhLnNlbGVjdGVkT3B0aW9uID09PSAnUVVBUlRFUkxZJ1wiIFsobmdNb2RlbCldPVwiZGF0YS5zZWxlY3RlZE9wdGlvblwiIGlkPVwiZmxleENoZWNrQ2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZmxleENoZWNrQ2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIOKCuSB7e2RhdGEucHJpY2luZ1snUVVBUlRFUkxZJ119fVxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZGVmYXVsdEltYWdlXCIgKm5nSWY9XCIhZGF0YS5wcmljaW5nWydNT05USExZJ11cIiBbc3JjXT1cImRlZmF1bHRJbWFnZVwiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiICpuZ0lmPVwiZGF0YS5wcmljaW5nWydBTk5VQUxMWSddXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3Vic2NyaXB0aW9ue3tpfX1cIiBbdmFsdWVdPVwiJ0FOTlVBTExZJ1wiIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb24oZGF0YSwgJ0FOTlVBTExZJylcIiAgW2NoZWNrZWRdPVwiZGF0YS5zZWxlY3RlZE9wdGlvbiA9PT0gJ0FOTlVBTExZJ1wiIFsobmdNb2RlbCldPVwiZGF0YS5zZWxlY3RlZE9wdGlvblwiIGlkPVwiZmxleENoZWNrQ2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZmxleENoZWNrQ2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIOKCuSB7e2RhdGEucHJpY2luZ1snQU5OVUFMTFknXX19XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJkZWZhdWx0SW1hZ2VcIiAqbmdJZj1cIiFkYXRhLnByaWNpbmdbJ0FOTlVBTExZJ11cIiBbc3JjXT1cImRlZmF1bHRJbWFnZVwiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIiAqbmdJZj1cImRhdGEucHJpY2luZ1snT05ERU1BTkQnXVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInN1YnNjcmlwdGlvbnt7aX19XCIgW3ZhbHVlXT1cIidPTkRFTUFORCdcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0aW9uKGRhdGEsICdPTkRFTUFORCcpXCIgIFtjaGVja2VkXT1cImRhdGEuc2VsZWN0ZWRPcHRpb24gPT09ICdPTkRFTUFORCdcIiBbKG5nTW9kZWwpXT1cImRhdGEuc2VsZWN0ZWRPcHRpb25cIiBpZD1cImZsZXhDaGVja0NoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImZsZXhDaGVja0NoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICDigrkge3tkYXRhLnByaWNpbmdbJ09OREVNQU5EJ119fVxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZGVmYXVsdEltYWdlXCIgKm5nSWY9XCIhZGF0YS5wcmljaW5nWydPTkRFTUFORCddXCIgW3NyY109XCJkZWZhdWx0SW1hZ2VcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHJpZ2h0LXNpZGVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmcgbWItMjBcIj5cclxuICAgICAgICBGZWUgQ2FsY3VsYXRpb25cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1zcGFjZSBtdC0xMCBtYi0xNVwiICpuZ0Zvcj1cImxldCBjb25maWcgb2YgZmVlU3RydWN0dXJlLmZlZUNvbmZpZ3NcIj5cclxuICAgICAgICA8cCBjbGFzcz1cInN1Yi1oZWFkaW5nIG1iLTBcIj57e2NvbmZpZy5mZWVIZWFkfX08L3A+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJhbW91bnQgbWItMFwiPuKCuSB7e2NvbmZpZy5hbW91bnR9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktc3BhY2UgbXQtMTAgbWItMTVcIiAqbmdGb3I9XCJsZXQgc3Vic2NyaXBpdGlvbiBvZiBmZWVTdHJ1Y3R1cmUuc3Vic2NyaXB0aW9uUGxhbnNcIj5cclxuICAgICAgICA8cCBjbGFzcz1cInN1Yi1oZWFkaW5nIG1iLTBcIj57e3N1YnNjcmlwaXRpb24uc3ViTmFtZX19PC9wPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiYW1vdW50IG1iLTBcIj7igrkge3tzdWJzY3JpcGl0aW9uLnByaWNpbmdbc3Vic2NyaXBpdGlvbi5mcmVxdWVuY3ldfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRvdGFsLWZlZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nIG1iLTVcIj5cclxuICAgICAgICAgIFRvdGFsIEZlZVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbW91bnRcIj5cclxuICAgICAgICAgIOKCuSB7e2ZlZVN0cnVjdHVyZS50b3RhbEFtb3VudH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvY29tcG9uZW50cy9wYXltZW50LWRldGFpbHMvcGF5bWVudC1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvY29tcG9uZW50cy9wYXltZW50LWRldGFpbHMvcGF5bWVudC1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQVMzRCxNQUFNLE9BQU8sdUJBQXVCO0lBT2xDO1FBTFMsc0JBQWlCLEdBQVUsRUFBRSxDQUFBO1FBQzdCLG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBRXJDLFdBQU0sR0FBRyxNQUFNLENBQUE7UUFJZixpQkFBWSxHQUFRO1lBQ2xCLElBQUksRUFBRSxNQUFNO1lBQ1osaUJBQWlCLEVBQUU7Z0JBQ2pCLElBQUksRUFBRSxNQUFNO2FBQ2I7WUFDRCxRQUFRLEVBQUU7Z0JBQ1I7b0JBQ0UsS0FBSyxFQUFFLE1BQU07b0JBQ2IsTUFBTSxFQUFFLFVBQVU7aUJBQ25CO2dCQUNEO29CQUNFLEtBQUssRUFBRSxNQUFNO29CQUNiLE1BQU0sRUFBRSxVQUFVO2lCQUNuQjthQUNG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QVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQzt3REFLakYsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tcGF5bWVudC1kZXRhaWxzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBNYXRPcHRpb25Nb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGF5bWVudC1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcGF5bWVudC1kZXRhaWxzLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXltZW50RGV0YWlsc0NvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgYWRtaXNzaW9uRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIHN1YnNjcmlwdGlvbnNEYXRhOiBhbnlbXSA9IFtdXHJcbiAgQElucHV0KCkgdGVybVBheW1lbnRMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICBPYmplY3QgPSBPYmplY3RcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBmZWVTdHJ1Y3R1cmU6IGFueSA9IHtcclxuICAgIFwiaWRcIjogJzEyMzQnLFxyXG4gICAgXCJidXNpbmVzc0RldGFpbHNcIjoge1xyXG4gICAgICBcImlkXCI6ICcxMjM0J1xyXG4gICAgfSxcclxuICAgIFwiZ3JhZGVzXCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwiX2lkXCI6IFwiMTIzNFwiLFxyXG4gICAgICAgIFwibmFtZVwiOiBcIkdyYWRlIElJXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiX2lkXCI6IFwiMTIzNFwiLFxyXG4gICAgICAgIFwibmFtZVwiOiBcIkdyYWRlIElWXCJcclxuICAgICAgfVxyXG4gICAgXSxcclxuICAgIFwiYm9hcmRcIjogXCJTVEFURVwiLFxyXG4gICAgXCJhY2FkZW1pY1llYXJTdGFydFwiOiAyMDI0LFxyXG4gICAgXCJhY2FkZW1pY1llYXJFbmRcIjogMjAyNSxcclxuICAgIFwiZmVlQ29uZmlnc1wiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcImZlZVR5cGVJZFwiOiAnMTIzMjQnLFxyXG4gICAgICAgIFwiZmVlSGVhZElkXCI6ICcxMjM0JyxcclxuICAgICAgICBcImZlZVR5cGVcIjogXCJUdXRpb24gZmVlXCIsXHJcbiAgICAgICAgXCJmZWVIZWFkXCI6IFwiZXhhbSBmZWVcIixcclxuICAgICAgICBcImFtb3VudFwiOiAzMDAsXHJcbiAgICAgICAgXCJkaXNjb3VudEFtb3VudFwiOiAwLFxyXG4gICAgICAgIFwiaXNGaXhlZFwiOiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICBdLFxyXG4gICAgXCJzdWJzY3JpcHRpb25QbGFuc1wiOiBbXSxcclxuICAgIFwidG90YWxBbW91bnRcIjogMzAwLFxyXG4gICAgXCJjcmVhdGVkVGltZXN0YW1wXCI6IHtcclxuICAgICAgXCIkZGF0ZVwiOiBcIjIwMjQtMTItMTVUMDc6MTA6NTQuODg5WlwiXHJcbiAgICB9LFxyXG4gICAgXCJ1cGRhdGVkVGltZXN0YW1wXCI6IHtcclxuICAgICAgXCIkZGF0ZVwiOiBcIjIwMjQtMTItMTVUMDc6MTA6NTQuODg5WlwiXHJcbiAgICB9LFxyXG4gICAgXCJhY3RpdmVcIjogdHJ1ZSxcclxuICB9XHJcblxyXG5cclxuICBmZWVDb25maWc6IGFueTtcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZmVlU3RydWN0dXJlID0gdGhpcy5hZG1pc3Npb25EYXRhLnN0dWRlbnRGZWVTdHJ1Y3R1cmU7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB0aGlzLmFycmFuZ2VTdWJzY3JpcHRpb25Gb3JBZG1pc3Npb24odGhpcy5zdWJzY3JpcHRpb25zRGF0YSk7XHJcbiAgICB0aGlzLmZlZUNvbmZpZyA9IHRoaXMuYXJyYW5nZUZlZUNvbmZpZyh0aGlzLmZlZVN0cnVjdHVyZS5mZWVDb25maWdzKTtcclxuICAgIHRoaXMuY2FsY3VsYXRlVG90YWxBbW91bnQoKTtcclxuICB9XHJcblxyXG4gIGRlZmF1bHRJbWFnZTogc3RyaW5nID0gJ2h0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvOTE3MDY3YzE3MzQzMzcyODAzMDNjYW5jZWwucG5nJztcclxuICBzdWJzY3JpcHRpb25zOiBhbnkgPSB7XHJcbiAgICBcIkZvb2QgRmVlXCIgOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBzdWJzY3JpcHRpb25UaXRsZSA6ICdCcmVha2Zhc3QnLFxyXG4gICAgICAgIHByaWNpbmcgIDoge1xyXG4gICAgICAgICAgXCJXRUVLTFlcIiA6IDIwMDAsXHJcbiAgICAgICAgICBcIk1PTlRITFlcIiAgOiAzMDAwLFxyXG4gICAgICAgICAgXCJZRUFSTFlcIiA6IDQwMDBcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBzdWJzY3JpcHRpb25UaXRsZSA6ICdMdW5jaCcsXHJcbiAgICAgICAgcHJpY2luZyAgOiB7XHJcbiAgICAgICAgICBcIldFRUtMWVwiIDogMjAwMCxcclxuICAgICAgICAgIFwiTU9OVEhMWVwiICA6IDMwMDAsXHJcbiAgICAgICAgICBcIllFQVJMWVwiIDogNDAwMFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHN1YnNjcmlwdGlvblRpdGxlIDogJ1NuYWNrcycsXHJcbiAgICAgICAgcHJpY2luZyAgOiB7XHJcbiAgICAgICAgICBcIldFRUtMWVwiIDogMjAwMCxcclxuICAgICAgICAgIFwiTU9OVEhMWVwiICA6IDMwMDAsXHJcbiAgICAgICAgICBcIllFQVJMWVwiIDogNDAwMFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU2VsZWN0aW9uKHN1YnNjcmlwdGlvbjogYW55LCBmcmVxdWVuY3k6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYoIXRoaXMuZmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zKVxyXG4gICAgICB0aGlzLmZlZVN0cnVjdHVyZS5zdWJzY3JpcHRpb25QbGFucyA9IFtdO1xyXG5cclxuICAgIGxldCByZW1vdmVJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgICBmb3IobGV0IGkgPSAwO2k8dGhpcy5mZWVTdHJ1Y3R1cmUuc3Vic2NyaXB0aW9uUGxhbnMubGVuZ3RoO2krKykge1xyXG4gICAgICBsZXQgc3ViID0gdGhpcy5mZWVTdHJ1Y3R1cmUuc3Vic2NyaXB0aW9uUGxhbnNbaV07XHJcblxyXG4gICAgICBpZihzdWIuc3ViSWQgPT09IHN1YnNjcmlwdGlvbi5zdWJJZCl7XHJcbiAgICAgICAgcmVtb3ZlSW5kZXggPSBpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYocmVtb3ZlSW5kZXggPT0gLTEpIHtcclxuICAgICAgdGhpcy5mZWVTdHJ1Y3R1cmUuc3Vic2NyaXB0aW9uUGxhbnMucHVzaCh7Li4uc3Vic2NyaXB0aW9uLCBmcmVxdWVuY3k6IGZyZXF1ZW5jeX0pXHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlVG90YWxBbW91bnQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zLnNwbGljZShyZW1vdmVJbmRleCwgMSk7XHJcblxyXG4gICAgaWYgKHN1YnNjcmlwdGlvbi5zZWxlY3RlZE9wdGlvbiA9PT0gZnJlcXVlbmN5KSB7XHJcbiAgICAgIHN1YnNjcmlwdGlvbi5zZWxlY3RlZE9wdGlvbiA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdWJzY3JpcHRpb24uc2VsZWN0ZWRPcHRpb24gPSBmcmVxdWVuY3k7XHJcbiAgICAgIHRoaXMuZmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zLnB1c2goey4uLnN1YnNjcmlwdGlvbiwgZnJlcXVlbmN5OiBmcmVxdWVuY3l9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2FsY3VsYXRlVG90YWxBbW91bnQoKTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVRvdGFsQW1vdW50KCkge1xyXG4gICAgdGhpcy5mZWVTdHJ1Y3R1cmUudG90YWxBbW91bnQgPSAwO1xyXG5cclxuICAgIGlmKHRoaXMuYWRtaXNzaW9uRGF0YS5wYXltZW50UGxhblR5cGUgPT09ICdBTk5VQUxMWScpe1xyXG4gICAgICBmb3IobGV0IGNvbmZpZyBvZiB0aGlzLmZlZVN0cnVjdHVyZS5mZWVDb25maWdzKSB7XHJcbiAgICAgICAgdGhpcy5mZWVTdHJ1Y3R1cmUudG90YWxBbW91bnQgKz0gY29uZmlnLmFtb3VudDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yKGxldCB0ZXJtIG9mIHRoaXMuZmVlU3RydWN0dXJlPy50ZXJtUGF5bWVudExpc3QgfHwgW10pIHtcclxuICAgICAgICB0aGlzLmZlZVN0cnVjdHVyZS50b3RhbEFtb3VudCArPSB0ZXJtLnRlcm1BbW91bnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IobGV0IHN1YnNjcmlwdGlvbiBvZiB0aGlzLmZlZVN0cnVjdHVyZS5zdWJzY3JpcHRpb25QbGFucykge1xyXG4gICAgICB0aGlzLmZlZVN0cnVjdHVyZS50b3RhbEFtb3VudCArPSBzdWJzY3JpcHRpb24ucHJpY2luZ1tzdWJzY3JpcHRpb24uZnJlcXVlbmN5XTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZUFubnVhbFBheW1lbnRUZXJtKHBheWVudFR5cGU6IGFueSkge1xyXG4gICAgdGhpcy5hZG1pc3Npb25EYXRhLnBheW1lbnRQbGFuVHlwZSA9IHBheWVudFR5cGU7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsQW1vdW50KCk7XHJcbiAgfVxyXG5cclxuICBhcnJhbmdlU3Vic2NyaXB0aW9uRm9yQWRtaXNzaW9uKHN1YnNjcmlwdGlvbkxpc3Q6IGFueVtdKSB7XHJcbiAgICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xyXG5cclxuICAgIGZvcihsZXQgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbkxpc3QpIHtcclxuICAgICAgaWYoIXJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXSkge1xyXG4gICAgICAgIHJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXS5wdXNoKHN1YnNjcmlwdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgYXJyYW5nZUZlZUNvbmZpZyhmZWVDb25maWdMaXN0OiBhbnlbXSkge1xyXG4gICAgbGV0IHJlc3BvbnNlOiBhbnkgPSB7fTtcclxuXHJcbiAgICBmb3IobGV0IGNvbmZpZyBvZiBmZWVDb25maWdMaXN0KSB7XHJcbiAgICAgIGlmKCFyZXNwb25zZVtjb25maWcuZmVlVHlwZV0pXHJcbiAgICAgICAgcmVzcG9uc2VbY29uZmlnLmZlZVR5cGVdID0gW107XHJcblxyXG4gICAgICByZXNwb25zZVtjb25maWcuZmVlVHlwZV0ucHVzaChjb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJtYWluLXNlY3Rpb25cIj5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmcgbGVmdC1zaWRlXCI+XHJcbiAgICAgICAgQWRtaXNzaW9uIEZlZVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGUgbXQtMTBcIiAqbmdGb3I9XCJsZXQgY29uZmlnTGlzdCBvZiBPYmplY3Qua2V5cyhmZWVDb25maWcpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmcgbWItMjBcIj57e2NvbmZpZ0xpc3R9fTwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktc3BhY2UgbXQtMTAgbWItMTVcIiAqbmdGb3I9XCJsZXQgY29uZmlnIG9mIGZlZUNvbmZpZ1tjb25maWdMaXN0XVwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJzdWItaGVhZGluZyBtYi0wXCI+e3tjb25maWcuZmVlSGVhZH19PC9wPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJhbW91bnQgbWItMFwiPuKCuSB7e2NvbmZpZy5hbW91bnR9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdC1zaWRlIG10LTEwXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgT2JqZWN0LmtleXMoc3Vic2NyaXB0aW9ucylcIj5cclxuICAgICAgICA8cCBjbGFzcz1cImhlYWRpbmdcIj57e3R5cGV9fTwvcD5cclxuXHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwic3Vic2NyaXB0aW9uLXRhYmxlIHctMTAwXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0aD5TdWJzY3JpcHRpb24gVGl0bGU8L3RoPlxyXG4gICAgICAgICAgICA8dGg+TW9udGhseTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5RdWF0ZXJseTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5ZZWFybHk8L3RoPlxyXG4gICAgICAgICAgICA8dGg+T24gRGVtYW5kPC90aD5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBzdWJzY3JpcHRpb25zW3R5cGVdO2xldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8dGQ+e3tkYXRhLnN1Yk5hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIiAqbmdJZj1cImRhdGEucHJpY2luZ1snUVVBUlRFUkxZJ11cIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdWJzY3JpcHRpb257e2l9fVwiICBbdmFsdWVdPVwiJ01PTlRITFknXCIgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGlvbihkYXRhLCAnTU9OVEhMWScpXCIgIFtjaGVja2VkXT1cImRhdGEuc2VsZWN0ZWRPcHRpb24gPT09ICdNT05USExZJ1wiICBbKG5nTW9kZWwpXT1cImRhdGEuc2VsZWN0ZWRPcHRpb25cIiBpZD1cImZsZXhSYWRpb0RlZmF1bHQyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmbGV4Q2hlY2tDaGVja2VkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAg4oK5IHt7ZGF0YS5wcmljaW5nWydNT05USExZJ119fVxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZGVmYXVsdEltYWdlXCIgKm5nSWY9XCIhZGF0YS5wcmljaW5nWydRVUFSVEVSTFknXVwiIFtzcmNdPVwiZGVmYXVsdEltYWdlXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIiAqbmdJZj1cImRhdGEucHJpY2luZ1snTU9OVEhMWSddXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3Vic2NyaXB0aW9ue3tpfX1cIiBbdmFsdWVdPVwiJ1FVQVJURVJMWSdcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0aW9uKGRhdGEsICdRVUFSVEVSTFknKVwiICBbY2hlY2tlZF09XCJkYXRhLnNlbGVjdGVkT3B0aW9uID09PSAnUVVBUlRFUkxZJ1wiIFsobmdNb2RlbCldPVwiZGF0YS5zZWxlY3RlZE9wdGlvblwiIGlkPVwiZmxleENoZWNrQ2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZmxleENoZWNrQ2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIOKCuSB7e2RhdGEucHJpY2luZ1snUVVBUlRFUkxZJ119fVxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZGVmYXVsdEltYWdlXCIgKm5nSWY9XCIhZGF0YS5wcmljaW5nWydNT05USExZJ11cIiBbc3JjXT1cImRlZmF1bHRJbWFnZVwiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiICpuZ0lmPVwiZGF0YS5wcmljaW5nWydBTk5VQUxMWSddXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3Vic2NyaXB0aW9ue3tpfX1cIiBbdmFsdWVdPVwiJ0FOTlVBTExZJ1wiIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb24oZGF0YSwgJ0FOTlVBTExZJylcIiAgW2NoZWNrZWRdPVwiZGF0YS5zZWxlY3RlZE9wdGlvbiA9PT0gJ0FOTlVBTExZJ1wiIFsobmdNb2RlbCldPVwiZGF0YS5zZWxlY3RlZE9wdGlvblwiIGlkPVwiZmxleENoZWNrQ2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZmxleENoZWNrQ2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIOKCuSB7e2RhdGEucHJpY2luZ1snQU5OVUFMTFknXX19XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJkZWZhdWx0SW1hZ2VcIiAqbmdJZj1cIiFkYXRhLnByaWNpbmdbJ0FOTlVBTExZJ11cIiBbc3JjXT1cImRlZmF1bHRJbWFnZVwiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIiAqbmdJZj1cImRhdGEucHJpY2luZ1snT05ERU1BTkQnXVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInN1YnNjcmlwdGlvbnt7aX19XCIgW3ZhbHVlXT1cIidPTkRFTUFORCdcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0aW9uKGRhdGEsICdPTkRFTUFORCcpXCIgIFtjaGVja2VkXT1cImRhdGEuc2VsZWN0ZWRPcHRpb24gPT09ICdPTkRFTUFORCdcIiBbKG5nTW9kZWwpXT1cImRhdGEuc2VsZWN0ZWRPcHRpb25cIiBpZD1cImZsZXhDaGVja0NoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImZsZXhDaGVja0NoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICDigrkge3tkYXRhLnByaWNpbmdbJ09OREVNQU5EJ119fVxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZGVmYXVsdEltYWdlXCIgKm5nSWY9XCIhZGF0YS5wcmljaW5nWydPTkRFTUFORCddXCIgW3NyY109XCJkZWZhdWx0SW1hZ2VcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGUgbXQtMTBcIj5cclxuICAgICAgICA8cCBjbGFzcz1cImhlYWRpbmdcIj5QYXltZW50IFBsYW48L3A+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZy0yXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiIChjbGljayk9XCJjaGFuZ2VBbm51YWxQYXltZW50VGVybSgnQU5OVUFMTFknKVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJcIiBuYW1lPVwicGF5bWVudC1wbGFuXCIgaWQ9XCJmbGV4Q2hlY2tDaGVja2VkXCIgW2NoZWNrZWRdPVwiYWRtaXNzaW9uRGF0YS5wYXltZW50UGxhblR5cGUgPT09ICdBTk5VQUxMWSdcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImZsZXhDaGVja0NoZWNrZWRcIj5cclxuICAgICAgICAgICAgICBBbm51YWxseVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiIChjbGljayk9XCJjaGFuZ2VBbm51YWxQYXltZW50VGVybSgnVEVSTScpXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwicmFkaW9cIiB2YWx1ZT1cIlwiIG5hbWU9XCJwYXltZW50LXBsYW5cIiBpZD1cImZsZXhDaGVja0NoZWNrZWRcIiBbY2hlY2tlZF09XCJhZG1pc3Npb25EYXRhLnBheW1lbnRQbGFuVHlwZSA9PT0gJ1RFUk0nXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmbGV4Q2hlY2tDaGVja2VkXCI+XHJcbiAgICAgICAgICAgICAgVGVybVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZG1pc3Npb25cIiAqbmdJZj1cImFkbWlzc2lvbkRhdGEucGF5bWVudFBsYW5UeXBlID09PSAnVEVSTSdcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImlucHV0LXRleHRcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImlucHV0U3R5bGVcIiBwbGFjZWhvbGRlcj1cIi0tU2VsZWN0LS1cIiBtdWx0aXBsZT1cInRydWVcIiBbKG5nTW9kZWwpXT1cImZlZVN0cnVjdHVyZS50ZXJtUGF5bWVudExpc3RcIiAobmdNb2RlbENoYW5nZSk9XCJjYWxjdWxhdGVUb3RhbEFtb3VudCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdGVybSBvZiB0ZXJtUGF5bWVudExpc3RcIiBbdmFsdWVdPVwidGVybVwiPnRlcm0ge3t0ZXJtLnRlcm1OdW1iZXJ9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgcmlnaHQtc2lkZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZyBtYi0yMFwiPlxyXG4gICAgICAgIEZlZSBDYWxjdWxhdGlvblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LXNwYWNlIG10LTEwIG1iLTE1XCIgKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBmZWVTdHJ1Y3R1cmUuZmVlQ29uZmlnc1wiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwic3ViLWhlYWRpbmcgbWItMFwiPnt7Y29uZmlnLmZlZUhlYWR9fTwvcD5cclxuICAgICAgICA8cCBjbGFzcz1cImFtb3VudCBtYi0wXCI+4oK5IHt7Y29uZmlnLmFtb3VudH19PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1zcGFjZSBtdC0xMCBtYi0xNVwiICpuZ0Zvcj1cImxldCBzdWJzY3JpcGl0aW9uIG9mIGZlZVN0cnVjdHVyZS5zdWJzY3JpcHRpb25QbGFuc1wiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwic3ViLWhlYWRpbmcgbWItMFwiPnt7c3Vic2NyaXBpdGlvbi5zdWJOYW1lfX08L3A+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJhbW91bnQgbWItMFwiPuKCuSB7e3N1YnNjcmlwaXRpb24ucHJpY2luZ1tzdWJzY3JpcGl0aW9uLmZyZXF1ZW5jeV19fTwvcD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidG90YWwtZmVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmcgbWItNVwiPlxyXG4gICAgICAgICAgVG90YWwgRmVlXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFtb3VudFwiPlxyXG4gICAgICAgICAg4oK5IHt7ZmVlU3RydWN0dXJlLnRvdGFsQW1vdW50fX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG4iXX0=