@ksremp/ngx-ksremp-app-lib 1.0.26 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/esm2022/lib/components/alien-doctype/alien-doctype.component.mjs +1597 -0
  2. package/esm2022/lib/components/questionnaire/AlienConstants.mjs +18 -0
  3. package/esm2022/lib/components/questionnaire/AppValidators.mjs +134 -1
  4. package/esm2022/lib/components/questionnaire/dynamic-form-question.component.mjs +458 -432
  5. package/esm2022/lib/components/questionnaire/dynamic-form.component.mjs +25 -9
  6. package/esm2022/lib/models/questionnaire/AlienDocComponentModel.mjs +3 -0
  7. package/esm2022/lib/ngx-reusa-app-lib.module.mjs +6 -5
  8. package/esm2022/lib/services/questionnaire/questionnaire.service.mjs +7 -1
  9. package/esm2022/lib/validations/AppRegex.mjs +9 -1
  10. package/esm2022/lib/validations/AppValidators.mjs +8 -1
  11. package/esm2022/public-api.mjs +2 -1
  12. package/fesm2022/ksremp-ngx-ksremp-app-lib.mjs +2626 -835
  13. package/fesm2022/ksremp-ngx-ksremp-app-lib.mjs.map +1 -1
  14. package/lib/components/alien-doctype/alien-doctype.component.d.ts +105 -0
  15. package/lib/components/alien-doctype/alien-doctype.component.d.ts.map +1 -0
  16. package/lib/components/questionnaire/AlienConstants.d.ts +18 -0
  17. package/lib/components/questionnaire/AlienConstants.d.ts.map +1 -0
  18. package/lib/components/questionnaire/AppValidators.d.ts.map +1 -1
  19. package/lib/components/questionnaire/dynamic-form-question.component.d.ts +3 -1
  20. package/lib/components/questionnaire/dynamic-form-question.component.d.ts.map +1 -1
  21. package/lib/components/questionnaire/dynamic-form.component.d.ts.map +1 -1
  22. package/lib/models/questionnaire/AlienDocComponentModel.d.ts +19 -0
  23. package/lib/models/questionnaire/AlienDocComponentModel.d.ts.map +1 -0
  24. package/lib/ngx-reusa-app-lib.module.d.ts +61 -60
  25. package/lib/ngx-reusa-app-lib.module.d.ts.map +1 -1
  26. package/lib/services/questionnaire/questionnaire.service.d.ts +2 -0
  27. package/lib/services/questionnaire/questionnaire.service.d.ts.map +1 -1
  28. package/lib/validations/AppRegex.d.ts +8 -0
  29. package/lib/validations/AppRegex.d.ts.map +1 -1
  30. package/lib/validations/AppValidators.d.ts +1 -0
  31. package/lib/validations/AppValidators.d.ts.map +1 -1
  32. package/package.json +1 -2
  33. package/public-api.d.ts +1 -0
  34. package/public-api.d.ts.map +1 -1
@@ -0,0 +1,18 @@
1
+ export const AlienConstants = {
2
+ I551: 'I551',
3
+ OTHR: 'OTHR',
4
+ CEEV: 'CEEV',
5
+ I766: 'I766',
6
+ I94: 'I-94',
7
+ NATC: 'NATC',
8
+ I327: 'I327',
9
+ I571: 'I571',
10
+ CECH: 'CECH',
11
+ CECI: 'CECI',
12
+ MRIV: "MRIV",
13
+ T551: 'T551',
14
+ I94U: 'I94U',
15
+ UNFP: 'UNFP',
16
+ I20: 'I-20',
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWxpZW5Db25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmV1c2EtYXBwLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb25uYWlyZS9BbGllbkNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDMUIsSUFBSSxFQUFHLE1BQU07SUFDYixJQUFJLEVBQUcsTUFBTTtJQUNiLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUMsTUFBTTtJQUNWLElBQUksRUFBQyxNQUFNO0lBQ1gsSUFBSSxFQUFDLE1BQU07SUFDWCxJQUFJLEVBQUMsTUFBTTtJQUNYLElBQUksRUFBQyxNQUFNO0lBQ1gsSUFBSSxFQUFDLE1BQU07SUFDWCxJQUFJLEVBQUMsTUFBTTtJQUNYLElBQUksRUFBQyxNQUFNO0lBQ1gsSUFBSSxFQUFDLE1BQU07SUFDWCxJQUFJLEVBQUMsTUFBTTtJQUNYLEdBQUcsRUFBQyxNQUFNO0NBRWIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBbGllbkNvbnN0YW50cyA9IHtcclxuICAgIEk1NTEgOiAnSTU1MScsXHJcbiAgICBPVEhSIDogJ09USFInLFxyXG4gICAgQ0VFVjogJ0NFRVYnLFxyXG4gICAgSTc2NjogJ0k3NjYnLFxyXG4gICAgSTk0OidJLTk0JyxcclxuICAgIE5BVEM6J05BVEMnLFxyXG4gICAgSTMyNzonSTMyNycsXHJcbiAgICBJNTcxOidJNTcxJyxcclxuICAgIENFQ0g6J0NFQ0gnLFxyXG4gICAgQ0VDSTonQ0VDSScsXHJcbiAgICBNUklWOlwiTVJJVlwiLFxyXG4gICAgVDU1MTonVDU1MScsXHJcbiAgICBJOTRVOidJOTRVJyxcclxuICAgIFVORlA6J1VORlAnLFxyXG4gICAgSTIwOidJLTIwJyxcclxuXHJcbn0iXX0=
@@ -1,3 +1,5 @@
1
+ import { AppRegex } from '../../validations/AppRegex';
2
+ import { AlienConstants } from '../questionnaire/AlienConstants';
1
3
  export class AppValidators {
2
4
  // @dynamic
3
5
  static customValidation(element, validation, stateName) {
@@ -60,6 +62,137 @@ export class AppValidators {
60
62
  }
61
63
  }
62
64
  }
65
+ else if (validationName === "docTypeValidation") {
66
+ if (!formGroup.controls[element.name])
67
+ return null;
68
+ const alienDocCompValue = formGroup.controls[element.name].value;
69
+ const setDocError = () => formGroup.controls[element.name].setErrors({ docTypeValidationFlag: true });
70
+ const isFieldInvalid = (val, regex) => !val || !regex.test(val);
71
+ const isOptFieldInvalid = (val, regex) => val && !regex.test(val);
72
+ // Null/empty guard
73
+ if (!alienDocCompValue || (typeof alienDocCompValue === 'object' && !alienDocCompValue.alienDocType && Object.keys(alienDocCompValue).every(k => alienDocCompValue[k] == null))) {
74
+ if (element.requiredIf) {
75
+ const splitArr = element.requiredIf.split('==');
76
+ const ctrlName = splitArr[0].replace(/[{}]/g, '').trim();
77
+ const val = splitArr[1].replace(/'/g, '').trim();
78
+ if (formGroup.controls[ctrlName]?.value?.trim() === val)
79
+ setDocError();
80
+ }
81
+ else {
82
+ setDocError();
83
+ }
84
+ return null;
85
+ }
86
+ if (!alienDocCompValue.alienDocType) {
87
+ setDocError();
88
+ return null;
89
+ }
90
+ const docType = alienDocCompValue.alienDocType.value;
91
+ let hasError = false;
92
+ // Alien Number - required for most types (optional for CECH)
93
+ const ALIEN_NUM_REQUIRED = [AlienConstants.I327, AlienConstants.I571, AlienConstants.I551, AlienConstants.I766, AlienConstants.CECI, AlienConstants.NATC, AlienConstants.MRIV, AlienConstants.T551, AlienConstants.OTHR];
94
+ if (ALIEN_NUM_REQUIRED.includes(docType)) {
95
+ if (isFieldInvalid(alienDocCompValue.alienNumber, AppRegex.ALIEN__DOC_NUMBER_REGEX))
96
+ hasError = true;
97
+ }
98
+ else if (docType === AlienConstants.CECH) {
99
+ if (isOptFieldInvalid(alienDocCompValue.alienNumber, AppRegex.ALIEN__DOC_NUMBER_REGEX))
100
+ hasError = true;
101
+ }
102
+ // Card Number (I551, I766)
103
+ if (docType === AlienConstants.I551 || docType === AlienConstants.I766) {
104
+ if (isFieldInvalid(alienDocCompValue.cardNumber, AppRegex.I551_REGEX))
105
+ hasError = true;
106
+ if (docType === AlienConstants.I766 && !alienDocCompValue.alienDocExpDate)
107
+ hasError = true;
108
+ }
109
+ // Naturalization Number (CECH, CECI, NATC)
110
+ if (docType === AlienConstants.CECH || docType === AlienConstants.NATC) {
111
+ if (isFieldInvalid(alienDocCompValue.naturalizationNumber, AppRegex.NATURALIZATION_NUMBER_REGEX))
112
+ hasError = true;
113
+ }
114
+ // CitizoShip Number (CECI)
115
+ if (docType === AlienConstants.CECI) {
116
+ if (isFieldInvalid(alienDocCompValue.citizenshipNumber, AppRegex.NATURALIZATION_NUMBER_REGEX))
117
+ hasError = true;
118
+ }
119
+ // MRIV - passport required, visa optional
120
+ if (docType === AlienConstants.MRIV) {
121
+ if (isFieldInvalid(alienDocCompValue.alienDocPassportNumber, AppRegex.PASSPORT_NUMBER_REGEX))
122
+ hasError = true;
123
+ if (isOptFieldInvalid(alienDocCompValue.visaNumber, AppRegex.VISA_NUMBER_REGEX))
124
+ hasError = true;
125
+ if (!alienDocCompValue.countryOfIssuance || (typeof alienDocCompValue.countryOfIssuance === 'string' && !alienDocCompValue.countryOfIssuance.trim()))
126
+ hasError = true;
127
+ }
128
+ // T551 - passport optional
129
+ if (docType === AlienConstants.T551) {
130
+ if (isOptFieldInvalid(alienDocCompValue.alienDocPassportNumber, AppRegex.PASSPORT_NUMBER_REGEX))
131
+ hasError = true;
132
+ if (alienDocCompValue.alienDocPassportNumber && (!alienDocCompValue.countryOfIssuance || (typeof alienDocCompValue.countryOfIssuance === 'string' && !alienDocCompValue.countryOfIssuance.trim())))
133
+ hasError = true;
134
+ }
135
+ // I-94
136
+ if (docType === AlienConstants.I94) {
137
+ console.log('[docTypeValidation] I94 - alienDocNumberI94:', alienDocCompValue.alienDocNumberI94, ', docType:', docType);
138
+ if (!alienDocCompValue.alienDocNumberI94 || !AppRegex.I94_DOC_NUMBER_REGEX.test(alienDocCompValue.alienDocNumberI94))
139
+ hasError = true;
140
+ if (alienDocCompValue.alienDocSvsId && !AppRegex.SVIS_ID_NUMBER_REGEX.test(alienDocCompValue.alienDocSvsId))
141
+ hasError = true;
142
+ console.log('[docTypeValidation] I94 - hasError:', hasError);
143
+ }
144
+ // I94U
145
+ if (docType === AlienConstants.I94U) {
146
+ if (isFieldInvalid(alienDocCompValue.alienDocNumberI94, AppRegex.I94_DOC_NUMBER_REGEX))
147
+ hasError = true;
148
+ if (isOptFieldInvalid(alienDocCompValue.alienDocSvsId, AppRegex.SVIS_ID_NUMBER_REGEX))
149
+ hasError = true;
150
+ if (!alienDocCompValue.alienDocExpDate)
151
+ hasError = true;
152
+ if (isFieldInvalid(alienDocCompValue.alienDocPassportNumber, AppRegex.PASSPORT_NUMBER_REGEX))
153
+ hasError = true;
154
+ if (isOptFieldInvalid(alienDocCompValue.visaNumber, AppRegex.VISA_NUMBER_REGEX))
155
+ hasError = true;
156
+ if (!alienDocCompValue.countryOfIssuance || (typeof alienDocCompValue.countryOfIssuance === 'string' && !alienDocCompValue.countryOfIssuance.trim()))
157
+ hasError = true;
158
+ }
159
+ // DS-2019 / I-20 (CEEV)
160
+ if (docType === AlienConstants.CEEV || docType === AlienConstants.I20 || docType === AlienConstants.UNFP) {
161
+ if (isOptFieldInvalid(alienDocCompValue.alienDocNumberI94, AppRegex.I94_DOC_NUMBER_REGEX))
162
+ hasError = true;
163
+ if (docType !== AlienConstants.UNFP && isFieldInvalid(alienDocCompValue.alienDocSvsId, AppRegex.SVIS_ID_NUMBER_REGEX))
164
+ hasError = true;
165
+ if (docType === AlienConstants.UNFP && isOptFieldInvalid(alienDocCompValue.alienDocSvsId, AppRegex.SVIS_ID_NUMBER_REGEX))
166
+ hasError = true;
167
+ if (docType === AlienConstants.UNFP && isFieldInvalid(alienDocCompValue.alienDocPassportNumber, AppRegex.PASSPORT_NUMBER_REGEX))
168
+ hasError = true;
169
+ if (docType !== AlienConstants.UNFP && isOptFieldInvalid(alienDocCompValue.alienDocPassportNumber, AppRegex.PASSPORT_NUMBER_REGEX))
170
+ hasError = true;
171
+ if (docType === AlienConstants.UNFP && !alienDocCompValue.alienDocExpDate)
172
+ hasError = true;
173
+ if (docType === AlienConstants.UNFP && (!alienDocCompValue.countryOfIssuance || (typeof alienDocCompValue.countryOfIssuance === 'string' && !alienDocCompValue.countryOfIssuance.trim())))
174
+ hasError = true;
175
+ if (docType !== AlienConstants.UNFP && alienDocCompValue.alienDocPassportNumber && (!alienDocCompValue.countryOfIssuance || (typeof alienDocCompValue.countryOfIssuance === 'string' && !alienDocCompValue.countryOfIssuance.trim())))
176
+ hasError = true;
177
+ }
178
+ // OTHR
179
+ if (docType === AlienConstants.OTHR) {
180
+ if (isFieldInvalid(alienDocCompValue.alienDocNumberI94, AppRegex.I94_DOC_NUMBER_REGEX))
181
+ hasError = true;
182
+ if (isOptFieldInvalid(alienDocCompValue.alienDocPassportNumber, AppRegex.PASSPORT_NUMBER_REGEX))
183
+ hasError = true;
184
+ if (isOptFieldInvalid(alienDocCompValue.alienDocSvsId, AppRegex.SVIS_ID_NUMBER_REGEX))
185
+ hasError = true;
186
+ if (!alienDocCompValue.alienDocDescription || !AppRegex.DOCUMENT_DESC_REGEX.test(alienDocCompValue.alienDocDescription))
187
+ hasError = true;
188
+ }
189
+ if (hasError) {
190
+ setDocError();
191
+ }
192
+ else {
193
+ formGroup.controls[element.name].setErrors(null);
194
+ }
195
+ }
63
196
  else if (validationName === "addressValidation") {
64
197
  let diffmailaddress = false;
65
198
  if (formGroup.value.diffmailaddress === 'Y' || formGroup.value.diffMailingAddress === 'Y') {
@@ -574,4 +707,4 @@ export class AppValidators {
574
707
  return false;
575
708
  }
576
709
  }
577
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwVmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL0FwcFZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxPQUFPLGFBQWE7SUFJdEIsV0FBVztJQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFZLEVBQUUsVUFBMkIsRUFBRSxTQUFpQjtRQUNoRixJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUEyQixFQUFFLEVBQUU7WUFDekMsSUFBSSxjQUFjLEtBQUssMEJBQTBCLEVBQUU7Z0JBQy9DLElBQUksR0FBNkIsQ0FBQztnQkFDbEMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbEMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDN0MsSUFBSSxHQUFHLEVBQUU7d0JBQ0wsSUFBSSxTQUF5QyxDQUFDO3dCQUM5QyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQzt3QkFDMUIsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUc7K0JBQy9FLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7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bCwgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFkZHJlc3NDb21wb25lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9BZGRyZXNzQ29tcG9uZW50TW9kZWwnO1xyXG5pbXBvcnQgeyBCYW5rRGV0YWlsc0NvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0JhbmtEZXRhaWxzQ29tcG9uZW50TW9kZWwnO1xyXG5pbXBvcnQgeyBDbGFpbUFwcEVtcGxveWVyRGV0YWlsc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCc7XHJcbmltcG9ydCB7IENsYWltQXBwRW1wUmVzcG9uc2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0NsYWltQXBwRW1wUmVzcG9uc2VNb2RlbCc7XHJcbmltcG9ydCB7IEVsZW1lbnRzTW9kZWwsIFZhbGlkYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0VsZW1lbnRzTW9kZWwnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUvdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW1wbG95ZXJJbmZvTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvRW1wbG95ZXJEZXRhaWxTZWFyY2hSZXN1bHQnO1xyXG5pbXBvcnQgeyBBdXRvY29kZXJNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0F1dG9jb2Rlck1vZGVsJztcclxuZXhwb3J0IGNsYXNzIEFwcFZhbGlkYXRvcnMge1xyXG5cclxuXHJcblxyXG4gICAgLy8gQGR5bmFtaWNcclxuICAgIHN0YXRpYyBjdXN0b21WYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgdmFsaWRhdGlvbjogVmFsaWRhdGlvbk1vZGVsLCBzdGF0ZU5hbWU6IHN0cmluZywpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgbGV0IHZhbGlkYXRpb25OYW1lID0gdmFsaWRhdGlvbi5jdXN0b21WYWxpZGF0aW9uTmFtZTtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYmFzZVBlcmlvZEVtcGxWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWw6IENsYWltQXBwRW1wUmVzcG9uc2VNb2RlbDtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJwRW1wTGlzdDogQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicEVtcExpc3QgPSB2YWwuYnBFbXBMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzWyd3b3JrZm9yZW1wJ10gJiYgZm9ybUdyb3VwLmNvbnRyb2xzWyd3b3JrZm9yZW1wJ10udmFsdWUgPT09ICdZJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYnBFbXBMaXN0Lmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGJwRW1wbHJMZW5ndGhGbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgYnBFbXBsckxlbmd0aEZsYWc6IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBicEVtcCBvZiBicEVtcExpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicEVtcC5icEVtcGxveWVyRmxhZyA9PT0gJzEnICYmICFicEVtcC5lbXBEZWxldGVkICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGJwRW1wbHJGbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGJwRW1wbHJGbGFnOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJzaW1wbGVDaGVja0JveFZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBzaW1wbGVDaGVja0JveFZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiY3BhdGNodmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGNwYXRjaHZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwidXBsb2FkdmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlIHx8IChBcnJheS5pc0FycmF5KGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlKSAmJiAhZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB1cGxvYWR2YWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImFkZHJlc3NWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkaWZmbWFpbGFkZHJlc3MgOmJvb2xlYW49ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZihmb3JtR3JvdXAudmFsdWUuZGlmZm1haWxhZGRyZXNzPT09J1knfHwgZm9ybUdyb3VwLnZhbHVlLmRpZmZNYWlsaW5nQWRkcmVzcz09PSdZJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlmZm1haWxhZGRyZXNzPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGxldCBhZGRyZXNzQ29tcFZhbHVlOiBBZGRyZXNzQ29tcG9uZW50TW9kZWw7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzQ29tcFZhbHVlID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzQ29tcFZhbHVlLmNpdHkgfHwgIWFkZHJlc3NDb21wVmFsdWUuc3RhdGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhZGRyZXNzQ29tcFZhbHVlWyd6aXAnXSB8fCAhYWRkcmVzc0NvbXBWYWx1ZS5jb3VudHJ5IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWRkcmVzc0NvbXBWYWx1ZVsnc3RyZWV0QWRkcmVzcyddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUEdMUC00MjMzIEFkZCB0aGUgY29uZGl0aW9uIGZvciBLU1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZSAmJiBhZGRyZXNzQ29tcFZhbHVlLnN0YXRlLnZhbHVlICYmICgoYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSA9PT0gJ01TJyAmJiBzdGF0ZU5hbWUgPT09ICdNUycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSA9PT0gJ0NUJyAmJiBzdGF0ZU5hbWUgPT09ICdDVCcpfHwgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdLUycgJiYgc3RhdGVOYW1lID09PSAnS1MnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlbGVtZW50LmNvdW50eVJlcXVpcmVkID09PSB0cnVlICYmICFhZGRyZXNzQ29tcFZhbHVlWydjb3VudHknXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggZGlmZm1haWxhZGRyZXNzICYmIGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdLUycgJiYgc3RhdGVOYW1lID09PSAnS1MnICAmJiBhZGRyZXNzQ29tcFZhbHVlLmNvdW50eT09PW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSA9PT0gJ01FJyAmJiBzdGF0ZU5hbWUgPT09ICdNRSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQuY291bnR5UmVxdWlyZWQgPT09IHRydWUgJiYgIWFkZHJlc3NDb21wVmFsdWVbJ3Rvd24nXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGRyZXNzQ29tcFZhbHVlLmNvdW50cnkudmFsdWUgPT09ICdVUycgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgISgvXlxcZHs1fShcXGR7NH0pPyQvLnRlc3QoYWRkcmVzc0NvbXBWYWx1ZS56aXApKSkgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkcmVzc0NvbXBWYWx1ZS5jb3VudHJ5LnZhbHVlID09PSAnQ0EnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoIC9eW0FCQ0VHSEotTlBSU1RWWFldXFxkW0FCQ0VHSEotTlBSU1RWLVpdWyAtXT9cXGRbQUJDRUdISi1OUFJTVFYtWl1cXGQkL2kudGVzdChhZGRyZXNzQ29tcFZhbHVlLnppcCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnPT0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250b2xOYW1lOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udG9sTmFtZSA9IGNvbnRvbE5hbWUucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnXFwnJywgJycpLnJlcGxhY2UoJ1xcJycsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdICYmIGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYmFua0RldGFpbHNWYWxpZGF0aW9uRmxhZ1wiKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsOiBCYW5rRGV0YWlsc0NvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFua0RldGFpbHNDb21wb25lbnRWYWwgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udG9sTmFtZTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRvbE5hbWUgPSBjb250b2xOYW1lLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLmFjY291bnROdW1iZXIgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLmFjY291bnRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLm5hbWVPbkFjY291bnQgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLnJlRW50ZXJBY2NvdW50TnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLnJvdXRpbmdOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYmFua0RldGFpbHNWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwibm90RXF1YWxzXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Rm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGRzOiBzdHJpbmdbXSA9IHZhbGlkYXRpb24uZXhwcmVzc2lvbi5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gY3VycmVudEZvcm1Db250cm9sLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lID0gZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLnRyaW0oKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvdGhlckZpZWxkVmFsdWUgPSBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsICYmIG90aGVyRmllbGRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCh2YWwudmFsdWUgJiYgb3RoZXJGaWVsZFZhbHVlLnZhbHVlICYmIHZhbC52YWx1ZSA9PT0gb3RoZXJGaWVsZFZhbHVlLnZhbHVlKSB8fCB2YWwgPT09IG90aGVyRmllbGRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyRmllbGRGb3JtQ29udHJvbE5hbWUuc2V0RXJyb3JzKHsgbm90RXF1YWxzOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWN1cnJlbnRGb3JtQ29udHJvbC5lcnJvcnMgJiYgdmFsICYmIG90aGVyRmllbGRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgodmFsLnZhbHVlICYmIG90aGVyRmllbGRWYWx1ZS52YWx1ZSAmJiB2YWwudmFsdWUgIT0gb3RoZXJGaWVsZFZhbHVlLnZhbHVlKSB8fCB2YWwgIT0gb3RoZXJGaWVsZFZhbHVlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA6IFNldDxhbnk+ID0gdGhpcy5nZXRPdGhlckZvcm1GaWVsZHNWYWx1ZXMoZmllbGRzLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlcy5zaXplID09IGZpZWxkcy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0VtcGxveWVyVmFsaWRhdGlvblwiKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVtcE1vZGVsczogRW1wbG95ZXJJbmZvTW9kZWxbXSA9IGNvbnRyb2w/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaWZXb3JrUGVyZm9ybWVkID0gZm9ybUdyb3VwLmNvbnRyb2xzW1wid29ya1BlcmZvcm1lZFwiXT8udmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0geyAuLi4oY29udHJvbC5lcnJvcnMgfHwge30pIH07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlmV29ya1BlcmZvcm1lZCA9PT0gXCJZXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNOb0VtcGxveWVycyA9ICFBcnJheS5pc0FycmF5KGVtcE1vZGVscykgfHwgZW1wTW9kZWxzLmxlbmd0aCA9PT0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVxdWlyZSBhdCBsZWFzdCBvbmUgZW1wbG95ZXJcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzTm9FbXBsb3llcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLndjT25lRW1wbG95ZXJWYWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXJyb3JzLndjT25lRW1wbG95ZXJWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGluY29tcGxldGUgZW1wbG95ZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzSW5jb21wbGV0ZUVtcGxveWVycyA9IGVtcE1vZGVscz8uc29tZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZSA9PiAhZS5pc1BhcnRUaW1lRW1wbG95ZXJFZGl0ZWQgJiYgZS5pc1BhcnRUaW1lRW1wbG95ZXJcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW5jb21wbGV0ZUVtcGxveWVycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMud2NFbXBsb3llclZhbGlkYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlcnJvcnMud2NFbXBsb3llclZhbGlkYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW4gdXAgd2hlbiBjb25kaXRpb24gbm8gbG9uZ2VyIGFwcGxpZXNcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXJyb3JzLndjT25lRW1wbG95ZXJWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlcnJvcnMud2NFbXBsb3llclZhbGlkYXRpb247XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgZmluYWwgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA/IGVycm9ycyA6IG51bGwpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1lbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3cnB0V2NFbXBsb3llclZhbGlkYXRpb25cIil7XHJcbiAgICAgICAgICAgICAgICBsZXQgaWZXb3JrUGVyZm9ybWVkID0gZm9ybUdyb3VwLmNvbnRyb2xzW1wid29ya1BlcmZvcm1lZFwiXS52YWx1ZTsgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgIGlmKGlmV29ya1BlcmZvcm1lZCA9PT0gXCJOXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB3cnB0RW1wTW9kZWxzIDogRW1wbG95ZXJJbmZvTW9kZWxbXSA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZih3cnB0RW1wTW9kZWxzKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgd3JwdEVtcExpc3QgPSB3cnB0RW1wTW9kZWxzLmZpbHRlcihlID0+ICFlLmlzUGFydFRpbWVFbXBsb3llckVkaXRlZCAmJiBlLmlzUGFydFRpbWVFbXBsb3llcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYod3JwdEVtcExpc3QgJiYgd3JwdEVtcExpc3QubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRW1wbG95ZXJWYWxpZGF0aW9uIDogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImpvYlRpdGxlVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgam9iVGl0bGVNb2RlbHMgOiBBdXRvY29kZXJNb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBjb2RlIHBsYWNlaG9sZGVyIGZvciBqb2IgdGl0bGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZ2V0T3RoZXJGb3JtRmllbGRzVmFsdWVzKGZpZWxkczogc3RyaW5nW10sIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkgOiBTZXQ8YW55PntcclxuICAgICAgICBsZXQgc2V0IDogU2V0PGFueT4gPSBuZXcgU2V0KCk7XHJcbiAgICAgICAgZmllbGRzLmZvckVhY2ggKGYgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgOiBhbnkgPSBmb3JtR3JvdXAuY29udHJvbHNbZl0/LnZhbHVlO1xyXG4gICAgICAgICAgICB2YWx1ZSAmJiB0eXBlb2YodmFsdWUpID09ICdvYmplY3QnID8gc2V0LmFkZCh2YWx1ZS52YWx1ZSkgOiBzZXQuYWRkKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc2V0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIGNyZWF0ZVZhbGlkYXRvcih2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsIGVsZW1lbnQ6IGFueSk6IEFzeW5jVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzPiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICAgICAgbGV0IGZpZWxkVmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghZmllbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlTmFtZTogc3RyaW5nID0gZWxlbWVudC5zZXJ2aWNlTmFtZTtcclxuICAgICAgICAgICAgbGV0IHNlcnZpY2VDYWxsVHlwZSA9IGVsZW1lbnQuc2VydmljZUNhbGxUeXBlO1xyXG4gICAgICAgICAgICBsZXQgc2VydmljZVR5cGUgPSBlbGVtZW50LnNlcnZpY2VUeXBlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlcnZpY2VDYWxsVHlwZSA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldChgJHtzZXJ2aWNlTmFtZX0ke2ZpZWxkVmFsdWV9YClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3JlcyAnLCByZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZVR5cGUgPT09ICdWQUxJREFURScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZVR5cGUgPT09ICdWQUxJREFURScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZVR5cGUgPT09ICdVUERBVEUnKSB7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldFJlcXVpcmVkSWZWYWxpZGF0aW9uKGVsZW1lbnQ6IEVsZW1lbnRzTW9kZWwsIHNoYXJlZERhdGE6IGFueSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkgPT4ge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdzZXRSZXF1aXJlZElmVmFsaWRhdGlvbiAtLScsZWxlbWVudCk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdmb3JtR3JvdXAgLS0nLGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jdXN0b21UYWcgJiYgZWxlbWVudC5jdXN0b21UYWcgPT09ICdPcHRpb25hbCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNSZXF1aXJlZCA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYoZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSl7XHJcbiAgICAgICAgICAgIGxldCBleHByIDogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCcmJicpO1xyXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKGV4cHIubGVuZ3RoID49IDMpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPj0gNCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihleHByLmxlbmd0aCA9PSA1KXtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwcls0XS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGV4cHIubGVuZ3RoID4gNSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJBcHBWYWxpZGF0b3JzIDogTW9yZSB0aGFuIDUgJyYmJyBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSl7XHJcbiAgICAgICAgICAgIGxldCBleHByIDogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCd8fCcpO1xyXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIGlmKGV4cHIubGVuZ3RoID49IDMpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPj0gNCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihleHByLmxlbmd0aCA9PSA1KXtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwcls0XS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGV4cHIubGVuZ3RoID4gNSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJBcHBWYWxpZGF0b3JzIDogTW9yZSB0aGFuIDUgJ3x8JyBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIWV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykpe1xyXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByZXNzaW9uLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoaXNSZXF1aXJlZCl7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyByZXF1aXJlZElmOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWRJZjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0/LnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByZXNzaW9uOiBzdHJpbmcsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCwgZWxlbWVudDogRWxlbWVudHNNb2RlbCwgc2hhcmVkRGF0YTogYW55KSA6IGJvb2xlYW57XHJcbiAgICAgICAgdmFyIHNwbGl0QXJyYXk7XHJcbiAgICAgICAgbGV0IGlzRG9lc05vdEVxdWFsOiBib29sZWFuO1xyXG4gICAgICAgIGxldCBpc0NvbnRhaW5zOiBib29sZWFuO1xyXG5cclxuICAgICAgICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnPT0nKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnPT0nKTtcclxuICAgICAgICAgICAgaXNEb2VzTm90RXF1YWwgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJyE9JykpIHtcclxuICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJyE9Jyk7XHJcbiAgICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJ2NvbnRhaW5zJykpIHtcclxuICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJ2NvbnRhaW5zJyk7XHJcbiAgICAgICAgICAgIGlzQ29udGFpbnMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgbGV0IG9wZXJhbmQyOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdO1xyXG4gICAgICAgIG9wZXJhbmQxID0gb3BlcmFuZDEucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuICAgICAgICBvcGVyYW5kMiA9IG9wZXJhbmQyLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wxID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXTtcclxuICAgICAgICB2YXIgdmFsdWVPZkFjdHVhbENvbnRyb2w7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgIHZhbHVlT2ZBY3R1YWxDb250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2hhcmVkRGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0ckludG9PYmo6IFtdID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdHJJbnRvT2JqW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZU9mQWN0dWFsQ29udHJvbCA9IHN0ckludG9PYmpbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmFsdWVPZkNucnRybFRvQ2hlY2s7XHJcblxyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdICYmIGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdICYmIGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVsndmFsdWUnXSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddLnRyaW0oKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWzBdKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF2YWx1ZU9mQ25ydHJsVG9DaGVjaykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykpIHtcclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSB2YWx1ZU9mQ25ydHJsVG9DaGVjay50cmltKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiBpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiAhdmFsdWVPZkFjdHVhbENvbnRyb2wpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgdmFsdWVPZkFjdHVhbENvbnRyb2wpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvcGVyYW5kMiA9IG9wZXJhbmQyLnJlcGxhY2UoL1xcJy9nLCBcIlwiKTsgLy9udWxsXHJcblxyXG4gICAgICAgIGlmIChpc0NvbnRhaW5zICYmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiBBcnJheS5pc0FycmF5KHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjay5pbmNsdWRlcyhvcGVyYW5kMikpICYmICFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudD8ubmFtZV0/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmICFBcnJheS5pc0FycmF5KHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjay5pbmNsdWRlcyhvcGVyYW5kMikpICYmICFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudD8ubmFtZV0/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyICE9ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IG9wZXJhbmQyICYmICF2YWx1ZU9mQWN0dWFsQ29udHJvbCAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudD8ubmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyICE9ICdudWxsJyAmJiBpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayAhPSBvcGVyYW5kMiAmJiAhdmFsdWVPZkFjdHVhbENvbnRyb2wpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQGR5bmFtaWNcclxuICAgIHN0YXRpYyBzZXRFcXVhbHNWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldFBhc3N3b3JkVmFsaWRhdGlvbihlbGVtZW50OiBhbnksIHNoYXJlZERhdGE6IGFueSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb246IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCB2YWxpZGF0b3JMaXN0ID0gZWxlbWVudC52YWxpZGF0b3JzO1xyXG4gICAgICAgICAgICB2YXIgc3BsaXRBcnJheTtcclxuICAgICAgICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSB2YWxpZGF0b3IuZXhwcmVzc2lvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gZXhwcmVzc2lvbi5pbmRleE9mKCc9PT0nKTtcclxuICAgICAgICAgICAgbGV0IGlzRXF1YWxPcGVyYW5kOiBib29sZWFuO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnPicpO1xyXG4gICAgICAgICAgICAgICAgaXNFcXVhbE9wZXJhbmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc9PT0nKTtcclxuICAgICAgICAgICAgICAgIGlzRXF1YWxPcGVyYW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IG9wZXJhbmQxOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgICAgIC8vICBjb25zb2xlLmxvZygnc2V0RGF0ZVZhbGlkYXRpb24gc2hhcmVkRGF0YScsIHNoYXJlZERhdGEpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIG9wZXJhbmQxID0gb3BlcmFuZDEucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICBvcGVyYW5kMiA9IG9wZXJhbmQyLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnY29udHJvbC5wYXJlbnQnLCBjb250cm9sLnBhcmVudClcclxuICAgICAgICAgICAgbGV0IGNvbnRyb2wxID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXTtcclxuICAgICAgICAgICAgbGV0IGNvbnRyb2wyID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQyXTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wxLnZhbHVlICE9IGNvbnRyb2wyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBwYXNzd29yZENvbXBhcmlzaW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcGFzc3dvcmRDb21wYXJpc2lvbjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8gQGR5bmFtaWNcclxuICAgIHN0YXRpYyBzZXREYXRlVmFsaWRhdGlvbihlbGVtZW50OiBhbnksIHNoYXJlZERhdGE6IGFueSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb246IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCB2YWxpZGF0b3JMaXN0ID0gZWxlbWVudC52YWxpZGF0b3JzO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgdmFsaWRhdG9yIG9mIHZhbGlkYXRvckxpc3QpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHZhbGlkYXRvci5leHByZXNzaW9uO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmF0b3IgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnPj0nKSB8fCBleHByZXNzaW9uLmluY2x1ZGVzKCc8PScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gZXhwcmVzc2lvbi5pbmNsdWRlcygnPj0nKSA/ICc+PScgOiAnPD0nO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gZXhwcmVzc2lvbi5pbmNsdWRlcygnPicpID8gJz4nIDogJzwnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0QXJyYXk6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdChvcGVyYXRvcikubWFwKHN0ciA9PiBzdHIudHJpbSgpKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wZXJhbmQyOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhbmQxID0gb3BlcmFuZDEucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250cm9sMSA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wyID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQyXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGUxOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGUyOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlMSA9IG5ldyBEYXRlKGNvbnRyb2wxLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWREYXRhLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0ckludG9PYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ckludG9PYmpbb3BlcmFuZDFdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShzdHJJbnRvT2JqW29wZXJhbmQxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTIgPSBuZXcgRGF0ZShjb250cm9sMi52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJJbnRvT2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJJbnRvT2JqW29wZXJhbmQyXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUyID0gbmV3IERhdGUoc3RySW50b09ialtvcGVyYW5kMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlMSAmJiBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IgPT09ICc+PScgJiYgZGF0ZTEgPj0gZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSAnPD0nICYmIGRhdGUxIDw9IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJz4nICYmIGRhdGUxID4gZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSAnPCcgJiYgZGF0ZTEgPCBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBkYXRlQ29tcGFyaXNpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRlQ29tcGFyaXNpb246IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNFcXVhbCh2YWx1ZSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbm90RXF1YWw6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShzdHJFeHA6IHN0cmluZywgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKXtcclxuICAgICAgICB2YXIgc3BsaXRBcnJheTogc3RyaW5nW107XHJcbiAgICAgICAgbGV0IGlzRG9lc05vdEVxdWFsOiBib29sZWFuO1xyXG4gICAgICAgIGxldCBpc0NvbnRhaW5zOiBib29sZWFuO1xyXG4gICAgICAgIGlmIChzdHJFeHAuaW5jbHVkZXMoJz09JykpIHtcclxuICAgICAgICAgIHNwbGl0QXJyYXkgPSBzdHJFeHAuc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZihzdHJFeHAuaW5jbHVkZXMoJyE9Jykpe1xyXG4gICAgICAgICAgc3BsaXRBcnJheSA9IHN0ckV4cC5zcGxpdCgnIT0nKTtcclxuICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYoc3RyRXhwLmluY2x1ZGVzKCdjb250YWlucycpKXtcclxuICAgICAgICAgIHNwbGl0QXJyYXkgPSBzdHJFeHAuc3BsaXQoJ2NvbnRhaW5zJyk7XHJcbiAgICAgICAgICBpc0NvbnRhaW5zID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9wZXJhbmQxOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7IC8vY2xhaW1hbnRQcmlvclBheTEwMlxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTsgLy9udWxsXHJcbiAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ29wZXJhbmQxJyxvcGVyYW5kMSk7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgXHJcbiAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdICYmIGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnb3BlcmFuZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVt2YWx1ZV0nLGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbMF0pO1xyXG4gICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10pIHtcclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddLnRyaW0oKTtcclxuICAgICAgICAgIH0gZWxzZSBpZihmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWzBdKXtcclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiBpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjaykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiAhdmFsdWVPZkNucnRybFRvQ2hlY2spIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvcGVyYW5kMiA9IG9wZXJhbmQyLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpOyAvL251bGxcclxuICAgICAgICBcclxuICAgICAgICBpZihpc0NvbnRhaW5zICYmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiBBcnJheS5pc0FycmF5KHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjay5pbmNsdWRlcyhvcGVyYW5kMikpKXtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGlmKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmICFBcnJheS5pc0FycmF5KHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjay5pbmNsdWRlcyhvcGVyYW5kMikpKXtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgIWlzRG9lc05vdEVxdWFsICYmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gb3BlcmFuZDIpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjay50cmltKCkgIT0gb3BlcmFuZDIpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbn0iXX0=
710
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwVmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL0FwcFZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxNQUFNLE9BQU8sYUFBYTtJQUV0QixXQUFXO0lBQ1gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQVksRUFBRSxVQUEyQixFQUFFLFNBQWlCO1FBQ2hGLElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxNQUFNLElBQUksR0FBRyxDQUFDLFNBQTJCLEVBQUUsRUFBRTtZQUN6QyxJQUFJLGNBQWMsS0FBSywwQkFBMEIsRUFBRTtnQkFDL0MsSUFBSSxHQUE2QixDQUFDO2dCQUNsQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsQyxHQUFHLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUM3QyxJQUFJLEdBQUcsRUFBRTt3QkFDTCxJQUFJLFNBQXlDLENBQUM7d0JBQzlDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO3dCQUMxQixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRzsrQkFDL0UsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ3pCLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMs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ZGF0b3JGbiwgRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFkZHJlc3NDb21wb25lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9BZGRyZXNzQ29tcG9uZW50TW9kZWwnO1xyXG5pbXBvcnQgeyBBbGllbkRvY0NvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvQWxpZW5Eb2NDb21wb25lbnRNb2RlbCc7XHJcbmltcG9ydCB7IEJhbmtEZXRhaWxzQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvQmFua0RldGFpbHNDb21wb25lbnRNb2RlbCc7XHJcbmltcG9ydCB7IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9DbGFpbUFwcEVtcGxveWVyRGV0YWlsc01vZGVsJztcclxuaW1wb3J0IHsgQ2xhaW1BcHBFbXBSZXNwb25zZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvQ2xhaW1BcHBFbXBSZXNwb25zZU1vZGVsJztcclxuaW1wb3J0IHsgRWxlbWVudHNNb2RlbCwgVmFsaWRhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvRWxlbWVudHNNb2RlbCc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcXVlc3Rpb25uYWlyZS92YWxpZGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbXBsb3llckluZm9Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9FbXBsb3llckRldGFpbFNlYXJjaFJlc3VsdCc7XHJcbmltcG9ydCB7IEF1dG9jb2Rlck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvQXV0b2NvZGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBBcHBSZWdleCB9IGZyb20gJy4uLy4uL3ZhbGlkYXRpb25zL0FwcFJlZ2V4JztcclxuaW1wb3J0IHsgQWxpZW5Db25zdGFudHMgfSBmcm9tICcuLi9xdWVzdGlvbm5haXJlL0FsaWVuQ29uc3RhbnRzJztcclxuZXhwb3J0IGNsYXNzIEFwcFZhbGlkYXRvcnMge1xyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgY3VzdG9tVmFsaWRhdGlvbihlbGVtZW50OiBhbnksIHZhbGlkYXRpb246IFZhbGlkYXRpb25Nb2RlbCwgc3RhdGVOYW1lOiBzdHJpbmcsKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGxldCB2YWxpZGF0aW9uTmFtZSA9IHZhbGlkYXRpb24uY3VzdG9tVmFsaWRhdGlvbk5hbWU7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImJhc2VQZXJpb2RFbXBsVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsOiBDbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWw7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBicEVtcExpc3Q6IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWxbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnBFbXBMaXN0ID0gdmFsLmJwRW1wTGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1snd29ya2ZvcmVtcCddICYmIGZvcm1Hcm91cC5jb250cm9sc1snd29ya2ZvcmVtcCddLnZhbHVlID09PSAnWSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGJwRW1wTGlzdC5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBicEVtcGxyTGVuZ3RoRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGJwRW1wbHJMZW5ndGhGbGFnOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYnBFbXAgb2YgYnBFbXBMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnBFbXAuYnBFbXBsb3llckZsYWcgPT09ICcxJyAmJiAhYnBFbXAuZW1wRGVsZXRlZCApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBicEVtcGxyRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBicEVtcGxyRmxhZzogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwic2ltcGxlQ2hlY2tCb3hWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgc2ltcGxlQ2hlY2tCb3hWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImNwYXRjaHZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBjcGF0Y2h2YWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ1cGxvYWR2YWxpZGF0aW9uXCIpIHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlIHx8IChBcnJheS5pc0FycmF5KGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlKSAmJiAhZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB1cGxvYWR2YWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1lbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJkb2NUeXBlVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbGllbkRvY0NvbXBWYWx1ZTogQWxpZW5Eb2NDb21wb25lbnRNb2RlbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0RG9jRXJyb3IgPSAoKSA9PiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBkb2NUeXBlVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0ZpZWxkSW52YWxpZCA9ICh2YWw6IHN0cmluZywgcmVnZXg6IFJlZ0V4cCkgPT4gIXZhbCB8fCAhcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNPcHRGaWVsZEludmFsaWQgPSAodmFsOiBzdHJpbmcsIHJlZ2V4OiBSZWdFeHApID0+IHZhbCAmJiAhcmVnZXgudGVzdCh2YWwpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIE51bGwvZW1wdHkgZ3VhcmRcclxuICAgICAgICAgICAgICAgIGlmICghYWxpZW5Eb2NDb21wVmFsdWUgfHwgKHR5cGVvZiBhbGllbkRvY0NvbXBWYWx1ZSA9PT0gJ29iamVjdCcgJiYgIWFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuRG9jVHlwZSAmJiBPYmplY3Qua2V5cyhhbGllbkRvY0NvbXBWYWx1ZSkuZXZlcnkoayA9PiBhbGllbkRvY0NvbXBWYWx1ZVtrXSA9PSBudWxsKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0QXJyID0gZWxlbWVudC5yZXF1aXJlZElmLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdHJsTmFtZSA9IHNwbGl0QXJyWzBdLnJlcGxhY2UoL1t7fV0vZywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gc3BsaXRBcnJbMV0ucmVwbGFjZSgvJy9nLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2N0cmxOYW1lXT8udmFsdWU/LnRyaW0oKSA9PT0gdmFsKSBzZXREb2NFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldERvY0Vycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghYWxpZW5Eb2NDb21wVmFsdWUuYWxpZW5Eb2NUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0RG9jRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY1R5cGUgPSBhbGllbkRvY0NvbXBWYWx1ZS5hbGllbkRvY1R5cGUudmFsdWU7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBBbGllbiBOdW1iZXIgLSByZXF1aXJlZCBmb3IgbW9zdCB0eXBlcyAob3B0aW9uYWwgZm9yIENFQ0gpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBBTElFTl9OVU1fUkVRVUlSRUQgPSBbQWxpZW5Db25zdGFudHMuSTMyNywgQWxpZW5Db25zdGFudHMuSTU3MSwgQWxpZW5Db25zdGFudHMuSTU1MSwgQWxpZW5Db25zdGFudHMuSTc2NiwgQWxpZW5Db25zdGFudHMuQ0VDSSwgQWxpZW5Db25zdGFudHMuTkFUQywgQWxpZW5Db25zdGFudHMuTVJJViwgQWxpZW5Db25zdGFudHMuVDU1MSwgQWxpZW5Db25zdGFudHMuT1RIUl07XHJcbiAgICAgICAgICAgICAgICBpZiAoQUxJRU5fTlVNX1JFUVVJUkVELmluY2x1ZGVzKGRvY1R5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRmllbGRJbnZhbGlkKGFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuTnVtYmVyLCBBcHBSZWdleC5BTElFTl9fRE9DX05VTUJFUl9SRUdFWCkpIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9jVHlwZSA9PT0gQWxpZW5Db25zdGFudHMuQ0VDSCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09wdEZpZWxkSW52YWxpZChhbGllbkRvY0NvbXBWYWx1ZS5hbGllbk51bWJlciwgQXBwUmVnZXguQUxJRU5fX0RPQ19OVU1CRVJfUkVHRVgpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ2FyZCBOdW1iZXIgKEk1NTEsIEk3NjYpXHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jVHlwZSA9PT0gQWxpZW5Db25zdGFudHMuSTU1MSB8fCBkb2NUeXBlID09PSBBbGllbkNvbnN0YW50cy5JNzY2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRmllbGRJbnZhbGlkKGFsaWVuRG9jQ29tcFZhbHVlLmNhcmROdW1iZXIsIEFwcFJlZ2V4Lkk1NTFfUkVHRVgpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY1R5cGUgPT09IEFsaWVuQ29uc3RhbnRzLkk3NjYgJiYgIWFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuRG9jRXhwRGF0ZSkgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIE5hdHVyYWxpemF0aW9uIE51bWJlciAoQ0VDSCwgQ0VDSSwgTkFUQylcclxuICAgICAgICAgICAgICAgIGlmIChkb2NUeXBlID09PSBBbGllbkNvbnN0YW50cy5DRUNIICB8fCBkb2NUeXBlID09PSBBbGllbkNvbnN0YW50cy5OQVRDKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRmllbGRJbnZhbGlkKGFsaWVuRG9jQ29tcFZhbHVlLm5hdHVyYWxpemF0aW9uTnVtYmVyLCBBcHBSZWdleC5OQVRVUkFMSVpBVElPTl9OVU1CRVJfUkVHRVgpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBDaXRpem9TaGlwIE51bWJlciAoQ0VDSSlcclxuICAgICAgICAgICAgICAgIGlmIChkb2NUeXBlID09PSBBbGllbkNvbnN0YW50cy5DRUNJKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRmllbGRJbnZhbGlkKGFsaWVuRG9jQ29tcFZhbHVlLmNpdGl6ZW5zaGlwTnVtYmVyLCBBcHBSZWdleC5OQVRVUkFMSVpBVElPTl9OVU1CRVJfUkVHRVgpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTVJJViAtIHBhc3Nwb3J0IHJlcXVpcmVkLCB2aXNhIG9wdGlvbmFsXHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jVHlwZSA9PT0gQWxpZW5Db25zdGFudHMuTVJJVikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0ZpZWxkSW52YWxpZChhbGllbkRvY0NvbXBWYWx1ZS5hbGllbkRvY1Bhc3Nwb3J0TnVtYmVyLCBBcHBSZWdleC5QQVNTUE9SVF9OVU1CRVJfUkVHRVgpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzT3B0RmllbGRJbnZhbGlkKGFsaWVuRG9jQ29tcFZhbHVlLnZpc2FOdW1iZXIsIEFwcFJlZ2V4LlZJU0FfTlVNQkVSX1JFR0VYKSkgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxpZW5Eb2NDb21wVmFsdWUuY291bnRyeU9mSXNzdWFuY2UgfHwgKHR5cGVvZiBhbGllbkRvY0NvbXBWYWx1ZS5jb3VudHJ5T2ZJc3N1YW5jZSA9PT0gJ3N0cmluZycgJiYgIWFsaWVuRG9jQ29tcFZhbHVlLmNvdW50cnlPZklzc3VhbmNlLnRyaW0oKSkpIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBUNTUxIC0gcGFzc3BvcnQgb3B0aW9uYWxcclxuICAgICAgICAgICAgICAgIGlmIChkb2NUeXBlID09PSBBbGllbkNvbnN0YW50cy5UNTUxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzT3B0RmllbGRJbnZhbGlkKGFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuRG9jUGFzc3BvcnROdW1iZXIsIEFwcFJlZ2V4LlBBU1NQT1JUX05VTUJFUl9SRUdFWCkpIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxpZW5Eb2NDb21wVmFsdWUuYWxpZW5Eb2NQYXNzcG9ydE51bWJlciAmJiAoIWFsaWVuRG9jQ29tcFZhbHVlLmNvdW50cnlPZklzc3VhbmNlIHx8ICh0eXBlb2YgYWxpZW5Eb2NDb21wVmFsdWUuY291bnRyeU9mSXNzdWFuY2UgPT09ICdzdHJpbmcnICYmICFhbGllbkRvY0NvbXBWYWx1ZS5jb3VudHJ5T2ZJc3N1YW5jZS50cmltKCkpKSkgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEktOTRcclxuICAgICAgICAgICAgICAgIGlmIChkb2NUeXBlID09PSBBbGllbkNvbnN0YW50cy5JOTQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW2RvY1R5cGVWYWxpZGF0aW9uXSBJOTQgLSBhbGllbkRvY051bWJlckk5NDonLCBhbGllbkRvY0NvbXBWYWx1ZS5hbGllbkRvY051bWJlckk5NCwgJywgZG9jVHlwZTonLCBkb2NUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuRG9jTnVtYmVySTk0IHx8ICFBcHBSZWdleC5JOTRfRE9DX05VTUJFUl9SRUdFWC50ZXN0KGFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuRG9jTnVtYmVySTk0KSkgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGllbkRvY0NvbXBWYWx1ZS5hbGllbkRvY1N2c0lkICYmICFBcHBSZWdleC5TVklTX0lEX05VTUJFUl9SRUdFWC50ZXN0KGFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuRG9jU3ZzSWQpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tkb2NUeXBlVmFsaWRhdGlvbl0gSTk0IC0gaGFzRXJyb3I6JywgaGFzRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEk5NFVcclxuICAgICAgICAgICAgICAgIGlmIChkb2NUeXBlID09PSBBbGllbkNvbnN0YW50cy5JOTRVKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRmllbGRJbnZhbGlkKGFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuRG9jTnVtYmVySTk0LCBBcHBSZWdleC5JOTRfRE9DX05VTUJFUl9SRUdFWCkpIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPcHRGaWVsZEludmFsaWQoYWxpZW5Eb2NDb21wVmFsdWUuYWxpZW5Eb2NTdnNJZCwgQXBwUmVnZXguU1ZJU19JRF9OVU1CRVJfUkVHRVgpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGllbkRvY0NvbXBWYWx1ZS5hbGllbkRvY0V4cERhdGUpIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGaWVsZEludmFsaWQoYWxpZW5Eb2NDb21wVmFsdWUuYWxpZW5Eb2NQYXNzcG9ydE51bWJlciwgQXBwUmVnZXguUEFTU1BPUlRfTlVNQkVSX1JFR0VYKSkgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09wdEZpZWxkSW52YWxpZChhbGllbkRvY0NvbXBWYWx1ZS52aXNhTnVtYmVyLCBBcHBSZWdleC5WSVNBX05VTUJFUl9SRUdFWCkpIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFsaWVuRG9jQ29tcFZhbHVlLmNvdW50cnlPZklzc3VhbmNlIHx8ICh0eXBlb2YgYWxpZW5Eb2NDb21wVmFsdWUuY291bnRyeU9mSXNzdWFuY2UgPT09ICdzdHJpbmcnICYmICFhbGllbkRvY0NvbXBWYWx1ZS5jb3VudHJ5T2ZJc3N1YW5jZS50cmltKCkpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRFMtMjAxOSAvIEktMjAgKENFRVYpXHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jVHlwZSA9PT0gQWxpZW5Db25zdGFudHMuQ0VFViB8fCBkb2NUeXBlID09PSBBbGllbkNvbnN0YW50cy5JMjAgfHwgZG9jVHlwZSA9PT0gQWxpZW5Db25zdGFudHMuVU5GUCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09wdEZpZWxkSW52YWxpZChhbGllbkRvY0NvbXBWYWx1ZS5hbGllbkRvY051bWJlckk5NCwgQXBwUmVnZXguSTk0X0RPQ19OVU1CRVJfUkVHRVgpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY1R5cGUgIT09IEFsaWVuQ29uc3RhbnRzLlVORlAgJiYgaXNGaWVsZEludmFsaWQoYWxpZW5Eb2NDb21wVmFsdWUuYWxpZW5Eb2NTdnNJZCwgQXBwUmVnZXguU1ZJU19JRF9OVU1CRVJfUkVHRVgpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY1R5cGUgPT09IEFsaWVuQ29uc3RhbnRzLlVORlAgJiYgaXNPcHRGaWVsZEludmFsaWQoYWxpZW5Eb2NDb21wVmFsdWUuYWxpZW5Eb2NTdnNJZCwgQXBwUmVnZXguU1ZJU19JRF9OVU1CRVJfUkVHRVgpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY1R5cGUgPT09IEFsaWVuQ29uc3RhbnRzLlVORlAgJiYgaXNGaWVsZEludmFsaWQoYWxpZW5Eb2NDb21wVmFsdWUuYWxpZW5Eb2NQYXNzcG9ydE51bWJlciwgQXBwUmVnZXguUEFTU1BPUlRfTlVNQkVSX1JFR0VYKSkgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb2NUeXBlICE9PSBBbGllbkNvbnN0YW50cy5VTkZQICYmIGlzT3B0RmllbGRJbnZhbGlkKGFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuRG9jUGFzc3BvcnROdW1iZXIsIEFwcFJlZ2V4LlBBU1NQT1JUX05VTUJFUl9SRUdFWCkpIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9jVHlwZSA9PT0gQWxpZW5Db25zdGFudHMuVU5GUCAmJiAhYWxpZW5Eb2NDb21wVmFsdWUuYWxpZW5Eb2NFeHBEYXRlKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY1R5cGUgPT09IEFsaWVuQ29uc3RhbnRzLlVORlAgJiYgKCFhbGllbkRvY0NvbXBWYWx1ZS5jb3VudHJ5T2ZJc3N1YW5jZSB8fCAodHlwZW9mIGFsaWVuRG9jQ29tcFZhbHVlLmNvdW50cnlPZklzc3VhbmNlID09PSAnc3RyaW5nJyAmJiAhYWxpZW5Eb2NDb21wVmFsdWUuY291bnRyeU9mSXNzdWFuY2UudHJpbSgpKSkpIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9jVHlwZSAhPT0gQWxpZW5Db25zdGFudHMuVU5GUCAmJiBhbGllbkRvY0NvbXBWYWx1ZS5hbGllbkRvY1Bhc3Nwb3J0TnVtYmVyICYmICghYWxpZW5Eb2NDb21wVmFsdWUuY291bnRyeU9mSXNzdWFuY2UgfHwgKHR5cGVvZiBhbGllbkRvY0NvbXBWYWx1ZS5jb3VudHJ5T2ZJc3N1YW5jZSA9PT0gJ3N0cmluZycgJiYgIWFsaWVuRG9jQ29tcFZhbHVlLmNvdW50cnlPZklzc3VhbmNlLnRyaW0oKSkpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gT1RIUlxyXG4gICAgICAgICAgICAgICAgaWYgKGRvY1R5cGUgPT09IEFsaWVuQ29uc3RhbnRzLk9USFIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGaWVsZEludmFsaWQoYWxpZW5Eb2NDb21wVmFsdWUuYWxpZW5Eb2NOdW1iZXJJOTQsIEFwcFJlZ2V4Lkk5NF9ET0NfTlVNQkVSX1JFR0VYKSkgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09wdEZpZWxkSW52YWxpZChhbGllbkRvY0NvbXBWYWx1ZS5hbGllbkRvY1Bhc3Nwb3J0TnVtYmVyLCBBcHBSZWdleC5QQVNTUE9SVF9OVU1CRVJfUkVHRVgpKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzT3B0RmllbGRJbnZhbGlkKGFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuRG9jU3ZzSWQsIEFwcFJlZ2V4LlNWSVNfSURfTlVNQkVSX1JFR0VYKSkgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxpZW5Eb2NDb21wVmFsdWUuYWxpZW5Eb2NEZXNjcmlwdGlvbiB8fCAhQXBwUmVnZXguRE9DVU1FTlRfREVTQ19SRUdFWC50ZXN0KGFsaWVuRG9jQ29tcFZhbHVlLmFsaWVuRG9jRGVzY3JpcHRpb24pKSBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0Vycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0RG9jRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImFkZHJlc3NWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkaWZmbWFpbGFkZHJlc3MgOmJvb2xlYW49ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZihmb3JtR3JvdXAudmFsdWUuZGlmZm1haWxhZGRyZXNzPT09J1knfHwgZm9ybUdyb3VwLnZhbHVlLmRpZmZNYWlsaW5nQWRkcmVzcz09PSdZJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlmZm1haWxhZGRyZXNzPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgYWRkcmVzc0NvbXBWYWx1ZTogQWRkcmVzc0NvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0NvbXBWYWx1ZSA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzQ29tcFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWRkcmVzc0NvbXBWYWx1ZS5jaXR5IHx8ICFhZGRyZXNzQ29tcFZhbHVlLnN0YXRlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWRkcmVzc0NvbXBWYWx1ZVsnemlwJ10gfHwgIWFkZHJlc3NDb21wVmFsdWUuY291bnRyeSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFkZHJlc3NDb21wVmFsdWVbJ3N0cmVldEFkZHJlc3MnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAvL1BHTFAtNDIzMyBBZGQgdGhlIGNvbmRpdGlvbiBmb3IgS1NcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSAmJiAoKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdNUycgJiYgc3RhdGVOYW1lID09PSAnTVMnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdDVCcgJiYgc3RhdGVOYW1lID09PSAnQ1QnKXx8IChhZGRyZXNzQ29tcFZhbHVlLnN0YXRlLnZhbHVlID09PSAnS1MnICYmIHN0YXRlTmFtZSA9PT0gJ0tTJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZWxlbWVudC5jb3VudHlSZXF1aXJlZCA9PT0gdHJ1ZSAmJiAhYWRkcmVzc0NvbXBWYWx1ZVsnY291bnR5J10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGRpZmZtYWlsYWRkcmVzcyAmJiBhZGRyZXNzQ29tcFZhbHVlLnN0YXRlLnZhbHVlID09PSAnS1MnICYmIHN0YXRlTmFtZSA9PT0gJ0tTJyAgJiYgYWRkcmVzc0NvbXBWYWx1ZS5jb3VudHk9PT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzQ29tcFZhbHVlLnN0YXRlICYmIGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdNRScgJiYgc3RhdGVOYW1lID09PSAnTUUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlbGVtZW50LmNvdW50eVJlcXVpcmVkID09PSB0cnVlICYmICFhZGRyZXNzQ29tcFZhbHVlWyd0b3duJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkcmVzc0NvbXBWYWx1ZS5jb3VudHJ5LnZhbHVlID09PSAnVVMnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoL15cXGR7NX0oXFxkezR9KT8kLy50ZXN0KGFkZHJlc3NDb21wVmFsdWUuemlwKSkpIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZHJlc3NDb21wVmFsdWUuY291bnRyeS52YWx1ZSA9PT0gJ0NBJyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhKCAvXltBQkNFR0hKLU5QUlNUVlhZXVxcZFtBQkNFR0hKLU5QUlNUVi1aXVsgLV0/XFxkW0FCQ0VHSEotTlBSU1RWLVpdXFxkJC9pLnRlc3QoYWRkcmVzc0NvbXBWYWx1ZS56aXApKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udG9sTmFtZTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRvbE5hbWUgPSBjb250b2xOYW1lLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImJhbmtEZXRhaWxzVmFsaWRhdGlvbkZsYWdcIikge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBiYW5rRGV0YWlsc0NvbXBvbmVudFZhbDogQmFua0RldGFpbHNDb21wb25lbnRNb2RlbDtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRvbE5hbWU6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250b2xOYW1lID0gY29udG9sTmFtZS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCdcXCcnLCAnJykucmVwbGFjZSgnXFwnJywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYW5rRGV0YWlsc0NvbXBvbmVudFZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5hY2NvdW50TnVtYmVyIHx8ICFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5hY2NvdW50VHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5uYW1lT25BY2NvdW50IHx8ICFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5yZUVudGVyQWNjb3VudE51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5yb3V0aW5nTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGJhbmtEZXRhaWxzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcIm5vdEVxdWFsc1wiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkczogc3RyaW5nW10gPSB2YWxpZGF0aW9uLmV4cHJlc3Npb24uc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IGN1cnJlbnRGb3JtQ29udHJvbC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZSA9IGZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC50cmltKCldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3RoZXJGaWVsZFZhbHVlID0gb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAmJiBvdGhlckZpZWxkVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgodmFsLnZhbHVlICYmIG90aGVyRmllbGRWYWx1ZS52YWx1ZSAmJiB2YWwudmFsdWUgPT09IG90aGVyRmllbGRWYWx1ZS52YWx1ZSkgfHwgdmFsID09PSBvdGhlckZpZWxkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lLnNldEVycm9ycyh7IG5vdEVxdWFsczogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFjdXJyZW50Rm9ybUNvbnRyb2wuZXJyb3JzICYmIHZhbCAmJiBvdGhlckZpZWxkVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHZhbC52YWx1ZSAmJiBvdGhlckZpZWxkVmFsdWUudmFsdWUgJiYgdmFsLnZhbHVlICE9IG90aGVyRmllbGRWYWx1ZS52YWx1ZSkgfHwgdmFsICE9IG90aGVyRmllbGRWYWx1ZSkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgOiBTZXQ8YW55PiA9IHRoaXMuZ2V0T3RoZXJGb3JtRmllbGRzVmFsdWVzKGZpZWxkcywgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZXMuc2l6ZSA9PSBmaWVsZHMubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwid2NFbXBsb3llclZhbGlkYXRpb25cIil7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbXBNb2RlbHM6IEVtcGxveWVySW5mb01vZGVsW10gPSBjb250cm9sPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlmV29ya1BlcmZvcm1lZCA9IGZvcm1Hcm91cC5jb250cm9sc1tcIndvcmtQZXJmb3JtZWRcIl0/LnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHsgLi4uKGNvbnRyb2wuZXJyb3JzIHx8IHt9KSB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpZldvcmtQZXJmb3JtZWQgPT09IFwiWVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzTm9FbXBsb3llcnMgPSAhQXJyYXkuaXNBcnJheShlbXBNb2RlbHMpIHx8IGVtcE1vZGVscy5sZW5ndGggPT09IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlcXVpcmUgYXQgbGVhc3Qgb25lIGVtcGxveWVyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc05vRW1wbG95ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy53Y09uZUVtcGxveWVyVmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9ycy53Y09uZUVtcGxveWVyVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbmNvbXBsZXRlIGVtcGxveWVyc1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0luY29tcGxldGVFbXBsb3llcnMgPSBlbXBNb2RlbHM/LnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPT4gIWUuaXNQYXJ0VGltZUVtcGxveWVyRWRpdGVkICYmIGUuaXNQYXJ0VGltZUVtcGxveWVyXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0luY29tcGxldGVFbXBsb3llcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLndjRW1wbG95ZXJWYWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXJyb3JzLndjRW1wbG95ZXJWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwIHdoZW4gY29uZGl0aW9uIG5vIGxvbmdlciBhcHBsaWVzXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9ycy53Y09uZUVtcGxveWVyVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXJyb3JzLndjRW1wbG95ZXJWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEFwcGx5IGZpbmFsIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPyBlcnJvcnMgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9ZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwid3JwdFdjRW1wbG95ZXJWYWxpZGF0aW9uXCIpe1xyXG4gICAgICAgICAgICAgICAgbGV0IGlmV29ya1BlcmZvcm1lZCA9IGZvcm1Hcm91cC5jb250cm9sc1tcIndvcmtQZXJmb3JtZWRcIl0udmFsdWU7ICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICBpZihpZldvcmtQZXJmb3JtZWQgPT09IFwiTlwiKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgd3JwdEVtcE1vZGVscyA6IEVtcGxveWVySW5mb01vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYod3JwdEVtcE1vZGVscyl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdycHRFbXBMaXN0ID0gd3JwdEVtcE1vZGVscy5maWx0ZXIoZSA9PiAhZS5pc1BhcnRUaW1lRW1wbG95ZXJFZGl0ZWQgJiYgZS5pc1BhcnRUaW1lRW1wbG95ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHdycHRFbXBMaXN0ICYmIHdycHRFbXBMaXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y0VtcGxveWVyVmFsaWRhdGlvbiA6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJqb2JUaXRsZVZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGpvYlRpdGxlTW9kZWxzIDogQXV0b2NvZGVyTW9kZWxbXSA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gY29kZSBwbGFjZWhvbGRlciBmb3Igam9iIHRpdGxlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGdldE90aGVyRm9ybUZpZWxkc1ZhbHVlcyhmaWVsZHM6IHN0cmluZ1tdLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIDogU2V0PGFueT57XHJcbiAgICAgICAgbGV0IHNldCA6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xyXG4gICAgICAgIGZpZWxkcy5mb3JFYWNoIChmID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlIDogYW55ID0gZm9ybUdyb3VwLmNvbnRyb2xzW2ZdPy52YWx1ZTtcclxuICAgICAgICAgICAgdmFsdWUgJiYgdHlwZW9mKHZhbHVlKSA9PSAnb2JqZWN0JyA/IHNldC5hZGQodmFsdWUudmFsdWUpIDogc2V0LmFkZCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHNldDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQGR5bmFtaWNcclxuICAgIHN0YXRpYyBjcmVhdGVWYWxpZGF0b3IodmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLCBlbGVtZW50OiBhbnkpOiBBc3luY1ZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycz4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgIGxldCBmaWVsZFZhbHVlOiBzdHJpbmcgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoIWZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgc2VydmljZU5hbWU6IHN0cmluZyA9IGVsZW1lbnQuc2VydmljZU5hbWU7XHJcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlQ2FsbFR5cGUgPSBlbGVtZW50LnNlcnZpY2VDYWxsVHlwZTtcclxuICAgICAgICAgICAgbGV0IHNlcnZpY2VUeXBlID0gZWxlbWVudC5zZXJ2aWNlVHlwZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlQ2FsbFR5cGUgPT09ICdHRVQnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXQoYCR7c2VydmljZU5hbWV9JHtmaWVsZFZhbHVlfWApXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXMgJywgcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VUeXBlID09PSAnVkFMSURBVEUnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VUeXBlID09PSAnVkFMSURBVEUnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VUeXBlID09PSAnVVBEQVRFJykge1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQGR5bmFtaWNcclxuICAgIHN0YXRpYyBzZXRSZXF1aXJlZElmVmFsaWRhdGlvbihlbGVtZW50OiBFbGVtZW50c01vZGVsLCBzaGFyZWREYXRhOiBhbnkpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnc2V0UmVxdWlyZWRJZlZhbGlkYXRpb24gLS0nLGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZm9ybUdyb3VwIC0tJyxmb3JtR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuY3VzdG9tVGFnICYmIGVsZW1lbnQuY3VzdG9tVGFnID09PSAnT3B0aW9uYWwnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGlzUmVxdWlyZWQgOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmKGV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8Jykpe1xyXG4gICAgICAgICAgICBsZXQgZXhwciA6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZihleHByLmxlbmd0aCA+PSAzKXtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsyXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGV4cHIubGVuZ3RoID49IDQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzNdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPT0gNSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihleHByLmxlbmd0aCA+IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICcmJicgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKGV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykpe1xyXG4gICAgICAgICAgICBsZXQgZXhwciA6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnfHwnKTtcclxuICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICBpZihleHByLmxlbmd0aCA+PSAzKXtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsyXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGV4cHIubGVuZ3RoID49IDQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzNdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPT0gNSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihleHByLmxlbmd0aCA+IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICd8fCcgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpKXtcclxuICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwcmVzc2lvbi50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKGlzUmVxdWlyZWQpe1xyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgcmVxdWlyZWRJZjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkSWY6IHRydWUgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdPy5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwcmVzc2lvbjogc3RyaW5nLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIGVsZW1lbnQ6IEVsZW1lbnRzTW9kZWwsIHNoYXJlZERhdGE6IGFueSkgOiBib29sZWFue1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5O1xyXG4gICAgICAgIGxldCBpc0RvZXNOb3RFcXVhbDogYm9vbGVhbjtcclxuICAgICAgICBsZXQgaXNDb250YWluczogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJz09JykpIHtcclxuICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCchPScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCchPScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCdjb250YWlucycpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCdjb250YWlucycpO1xyXG4gICAgICAgICAgICBpc0NvbnRhaW5zID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9wZXJhbmQxOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG5cclxuICAgICAgICBjb25zdCBjb250cm9sMSA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV07XHJcbiAgICAgICAgdmFyIHZhbHVlT2ZBY3R1YWxDb250cm9sO1xyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQWN0dWFsQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNoYXJlZERhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzdHJJbnRvT2JqOiBbXSA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RySW50b09ialtlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVPZkFjdHVhbENvbnRyb2wgPSBzdHJJbnRvT2JqW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrO1xyXG5cclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlICYmIHR5cGVvZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSkudmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlICYmIHR5cGVvZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSkudmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10pIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVsndmFsdWUnXS50cmltKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVswXSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmFsdWVPZkNucnRybFRvQ2hlY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spKSB7XHJcbiAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gdmFsdWVPZkNucnRybFRvQ2hlY2sudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIXZhbHVlT2ZBY3R1YWxDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgIWlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZBY3R1YWxDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKC9cXCcvZywgXCJcIik7IC8vbnVsbFxyXG5cclxuICAgICAgICBpZiAoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2suaW5jbHVkZXMob3BlcmFuZDIpKSAmJiAhZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQ/Lm5hbWVdPy52YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0NvbnRhaW5zICYmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2suaW5jbHVkZXMob3BlcmFuZDIpKSAmJiAhZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQ/Lm5hbWVdPy52YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgIWlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSBvcGVyYW5kMiAmJiAhdmFsdWVPZkFjdHVhbENvbnRyb2wgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQ/Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgIT0gb3BlcmFuZDIgJiYgIXZhbHVlT2ZBY3R1YWxDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0RXF1YWxzVmFsaWRhdGlvbihlbGVtZW50OiBhbnksIHNoYXJlZERhdGE6IGFueSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQGR5bmFtaWNcclxuICAgIHN0YXRpYyBzZXRQYXNzd29yZFZhbGlkYXRpb24oZWxlbWVudDogYW55LCBzaGFyZWREYXRhOiBhbnkpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IGVsZW1lbnQudmFsaWRhdG9ycztcclxuICAgICAgICAgICAgdmFyIHNwbGl0QXJyYXk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvckxpc3QuZm9yRWFjaCh2YWxpZGF0b3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdmFsaWRhdG9yLmV4cHJlc3Npb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IGV4cHJlc3Npb24uaW5kZXhPZignPT09Jyk7XHJcbiAgICAgICAgICAgIGxldCBpc0VxdWFsT3BlcmFuZDogYm9vbGVhbjtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz4nKTtcclxuICAgICAgICAgICAgICAgIGlzRXF1YWxPcGVyYW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnPT09Jyk7XHJcbiAgICAgICAgICAgICAgICBpc0VxdWFsT3BlcmFuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgbGV0IG9wZXJhbmQyOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdO1xyXG4gICAgICAgICAgICAvLyAgY29uc29sZS5sb2coJ3NldERhdGVWYWxpZGF0aW9uIHNoYXJlZERhdGEnLCBzaGFyZWREYXRhKTtcclxuXHJcblxyXG4gICAgICAgICAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKTtcclxuICAgICAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2NvbnRyb2wucGFyZW50JywgY29udHJvbC5wYXJlbnQpXHJcbiAgICAgICAgICAgIGxldCBjb250cm9sMSA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV07XHJcbiAgICAgICAgICAgIGxldCBjb250cm9sMiA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMl07XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sMS52YWx1ZSAhPSBjb250cm9sMi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgcGFzc3dvcmRDb21wYXJpc2lvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHBhc3N3b3JkQ29tcGFyaXNpb246IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0RGF0ZVZhbGlkYXRpb24oZWxlbWVudDogYW55LCBzaGFyZWREYXRhOiBhbnkpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IGVsZW1lbnQudmFsaWRhdG9ycztcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSB2YWxpZGF0b3IuZXhwcmVzc2lvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wZXJhdG9yID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJz49JykgfHwgZXhwcmVzc2lvbi5pbmNsdWRlcygnPD0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uaW5jbHVkZXMoJz49JykgPyAnPj0nIDogJzw9JztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uaW5jbHVkZXMoJz4nKSA/ICc+JyA6ICc8JztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdEFycmF5OiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQob3BlcmF0b3IpLm1hcChzdHIgPT4gc3RyLnRyaW0oKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wZXJhbmQxOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYW5kMiA9IG9wZXJhbmQyLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250cm9sMiA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlMTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlMjogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShjb250cm9sMS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJJbnRvT2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJJbnRvT2JqW29wZXJhbmQxXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoc3RySW50b09ialtvcGVyYW5kMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUyID0gbmV3IERhdGUoY29udHJvbDIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZERhdGEuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RySW50b09ialtvcGVyYW5kMl0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKHN0ckludG9PYmpbb3BlcmFuZDJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZTEgJiYgZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnPj0nICYmIGRhdGUxID49IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJzw9JyAmJiBkYXRlMSA8PSBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09ICc+JyAmJiBkYXRlMSA+IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJzwnICYmIGRhdGUxIDwgZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRXF1YWwodmFsdWUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG5vdEVxdWFsOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjYWxjdWxhdGVPcGVyYW5kVmFsdWUoc3RyRXhwOiBzdHJpbmcsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCl7XHJcbiAgICAgICAgdmFyIHNwbGl0QXJyYXk6IHN0cmluZ1tdO1xyXG4gICAgICAgIGxldCBpc0RvZXNOb3RFcXVhbDogYm9vbGVhbjtcclxuICAgICAgICBsZXQgaXNDb250YWluczogYm9vbGVhbjtcclxuICAgICAgICBpZiAoc3RyRXhwLmluY2x1ZGVzKCc9PScpKSB7XHJcbiAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgaXNEb2VzTm90RXF1YWwgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYoc3RyRXhwLmluY2x1ZGVzKCchPScpKXtcclxuICAgICAgICAgIHNwbGl0QXJyYXkgPSBzdHJFeHAuc3BsaXQoJyE9Jyk7XHJcbiAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmKHN0ckV4cC5pbmNsdWRlcygnY29udGFpbnMnKSl7XHJcbiAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCdjb250YWlucycpO1xyXG4gICAgICAgICAgaXNDb250YWlucyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpOyAvL2NsYWltYW50UHJpb3JQYXkxMDJcclxuICAgICAgICBvcGVyYW5kMiA9IG9wZXJhbmQyLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7IC8vbnVsbFxyXG4gICAgICAgIHZhciB2YWx1ZU9mQ25ydHJsVG9DaGVjaztcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdvcGVyYW5kMScsb3BlcmFuZDEpO1xyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdICYmIGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIFxyXG4gICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlICYmIHR5cGVvZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSkudmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ29wZXJhbmZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbdmFsdWVdJyxmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWzBdKTtcclxuICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddKSB7XHJcbiAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVsndmFsdWUnXS50cmltKCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVswXSl7XHJcbiAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2spIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgIXZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCdcXCcnLCAnJykucmVwbGFjZSgnXFwnJywgJycpLnRyaW0oKTsgLy9udWxsXHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2suaW5jbHVkZXMob3BlcmFuZDIpKSl7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBpZihpc0NvbnRhaW5zICYmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2suaW5jbHVkZXMob3BlcmFuZDIpKSl7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IG9wZXJhbmQyKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyICE9ICdudWxsJyAmJiBpc0RvZXNOb3RFcXVhbCAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sudHJpbSgpICE9IG9wZXJhbmQyKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG59Il19