@posiwise/admin-module 0.0.180 → 0.0.181
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/posiwise-admin-module.mjs +463 -441
- package/fesm2022/posiwise-admin-module.mjs.map +1 -1
- package/lib/components/resources/resources-admin-details/resources-admin-details.component.d.ts +1 -1
- package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +1 -1
- package/package.json +4 -6
- package/esm2022/index.mjs +0 -87
- package/esm2022/lib/admin-guard.service.mjs +0 -44
- package/esm2022/lib/admin-module.routing.mjs +0 -919
- package/esm2022/lib/admin.module.mjs +0 -485
- package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +0 -93
- package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +0 -98
- package/esm2022/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.mjs +0 -26
- package/esm2022/lib/components/config/global-config-details/global-config-details.component.mjs +0 -75
- package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +0 -92
- package/esm2022/lib/components/config/global-config-tabs/global-config-tabs.component.mjs +0 -24
- package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +0 -101
- package/esm2022/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.mjs +0 -25
- package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +0 -88
- package/esm2022/lib/components/credentials/credentials-details/credentials-details.component.mjs +0 -79
- package/esm2022/lib/components/credentials/credentials-tab/credentials-tab.component.mjs +0 -31
- package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +0 -92
- package/esm2022/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +0 -102
- package/esm2022/lib/components/domain-config/domain-config-details/base-domain-config.component.mjs +0 -88
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +0 -731
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +0 -123
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +0 -57
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +0 -91
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +0 -144
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +0 -30
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +0 -31
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +0 -30
- package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +0 -98
- package/esm2022/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.mjs +0 -25
- package/esm2022/lib/components/faqs/add-faq/add-faq.component.mjs +0 -218
- package/esm2022/lib/components/faqs/edit-faq/edit-faq.component.mjs +0 -204
- package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +0 -277
- package/esm2022/lib/components/faqs/faqs-tabs/faqs-tabs.component.mjs +0 -25
- package/esm2022/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +0 -84
- package/esm2022/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +0 -98
- package/esm2022/lib/components/generic/generic-insight/generic-insight.component.mjs +0 -12
- package/esm2022/lib/components/generic/generic-misc/generic-misc.component.mjs +0 -127
- package/esm2022/lib/components/generic/generic-tabs/generic-tabs.component.mjs +0 -31
- package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +0 -152
- package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +0 -118
- package/esm2022/lib/components/incidents/incidents-tabs/incidents-tabs.component.mjs +0 -25
- package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +0 -111
- package/esm2022/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.mjs +0 -25
- package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +0 -97
- package/esm2022/lib/components/mailer/mailer-details/mailer-details.component.mjs +0 -115
- package/esm2022/lib/components/mailer/mailer-list/mailer-list.component.mjs +0 -113
- package/esm2022/lib/components/mailer/mailer-tabs/mailer-tabs.component.mjs +0 -24
- package/esm2022/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +0 -87
- package/esm2022/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +0 -284
- package/esm2022/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +0 -76
- package/esm2022/lib/components/newsletters/newsletters-insight/newsletters-insight.component.mjs +0 -53
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items-view-details/newsletters-items-view-details.component.mjs +0 -59
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +0 -179
- package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +0 -103
- package/esm2022/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.mjs +0 -38
- package/esm2022/lib/components/permissions/permissions-details/permissions-details.component.mjs +0 -109
- package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +0 -87
- package/esm2022/lib/components/permissions/permissions-tabs/permissions-tabs.component.mjs +0 -31
- package/esm2022/lib/components/permissions/role-details/role-details.component.mjs +0 -140
- package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +0 -93
- package/esm2022/lib/components/products/product-details/product-details.component.mjs +0 -370
- package/esm2022/lib/components/products/products-insight/products-insight.component.mjs +0 -52
- package/esm2022/lib/components/products/products-list/products-list.component.mjs +0 -144
- package/esm2022/lib/components/products/products-tabs/products-tabs.component.mjs +0 -28
- package/esm2022/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +0 -55
- package/esm2022/lib/components/resources/resources-admin-details/resources-admin-details.component.mjs +0 -380
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-admin-tabs.component.mjs +0 -33
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-index/resources-index.component.mjs +0 -154
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-insight/resources-insight.component.mjs +0 -54
- package/esm2022/lib/components/resources/resources-lists-insight/resources-lists-insight.component.mjs +0 -61
- package/esm2022/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +0 -120
- package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +0 -135
- package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +0 -210
- package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +0 -225
- package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +0 -66
- package/esm2022/lib/components/subscriptions/subscription-users/add-members/add-members.component.mjs +0 -173
- package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +0 -215
- package/esm2022/lib/components/subscriptions/subscriptions-insight/base-subscription-insight.component.mjs +0 -47
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-price/subscription-insight-average-price.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-user/subscription-insight-average-user.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-churn/subscription-insight-churn.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +0 -103
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-product-session/subscription-insight-product-session.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.mjs +0 -23
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-user-session/subscription-insight-user-session.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.mjs +0 -232
- package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +0 -311
- package/esm2022/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.mjs +0 -35
- package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +0 -153
- package/esm2022/lib/components/tags/tags-details/tags-details.component.mjs +0 -153
- package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +0 -145
- package/esm2022/lib/components/tags/tags-tabs/tags-tabs.component.mjs +0 -32
- package/esm2022/lib/components/tips/tip-detail/tip-detail.component.mjs +0 -88
- package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +0 -49
- package/esm2022/lib/components/tips/tips-tabs/tips-tabs.component.mjs +0 -25
- package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +0 -216
- package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +0 -200
- package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +0 -198
- package/esm2022/lib/components/tracking/events/events.component.mjs +0 -198
- package/esm2022/lib/components/tracking/tracking-tabs/tracking-tabs.component.mjs +0 -49
- package/esm2022/lib/components/tracking/versions/versions.component.mjs +0 -208
- package/esm2022/lib/components/users/user-details/user-details.component.mjs +0 -167
- package/esm2022/lib/components/users/users-insight/users-insight.component.mjs +0 -53
- package/esm2022/lib/components/users/users-list/users-list.component.mjs +0 -338
- package/esm2022/lib/components/users/users-tabs/users-tabs.component.mjs +0 -32
- package/esm2022/lib/shared/interface/admin-module-shared.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/api-response.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/contact-us.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/credential.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/domain-config.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/feedback-question.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/global-config.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/login-notification.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/newsletter.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/permission.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/privacy-tos.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/tip.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/tracking.interface.mjs +0 -2
- package/esm2022/lib/shared/routers/routers.mjs +0 -40
- package/esm2022/posiwise-admin-module.mjs +0 -5
package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs
DELETED
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { DatePipe } from '@angular/common';
|
|
2
|
-
import { Component, Injector } from '@angular/core';
|
|
3
|
-
import { AdminService, AppAdmin } from '@posiwise/admin-module-utils';
|
|
4
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
5
|
-
import { CommonService, NgbDateCustomParserFormatter, PermissionService, SubscriptionService } from '@posiwise/common-services';
|
|
6
|
-
import { HelperService } from '@posiwise/helper-service';
|
|
7
|
-
import { map } from 'rxjs';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@posiwise/common-services";
|
|
10
|
-
import * as i2 from "@posiwise/admin-module-utils";
|
|
11
|
-
import * as i3 from "@angular/common";
|
|
12
|
-
import * as i4 from "primeng/dropdown";
|
|
13
|
-
import * as i5 from "primeng/multiselect";
|
|
14
|
-
import * as i6 from "@angular/forms";
|
|
15
|
-
import * as i7 from "ngx-ui-switch";
|
|
16
|
-
import * as i8 from "@ng-bootstrap/ng-bootstrap";
|
|
17
|
-
import * as i9 from "@angular/router";
|
|
18
|
-
import * as i10 from "primeng/progressspinner";
|
|
19
|
-
import * as i11 from "@posiwise/shared-components";
|
|
20
|
-
import * as i12 from "@posiwise/directives";
|
|
21
|
-
import * as i13 from "../subscription-products/subscription-products.component";
|
|
22
|
-
import * as i14 from "../subscription-users/subscription-users.component";
|
|
23
|
-
import * as i15 from "../subscription-agents-list/subscription-agents-list.component";
|
|
24
|
-
import * as i16 from "@jsverse/transloco";
|
|
25
|
-
export class SubscriptionDetailsComponent extends AppBaseComponent {
|
|
26
|
-
constructor(subscriptionService, adminService, datePipe, commonService, dateFormatService, injector) {
|
|
27
|
-
super(injector);
|
|
28
|
-
this.subscriptionService = subscriptionService;
|
|
29
|
-
this.adminService = adminService;
|
|
30
|
-
this.datePipe = datePipe;
|
|
31
|
-
this.commonService = commonService;
|
|
32
|
-
this.dateFormatService = dateFormatService;
|
|
33
|
-
this.subscribeRoles = [];
|
|
34
|
-
this.submitted = false;
|
|
35
|
-
this.isLoading = true;
|
|
36
|
-
this.allAgents = [];
|
|
37
|
-
this.allRoles = [];
|
|
38
|
-
this.form = AppAdmin.getSubscriptionsForm();
|
|
39
|
-
}
|
|
40
|
-
ngOnInit() {
|
|
41
|
-
this.subscriptionId = PermissionService.selectedSubscription?.id;
|
|
42
|
-
this.organizationIndustries$ = this.commonService.getOrganizationIndustries().pipe(map(res => {
|
|
43
|
-
return {
|
|
44
|
-
organization_industries: [
|
|
45
|
-
{ id: null, name: 'Select Organization Industry' },
|
|
46
|
-
...(res?.organization_industries ?? [])
|
|
47
|
-
]
|
|
48
|
-
};
|
|
49
|
-
}));
|
|
50
|
-
this.organizationTypes$ = this.commonService.getOrganizationTypes().pipe(map(res => {
|
|
51
|
-
return {
|
|
52
|
-
organization_types: [
|
|
53
|
-
{ id: null, name: 'Select Organization Type' },
|
|
54
|
-
...(res?.organization_types ?? [])
|
|
55
|
-
]
|
|
56
|
-
};
|
|
57
|
-
}));
|
|
58
|
-
this.organizationSizes$ = this.commonService.getOrganizationSizes().pipe(map(res => {
|
|
59
|
-
return {
|
|
60
|
-
organization_sizes: [
|
|
61
|
-
{ id: null, name: 'Select Organization Size' },
|
|
62
|
-
...(res?.organization_sizes ?? [])
|
|
63
|
-
]
|
|
64
|
-
};
|
|
65
|
-
}));
|
|
66
|
-
this.route.params.subscribe(data => {
|
|
67
|
-
this.id = Number(data['id']);
|
|
68
|
-
if (Number(data['id'])) {
|
|
69
|
-
this.isLoading = true;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
this.isLoading = false;
|
|
73
|
-
}
|
|
74
|
-
this.getSubscriptionDetails();
|
|
75
|
-
this.getAgentsDetails(this.id);
|
|
76
|
-
this.getSubscriptionRole();
|
|
77
|
-
});
|
|
78
|
-
this.getRoles();
|
|
79
|
-
}
|
|
80
|
-
onSkillsSave() {
|
|
81
|
-
this.getAgentsDetails(this.id);
|
|
82
|
-
}
|
|
83
|
-
onSaveProject(_event) {
|
|
84
|
-
this.getAgentsDetails(this.id);
|
|
85
|
-
}
|
|
86
|
-
getSubscriptionRole() {
|
|
87
|
-
if (this.permissionService.isSuperAdmin()) {
|
|
88
|
-
this.adminService.getSubscriptionRoles(this.id).subscribe(response => {
|
|
89
|
-
if (response?.length) {
|
|
90
|
-
this.subscribeRoles = response?.map(item => {
|
|
91
|
-
return {
|
|
92
|
-
name: item.name,
|
|
93
|
-
id: item.id
|
|
94
|
-
};
|
|
95
|
-
});
|
|
96
|
-
this.form.patchValue({
|
|
97
|
-
roles: this.subscribeRoles?.map(x => x.id)
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
getRoles() {
|
|
104
|
-
if (this.permissionService.isSuperAdmin()) {
|
|
105
|
-
this.adminService.getRoles({}, this.subscriptionId).subscribe(response => {
|
|
106
|
-
if (response?.roles?.length) {
|
|
107
|
-
this.allRoles = response.roles?.map(item => {
|
|
108
|
-
return {
|
|
109
|
-
label: item.name,
|
|
110
|
-
value: item.id
|
|
111
|
-
};
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
getAgentsDetails(id) {
|
|
118
|
-
if (this.permissionService.isSuperAdmin()) {
|
|
119
|
-
this.adminService.getAgents(id).subscribe(response => {
|
|
120
|
-
this.allAgents = response.subscription_agents;
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
getSubscriptionDetails() {
|
|
125
|
-
this.subscriptionService.getById(this.id).subscribe(response => {
|
|
126
|
-
this.isLoading = false;
|
|
127
|
-
this.currentSubscriber = response;
|
|
128
|
-
response.expires_at = this.datePipe.transform(response.expires_at, 'yyyy-MM-dd');
|
|
129
|
-
this.form.patchValue(response);
|
|
130
|
-
const expDate = this.dateFormatService.dateFormatForPicker(response.products[0]?.expires_at);
|
|
131
|
-
this.form.get('purchased_units').patchValue(response.products[0]?.purchased_units);
|
|
132
|
-
this.form.get('expires_at').patchValue(expDate);
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
saveDetails() {
|
|
136
|
-
this.submitted = true;
|
|
137
|
-
if (this.form.value) {
|
|
138
|
-
const formValue = this.form.value;
|
|
139
|
-
const data = {
|
|
140
|
-
contact_name: formValue.contact_name,
|
|
141
|
-
organisation: formValue.organisation,
|
|
142
|
-
address: formValue.address,
|
|
143
|
-
tax_id: formValue.tax_id,
|
|
144
|
-
contact_email: formValue.contact_email,
|
|
145
|
-
contact_tel: formValue.contact_tel,
|
|
146
|
-
organization_type_id: formValue.organization_type_id,
|
|
147
|
-
organization_industry_id: formValue.organization_industry_id,
|
|
148
|
-
organization_size_id: formValue.organization_size_id,
|
|
149
|
-
facebook_handle: formValue.facebook_handle,
|
|
150
|
-
twitter_handle: formValue.twitter_handle,
|
|
151
|
-
linkedin_handle: formValue.linkedin_handle,
|
|
152
|
-
company_url: formValue.company_url
|
|
153
|
-
};
|
|
154
|
-
this.subscriptionService
|
|
155
|
-
.updateSubscription(this.id, data)
|
|
156
|
-
.subscribe(() => {
|
|
157
|
-
this.router.navigate(['/admin/subscriptions/list']);
|
|
158
|
-
this.toast.success(this.translation.translate('Admin.Subscriptions.UpdatedMessage'));
|
|
159
|
-
this.getAgentsDetails(this.id);
|
|
160
|
-
})
|
|
161
|
-
.add(() => {
|
|
162
|
-
this.submitted = false;
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
this.subscriptionsRolesData = {
|
|
166
|
-
subscription_id: this.id,
|
|
167
|
-
subscription_roles: []
|
|
168
|
-
};
|
|
169
|
-
if (this.form.get('roles')?.value?.length) {
|
|
170
|
-
this.subscriptionsRolesData['subscription_roles'] = this.form
|
|
171
|
-
.get('roles')
|
|
172
|
-
.value?.map(res => {
|
|
173
|
-
return { role_id: res };
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
this.subscriptionsRolesData['subscription_roles'] = [];
|
|
178
|
-
}
|
|
179
|
-
this.adminService.saveSubscriptionRoles(this.subscriptionsRolesData).subscribe(() => {
|
|
180
|
-
this.toast.success(this.translation.translate('Admin.Users.UpdatedRole'));
|
|
181
|
-
});
|
|
182
|
-
this.updateSubscriptionProduct();
|
|
183
|
-
}
|
|
184
|
-
updateSubscriptionProduct() {
|
|
185
|
-
const expDate = this.form.value.expires_at;
|
|
186
|
-
if (expDate) {
|
|
187
|
-
const data = {
|
|
188
|
-
subscription_id: this.id,
|
|
189
|
-
product_id: this.currentSubscriber?.products[0]?.id,
|
|
190
|
-
expires_at: HelperService.dateFormat(expDate)
|
|
191
|
-
};
|
|
192
|
-
if (this.form.value.purchased_units) {
|
|
193
|
-
data['purchased_units'] = this.form.value.purchased_units;
|
|
194
|
-
}
|
|
195
|
-
this.adminService.updateSubscriptionProduct(data).subscribe(() => {
|
|
196
|
-
this.toast.success(this.translation.translate('Admin.Subscriptions.UpdatedMessage'));
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
ngOnDestroy() {
|
|
201
|
-
super.ngOnDestroy();
|
|
202
|
-
}
|
|
203
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionDetailsComponent, deps: [{ token: i1.SubscriptionService }, { token: i2.AdminService }, { token: i3.DatePipe }, { token: i1.CommonService }, { token: i1.NgbDateCustomParserFormatter }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
204
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SubscriptionDetailsComponent, selector: "pw-subscription-details", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n routerLink=\"/admin/subscriptions/list\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Subscription Details</span>\n </h3>\n <span class=\"badge rounded-pill bg-danger ms-2\"\n *ngIf=\"currentSubscriber?.is_deleted\">Deleted</span>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"!isLoading\">\n\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Subscription</a>\n <ng-template ngbNavContent>\n <div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"mt-4\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Organization' | transloco\"\n [label]=\"'Admin.Subscriptions.Organization' | transloco\"\n name=\"organisation\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"organisation\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ContactName' | transloco\"\n [label]=\"'Admin.Subscriptions.ContactName' | transloco\"\n name=\"contact_name\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"contact_name\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ContactEmail' | transloco\"\n [label]=\"'Admin.Subscriptions.ContactEmail' | transloco\"\n name=\"contact_email\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"contact_email\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ContactTel' | transloco\"\n [label]=\"'Admin.Subscriptions.ContactTel' | transloco\"\n name=\"contact_tel\">\n <input type=\"text\"\n formControlName=\"contact_tel\"\n class=\"form-control\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Tax Id'\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.TaxId' | transloco\"\n name=\"tax_id\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tax_id\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <label class=\"info-circle\" for=\"productList\">{{ 'Admin.Subscriptions.AssignedRoles' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Admin.Subscriptions.Tooltip.AssignedRoles'\n | transloco\n }}</span>\n </label>\n\n <p-multiSelect [options]=\"allRoles\"\n formControlName=\"roles\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\"\n *ngIf=\"organizationTypes$ | async as types\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationType' | transloco\"\n [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\">\n <p-dropdown\n [options]=\"types['organization_types']\"\n formControlName=\"organization_type_id\"\n [placeholder]=\"'Select Organization Type'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-sm-6 col-md-3\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationIndustry' | transloco\"\n [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\">\n <p-dropdown\n [options]=\"industries['organization_industries']\"\n formControlName=\"organization_industry_id\"\n [placeholder]=\"'Select Organization Industry'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-sm-6 col-md-3\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationSize' | transloco\"\n [label]=\"'Size' | transloco\"\n name=\"organization_size_id\">\n <p-dropdown\n [options]=\"sizes['organization_sizes']\"\n formControlName=\"organization_size_id\"\n [placeholder]=\"'Select Organization Size'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.CompanyUrl' | transloco\"\n [label]=\"'Admin.Subscriptions.CompanyUrl' | transloco\"\n name=\"company_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"company_url\" />\n </pw-input-container>\n </div>\n\n <!-- Readonly Starts -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Reference' | transloco\"\n [label]=\"'Admin.Subscriptions.Reference' | transloco\"\n name=\"reference_number\">\n <input type=\"text\"\n readonly\n class=\"form-control\"\n data-control=\"reference\"\n *ngIf=\"form\"\n [value]=\"form.get('reference_number')?.value\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.UnitsInUse' | transloco\"\n [label]=\"'Admin.Subscriptions.UnitsInUse' | transloco\"\n name=\"units_in_use\">\n <input type=\"text\"\n readonly\n class=\"form-control\"\n formControlName=\"units_in_use\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MaxUnits' | transloco\"\n [label]=\"'Admin.Subscriptions.MaxUnits' | transloco\"\n name=\"max_units\">\n <input type=\"text\"\n readonly\n class=\"form-control\"\n formControlName=\"max_units\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.CalculatedPrice' | transloco\"\n [label]=\"'Admin.Subscriptions.CalculatedPrice' | transloco\"\n name=\"calculated_price\">\n <input type=\"text\"\n class=\"form-control\"\n readonly\n formControlName=\"calculated_price\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MainExpiryDate' | transloco\"\n [label]=\"\n 'Admin.Subscriptions.MainExpiryDate' | transloco\n \"\n name=\"expires_at\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Expiry Date\"\n formControlName=\"expires_at\"\n [readonly]=\"true\"\n ngbDatepicker\n #c=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"true\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i\n class=\"fa fa-calendar\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\"\n *rbacAllow=\"'SuperAdmin'\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.PurchasedSeats' | transloco\"\n [label]=\"'Admin.Subscriptions.PurchasedSeats' | transloco\"\n name=\"purchased_units\">\n <input type=\"number\"\n min=\"0\"\n readonly\n class=\"form-control\"\n formControlName=\"purchased_units\" />\n </pw-input-container>\n </div>\n\n <!-- Readonly Ends -->\n </div>\n <!-- social links -->\n <h3>Social Links</h3>\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Facebook' | transloco\"\n [label]=\"'Admin.Subscriptions.Facebook' | transloco\"\n name=\"facebook_handle\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"facebook_handle\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Twitter' | transloco\"\n [label]=\"'Admin.Subscriptions.Twitter' | transloco\"\n name=\"twitter_handle\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"twitter_handle\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Linkedin' | transloco\"\n [label]=\"'Admin.Subscriptions.LinkedIn' | transloco\"\n name=\"linkedin_handle\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"linkedin_handle\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Reddit' | transloco\"\n [label]=\"'Admin.Subscriptions.Reddit' | transloco\"\n name=\"reddit_handle\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"reddit_handle\" />\n </pw-input-container>\n </div>\n </div>\n <ng-container *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <h3>Security</h3>\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Enforce2fa'| transloco\"\n label=\"Enforce 2FA\"\n name=\"enforce_2fa\">\n <ui-switch formControlName=\"enforce_2fa\"\n name=\"enforce_2fa\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n </ng-container>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'Pages.Admin.Subscription.Edit'\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Products</a>\n <ng-template ngbNavContent>\n <pw-subscription-products></pw-subscription-products>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"3\">\n <a ngbNavLink>Members</a>\n <ng-template ngbNavContent>\n <pw-subscription-users></pw-subscription-users>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"4\"\n *rbacAllow=\"'SuperAdmin'\">\n <a ngbNavLink>Ambassadors</a>\n <ng-template ngbNavContent>\n <pw-subscription-agents-list></pw-subscription-agents-list>\n </ng-template>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ui-autocomplete-multiple-container,.ui-fluid.skills-modal p-autocomplete{background:transparent}\n"], dependencies: [{ kind: "component", type: i4.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i5.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.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: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "component", type: i7.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "directive", type: i8.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i8.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i8.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i8.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i8.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i8.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i8.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i9.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i10.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i11.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "directive", type: i12.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i12.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i13.SubscriptionProductsComponent, selector: "pw-subscription-products" }, { kind: "component", type: i14.SubscriptionUsersComponent, selector: "pw-subscription-users" }, { kind: "component", type: i15.SubscriptionAgentsListComponent, selector: "pw-subscription-agents-list" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i16.TranslocoPipe, name: "transloco" }] }); }
|
|
205
|
-
}
|
|
206
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionDetailsComponent, decorators: [{
|
|
207
|
-
type: Component,
|
|
208
|
-
args: [{ selector: 'pw-subscription-details', template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n routerLink=\"/admin/subscriptions/list\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Subscription Details</span>\n </h3>\n <span class=\"badge rounded-pill bg-danger ms-2\"\n *ngIf=\"currentSubscriber?.is_deleted\">Deleted</span>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"!isLoading\">\n\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Subscription</a>\n <ng-template ngbNavContent>\n <div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"mt-4\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"saveDetails()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Organization' | transloco\"\n [label]=\"'Admin.Subscriptions.Organization' | transloco\"\n name=\"organisation\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"organisation\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ContactName' | transloco\"\n [label]=\"'Admin.Subscriptions.ContactName' | transloco\"\n name=\"contact_name\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"contact_name\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ContactEmail' | transloco\"\n [label]=\"'Admin.Subscriptions.ContactEmail' | transloco\"\n name=\"contact_email\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"contact_email\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ContactTel' | transloco\"\n [label]=\"'Admin.Subscriptions.ContactTel' | transloco\"\n name=\"contact_tel\">\n <input type=\"text\"\n formControlName=\"contact_tel\"\n class=\"form-control\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Tax Id'\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.TaxId' | transloco\"\n name=\"tax_id\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tax_id\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <label class=\"info-circle\" for=\"productList\">{{ 'Admin.Subscriptions.AssignedRoles' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Admin.Subscriptions.Tooltip.AssignedRoles'\n | transloco\n }}</span>\n </label>\n\n <p-multiSelect [options]=\"allRoles\"\n formControlName=\"roles\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\"\n *ngIf=\"organizationTypes$ | async as types\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationType' | transloco\"\n [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\">\n <p-dropdown\n [options]=\"types['organization_types']\"\n formControlName=\"organization_type_id\"\n [placeholder]=\"'Select Organization Type'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-sm-6 col-md-3\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationIndustry' | transloco\"\n [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\">\n <p-dropdown\n [options]=\"industries['organization_industries']\"\n formControlName=\"organization_industry_id\"\n [placeholder]=\"'Select Organization Industry'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-sm-6 col-md-3\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.OrganizationSize' | transloco\"\n [label]=\"'Size' | transloco\"\n name=\"organization_size_id\">\n <p-dropdown\n [options]=\"sizes['organization_sizes']\"\n formControlName=\"organization_size_id\"\n [placeholder]=\"'Select Organization Size'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.CompanyUrl' | transloco\"\n [label]=\"'Admin.Subscriptions.CompanyUrl' | transloco\"\n name=\"company_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"company_url\" />\n </pw-input-container>\n </div>\n\n <!-- Readonly Starts -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Reference' | transloco\"\n [label]=\"'Admin.Subscriptions.Reference' | transloco\"\n name=\"reference_number\">\n <input type=\"text\"\n readonly\n class=\"form-control\"\n data-control=\"reference\"\n *ngIf=\"form\"\n [value]=\"form.get('reference_number')?.value\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.UnitsInUse' | transloco\"\n [label]=\"'Admin.Subscriptions.UnitsInUse' | transloco\"\n name=\"units_in_use\">\n <input type=\"text\"\n readonly\n class=\"form-control\"\n formControlName=\"units_in_use\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MaxUnits' | transloco\"\n [label]=\"'Admin.Subscriptions.MaxUnits' | transloco\"\n name=\"max_units\">\n <input type=\"text\"\n readonly\n class=\"form-control\"\n formControlName=\"max_units\" />\n </pw-input-container>\n </div>\n\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.CalculatedPrice' | transloco\"\n [label]=\"'Admin.Subscriptions.CalculatedPrice' | transloco\"\n name=\"calculated_price\">\n <input type=\"text\"\n class=\"form-control\"\n readonly\n formControlName=\"calculated_price\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MainExpiryDate' | transloco\"\n [label]=\"\n 'Admin.Subscriptions.MainExpiryDate' | transloco\n \"\n name=\"expires_at\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Expiry Date\"\n formControlName=\"expires_at\"\n [readonly]=\"true\"\n ngbDatepicker\n #c=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"true\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i\n class=\"fa fa-calendar\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\"\n *rbacAllow=\"'SuperAdmin'\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.PurchasedSeats' | transloco\"\n [label]=\"'Admin.Subscriptions.PurchasedSeats' | transloco\"\n name=\"purchased_units\">\n <input type=\"number\"\n min=\"0\"\n readonly\n class=\"form-control\"\n formControlName=\"purchased_units\" />\n </pw-input-container>\n </div>\n\n <!-- Readonly Ends -->\n </div>\n <!-- social links -->\n <h3>Social Links</h3>\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Facebook' | transloco\"\n [label]=\"'Admin.Subscriptions.Facebook' | transloco\"\n name=\"facebook_handle\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"facebook_handle\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Twitter' | transloco\"\n [label]=\"'Admin.Subscriptions.Twitter' | transloco\"\n name=\"twitter_handle\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"twitter_handle\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Linkedin' | transloco\"\n [label]=\"'Admin.Subscriptions.LinkedIn' | transloco\"\n name=\"linkedin_handle\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"linkedin_handle\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Reddit' | transloco\"\n [label]=\"'Admin.Subscriptions.Reddit' | transloco\"\n name=\"reddit_handle\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"reddit_handle\" />\n </pw-input-container>\n </div>\n </div>\n <ng-container *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <h3>Security</h3>\n <div class=\"row\">\n <div class=\"col-12 col-sm-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Enforce2fa'| transloco\"\n label=\"Enforce 2FA\"\n name=\"enforce_2fa\">\n <ui-switch formControlName=\"enforce_2fa\"\n name=\"enforce_2fa\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n </ng-container>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'Pages.Admin.Subscription.Edit'\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Products</a>\n <ng-template ngbNavContent>\n <pw-subscription-products></pw-subscription-products>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"3\">\n <a ngbNavLink>Members</a>\n <ng-template ngbNavContent>\n <pw-subscription-users></pw-subscription-users>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"4\"\n *rbacAllow=\"'SuperAdmin'\">\n <a ngbNavLink>Ambassadors</a>\n <ng-template ngbNavContent>\n <pw-subscription-agents-list></pw-subscription-agents-list>\n </ng-template>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ui-autocomplete-multiple-container,.ui-fluid.skills-modal p-autocomplete{background:transparent}\n"] }]
|
|
209
|
-
}], ctorParameters: () => [{ type: i1.SubscriptionService }, { type: i2.AdminService }, { type: i3.DatePipe }, { type: i1.CommonService }, { type: i1.NgbDateCustomParserFormatter }, { type: i0.Injector }] });
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLWRldGFpbHMvc3Vic2NyaXB0aW9uLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLWRldGFpbHMvc3Vic2NyaXB0aW9uLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUd2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFDSCxhQUFhLEVBQ2IsNEJBQTRCLEVBQzVCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3ZDLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxnQkFBZ0I7SUF3QjlELFlBQ3FCLG1CQUF3QyxFQUN4QyxZQUEwQixFQUMxQixRQUFrQixFQUNsQixhQUE0QixFQUM1QixpQkFBK0MsRUFDaEUsUUFBa0I7UUFFbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBUEMs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O0lBQ3JDLENBQUM7SUFFRCx5QkFBeUI7UUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQzNDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksR0FBRztnQkFDVCxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25ELFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUNoRCxDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQzlELENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLG9DQUFvQyxDQUFDLENBQ25FLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0E1TlEsNEJBQTRCO21HQUE1Qiw0QkFBNEIsc0ZDeEJ6Qyxnbm1CQXdXQTs7NEZEaFZhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDSSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlLCBBcHBBZG1pbiB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBDb21tb25TZXJ2aWNlLFxuICAgIE5nYkRhdGVDdXN0b21QYXJzZXJGb3JtYXR0ZXIsXG4gICAgUGVybWlzc2lvblNlcnZpY2UsXG4gICAgU3Vic2NyaXB0aW9uU2VydmljZVxufSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uUm9sZXNTdWJzY3JpYmVEYXRhIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9hZG1pbi1tb2R1bGUtc2hhcmVkLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctc3Vic2NyaXB0aW9uLWRldGFpbHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdWJzY3JpcHRpb24tZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3Vic2NyaXB0aW9uLWRldGFpbHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTdWJzY3JpcHRpb25EZXRhaWxzQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHN1YnNjcmliZVJvbGVzID0gW107XG5cbiAgICBvcmdhbml6YXRpb25TaXplcyQ6IE9ic2VydmFibGU8dW5rbm93bj47XG4gICAgb3JnYW5pemF0aW9uVHlwZXMkOiBPYnNlcnZhYmxlPHVua25vd24+O1xuICAgIG9yZ2FuaXphdGlvbkluZHVzdHJpZXMkOiBPYnNlcnZhYmxlPHsgb3JnYW5pemF0aW9uX2luZHVzdHJpZXM6IHVua25vd25bXSB9PjtcblxuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgICBpZDogbnVtYmVyO1xuXG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIGFsbEFnZW50czogc3RyaW5nW10gPSBbXTtcblxuICAgIGN1cnJlbnRTdWJzY3JpYmVyOiBTdWJzY3JpcHRpb247XG5cbiAgICBhbGxSb2xlcyA9IFtdO1xuXG4gICAgc3Vic2NyaXB0aW9uc1JvbGVzRGF0YTogU3Vic2NyaXB0aW9uUm9sZXNTdWJzY3JpYmVEYXRhO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0ZUZvcm1hdFNlcnZpY2U6IE5nYkRhdGVDdXN0b21QYXJzZXJGb3JtYXR0ZXIsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMuZm9ybSA9IEFwcEFkbWluLmdldFN1YnNjcmlwdGlvbnNGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uSW5kdXN0cmllcyQgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSW5kdXN0cmllcygpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25faW5kdXN0cmllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogbnVsbCwgbmFtZTogJ1NlbGVjdCBPcmdhbml6YXRpb24gSW5kdXN0cnknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4ocmVzPy5vcmdhbml6YXRpb25faW5kdXN0cmllcyA/PyBbXSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblR5cGVzJCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRPcmdhbml6YXRpb25UeXBlcygpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25fdHlwZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaWQ6IG51bGwsIG5hbWU6ICdTZWxlY3QgT3JnYW5pemF0aW9uIFR5cGUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4ocmVzPy5vcmdhbml6YXRpb25fdHlwZXMgPz8gW10pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNpemVzJCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRPcmdhbml6YXRpb25TaXplcygpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25fc2l6ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaWQ6IG51bGwsIG5hbWU6ICdTZWxlY3QgT3JnYW5pemF0aW9uIFNpemUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4ocmVzPy5vcmdhbml6YXRpb25fc2l6ZXMgPz8gW10pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9IE51bWJlcihkYXRhWydpZCddKTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIoZGF0YVsnaWQnXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbkRldGFpbHMoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWdlbnRzRGV0YWlscyh0aGlzLmlkKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uUm9sZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmdldFJvbGVzKCk7XG4gICAgfVxuXG4gICAgb25Ta2lsbHNTYXZlKCkge1xuICAgICAgICB0aGlzLmdldEFnZW50c0RldGFpbHModGhpcy5pZCk7XG4gICAgfVxuXG4gICAgb25TYXZlUHJvamVjdChfZXZlbnQpIHtcbiAgICAgICAgdGhpcy5nZXRBZ2VudHNEZXRhaWxzKHRoaXMuaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaXB0aW9uUm9sZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNTdXBlckFkbWluKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmdldFN1YnNjcmlwdGlvblJvbGVzKHRoaXMuaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVSb2xlcyA9IHJlc3BvbnNlPy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVzOiB0aGlzLnN1YnNjcmliZVJvbGVzPy5tYXAoeCA9PiB4LmlkKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um9sZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmlzU3VwZXJBZG1pbigpKSB7XG4gICAgICAgICAgICB0aGlzLmFkbWluU2VydmljZS5nZXRSb2xlcyh7fSwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LnJvbGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxSb2xlcyA9IHJlc3BvbnNlLnJvbGVzPy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBZ2VudHNEZXRhaWxzKGlkOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNTdXBlckFkbWluKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmdldEFnZW50cyhpZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbEFnZW50cyA9IHJlc3BvbnNlLnN1YnNjcmlwdGlvbl9hZ2VudHM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaXB0aW9uRGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25TZXJ2aWNlLmdldEJ5SWQodGhpcy5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdWJzY3JpYmVyID0gcmVzcG9uc2U7XG4gICAgICAgICAgICByZXNwb25zZS5leHBpcmVzX2F0ID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVzcG9uc2UuZXhwaXJlc19hdCwgJ3l5eXktTU0tZGQnKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cERhdGUgPSB0aGlzLmRhdGVGb3JtYXRTZXJ2aWNlLmRhdGVGb3JtYXRGb3JQaWNrZXIoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZHVjdHNbMF0/LmV4cGlyZXNfYXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdwdXJjaGFzZWRfdW5pdHMnKS5wYXRjaFZhbHVlKHJlc3BvbnNlLnByb2R1Y3RzWzBdPy5wdXJjaGFzZWRfdW5pdHMpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnZXhwaXJlc19hdCcpLnBhdGNoVmFsdWUoZXhwRGF0ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhdmVEZXRhaWxzKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgY29udGFjdF9uYW1lOiBmb3JtVmFsdWUuY29udGFjdF9uYW1lLFxuICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogZm9ybVZhbHVlLm9yZ2FuaXNhdGlvbixcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBmb3JtVmFsdWUuYWRkcmVzcyxcbiAgICAgICAgICAgICAgICB0YXhfaWQ6IGZvcm1WYWx1ZS50YXhfaWQsXG4gICAgICAgICAgICAgICAgY29udGFjdF9lbWFpbDogZm9ybVZhbHVlLmNvbnRhY3RfZW1haWwsXG4gICAgICAgICAgICAgICAgY29udGFjdF90ZWw6IGZvcm1WYWx1ZS5jb250YWN0X3RlbCxcbiAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25fdHlwZV9pZDogZm9ybVZhbHVlLm9yZ2FuaXphdGlvbl90eXBlX2lkLFxuICAgICAgICAgICAgICAgIG9yZ2FuaXphdGlvbl9pbmR1c3RyeV9pZDogZm9ybVZhbHVlLm9yZ2FuaXphdGlvbl9pbmR1c3RyeV9pZCxcbiAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25fc2l6ZV9pZDogZm9ybVZhbHVlLm9yZ2FuaXphdGlvbl9zaXplX2lkLFxuICAgICAgICAgICAgICAgIGZhY2Vib29rX2hhbmRsZTogZm9ybVZhbHVlLmZhY2Vib29rX2hhbmRsZSxcbiAgICAgICAgICAgICAgICB0d2l0dGVyX2hhbmRsZTogZm9ybVZhbHVlLnR3aXR0ZXJfaGFuZGxlLFxuICAgICAgICAgICAgICAgIGxpbmtlZGluX2hhbmRsZTogZm9ybVZhbHVlLmxpbmtlZGluX2hhbmRsZSxcbiAgICAgICAgICAgICAgICBjb21wYW55X3VybDogZm9ybVZhbHVlLmNvbXBhbnlfdXJsXG4gICAgICAgICAgICB9IGFzIFBhcnRpYWw8U3Vic2NyaXB0aW9uPjtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZVxuICAgICAgICAgICAgICAgIC51cGRhdGVTdWJzY3JpcHRpb24odGhpcy5pZCwgZGF0YSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWRtaW4vc3Vic2NyaXB0aW9ucy9saXN0J10pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uU3Vic2NyaXB0aW9ucy5VcGRhdGVkTWVzc2FnZScpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBZ2VudHNEZXRhaWxzKHRoaXMuaWQpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zUm9sZXNEYXRhID0ge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmlkLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX3JvbGVzOiBbXVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5mb3JtLmdldCgncm9sZXMnKT8udmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zUm9sZXNEYXRhWydzdWJzY3JpcHRpb25fcm9sZXMnXSA9IHRoaXMuZm9ybVxuICAgICAgICAgICAgICAgIC5nZXQoJ3JvbGVzJylcbiAgICAgICAgICAgICAgICAudmFsdWU/Lm1hcChyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByb2xlX2lkOiByZXMgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1JvbGVzRGF0YVsnc3Vic2NyaXB0aW9uX3JvbGVzJ10gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkbWluU2VydmljZS5zYXZlU3Vic2NyaXB0aW9uUm9sZXModGhpcy5zdWJzY3JpcHRpb25zUm9sZXNEYXRhKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5Vc2Vycy5VcGRhdGVkUm9sZScpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlU3Vic2NyaXB0aW9uUHJvZHVjdCgpO1xuICAgIH1cblxuICAgIHVwZGF0ZVN1YnNjcmlwdGlvblByb2R1Y3QoKSB7XG4gICAgICAgIGNvbnN0IGV4cERhdGUgPSB0aGlzLmZvcm0udmFsdWUuZXhwaXJlc19hdDtcbiAgICAgICAgaWYgKGV4cERhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHRoaXMuY3VycmVudFN1YnNjcmliZXI/LnByb2R1Y3RzWzBdPy5pZCxcbiAgICAgICAgICAgICAgICBleHBpcmVzX2F0OiBIZWxwZXJTZXJ2aWNlLmRhdGVGb3JtYXQoZXhwRGF0ZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtLnZhbHVlLnB1cmNoYXNlZF91bml0cykge1xuICAgICAgICAgICAgICAgIGRhdGFbJ3B1cmNoYXNlZF91bml0cyddID0gdGhpcy5mb3JtLnZhbHVlLnB1cmNoYXNlZF91bml0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLnVwZGF0ZVN1YnNjcmlwdGlvblByb2R1Y3QoZGF0YSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5TdWJzY3JpcHRpb25zLlVwZGF0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHB3LXRhYiBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPGRpdiBjbGFzcz1cImRhc2hib2FyZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtYm9keVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1lLWF1dG8gY29sLXhzLTYgbXQtNFwiPlxuICAgICAgICA8YSBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdG8gVGFyZ2V0XCJcbiAgICAgICAgcm91dGVyTGluaz1cIi9hZG1pbi9zdWJzY3JpcHRpb25zL2xpc3RcIlxuICAgICAgICAgIGNsYXNzPVwicHJldmlvdXNcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICAgIDxoMyBjbGFzcz1cIm0tc3ViaGVhZGVyX190aXRsZSBtLXN1YmhlYWRlcl9fdGl0bGUtLXNlcGFyYXRvclwiPlxuICAgICAgICAgIDxzcGFuPlN1YnNjcmlwdGlvbiBEZXRhaWxzPC9zcGFuPlxuICAgICAgICA8L2gzPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIHJvdW5kZWQtcGlsbCBiZy1kYW5nZXIgbXMtMlwiXG4gICAgKm5nSWY9XCJjdXJyZW50U3Vic2NyaWJlcj8uaXNfZGVsZXRlZFwiPkRlbGV0ZWQ8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCJcbiAgICAgICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG5cbiAgICAgIDx1bCBuZ2JOYXZcbiAgICAgICAgI25hdj1cIm5nYk5hdlwiXG4gICAgICAgIGNsYXNzPVwibmF2LXRhYnNcIj5cbiAgICAgICAgPGxpIFtuZ2JOYXZJdGVtXT1cIjFcIj5cbiAgICAgICAgICA8YSBuZ2JOYXZMaW5rPlN1YnNjcmlwdGlvbjwvYT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgcHctdGFiIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hib2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ1N1Ym1pdCk9XCJzYXZlRGV0YWlscygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLk9yZ2FuaXphdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Pcmdhbml6YXRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwib3JnYW5pc2F0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9yZ2FuaXNhdGlvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5Db250YWN0TmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Db250YWN0TmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjb250YWN0X25hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29udGFjdF9uYW1lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLkNvbnRhY3RFbWFpbCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Db250YWN0RW1haWwnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29udGFjdF9lbWFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb250YWN0X2VtYWlsXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5Db250YWN0VGVsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLkNvbnRhY3RUZWwnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29udGFjdF90ZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29udGFjdF90ZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidUYXggSWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuVGF4SWQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidGF4X2lkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRheF9pZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInU3Vic2NyaXB0aW9uU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5mby1jaXJjbGVcIiBmb3I9XCJwcm9kdWN0TGlzdFwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLkFzc2lnbmVkUm9sZXMnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwdGV4dCBncmFkaWVudC1jdXN0b20tYnJhbmRpbmdcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5Bc3NpZ25lZFJvbGVzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cImFsbFJvbGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyb2xlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3JnYW5pemF0aW9uVHlwZXMkIHwgYXN5bmMgYXMgdHlwZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuT3JnYW5pemF0aW9uVHlwZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT3JnYW5pemF0aW9uLk9yZ2FuaXphdGlvblR5cGUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwib3JnYW5pemF0aW9uX3R5cGVfaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwidHlwZXNbJ29yZ2FuaXphdGlvbl90eXBlcyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9yZ2FuaXphdGlvbl90eXBlX2lkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IE9yZ2FuaXphdGlvbiBUeXBlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXNtLTYgY29sLW1kLTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZ2FuaXphdGlvbkluZHVzdHJpZXMkIHwgYXN5bmMgYXMgaW5kdXN0cmllc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5Pcmdhbml6YXRpb25JbmR1c3RyeScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT3JnYW5pemF0aW9uLk9yZ2FuaXphdGlvbkluZHVzdHJ5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIm9yZ2FuaXphdGlvbl9pbmR1c3RyeV9pZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJpbmR1c3RyaWVzWydvcmdhbml6YXRpb25faW5kdXN0cmllcyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9yZ2FuaXphdGlvbl9pbmR1c3RyeV9pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBPcmdhbml6YXRpb24gSW5kdXN0cnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wtc20tNiBjb2wtbWQtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3JnYW5pemF0aW9uU2l6ZXMkIHwgYXN5bmMgYXMgc2l6ZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuT3JnYW5pemF0aW9uU2l6ZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInU2l6ZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJvcmdhbml6YXRpb25fc2l6ZV9pZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzaXplc1snb3JnYW5pemF0aW9uX3NpemVzJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib3JnYW5pemF0aW9uX3NpemVfaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgT3JnYW5pemF0aW9uIFNpemUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuQ29tcGFueVVybCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Db21wYW55VXJsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNvbXBhbnlfdXJsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbXBhbnlfdXJsXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSZWFkb25seSBTdGFydHMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuUmVmZXJlbmNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlJlZmVyZW5jZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZWZlcmVuY2VfbnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRyb2w9XCJyZWZlcmVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtLmdldCgncmVmZXJlbmNlX251bWJlcicpPy52YWx1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5Vbml0c0luVXNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlVuaXRzSW5Vc2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidW5pdHNfaW5fdXNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ1bml0c19pbl91c2VcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuTWF4VW5pdHMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuTWF4VW5pdHMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwibWF4X3VuaXRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYXhfdW5pdHNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuQ2FsY3VsYXRlZFByaWNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLkNhbGN1bGF0ZWRQcmljZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjYWxjdWxhdGVkX3ByaWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjYWxjdWxhdGVkX3ByaWNlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5NYWluRXhwaXJ5RGF0ZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5TdWJzY3JpcHRpb25zLk1haW5FeHBpcnlEYXRlJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJleHBpcmVzX2F0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFeHBpcnkgRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImV4cGlyZXNfYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2M9XCJuZ2JEYXRlcGlja2VyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjLnRvZ2dsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuUHVyY2hhc2VkU2VhdHMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuUHVyY2hhc2VkU2VhdHMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicHVyY2hhc2VkX3VuaXRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHVyY2hhc2VkX3VuaXRzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSZWFkb25seSBFbmRzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gc29jaWFsIGxpbmtzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxoMz5Tb2NpYWwgTGlua3M8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5GYWNlYm9vaycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5GYWNlYm9vaycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmYWNlYm9va19oYW5kbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmFjZWJvb2tfaGFuZGxlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5Ud2l0dGVyJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlR3aXR0ZXInIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidHdpdHRlcl9oYW5kbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHdpdHRlcl9oYW5kbGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLkxpbmtlZGluJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLkxpbmtlZEluJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImxpbmtlZGluX2hhbmRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsaW5rZWRpbl9oYW5kbGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlJlZGRpdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5SZWRkaXQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicmVkZGl0X2hhbmRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWRkaXRfaGFuZGxlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpyYmFjQWxsb3c9XCInU3Vic2NyaXB0aW9uU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5TZWN1cml0eTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLkVuZm9yY2UyZmEnfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJFbmZvcmNlIDJGQVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZW5mb3JjZV8yZmFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggZm9ybUNvbnRyb2xOYW1lPVwiZW5mb3JjZV8yZmFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZW5mb3JjZV8yZmFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGV4dC1lbmQgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uQnVzeV09XCJzdWJtaXR0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFkbWluLlN1YnNjcmlwdGlvbi5FZGl0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uU2F2ZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpIFtuZ2JOYXZJdGVtXT1cIjJcIj5cbiAgICAgICAgICA8YSBuZ2JOYXZMaW5rPlByb2R1Y3RzPC9hPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxuICAgICAgICAgICAgPHB3LXN1YnNjcmlwdGlvbi1wcm9kdWN0cz48L3B3LXN1YnNjcmlwdGlvbi1wcm9kdWN0cz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGkgW25nYk5hdkl0ZW1dPVwiM1wiPlxuICAgICAgICAgIDxhIG5nYk5hdkxpbms+TWVtYmVyczwvYT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cbiAgICAgICAgICAgIDxwdy1zdWJzY3JpcHRpb24tdXNlcnM+PC9wdy1zdWJzY3JpcHRpb24tdXNlcnM+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpIFtuZ2JOYXZJdGVtXT1cIjRcIlxuICAgICAgICAgICpyYmFjQWxsb3c9XCInU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICA8YSBuZ2JOYXZMaW5rPkFtYmFzc2Fkb3JzPC9hPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxuICAgICAgICAgICAgPHB3LXN1YnNjcmlwdGlvbi1hZ2VudHMtbGlzdD48L3B3LXN1YnNjcmlwdGlvbi1hZ2VudHMtbGlzdD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8ZGl2IFtuZ2JOYXZPdXRsZXRdPVwibmF2XCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|