@magic-xpa/gui 4.1100.0-dev4110.24 → 4.1100.0-dev4110.240
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/index.mjs +71 -71
- package/{esm2020 → esm2022}/magic-xpa-gui.mjs +1 -1
- package/esm2022/src/Commands.mjs +184 -0
- package/esm2022/src/Events.mjs +425 -0
- package/esm2022/src/EventsProcessor.mjs +67 -0
- package/esm2022/src/FocusManager.mjs +34 -0
- package/esm2022/src/GuiConstants.mjs +68 -0
- package/{esm2020 → esm2022}/src/GuiEnums.mjs +299 -299
- package/esm2022/src/GuiEnvironment.mjs +4 -0
- package/{esm2020 → esm2022}/src/IFlowMonitorQueue.mjs +1 -1
- package/{esm2020 → esm2022}/src/Manager.mjs +91 -91
- package/esm2022/src/UIBridge.mjs +33 -0
- package/{esm2020 → esm2022}/src/env/IEnvironment.mjs +1 -1
- package/{esm2020 → esm2022}/src/gui/ControlBase.mjs +2 -2
- package/esm2022/src/gui/GuiMgControl.mjs +123 -0
- package/{esm2020 → esm2022}/src/gui/GuiMgForm.mjs +3 -3
- package/esm2022/src/gui/KeyboardItem.mjs +135 -0
- package/esm2022/src/gui/LastFocusedVal.mjs +11 -0
- package/esm2022/src/gui/MgValue.mjs +16 -0
- package/{esm2020 → esm2022}/src/gui/PropParentInterface.mjs +1 -1
- package/{esm2020 → esm2022}/src/gui/low/DialogHandler.mjs +6 -6
- package/esm2022/src/gui/low/GuiCommand.mjs +68 -0
- package/esm2022/src/gui/low/GuiCommandQueue.mjs +35 -0
- package/esm2022/src/gui/low/GuiInteractive.mjs +177 -0
- package/esm2022/src/gui/low/Style.mjs +20 -0
- package/esm2022/src/management/RuntimeContextBase.mjs +42 -0
- package/esm2022/src/management/data/BlobType.mjs +281 -0
- package/{esm2020 → esm2022}/src/management/data/DcValues.mjs +214 -214
- package/esm2022/src/management/data/DcValuesBuilderBase.mjs +96 -0
- package/esm2022/src/management/data/FieldDef.mjs +331 -0
- package/esm2022/src/management/data/FieldsTable.mjs +54 -0
- package/esm2022/src/management/data/GuiDataViewBase.mjs +88 -0
- package/esm2022/src/management/data/GuiFieldBase.mjs +82 -0
- package/{esm2020 → esm2022}/src/management/data/IRecord.mjs +1 -1
- package/{esm2020 → esm2022}/src/management/data/IReferencedObject.mjs +1 -1
- package/esm2022/src/management/data/NUM_TYPE.mjs +1739 -0
- package/esm2022/src/management/data/ObjectReferenceBase.mjs +48 -0
- package/esm2022/src/management/data/ObjectReferencesCollection.mjs +27 -0
- package/esm2022/src/management/data/RecordUtils.mjs +361 -0
- package/esm2022/src/management/data/VectorType.mjs +612 -0
- package/esm2022/src/management/data/VectorTypeBase.mjs +88 -0
- package/{esm2020 → esm2022}/src/management/events/IActionManager.mjs +1 -1
- package/{esm2020 → esm2022}/src/management/events/IGuiEventsManager.mjs +1 -1
- package/esm2022/src/management/exp/ExpressionInterface.mjs +244 -0
- package/{esm2020 → esm2022}/src/management/exp/GuiExpressionEvaluator.mjs +305 -307
- package/esm2022/src/management/gui/ControlTable.mjs +118 -0
- package/esm2022/src/management/gui/DisplayConvertor.mjs +1649 -0
- package/esm2022/src/management/gui/FieldValidator.mjs +711 -0
- package/esm2022/src/management/gui/GuiControlPropertyAdapter.mjs +24 -0
- package/{esm2020 → esm2022}/src/management/gui/GuiFormPropertyAdapter.mjs +10 -10
- package/esm2022/src/management/gui/HebrewDate.mjs +278 -0
- package/esm2022/src/management/gui/Helps.mjs +237 -0
- package/esm2022/src/management/gui/MgControlBase.mjs +1859 -0
- package/esm2022/src/management/gui/MgFormBase.mjs +741 -0
- package/esm2022/src/management/gui/PIC.mjs +1185 -0
- package/esm2022/src/management/gui/PropDefaults.mjs +230 -0
- package/{esm2020 → esm2022}/src/management/gui/PropInterface.mjs +246 -245
- package/esm2022/src/management/gui/PropTable.mjs +221 -0
- package/esm2022/src/management/gui/Property.mjs +1362 -0
- package/esm2022/src/management/gui/ValidationDetails.mjs +248 -0
- package/esm2022/src/management/gui/ValidationDetailsBase.mjs +93 -0
- package/esm2022/src/management/gui/WrongFormatException.mjs +29 -0
- package/esm2022/src/management/tasks/GuiDataCollection.mjs +4 -0
- package/esm2022/src/management/tasks/GuiTaskBase.mjs +511 -0
- package/{esm2020 → esm2022}/src/management/tasks/IMGDataTable.mjs +1 -1
- package/{esm2020 → esm2022}/src/management/tasks/ITask.mjs +1 -1
- package/esm2022/src/management/tasks/MgTimer.mjs +21 -0
- package/esm2022/src/management/tasks/TaskDefinitionId.mjs +54 -0
- package/esm2022/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -0
- package/esm2022/src/util/MemoryUtil.mjs +35 -0
- package/{esm2020 → esm2022}/src/util/ObjectReference.mjs +36 -36
- package/esm2022/src/util/UsernamePasswordCredentials.mjs +52 -0
- package/{fesm2020 → fesm2022}/magic-xpa-gui.mjs +16074 -16074
- package/fesm2022/magic-xpa-gui.mjs.map +1 -0
- package/index.d.ts +70 -70
- package/package.json +6 -12
- package/src/Commands.d.ts +40 -39
- package/src/Events.d.ts +157 -155
- package/src/EventsProcessor.d.ts +13 -13
- package/src/FocusManager.d.ts +8 -8
- package/src/GuiConstants.d.ts +65 -65
- package/src/GuiEnums.d.ts +282 -282
- package/src/GuiEnvironment.d.ts +4 -4
- package/src/IFlowMonitorQueue.d.ts +3 -3
- package/src/Manager.d.ts +26 -26
- package/src/UIBridge.d.ts +16 -16
- package/src/env/IEnvironment.d.ts +31 -31
- package/src/gui/ControlBase.d.ts +4 -4
- package/src/gui/GuiMgControl.d.ts +38 -38
- package/src/gui/GuiMgForm.d.ts +3 -3
- package/src/gui/KeyboardItem.d.ts +18 -18
- package/src/gui/LastFocusedVal.d.ts +7 -7
- package/src/gui/MgValue.d.ts +15 -15
- package/src/gui/PropParentInterface.d.ts +13 -13
- package/src/gui/low/DialogHandler.d.ts +4 -4
- package/src/gui/low/GuiCommand.d.ts +37 -37
- package/src/gui/low/GuiCommandQueue.d.ts +13 -13
- package/src/gui/low/GuiInteractive.d.ts +55 -53
- package/src/gui/low/Style.d.ts +19 -19
- package/src/management/RuntimeContextBase.d.ts +23 -23
- package/src/management/data/BlobType.d.ts +29 -29
- package/src/management/data/DcValues.d.ts +33 -33
- package/src/management/data/DcValuesBuilderBase.d.ts +17 -17
- package/src/management/data/FieldDef.d.ts +53 -53
- package/src/management/data/FieldsTable.d.ts +16 -16
- package/src/management/data/GuiDataViewBase.d.ts +27 -27
- package/src/management/data/GuiFieldBase.d.ts +17 -17
- package/src/management/data/IRecord.d.ts +12 -12
- package/src/management/data/IReferencedObject.d.ts +5 -5
- package/src/management/data/NUM_TYPE.d.ts +103 -103
- package/src/management/data/ObjectReferenceBase.d.ts +16 -16
- package/src/management/data/ObjectReferencesCollection.d.ts +10 -10
- package/src/management/data/RecordUtils.d.ts +21 -21
- package/src/management/data/VectorType.d.ts +52 -52
- package/src/management/data/VectorTypeBase.d.ts +8 -8
- package/src/management/events/IActionManager.d.ts +7 -7
- package/src/management/events/IGuiEventsManager.d.ts +20 -20
- package/src/management/exp/ExpressionInterface.d.ts +242 -242
- package/src/management/exp/GuiExpressionEvaluator.d.ts +47 -47
- package/src/management/gui/ControlTable.d.ts +28 -28
- package/src/management/gui/DisplayConvertor.d.ts +103 -103
- package/src/management/gui/FieldValidator.d.ts +35 -35
- package/src/management/gui/GuiControlPropertyAdapter.d.ts +40 -40
- package/src/management/gui/GuiFormPropertyAdapter.d.ts +17 -17
- package/src/management/gui/HebrewDate.d.ts +46 -46
- package/src/management/gui/Helps.d.ts +51 -51
- package/src/management/gui/MgControlBase.d.ts +223 -223
- package/src/management/gui/MgFormBase.d.ts +160 -160
- package/src/management/gui/PIC.d.ts +108 -108
- package/src/management/gui/PropDefaults.d.ts +7 -7
- package/src/management/gui/PropInterface.d.ts +244 -243
- package/src/management/gui/PropTable.d.ts +33 -33
- package/src/management/gui/Property.d.ts +121 -121
- package/src/management/gui/ValidationDetails.d.ts +52 -52
- package/src/management/gui/ValidationDetailsBase.d.ts +14 -14
- package/src/management/gui/WrongFormatException.d.ts +9 -9
- package/src/management/tasks/GuiDataCollection.d.ts +4 -4
- package/src/management/tasks/GuiTaskBase.d.ts +150 -150
- package/src/management/tasks/IMGDataTable.d.ts +10 -10
- package/src/management/tasks/ITask.d.ts +6 -6
- package/src/management/tasks/MgTimer.d.ts +8 -8
- package/src/management/tasks/TaskDefinitionId.d.ts +16 -16
- package/src/management/tasks/TaskDefinitionIdTableSaxHandler.d.ts +7 -7
- package/src/util/MemoryUtil.d.ts +6 -6
- package/src/util/ObjectReference.d.ts +9 -9
- package/src/util/UsernamePasswordCredentials.d.ts +18 -18
- package/esm2020/src/Commands.mjs +0 -177
- package/esm2020/src/Events.mjs +0 -420
- package/esm2020/src/EventsProcessor.mjs +0 -67
- package/esm2020/src/FocusManager.mjs +0 -34
- package/esm2020/src/GuiConstants.mjs +0 -68
- package/esm2020/src/GuiEnvironment.mjs +0 -4
- package/esm2020/src/UIBridge.mjs +0 -32
- package/esm2020/src/gui/GuiMgControl.mjs +0 -125
- package/esm2020/src/gui/KeyboardItem.mjs +0 -135
- package/esm2020/src/gui/LastFocusedVal.mjs +0 -11
- package/esm2020/src/gui/MgValue.mjs +0 -16
- package/esm2020/src/gui/low/GuiCommand.mjs +0 -66
- package/esm2020/src/gui/low/GuiCommandQueue.mjs +0 -35
- package/esm2020/src/gui/low/GuiInteractive.mjs +0 -165
- package/esm2020/src/gui/low/Style.mjs +0 -20
- package/esm2020/src/management/RuntimeContextBase.mjs +0 -43
- package/esm2020/src/management/data/BlobType.mjs +0 -281
- package/esm2020/src/management/data/DcValuesBuilderBase.mjs +0 -96
- package/esm2020/src/management/data/FieldDef.mjs +0 -331
- package/esm2020/src/management/data/FieldsTable.mjs +0 -54
- package/esm2020/src/management/data/GuiDataViewBase.mjs +0 -90
- package/esm2020/src/management/data/GuiFieldBase.mjs +0 -82
- package/esm2020/src/management/data/NUM_TYPE.mjs +0 -1741
- package/esm2020/src/management/data/ObjectReferenceBase.mjs +0 -48
- package/esm2020/src/management/data/ObjectReferencesCollection.mjs +0 -29
- package/esm2020/src/management/data/RecordUtils.mjs +0 -361
- package/esm2020/src/management/data/VectorType.mjs +0 -612
- package/esm2020/src/management/data/VectorTypeBase.mjs +0 -88
- package/esm2020/src/management/exp/ExpressionInterface.mjs +0 -244
- package/esm2020/src/management/gui/ControlTable.mjs +0 -118
- package/esm2020/src/management/gui/DisplayConvertor.mjs +0 -1679
- package/esm2020/src/management/gui/FieldValidator.mjs +0 -711
- package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +0 -22
- package/esm2020/src/management/gui/HebrewDate.mjs +0 -278
- package/esm2020/src/management/gui/Helps.mjs +0 -237
- package/esm2020/src/management/gui/MgControlBase.mjs +0 -1858
- package/esm2020/src/management/gui/MgFormBase.mjs +0 -738
- package/esm2020/src/management/gui/PIC.mjs +0 -1185
- package/esm2020/src/management/gui/PropDefaults.mjs +0 -230
- package/esm2020/src/management/gui/PropTable.mjs +0 -221
- package/esm2020/src/management/gui/Property.mjs +0 -1356
- package/esm2020/src/management/gui/ValidationDetails.mjs +0 -248
- package/esm2020/src/management/gui/ValidationDetailsBase.mjs +0 -93
- package/esm2020/src/management/gui/WrongFormatException.mjs +0 -29
- package/esm2020/src/management/tasks/GuiDataCollection.mjs +0 -4
- package/esm2020/src/management/tasks/GuiTaskBase.mjs +0 -510
- package/esm2020/src/management/tasks/MgTimer.mjs +0 -21
- package/esm2020/src/management/tasks/TaskDefinitionId.mjs +0 -54
- package/esm2020/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +0 -41
- package/esm2020/src/util/MemoryUtil.mjs +0 -35
- package/esm2020/src/util/UsernamePasswordCredentials.mjs +0 -52
- package/fesm2015/magic-xpa-gui.mjs +0 -16364
- package/fesm2015/magic-xpa-gui.mjs.map +0 -1
- package/fesm2020/magic-xpa-gui.mjs.map +0 -1
|
@@ -0,0 +1,1185 @@
|
|
|
1
|
+
import { MsgInterface, PICInterface, StorageAttribute, UtilImeJpn, UtilStrByteMode } from '@magic-xpa/utils';
|
|
2
|
+
import { Events } from '../../Events';
|
|
3
|
+
import { ApplicationException, Int32, NString, StringBuilder } from '@magic-xpa/mscorelib';
|
|
4
|
+
import { GuiEnvironment } from '../../GuiEnvironment';
|
|
5
|
+
export class PIC {
|
|
6
|
+
_mskLen = 0;
|
|
7
|
+
_negPref = new StringBuilder();
|
|
8
|
+
_negSuff = new StringBuilder();
|
|
9
|
+
_picAttr = StorageAttribute.NONE;
|
|
10
|
+
_posPref = new StringBuilder();
|
|
11
|
+
_posSuff = new StringBuilder();
|
|
12
|
+
_autoSkip_ = false;
|
|
13
|
+
_padFill = false;
|
|
14
|
+
_zeroFill = false;
|
|
15
|
+
_comma = false;
|
|
16
|
+
_decimalDigits = 0;
|
|
17
|
+
_decPointIsFirst = false;
|
|
18
|
+
_decimal = false;
|
|
19
|
+
_embeded = false;
|
|
20
|
+
_formatIdx = 0;
|
|
21
|
+
_format = null;
|
|
22
|
+
hebrew = false;
|
|
23
|
+
_imeMode = -1;
|
|
24
|
+
_left = false;
|
|
25
|
+
_maskLength = 0;
|
|
26
|
+
_maskChars = 0;
|
|
27
|
+
_maskSize = 0;
|
|
28
|
+
_mixed = false;
|
|
29
|
+
_formatExp = false;
|
|
30
|
+
_msk = null;
|
|
31
|
+
_needLength = false;
|
|
32
|
+
_negative = false;
|
|
33
|
+
_pad = '\0';
|
|
34
|
+
_prefLen = 0;
|
|
35
|
+
_size = 0;
|
|
36
|
+
_suffLen = 0;
|
|
37
|
+
_termFlag = false;
|
|
38
|
+
_trim = false;
|
|
39
|
+
_whole = 0;
|
|
40
|
+
_zero = '\0';
|
|
41
|
+
constructor(picStr, attr, compIdx) {
|
|
42
|
+
this._picAttr = attr;
|
|
43
|
+
if (this._picAttr === StorageAttribute.BLOB ||
|
|
44
|
+
this._picAttr === StorageAttribute.BLOB_VECTOR) {
|
|
45
|
+
if (picStr.trim().length > 0) {
|
|
46
|
+
Events.WriteDevToLog("PIC.PIC the picture of BLOB must be empty string");
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
this._format = NString.ToCharArray(picStr);
|
|
51
|
+
this._formatIdx = 0;
|
|
52
|
+
this._mskLen = this.getMaskLen(compIdx);
|
|
53
|
+
this.prs_all(compIdx);
|
|
54
|
+
}
|
|
55
|
+
isHebrew() {
|
|
56
|
+
return this.hebrew;
|
|
57
|
+
}
|
|
58
|
+
isMixed() {
|
|
59
|
+
return this._mixed;
|
|
60
|
+
}
|
|
61
|
+
embededChars() {
|
|
62
|
+
return this._embeded;
|
|
63
|
+
}
|
|
64
|
+
isNegative() {
|
|
65
|
+
return this._negative;
|
|
66
|
+
}
|
|
67
|
+
withComa() {
|
|
68
|
+
return this._comma;
|
|
69
|
+
}
|
|
70
|
+
isLeft() {
|
|
71
|
+
return this._left;
|
|
72
|
+
}
|
|
73
|
+
padFill() {
|
|
74
|
+
return this._padFill;
|
|
75
|
+
}
|
|
76
|
+
getPad() {
|
|
77
|
+
return this._pad;
|
|
78
|
+
}
|
|
79
|
+
zeroFill() {
|
|
80
|
+
return this._zeroFill;
|
|
81
|
+
}
|
|
82
|
+
getZeroPad() {
|
|
83
|
+
return this._zero;
|
|
84
|
+
}
|
|
85
|
+
isTrimed() {
|
|
86
|
+
return this._trim;
|
|
87
|
+
}
|
|
88
|
+
autoSkip() {
|
|
89
|
+
return this._autoSkip_;
|
|
90
|
+
}
|
|
91
|
+
withDecimal() {
|
|
92
|
+
return this._decimal;
|
|
93
|
+
}
|
|
94
|
+
withTerm() {
|
|
95
|
+
return this._termFlag;
|
|
96
|
+
}
|
|
97
|
+
getMaskChars() {
|
|
98
|
+
return this._maskChars;
|
|
99
|
+
}
|
|
100
|
+
getWholes() {
|
|
101
|
+
return this._whole;
|
|
102
|
+
}
|
|
103
|
+
getDec() {
|
|
104
|
+
return this._decimalDigits;
|
|
105
|
+
}
|
|
106
|
+
getSize() {
|
|
107
|
+
return this._size;
|
|
108
|
+
}
|
|
109
|
+
getMaskSize() {
|
|
110
|
+
return this._maskSize;
|
|
111
|
+
}
|
|
112
|
+
getMaskLength() {
|
|
113
|
+
return this._maskLength;
|
|
114
|
+
}
|
|
115
|
+
decInFirstPos() {
|
|
116
|
+
return this._decPointIsFirst;
|
|
117
|
+
}
|
|
118
|
+
setFormatExp(val) {
|
|
119
|
+
this._formatExp = val;
|
|
120
|
+
}
|
|
121
|
+
isFormatExp() {
|
|
122
|
+
return this._formatExp;
|
|
123
|
+
}
|
|
124
|
+
getPosPref_() {
|
|
125
|
+
return this._posPref.ToString();
|
|
126
|
+
}
|
|
127
|
+
getPosSuff_() {
|
|
128
|
+
return this._posSuff.ToString();
|
|
129
|
+
}
|
|
130
|
+
getNegPref_() {
|
|
131
|
+
return this._negPref.ToString();
|
|
132
|
+
}
|
|
133
|
+
getNegSuff_() {
|
|
134
|
+
return this._negSuff.ToString();
|
|
135
|
+
}
|
|
136
|
+
getMask() {
|
|
137
|
+
return NString.FromChars(this._msk);
|
|
138
|
+
}
|
|
139
|
+
getFormat() {
|
|
140
|
+
return NString.FromChars(this._format);
|
|
141
|
+
}
|
|
142
|
+
getAttr() {
|
|
143
|
+
return this._picAttr;
|
|
144
|
+
}
|
|
145
|
+
setAttr(set) {
|
|
146
|
+
this._picAttr == set;
|
|
147
|
+
}
|
|
148
|
+
getImeMode() {
|
|
149
|
+
return this._imeMode;
|
|
150
|
+
}
|
|
151
|
+
prs_all(compIdx) {
|
|
152
|
+
if (!this._needLength) {
|
|
153
|
+
this._msk = new Array(this._mskLen);
|
|
154
|
+
for (let _ai = 0; _ai < this._msk.length; ++_ai)
|
|
155
|
+
this._msk[_ai] = '\0';
|
|
156
|
+
}
|
|
157
|
+
switch (this._picAttr) {
|
|
158
|
+
case StorageAttribute.ALPHA:
|
|
159
|
+
case StorageAttribute.UNICODE:
|
|
160
|
+
this.alpha_prs();
|
|
161
|
+
break;
|
|
162
|
+
case StorageAttribute.NUMERIC:
|
|
163
|
+
this.num_prs();
|
|
164
|
+
break;
|
|
165
|
+
case StorageAttribute.DATE:
|
|
166
|
+
this.date_prs(compIdx);
|
|
167
|
+
break;
|
|
168
|
+
case StorageAttribute.TIME:
|
|
169
|
+
this.time_prs();
|
|
170
|
+
break;
|
|
171
|
+
case StorageAttribute.BOOLEAN:
|
|
172
|
+
this.bool_prs();
|
|
173
|
+
break;
|
|
174
|
+
case StorageAttribute.BLOB:
|
|
175
|
+
case StorageAttribute.BLOB_VECTOR:
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
alpha_prs() {
|
|
180
|
+
let currChr;
|
|
181
|
+
let drv;
|
|
182
|
+
let count;
|
|
183
|
+
while (this._formatIdx < this._format.length) {
|
|
184
|
+
currChr = this._format[this._formatIdx];
|
|
185
|
+
switch (currChr) {
|
|
186
|
+
case 'H':
|
|
187
|
+
this._formatIdx++;
|
|
188
|
+
this.setHebrew();
|
|
189
|
+
break;
|
|
190
|
+
case 'A':
|
|
191
|
+
this._autoSkip_ = true;
|
|
192
|
+
this._formatIdx++;
|
|
193
|
+
break;
|
|
194
|
+
case '#':
|
|
195
|
+
case 'L':
|
|
196
|
+
case 'U':
|
|
197
|
+
case 'X':
|
|
198
|
+
drv = 0;
|
|
199
|
+
switch (currChr) {
|
|
200
|
+
case '#':
|
|
201
|
+
drv = PICInterface.PIC_N;
|
|
202
|
+
break;
|
|
203
|
+
case 'L':
|
|
204
|
+
drv = PICInterface.PIC_L;
|
|
205
|
+
break;
|
|
206
|
+
case 'U':
|
|
207
|
+
drv = PICInterface.PIC_U;
|
|
208
|
+
break;
|
|
209
|
+
case 'X':
|
|
210
|
+
drv = PICInterface.PIC_X;
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
this._formatIdx++;
|
|
214
|
+
count = this.pik_count();
|
|
215
|
+
this.pik_drv_fill(drv, count);
|
|
216
|
+
break;
|
|
217
|
+
default:
|
|
218
|
+
if (UtilStrByteMode.isLocaleDefLangDBCS()) {
|
|
219
|
+
let useImeJpn = UtilStrByteMode.isLocaleDefLangJPN();
|
|
220
|
+
if (currChr === 'K' && useImeJpn) {
|
|
221
|
+
if (this.pic_kanji())
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
if (GuiEnvironment.Environment.GetLocalAs400Set()) {
|
|
225
|
+
drv = 0;
|
|
226
|
+
if (currChr === 'J')
|
|
227
|
+
drv = PICInterface.PIC_J;
|
|
228
|
+
else if (currChr === 'T')
|
|
229
|
+
drv = PICInterface.PIC_T;
|
|
230
|
+
else if (currChr === 'G')
|
|
231
|
+
drv = PICInterface.PIC_G;
|
|
232
|
+
else if (currChr === 'S')
|
|
233
|
+
drv = PICInterface.PIC_S;
|
|
234
|
+
if (drv !== 0) {
|
|
235
|
+
if (this._imeMode === -1 && useImeJpn) {
|
|
236
|
+
if (drv === PICInterface.PIC_J || drv === PICInterface.PIC_G)
|
|
237
|
+
this._imeMode = UtilImeJpn.IME_ZEN_HIRAGANA_ROMAN;
|
|
238
|
+
else if (drv === PICInterface.PIC_S)
|
|
239
|
+
this._imeMode = UtilImeJpn.IME_FORCE_OFF;
|
|
240
|
+
}
|
|
241
|
+
this._formatIdx++;
|
|
242
|
+
count = this.pik_count();
|
|
243
|
+
this.pik_drv_fill(drv, count);
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (UtilStrByteMode.isDigit(currChr)) {
|
|
249
|
+
count = this.pik_count();
|
|
250
|
+
this.pik_drv_fill(PICInterface.PIC_X, count);
|
|
251
|
+
}
|
|
252
|
+
else
|
|
253
|
+
this.pik_mask();
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (this._maskSize === 0)
|
|
258
|
+
this.pik_drv_fill(PICInterface.PIC_X, this._mskLen);
|
|
259
|
+
this._size = this._maskSize;
|
|
260
|
+
if (!this._embeded)
|
|
261
|
+
this._size -= this._maskChars;
|
|
262
|
+
}
|
|
263
|
+
num_prs() {
|
|
264
|
+
let i;
|
|
265
|
+
let j;
|
|
266
|
+
let currChr;
|
|
267
|
+
let count;
|
|
268
|
+
let tmp;
|
|
269
|
+
let tmps;
|
|
270
|
+
let tmp_c = 0;
|
|
271
|
+
let first = true;
|
|
272
|
+
this._zero = ' ';
|
|
273
|
+
this._pad = ' ';
|
|
274
|
+
this._negPref.Append('-');
|
|
275
|
+
for (i = 0; i < this._format.length; i = i + 1) {
|
|
276
|
+
if (this._format[i] === '+' || this._format[i] === '-') {
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
if (this._format[i] === '\\' || this._format[i] === 'P') {
|
|
280
|
+
i = i + 1;
|
|
281
|
+
}
|
|
282
|
+
if (this._format[i] === 'C') {
|
|
283
|
+
this._comma = true;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
while (this._formatIdx < this._format.length) {
|
|
287
|
+
currChr = this._format[this._formatIdx];
|
|
288
|
+
switch (currChr) {
|
|
289
|
+
case 'N':
|
|
290
|
+
this._formatIdx++;
|
|
291
|
+
this._negative = true;
|
|
292
|
+
break;
|
|
293
|
+
case 'C':
|
|
294
|
+
this._formatIdx++;
|
|
295
|
+
this._comma = true;
|
|
296
|
+
break;
|
|
297
|
+
case 'L':
|
|
298
|
+
this._formatIdx++;
|
|
299
|
+
this._left = true;
|
|
300
|
+
break;
|
|
301
|
+
case 'P':
|
|
302
|
+
this._formatIdx++;
|
|
303
|
+
this._padFill = true;
|
|
304
|
+
if (this._formatIdx < this._format.length)
|
|
305
|
+
this._pad = this._format[this._formatIdx++];
|
|
306
|
+
break;
|
|
307
|
+
case 'Z':
|
|
308
|
+
this._formatIdx++;
|
|
309
|
+
this._zeroFill = true;
|
|
310
|
+
if (this._formatIdx < this._format.length)
|
|
311
|
+
this._zero = this._format[this._formatIdx++];
|
|
312
|
+
break;
|
|
313
|
+
case 'A':
|
|
314
|
+
this._formatIdx++;
|
|
315
|
+
this._autoSkip_ = true;
|
|
316
|
+
break;
|
|
317
|
+
case '.':
|
|
318
|
+
this._formatIdx++;
|
|
319
|
+
if (this._needLength)
|
|
320
|
+
this._maskLength++;
|
|
321
|
+
this._decimal = true;
|
|
322
|
+
if (this._maskSize < this._mskLen)
|
|
323
|
+
this._msk[this._maskSize] = String.fromCharCode(PICInterface.PIC_N);
|
|
324
|
+
if (this._maskSize === 0)
|
|
325
|
+
this._decPointIsFirst = true;
|
|
326
|
+
this._maskSize++;
|
|
327
|
+
break;
|
|
328
|
+
case '+':
|
|
329
|
+
case '-':
|
|
330
|
+
this.pik_sign();
|
|
331
|
+
break;
|
|
332
|
+
default:
|
|
333
|
+
if (UtilStrByteMode.isDigit(currChr) || currChr === '#') {
|
|
334
|
+
tmp = this._formatIdx;
|
|
335
|
+
if (currChr === '#')
|
|
336
|
+
this._formatIdx++;
|
|
337
|
+
count = this.pik_count();
|
|
338
|
+
this.pik_drv_fill(PICInterface.PIC_N, count);
|
|
339
|
+
if (this._format[tmp] === '#') {
|
|
340
|
+
if (count === 1) {
|
|
341
|
+
tmps = this._formatIdx;
|
|
342
|
+
this._formatIdx = tmp;
|
|
343
|
+
tmp_c = this.pik_dup();
|
|
344
|
+
this._formatIdx = tmps;
|
|
345
|
+
}
|
|
346
|
+
if (first && (tmp_c > 0 || count > 1)) {
|
|
347
|
+
if (count > 1)
|
|
348
|
+
tmp_c = count;
|
|
349
|
+
if (this._comma && !this._decimal)
|
|
350
|
+
this.pik_drv_fill(PICInterface.PIC_N, Math.floor((tmp_c - 1) / 3));
|
|
351
|
+
first = false;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
else if (this._comma && !this._decimal)
|
|
355
|
+
this.pik_drv_fill(PICInterface.PIC_N, Math.floor((count - 1) / 3));
|
|
356
|
+
if (this._decimal)
|
|
357
|
+
this._decimalDigits += count;
|
|
358
|
+
else
|
|
359
|
+
this._whole += count;
|
|
360
|
+
}
|
|
361
|
+
else
|
|
362
|
+
this.pik_mask();
|
|
363
|
+
break;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
this._prefLen = this._posPref.Length;
|
|
367
|
+
this._suffLen = this._posSuff.Length;
|
|
368
|
+
if (this._negative) {
|
|
369
|
+
if (this._negPref.Length > this._prefLen) {
|
|
370
|
+
this._prefLen = this._negPref.Length;
|
|
371
|
+
}
|
|
372
|
+
if (this._negSuff.Length > this._suffLen) {
|
|
373
|
+
this._suffLen = this._negSuff.Length;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
if (this._whole === 0 && this._decimalDigits === 0) {
|
|
377
|
+
count = PICInterface.PIC_MAX_MSK_LEN - this._prefLen - this._suffLen;
|
|
378
|
+
if (this._maskSize < count) {
|
|
379
|
+
this._whole = count - this._maskSize;
|
|
380
|
+
if (this._comma)
|
|
381
|
+
this._whole -= Math.floor(this._whole / 4);
|
|
382
|
+
this.pik_drv_fill(PICInterface.PIC_N, this._whole);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
if (this._comma) {
|
|
386
|
+
count = Math.floor((this._whole - 1) / 3);
|
|
387
|
+
this.pik_drv_fill(PICInterface.PIC_N, count);
|
|
388
|
+
this._maskSize -= count;
|
|
389
|
+
}
|
|
390
|
+
i = this._prefLen;
|
|
391
|
+
if (i > 0 && this._msk != null) {
|
|
392
|
+
if ((this._maskSize + i) <= this._mskLen) {
|
|
393
|
+
for (j = this._maskSize - 1; j >= 0; j--)
|
|
394
|
+
this._msk[j + i] = this._msk[j];
|
|
395
|
+
for (j = 0; j < i; j++)
|
|
396
|
+
if (this._msk != null && j < this._msk.length)
|
|
397
|
+
this._msk[j] = String.fromCharCode(PICInterface.PIC_N);
|
|
398
|
+
}
|
|
399
|
+
this._maskSize += i;
|
|
400
|
+
}
|
|
401
|
+
i = this._suffLen;
|
|
402
|
+
if (i > 0 && this._msk != null) {
|
|
403
|
+
if (this._maskSize + this._suffLen <= this._mskLen)
|
|
404
|
+
for (j = 0; j < this._suffLen; j++)
|
|
405
|
+
this._msk[this._maskSize + j] = String.fromCharCode(PICInterface.PIC_N);
|
|
406
|
+
this._maskSize += i;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
getUnformattedNumericPic() {
|
|
410
|
+
let picStr = '';
|
|
411
|
+
if (this.isNegative())
|
|
412
|
+
picStr = this.isNegative() ? 'N' : '';
|
|
413
|
+
picStr += this.getWholes().toString();
|
|
414
|
+
if (this.getDec() > 0)
|
|
415
|
+
picStr += '.' + this.getDec().toString();
|
|
416
|
+
if (this._zeroFill)
|
|
417
|
+
picStr += 'Z';
|
|
418
|
+
let newPic = new PIC(picStr, StorageAttribute.NUMERIC, 0);
|
|
419
|
+
return newPic;
|
|
420
|
+
}
|
|
421
|
+
date_prs(compIdx) {
|
|
422
|
+
let i;
|
|
423
|
+
let ocr;
|
|
424
|
+
let count;
|
|
425
|
+
let drv = 0;
|
|
426
|
+
let SwitchAndExpandDate = false;
|
|
427
|
+
let SWExpandDateChecked = false;
|
|
428
|
+
let currChr;
|
|
429
|
+
let isJpnEraYear = false;
|
|
430
|
+
this._zero = ' ';
|
|
431
|
+
ocr = 0;
|
|
432
|
+
if (this._format.length === 0 || this._format[0] === '\0')
|
|
433
|
+
this._format = NString.ToCharArray(PIC.getDefaultDateMask(GuiEnvironment.Environment.GetDateMode(compIdx)));
|
|
434
|
+
for (let j = 0; j < this._format.length; j++)
|
|
435
|
+
if (this._format[j] === 'H')
|
|
436
|
+
this.setHebrew();
|
|
437
|
+
while (this._formatIdx < this._format.length) {
|
|
438
|
+
currChr = this._format[this._formatIdx];
|
|
439
|
+
switch (currChr) {
|
|
440
|
+
case 'H':
|
|
441
|
+
this._formatIdx++;
|
|
442
|
+
break;
|
|
443
|
+
case 'Z':
|
|
444
|
+
this._formatIdx++;
|
|
445
|
+
this._zeroFill = true;
|
|
446
|
+
if (this._formatIdx < this._format.length)
|
|
447
|
+
this._zero = this._format[this._formatIdx++];
|
|
448
|
+
break;
|
|
449
|
+
case 'T':
|
|
450
|
+
this._formatIdx++;
|
|
451
|
+
this._trim = true;
|
|
452
|
+
break;
|
|
453
|
+
case 'A':
|
|
454
|
+
this._formatIdx++;
|
|
455
|
+
this._autoSkip_ = true;
|
|
456
|
+
break;
|
|
457
|
+
case 'L':
|
|
458
|
+
if (this.hebrew) {
|
|
459
|
+
this._formatIdx++;
|
|
460
|
+
this.pik_drv_fill(PICInterface.PIC_HL, 1);
|
|
461
|
+
}
|
|
462
|
+
else
|
|
463
|
+
this.pik_mask();
|
|
464
|
+
break;
|
|
465
|
+
case 'Y':
|
|
466
|
+
count = this.pik_dup();
|
|
467
|
+
drv = 0;
|
|
468
|
+
i = count;
|
|
469
|
+
switch (count) {
|
|
470
|
+
case 1:
|
|
471
|
+
break;
|
|
472
|
+
case 2:
|
|
473
|
+
if (!this.hebrew)
|
|
474
|
+
drv = PICInterface.PIC_YY;
|
|
475
|
+
break;
|
|
476
|
+
case 4:
|
|
477
|
+
if (!this.hebrew)
|
|
478
|
+
drv = PICInterface.PIC_YYYY;
|
|
479
|
+
else
|
|
480
|
+
drv = PICInterface.PIC_HYYYYY;
|
|
481
|
+
break;
|
|
482
|
+
case 5:
|
|
483
|
+
case 6:
|
|
484
|
+
if (this.hebrew)
|
|
485
|
+
drv = PICInterface.PIC_HYYYYY;
|
|
486
|
+
break;
|
|
487
|
+
}
|
|
488
|
+
if (drv !== 0) {
|
|
489
|
+
this._formatIdx += count;
|
|
490
|
+
this.pik_drv_fill(drv, i);
|
|
491
|
+
}
|
|
492
|
+
else
|
|
493
|
+
this.pik_mask();
|
|
494
|
+
break;
|
|
495
|
+
case 'M':
|
|
496
|
+
count = this.pik_dup();
|
|
497
|
+
drv = 0;
|
|
498
|
+
if (count === 2)
|
|
499
|
+
drv = PICInterface.PIC_MMD;
|
|
500
|
+
else if (count > 2) {
|
|
501
|
+
drv = PICInterface.PIC_MMM;
|
|
502
|
+
if (count > 10)
|
|
503
|
+
drv = 0;
|
|
504
|
+
}
|
|
505
|
+
if (drv !== 0) {
|
|
506
|
+
this._formatIdx += count;
|
|
507
|
+
this.pik_drv_fill(drv, count);
|
|
508
|
+
}
|
|
509
|
+
else
|
|
510
|
+
this.pik_mask();
|
|
511
|
+
break;
|
|
512
|
+
case 'D':
|
|
513
|
+
count = this.pik_dup();
|
|
514
|
+
drv = 0;
|
|
515
|
+
switch (count) {
|
|
516
|
+
case 2:
|
|
517
|
+
if (!this.hebrew) {
|
|
518
|
+
drv = PICInterface.PIC_DD;
|
|
519
|
+
break;
|
|
520
|
+
}
|
|
521
|
+
case 3:
|
|
522
|
+
if (!this.hebrew)
|
|
523
|
+
drv = PICInterface.PIC_DDD;
|
|
524
|
+
else
|
|
525
|
+
drv = PICInterface.PIC_HDD;
|
|
526
|
+
break;
|
|
527
|
+
case 4:
|
|
528
|
+
if (!this.hebrew)
|
|
529
|
+
drv = PICInterface.PIC_DDDD;
|
|
530
|
+
else
|
|
531
|
+
this.pik_mask();
|
|
532
|
+
break;
|
|
533
|
+
default:
|
|
534
|
+
this.pik_mask();
|
|
535
|
+
break;
|
|
536
|
+
}
|
|
537
|
+
if (drv !== 0) {
|
|
538
|
+
this.pik_drv_fill(drv, count);
|
|
539
|
+
this._formatIdx += count;
|
|
540
|
+
}
|
|
541
|
+
break;
|
|
542
|
+
case '#':
|
|
543
|
+
count = this.pik_dup();
|
|
544
|
+
if (count === 2) {
|
|
545
|
+
drv = 0;
|
|
546
|
+
ocr++;
|
|
547
|
+
if (!this.hebrew)
|
|
548
|
+
switch (GuiEnvironment.Environment.GetDateMode(compIdx)) {
|
|
549
|
+
case 'B':
|
|
550
|
+
case 'E':
|
|
551
|
+
switch (ocr) {
|
|
552
|
+
case 1:
|
|
553
|
+
drv = PICInterface.PIC_DD;
|
|
554
|
+
break;
|
|
555
|
+
case 2:
|
|
556
|
+
drv = PICInterface.PIC_MMD;
|
|
557
|
+
break;
|
|
558
|
+
case 3:
|
|
559
|
+
drv = PICInterface.PIC_YY;
|
|
560
|
+
break;
|
|
561
|
+
}
|
|
562
|
+
break;
|
|
563
|
+
case 'A':
|
|
564
|
+
switch (ocr) {
|
|
565
|
+
case 1:
|
|
566
|
+
drv = PICInterface.PIC_MMD;
|
|
567
|
+
break;
|
|
568
|
+
case 2:
|
|
569
|
+
drv = PICInterface.PIC_DD;
|
|
570
|
+
break;
|
|
571
|
+
case 3:
|
|
572
|
+
drv = PICInterface.PIC_YY;
|
|
573
|
+
break;
|
|
574
|
+
}
|
|
575
|
+
break;
|
|
576
|
+
case 'J':
|
|
577
|
+
case 'S':
|
|
578
|
+
switch (ocr) {
|
|
579
|
+
case 1:
|
|
580
|
+
if (!SWExpandDateChecked) {
|
|
581
|
+
SwitchAndExpandDate = NString.FromChars(this._format).indexOf("####") > -1;
|
|
582
|
+
SWExpandDateChecked = true;
|
|
583
|
+
}
|
|
584
|
+
if (SwitchAndExpandDate)
|
|
585
|
+
this.pik_drv_fill(PICInterface.PIC_YYYY, 4);
|
|
586
|
+
else
|
|
587
|
+
drv = PICInterface.PIC_YY;
|
|
588
|
+
break;
|
|
589
|
+
case 2:
|
|
590
|
+
drv = PICInterface.PIC_MMD;
|
|
591
|
+
break;
|
|
592
|
+
case 3:
|
|
593
|
+
drv = PICInterface.PIC_DD;
|
|
594
|
+
break;
|
|
595
|
+
}
|
|
596
|
+
break;
|
|
597
|
+
}
|
|
598
|
+
if (drv !== 0)
|
|
599
|
+
this.pik_drv_fill(drv, 2);
|
|
600
|
+
}
|
|
601
|
+
else if (count === 4) {
|
|
602
|
+
drv = 0;
|
|
603
|
+
ocr++;
|
|
604
|
+
if (!this.hebrew)
|
|
605
|
+
switch (GuiEnvironment.Environment.GetDateMode(compIdx)) {
|
|
606
|
+
case 'B':
|
|
607
|
+
case 'E':
|
|
608
|
+
case 'A':
|
|
609
|
+
if (ocr === 3)
|
|
610
|
+
drv = PICInterface.PIC_YYYY;
|
|
611
|
+
break;
|
|
612
|
+
case 'J':
|
|
613
|
+
case 'S':
|
|
614
|
+
if (ocr === 1)
|
|
615
|
+
drv = PICInterface.PIC_YYYY;
|
|
616
|
+
else {
|
|
617
|
+
if (!SWExpandDateChecked) {
|
|
618
|
+
SwitchAndExpandDate = NString.FromChars(this._format).indexOf("####") > -1;
|
|
619
|
+
SWExpandDateChecked = true;
|
|
620
|
+
}
|
|
621
|
+
if (SwitchAndExpandDate && ocr === 3)
|
|
622
|
+
this.pik_drv_fill(PICInterface.PIC_DD, 2);
|
|
623
|
+
}
|
|
624
|
+
break;
|
|
625
|
+
}
|
|
626
|
+
if (drv !== 0)
|
|
627
|
+
this.pik_drv_fill(drv, 4);
|
|
628
|
+
}
|
|
629
|
+
this._formatIdx += count;
|
|
630
|
+
break;
|
|
631
|
+
case 'W':
|
|
632
|
+
count = this.pik_dup();
|
|
633
|
+
i = count;
|
|
634
|
+
if (count === 1)
|
|
635
|
+
drv = PICInterface.PIC_W;
|
|
636
|
+
else if (this.hebrew)
|
|
637
|
+
if (count === 5)
|
|
638
|
+
drv = PICInterface.PIC_WWW;
|
|
639
|
+
else
|
|
640
|
+
i = 0;
|
|
641
|
+
else if (count > 2 && count <= 10)
|
|
642
|
+
drv = PICInterface.PIC_WWW;
|
|
643
|
+
else
|
|
644
|
+
i = 0;
|
|
645
|
+
this._formatIdx += count;
|
|
646
|
+
this.pik_drv_fill(drv, i);
|
|
647
|
+
break;
|
|
648
|
+
case '/':
|
|
649
|
+
this._formatIdx++;
|
|
650
|
+
this.pik_drv_fill(GuiEnvironment.Environment.GetDate().charCodeAt(0), 1);
|
|
651
|
+
break;
|
|
652
|
+
case 'S':
|
|
653
|
+
if (UtilStrByteMode.isLocaleDefLangJPN()) {
|
|
654
|
+
count = this.pik_dup();
|
|
655
|
+
i = count;
|
|
656
|
+
if (count !== 2 && count !== 4 && count !== 6)
|
|
657
|
+
i = 0;
|
|
658
|
+
drv = PICInterface.PIC_BB;
|
|
659
|
+
this._formatIdx += count;
|
|
660
|
+
this.pik_drv_fill(drv, i);
|
|
661
|
+
}
|
|
662
|
+
else {
|
|
663
|
+
this.pik_mask();
|
|
664
|
+
}
|
|
665
|
+
break;
|
|
666
|
+
case 'J':
|
|
667
|
+
if (UtilStrByteMode.isLocaleDefLangJPN()) {
|
|
668
|
+
count = this.pik_dup();
|
|
669
|
+
i = count;
|
|
670
|
+
isJpnEraYear = true;
|
|
671
|
+
switch (count) {
|
|
672
|
+
case 1:
|
|
673
|
+
drv = PICInterface.PIC_JY1;
|
|
674
|
+
break;
|
|
675
|
+
case 2:
|
|
676
|
+
drv = PICInterface.PIC_JY2;
|
|
677
|
+
break;
|
|
678
|
+
case 4:
|
|
679
|
+
drv = PICInterface.PIC_JY4;
|
|
680
|
+
break;
|
|
681
|
+
default:
|
|
682
|
+
i = 0;
|
|
683
|
+
isJpnEraYear = false;
|
|
684
|
+
break;
|
|
685
|
+
}
|
|
686
|
+
this._formatIdx += count;
|
|
687
|
+
this.pik_drv_fill(drv, i);
|
|
688
|
+
}
|
|
689
|
+
else {
|
|
690
|
+
this.pik_mask();
|
|
691
|
+
}
|
|
692
|
+
break;
|
|
693
|
+
default:
|
|
694
|
+
this.pik_mask();
|
|
695
|
+
break;
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
if (!this._needLength && isJpnEraYear) {
|
|
699
|
+
for (i = 0; i < this._msk.length; i++) {
|
|
700
|
+
if (this._msk[i].charCodeAt(0) === PICInterface.PIC_YY)
|
|
701
|
+
this._msk[i] = String.fromCharCode(PICInterface.PIC_YJ);
|
|
702
|
+
else if (this._msk[i].charCodeAt(0) === PICInterface.PIC_YYYY)
|
|
703
|
+
this._msk[i] = 'Y';
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
time_prs() {
|
|
708
|
+
let drv;
|
|
709
|
+
let NoFormat;
|
|
710
|
+
let currChr;
|
|
711
|
+
this._zero = ' ';
|
|
712
|
+
if (this._format.length === 0 || this._format[0].charCodeAt(0) === 0) {
|
|
713
|
+
NoFormat = "HH:MM:SS";
|
|
714
|
+
if (this._mskLen < 8)
|
|
715
|
+
NoFormat = NoFormat.substr(0, this._mskLen);
|
|
716
|
+
this._format = NString.ToCharArray(NoFormat);
|
|
717
|
+
}
|
|
718
|
+
while (this._formatIdx < this._format.length) {
|
|
719
|
+
currChr = this._format[this._formatIdx];
|
|
720
|
+
let maskLength;
|
|
721
|
+
switch (currChr) {
|
|
722
|
+
case 'H':
|
|
723
|
+
case 'M':
|
|
724
|
+
case 'S':
|
|
725
|
+
maskLength = 2;
|
|
726
|
+
if (this._formatIdx + 1 < this._format.length && this._format[this._formatIdx] === this._format[this._formatIdx + 1]) {
|
|
727
|
+
switch (currChr) {
|
|
728
|
+
case 'H':
|
|
729
|
+
drv = PICInterface.PIC_HH;
|
|
730
|
+
break;
|
|
731
|
+
case 'M':
|
|
732
|
+
drv = PICInterface.PIC_MMT;
|
|
733
|
+
break;
|
|
734
|
+
case 'S':
|
|
735
|
+
drv = PICInterface.PIC_SS;
|
|
736
|
+
break;
|
|
737
|
+
default:
|
|
738
|
+
drv = PICInterface.NULL_CHAR;
|
|
739
|
+
break;
|
|
740
|
+
}
|
|
741
|
+
this._formatIdx += maskLength;
|
|
742
|
+
this.pik_drv_fill(drv, maskLength);
|
|
743
|
+
}
|
|
744
|
+
else
|
|
745
|
+
this.pik_mask();
|
|
746
|
+
break;
|
|
747
|
+
case 'm':
|
|
748
|
+
maskLength = 3;
|
|
749
|
+
if (this._formatIdx + 2 < this._format.length &&
|
|
750
|
+
(this._format[this._formatIdx] === this._format[this._formatIdx + 1] &&
|
|
751
|
+
this._format[this._formatIdx + 1] === this._format[this._formatIdx + 2])) {
|
|
752
|
+
drv = PICInterface.PIC_MS;
|
|
753
|
+
this._formatIdx += maskLength;
|
|
754
|
+
this.pik_drv_fill(drv, maskLength);
|
|
755
|
+
}
|
|
756
|
+
else
|
|
757
|
+
this.pik_mask();
|
|
758
|
+
break;
|
|
759
|
+
case ':':
|
|
760
|
+
this._formatIdx++;
|
|
761
|
+
this.pik_drv_fill(GuiEnvironment.Environment.GetTime().charCodeAt(0), 1);
|
|
762
|
+
break;
|
|
763
|
+
case 'Z':
|
|
764
|
+
this._formatIdx++;
|
|
765
|
+
this._zeroFill = true;
|
|
766
|
+
if (this._formatIdx < this._format.length)
|
|
767
|
+
this._zero = this._format[this._formatIdx++];
|
|
768
|
+
break;
|
|
769
|
+
case 'A':
|
|
770
|
+
this._formatIdx++;
|
|
771
|
+
this._autoSkip_ = true;
|
|
772
|
+
break;
|
|
773
|
+
case 'P':
|
|
774
|
+
if (this._format[this._formatIdx + 1] === 'M') {
|
|
775
|
+
this._formatIdx += 2;
|
|
776
|
+
this.pik_drv_fill(PICInterface.PIC_PM, 2);
|
|
777
|
+
}
|
|
778
|
+
else
|
|
779
|
+
this.pik_mask();
|
|
780
|
+
break;
|
|
781
|
+
default:
|
|
782
|
+
this.pik_mask();
|
|
783
|
+
break;
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
static buildPicture(type, val, compIdx, useDecimal) {
|
|
788
|
+
let pic = null;
|
|
789
|
+
let mask = new StringBuilder(10);
|
|
790
|
+
let decimalSeparator;
|
|
791
|
+
let thousands;
|
|
792
|
+
let currChar;
|
|
793
|
+
let counter;
|
|
794
|
+
let length;
|
|
795
|
+
let beforeDec;
|
|
796
|
+
let afterDec;
|
|
797
|
+
let decimalDelimFound;
|
|
798
|
+
let isThousandsDelim;
|
|
799
|
+
let isNegative;
|
|
800
|
+
switch (type) {
|
|
801
|
+
case StorageAttribute.NUMERIC:
|
|
802
|
+
decimalSeparator = GuiEnvironment.Environment.GetDecimal();
|
|
803
|
+
thousands = GuiEnvironment.Environment.GetThousands();
|
|
804
|
+
beforeDec = afterDec = 0;
|
|
805
|
+
decimalDelimFound = false;
|
|
806
|
+
isThousandsDelim = false;
|
|
807
|
+
isNegative = false;
|
|
808
|
+
if (val === null || val.length === 0)
|
|
809
|
+
beforeDec = afterDec = 1;
|
|
810
|
+
else {
|
|
811
|
+
length = val.length;
|
|
812
|
+
counter = 0;
|
|
813
|
+
while (counter < length) {
|
|
814
|
+
currChar = val[counter];
|
|
815
|
+
switch (currChar) {
|
|
816
|
+
case '+':
|
|
817
|
+
case '-':
|
|
818
|
+
isNegative = true;
|
|
819
|
+
break;
|
|
820
|
+
default:
|
|
821
|
+
if (useDecimal && currChar === decimalSeparator)
|
|
822
|
+
decimalDelimFound = true;
|
|
823
|
+
else if (currChar === thousands)
|
|
824
|
+
isThousandsDelim = true;
|
|
825
|
+
else if (decimalDelimFound)
|
|
826
|
+
afterDec++;
|
|
827
|
+
else
|
|
828
|
+
beforeDec++;
|
|
829
|
+
break;
|
|
830
|
+
}
|
|
831
|
+
counter++;
|
|
832
|
+
}
|
|
833
|
+
mask.Append("" + beforeDec + decimalSeparator + afterDec);
|
|
834
|
+
if (isNegative)
|
|
835
|
+
mask.Append('N');
|
|
836
|
+
if (isThousandsDelim)
|
|
837
|
+
mask.Append('C');
|
|
838
|
+
}
|
|
839
|
+
break;
|
|
840
|
+
case StorageAttribute.DATE:
|
|
841
|
+
mask.Append(this.getDefaultDateMask(GuiEnvironment.Environment.GetDateMode(compIdx)));
|
|
842
|
+
break;
|
|
843
|
+
case StorageAttribute.TIME:
|
|
844
|
+
mask.Append("HH" + GuiEnvironment.Environment.GetTime() + "MM" + GuiEnvironment.Environment.GetTime() + "SS");
|
|
845
|
+
break;
|
|
846
|
+
default:
|
|
847
|
+
Events.WriteDevToLog("Event.buildPicture() there is no PICTURE building for type :" + type +
|
|
848
|
+
" and value :" + val);
|
|
849
|
+
return pic;
|
|
850
|
+
}
|
|
851
|
+
pic = new PIC(mask.ToString(), type, compIdx);
|
|
852
|
+
return pic;
|
|
853
|
+
}
|
|
854
|
+
setHebrew() {
|
|
855
|
+
if (GuiEnvironment.Environment.Language === 'H')
|
|
856
|
+
this.hebrew = true;
|
|
857
|
+
}
|
|
858
|
+
static getDefaultDateMask(dataMode) {
|
|
859
|
+
let frmt;
|
|
860
|
+
switch (dataMode) {
|
|
861
|
+
case 'J':
|
|
862
|
+
case 'S':
|
|
863
|
+
frmt = "####/##/##";
|
|
864
|
+
break;
|
|
865
|
+
case 'B':
|
|
866
|
+
case 'E':
|
|
867
|
+
case 'A':
|
|
868
|
+
default:
|
|
869
|
+
frmt = "##/##/####";
|
|
870
|
+
break;
|
|
871
|
+
}
|
|
872
|
+
return frmt;
|
|
873
|
+
}
|
|
874
|
+
bool_prs() {
|
|
875
|
+
let count;
|
|
876
|
+
let currChr;
|
|
877
|
+
while (this._formatIdx < this._format.length) {
|
|
878
|
+
currChr = this._format[this._formatIdx];
|
|
879
|
+
switch (currChr) {
|
|
880
|
+
case 'H':
|
|
881
|
+
this._formatIdx++;
|
|
882
|
+
this.setHebrew();
|
|
883
|
+
break;
|
|
884
|
+
case 'A':
|
|
885
|
+
this._formatIdx++;
|
|
886
|
+
this._autoSkip_ = true;
|
|
887
|
+
break;
|
|
888
|
+
case 'X':
|
|
889
|
+
this._formatIdx++;
|
|
890
|
+
count = this.pik_count();
|
|
891
|
+
this.pik_drv_fill(PICInterface.PIC_X, count);
|
|
892
|
+
break;
|
|
893
|
+
default:
|
|
894
|
+
if (UtilStrByteMode.isDigit(currChr)) {
|
|
895
|
+
count = this.pik_count();
|
|
896
|
+
this.pik_drv_fill(PICInterface.PIC_X, count);
|
|
897
|
+
}
|
|
898
|
+
else
|
|
899
|
+
this.pik_mask();
|
|
900
|
+
break;
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
if (this._maskSize === 0)
|
|
904
|
+
this.pik_drv_fill(PICInterface.PIC_X, this._mskLen);
|
|
905
|
+
}
|
|
906
|
+
pik_sign() {
|
|
907
|
+
let posSign;
|
|
908
|
+
let signStr;
|
|
909
|
+
let currChr;
|
|
910
|
+
posSign = this._format[this._formatIdx] === '+'
|
|
911
|
+
? true
|
|
912
|
+
: false;
|
|
913
|
+
this._formatIdx++;
|
|
914
|
+
if (posSign)
|
|
915
|
+
signStr = this._posPref;
|
|
916
|
+
else {
|
|
917
|
+
this._negPref.Remove(0, this._negPref.Length);
|
|
918
|
+
signStr = this._negPref;
|
|
919
|
+
}
|
|
920
|
+
while (this._formatIdx < this._format.length) {
|
|
921
|
+
currChr = this._format[this._formatIdx];
|
|
922
|
+
switch (currChr) {
|
|
923
|
+
case ';':
|
|
924
|
+
this._formatIdx++;
|
|
925
|
+
return;
|
|
926
|
+
case ',':
|
|
927
|
+
this._formatIdx++;
|
|
928
|
+
if (posSign)
|
|
929
|
+
signStr = this._posSuff;
|
|
930
|
+
else
|
|
931
|
+
signStr = this._negSuff;
|
|
932
|
+
break;
|
|
933
|
+
case '\\':
|
|
934
|
+
this._formatIdx++;
|
|
935
|
+
if (this._formatIdx >= this._format.length)
|
|
936
|
+
return;
|
|
937
|
+
currChr = this._format[this._formatIdx];
|
|
938
|
+
default:
|
|
939
|
+
signStr.Append(currChr);
|
|
940
|
+
this._formatIdx++;
|
|
941
|
+
break;
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
pik_count() {
|
|
946
|
+
let specialValNewPolicy = GuiEnvironment.Environment.GetSpecialValNewPolicy();
|
|
947
|
+
let val;
|
|
948
|
+
let isDigit = false;
|
|
949
|
+
val = 0;
|
|
950
|
+
while (this._formatIdx < this._format.length && UtilStrByteMode.isDigit(this._format[this._formatIdx])) {
|
|
951
|
+
val *= 10;
|
|
952
|
+
isDigit = true;
|
|
953
|
+
val += this._format[this._formatIdx].charCodeAt(0) - '0'.charCodeAt(0);
|
|
954
|
+
this._formatIdx++;
|
|
955
|
+
}
|
|
956
|
+
if (val > 32000)
|
|
957
|
+
val = 32000;
|
|
958
|
+
else if (val <= 0) {
|
|
959
|
+
if (specialValNewPolicy && isDigit && val === 0)
|
|
960
|
+
return 0;
|
|
961
|
+
else
|
|
962
|
+
val = 1;
|
|
963
|
+
}
|
|
964
|
+
if (val > Int32.MaxValue)
|
|
965
|
+
throw new ApplicationException(Events.GetMessageString(MsgInterface.STR_ERR_MAX_VAR_SIZE));
|
|
966
|
+
return (val);
|
|
967
|
+
}
|
|
968
|
+
pik_drv_fill(drv, count) {
|
|
969
|
+
let MskZ;
|
|
970
|
+
let i = 0;
|
|
971
|
+
if (this._needLength) {
|
|
972
|
+
this._maskLength += count;
|
|
973
|
+
return;
|
|
974
|
+
}
|
|
975
|
+
MskZ = this._maskSize;
|
|
976
|
+
this._maskSize += count;
|
|
977
|
+
if (MskZ + count > this._mskLen)
|
|
978
|
+
count = this._mskLen - MskZ;
|
|
979
|
+
if (count > 0) {
|
|
980
|
+
for (i = 0; i < count; i++)
|
|
981
|
+
this._msk[MskZ + i] = String.fromCharCode(drv);
|
|
982
|
+
return;
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
pik_mask() {
|
|
986
|
+
let currChr;
|
|
987
|
+
let count;
|
|
988
|
+
if (this._format[this._formatIdx] === '\\')
|
|
989
|
+
this._formatIdx++;
|
|
990
|
+
if (this._formatIdx < this._format.length) {
|
|
991
|
+
currChr = this._format[this._formatIdx];
|
|
992
|
+
this._formatIdx++;
|
|
993
|
+
count = this.pik_count();
|
|
994
|
+
this.pik_drv_fill(currChr.charCodeAt(0), count);
|
|
995
|
+
this._maskChars += count;
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
pik_dup() {
|
|
999
|
+
let dupCount = 1;
|
|
1000
|
+
let c;
|
|
1001
|
+
let tmpIdx = this._formatIdx;
|
|
1002
|
+
c = this._format[tmpIdx];
|
|
1003
|
+
tmpIdx++;
|
|
1004
|
+
while (tmpIdx < this._format.length && c === this._format[tmpIdx]) {
|
|
1005
|
+
dupCount++;
|
|
1006
|
+
tmpIdx++;
|
|
1007
|
+
}
|
|
1008
|
+
return dupCount;
|
|
1009
|
+
}
|
|
1010
|
+
pic_kanji() {
|
|
1011
|
+
let count;
|
|
1012
|
+
if (this._formatIdx + 1 >= this._format.length)
|
|
1013
|
+
return false;
|
|
1014
|
+
if (!UtilStrByteMode.isDigit(this._format[this._formatIdx + 1]))
|
|
1015
|
+
return false;
|
|
1016
|
+
this._formatIdx++;
|
|
1017
|
+
if (this._format[this._formatIdx] === '0') {
|
|
1018
|
+
this._imeMode = UtilImeJpn.IME_FORCE_OFF;
|
|
1019
|
+
this._formatIdx++;
|
|
1020
|
+
}
|
|
1021
|
+
else {
|
|
1022
|
+
count = this.pik_count();
|
|
1023
|
+
if (1 <= count && count <= 9)
|
|
1024
|
+
this._imeMode = count;
|
|
1025
|
+
}
|
|
1026
|
+
return true;
|
|
1027
|
+
}
|
|
1028
|
+
getMaskLen(compIdx) {
|
|
1029
|
+
this._needLength = true;
|
|
1030
|
+
this._maskLength = 0;
|
|
1031
|
+
this._formatIdx = 0;
|
|
1032
|
+
this.prs_all(compIdx);
|
|
1033
|
+
if (this._picAttr === StorageAttribute.NUMERIC && (this._prefLen > 0 || this._suffLen > 0))
|
|
1034
|
+
this._maskLength += (this._prefLen + this._suffLen);
|
|
1035
|
+
this._needLength = false;
|
|
1036
|
+
this._formatIdx = this._maskChars = this._whole = this._decimalDigits = this._size = this._maskSize = this._prefLen = this._suffLen = 0;
|
|
1037
|
+
this._pad = this._zero = String.fromCharCode(0);
|
|
1038
|
+
this.hebrew = this._mixed = this._embeded = this._negative = this._comma = this._left = this._padFill = this._zeroFill = this._trim = this._autoSkip_ = this._decimal = this._termFlag = this._decPointIsFirst = false;
|
|
1039
|
+
this._posPref.Remove(0, this._posPref.Length);
|
|
1040
|
+
this._posSuff.Remove(0, this._posSuff.Length);
|
|
1041
|
+
this._negPref.Remove(0, this._negPref.Length);
|
|
1042
|
+
this._negSuff.Remove(0, this._negSuff.Length);
|
|
1043
|
+
return this._maskLength;
|
|
1044
|
+
}
|
|
1045
|
+
picIsMask(pos) {
|
|
1046
|
+
if (pos < 0 || pos >= this._maskLength)
|
|
1047
|
+
pos = 0;
|
|
1048
|
+
return this._msk[pos].charCodeAt(0) > PICInterface.PIC_MAX_OP;
|
|
1049
|
+
}
|
|
1050
|
+
getDirectiveLen(posOrMskPos, bufPos, buf) {
|
|
1051
|
+
if (arguments.length === 1)
|
|
1052
|
+
return this.getDirectiveLen_0(posOrMskPos);
|
|
1053
|
+
else
|
|
1054
|
+
return this.getDirectiveLen_1(posOrMskPos, bufPos, buf);
|
|
1055
|
+
}
|
|
1056
|
+
getDirectiveLen_0(pos) {
|
|
1057
|
+
let c = this._msk[pos];
|
|
1058
|
+
let num = pos;
|
|
1059
|
+
while (num < this._maskSize && c === this._msk[num]) {
|
|
1060
|
+
num = num + 1;
|
|
1061
|
+
}
|
|
1062
|
+
return num - pos;
|
|
1063
|
+
}
|
|
1064
|
+
getDirectiveLen_1(mskPos, bufPos, buf) {
|
|
1065
|
+
let drv = this._msk[mskPos];
|
|
1066
|
+
let currMskPos = mskPos;
|
|
1067
|
+
let currBufPos = bufPos;
|
|
1068
|
+
while (currMskPos < this._maskSize && drv === this._msk[currMskPos]) {
|
|
1069
|
+
if (currBufPos < buf.length && UtilStrByteMode.isLocaleDefLangDBCS() && this.isAttrAlphaOrDate()) {
|
|
1070
|
+
if (!UtilStrByteMode.isHalfWidth(buf[currBufPos++]))
|
|
1071
|
+
currMskPos++;
|
|
1072
|
+
}
|
|
1073
|
+
currMskPos++;
|
|
1074
|
+
}
|
|
1075
|
+
return (currMskPos - mskPos);
|
|
1076
|
+
}
|
|
1077
|
+
validateChar(charToValidate, pos) {
|
|
1078
|
+
let charReturned = charToValidate;
|
|
1079
|
+
if (pos >= this.getMaskSize())
|
|
1080
|
+
return charReturned;
|
|
1081
|
+
while (this.picIsMask(pos))
|
|
1082
|
+
pos++;
|
|
1083
|
+
switch (this._msk[pos].charCodeAt(0)) {
|
|
1084
|
+
case PICInterface.PIC_U:
|
|
1085
|
+
charReturned = charToValidate.toUpperCase();
|
|
1086
|
+
break;
|
|
1087
|
+
case PICInterface.PIC_L:
|
|
1088
|
+
charReturned = charToValidate.toLowerCase();
|
|
1089
|
+
default:
|
|
1090
|
+
if (!UtilStrByteMode.isDigit(charToValidate))
|
|
1091
|
+
for (let i = 0; i < PICInterface.NumDirective.length; i++)
|
|
1092
|
+
if (this._msk[pos].charCodeAt(0) === PICInterface.NumDirective[i]) {
|
|
1093
|
+
charReturned = this.isValidInNum(charToValidate);
|
|
1094
|
+
break;
|
|
1095
|
+
}
|
|
1096
|
+
break;
|
|
1097
|
+
}
|
|
1098
|
+
return charReturned;
|
|
1099
|
+
}
|
|
1100
|
+
isValidInNum(letter) {
|
|
1101
|
+
let charRet = '\0';
|
|
1102
|
+
let decimalChar = GuiEnvironment.Environment.GetDecimal();
|
|
1103
|
+
if (GuiEnvironment.Environment.CanReplaceDecimalSeparator() && this.isAttrNumeric())
|
|
1104
|
+
if (letter === '.')
|
|
1105
|
+
letter = decimalChar;
|
|
1106
|
+
switch (letter) {
|
|
1107
|
+
case ' ':
|
|
1108
|
+
case '-':
|
|
1109
|
+
case '*':
|
|
1110
|
+
case '+':
|
|
1111
|
+
case '/':
|
|
1112
|
+
charRet = letter;
|
|
1113
|
+
break;
|
|
1114
|
+
default:
|
|
1115
|
+
if (letter === decimalChar || letter === GuiEnvironment.Environment.GetThousands())
|
|
1116
|
+
charRet = letter;
|
|
1117
|
+
break;
|
|
1118
|
+
}
|
|
1119
|
+
return charRet;
|
|
1120
|
+
}
|
|
1121
|
+
isAttrLogical() {
|
|
1122
|
+
return (this._picAttr === StorageAttribute.BOOLEAN);
|
|
1123
|
+
}
|
|
1124
|
+
isAttrNumeric() {
|
|
1125
|
+
return (this._picAttr === StorageAttribute.NUMERIC);
|
|
1126
|
+
}
|
|
1127
|
+
isAttrAlpha() {
|
|
1128
|
+
return (this._picAttr === StorageAttribute.ALPHA);
|
|
1129
|
+
}
|
|
1130
|
+
isAttrUnicode() {
|
|
1131
|
+
return (this._picAttr === StorageAttribute.UNICODE);
|
|
1132
|
+
}
|
|
1133
|
+
isAttrAlphaOrDate() {
|
|
1134
|
+
return (this._picAttr === StorageAttribute.ALPHA || this._picAttr === StorageAttribute.DATE);
|
|
1135
|
+
}
|
|
1136
|
+
isAttrDateOrTime() {
|
|
1137
|
+
return (this._picAttr === StorageAttribute.TIME || this._picAttr === StorageAttribute.DATE);
|
|
1138
|
+
}
|
|
1139
|
+
isAttrBlob() {
|
|
1140
|
+
return (this._picAttr === StorageAttribute.BLOB ||
|
|
1141
|
+
this._picAttr === StorageAttribute.BLOB_VECTOR);
|
|
1142
|
+
}
|
|
1143
|
+
isNumeric(pos) {
|
|
1144
|
+
return this._msk[pos] === String.fromCharCode(PICInterface.PIC_N);
|
|
1145
|
+
}
|
|
1146
|
+
isAllX() {
|
|
1147
|
+
return (this._msk[0] === String.fromCharCode(PICInterface.PIC_X) && this.getDirectiveLen(0) === this._maskSize);
|
|
1148
|
+
}
|
|
1149
|
+
isMaskPicEq(pos, maskPic) {
|
|
1150
|
+
return this._msk[pos] === String.fromCharCode(maskPic);
|
|
1151
|
+
}
|
|
1152
|
+
isValidChar_as400(charToValidate, firstChar, pos) {
|
|
1153
|
+
let ret = true;
|
|
1154
|
+
switch (this._msk[pos].charCodeAt(0)) {
|
|
1155
|
+
case PICInterface.PIC_J:
|
|
1156
|
+
case PICInterface.PIC_G:
|
|
1157
|
+
ret = !UtilStrByteMode.isHalfWidth(charToValidate);
|
|
1158
|
+
break;
|
|
1159
|
+
case (PICInterface.PIC_T):
|
|
1160
|
+
if (firstChar === '\x0000')
|
|
1161
|
+
ret = true;
|
|
1162
|
+
else if (UtilStrByteMode.isHalfWidth(firstChar))
|
|
1163
|
+
ret = UtilStrByteMode.isHalfWidth(charToValidate);
|
|
1164
|
+
else
|
|
1165
|
+
ret = !UtilStrByteMode.isHalfWidth(charToValidate);
|
|
1166
|
+
break;
|
|
1167
|
+
case (PICInterface.PIC_S):
|
|
1168
|
+
ret = UtilStrByteMode.isHalfWidth(charToValidate);
|
|
1169
|
+
break;
|
|
1170
|
+
default:
|
|
1171
|
+
break;
|
|
1172
|
+
}
|
|
1173
|
+
return ret;
|
|
1174
|
+
}
|
|
1175
|
+
getMinimumValueLength() {
|
|
1176
|
+
let minLength = this.getMaskLength();
|
|
1177
|
+
while (minLength > 0 && !this.picIsMask(minLength - 1))
|
|
1178
|
+
minLength--;
|
|
1179
|
+
return minLength;
|
|
1180
|
+
}
|
|
1181
|
+
toString() {
|
|
1182
|
+
return "{Picture: " + this._format + "}";
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUElDLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L2d1aS9QSUMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUXRELE1BQU0sT0FBTyxHQUFHO0lBSU4sT0FBTyxHQUFXLENBQUMsQ0FBQztJQUNwQixRQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUMsUUFBUSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQzlDLFFBQVEsR0FBcUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBQ25ELFFBQVEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUM5QyxRQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUMsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixjQUFjLEdBQVcsQ0FBQyxDQUFDO0lBQzNCLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsVUFBVSxHQUFXLENBQUMsQ0FBQztJQUN2QixPQUFPLEdBQWEsSUFBSSxDQUFDO0lBQ3pCLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFDeEIsUUFBUSxHQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLEtBQUssR0FBWSxLQUFLLENBQUM7SUFDdkIsV0FBVyxHQUFXLENBQUMsQ0FBQztJQUN4QixVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBQ3ZCLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFDdEIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixVQUFVLEdBQVcsS0FBSyxDQUFDO0lBSTNCLElBQUksR0FBYSxJQUFJLENBQUM7SUFDdEIsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLElBQUksR0FBVyxJQUFJLENBQUM7SUFDcEIsUUFBUSxHQUFXLENBQUMsQ0FBQztJQUNyQixLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBQ2xCLFFBQVEsR0FBVyxDQUFDLENBQUM7SUFDckIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixLQUFLLEdBQVksS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFDbkIsS0FBSyxHQUFXLElBQUksQ0FBQztJQVE3QixZQUFZLE1BQWMsRUFBRSxJQUFzQixFQUFFLE9BQWU7UUFDakUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGdCQUFnQixDQUFDLElBQUk7WUFDekMsSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxhQUFhLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUMzRSxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFeEIsQ0FBQztJQU1ELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENB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LENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbkQsTUFBTTtZQUVSLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN2QixJQUFJLFNBQVMsS0FBSyxRQUFRO29CQUN4QixHQUFHLEdBQUcsSUFBSSxDQUFDO3FCQUNSLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7b0JBQzdDLEdBQUcsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDOztvQkFFbEQsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDckQsTUFBTTtZQUVSLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN2QixHQUFHLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEQsTUFBTTtZQUVSO2dCQUNFLE1BQU07UUFDVixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBS0QscUJBQXFCO1FBQ25CLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUdyQyxPQUFPLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDcEQsU0FBUyxFQUFFLENBQUM7UUFFZCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQzNDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1zZ0ludGVyZmFjZSwgUElDSW50ZXJmYWNlLCBTdG9yYWdlQXR0cmlidXRlLCBVdGlsSW1lSnBuLCBVdGlsU3RyQnl0ZU1vZGUgfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgRXZlbnRzIH0gZnJvbSAnLi4vLi4vRXZlbnRzJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25FeGNlcHRpb24sIEludDMyLCBOU3RyaW5nLCBTdHJpbmdCdWlsZGVyIH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQgeyBHdWlFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL0d1aUVudmlyb25tZW50JztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhlIGNsYXNzIGhhbmRsZXMgdGhlIHByb2Nlc3Mgb2YgY29udmVydGluZyBpbnRlcm5hbCBkYXRhIHRvIGRpc3BsYXllZCBkYXRhXHJcbi8vLyAgIGJ5IHVzaW5nIGEgc3BlY2lmaWMgZm9ybWF0LlxyXG4vLy8gICBUaGUgY2xhc3MgaW1wbGVtZW50cyB0aGUgUElDIHN0cnVjdHVyZSBvZiBNYWdpYywgYW5kIGFsbCBpdHMgcmVsYXRlZCBvcGVyYXRpb25zLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgUElDIHtcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIE9yaWdpbmFsIG1lbWJlcnMgb2YgdGhlIE1hZ2ljIFBJQyBzdHJ1Y3R1cmVcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHByaXZhdGUgX21za0xlbjogbnVtYmVyID0gMDsgLy8gVGhlIG1hc2sgbGVuXHJcbiAgcHJpdmF0ZSBfbmVnUHJlZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgcHJpdmF0ZSBfbmVnU3VmZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgcHJpdmF0ZSBfcGljQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTtcclxuICBwcml2YXRlIF9wb3NQcmVmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICBwcml2YXRlIF9wb3NTdWZmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICBwcml2YXRlIF9hdXRvU2tpcF86IGJvb2xlYW4gPSBmYWxzZTsgIC8vIEF1dG9za2lwID9cclxuICBwcml2YXRlIF9wYWRGaWxsOiBib29sZWFuID0gZmFsc2U7IC8vIFBhZCBmaWxsID9cclxuICBwcml2YXRlIF96ZXJvRmlsbDogYm9vbGVhbiA9IGZhbHNlOyAgLy8gWmVybyBmaWxsID9cclxuICBwcml2YXRlIF9jb21tYTogYm9vbGVhbiA9IGZhbHNlOyAvLyBEaXNwbGF5IG51bWJlcnMgd2l0aCBjb21tYXMgP1xyXG4gIHByaXZhdGUgX2RlY2ltYWxEaWdpdHM6IG51bWJlciA9IDA7IC8vIERlY2ltYWwgZGlnaXRzXHJcbiAgcHJpdmF0ZSBfZGVjUG9pbnRJc0ZpcnN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGVjaW1hbDogYm9vbGVhbiA9IGZhbHNlOyAvLyBEZWNpbWFscyA/XHJcbiAgcHJpdmF0ZSBfZW1iZWRlZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBFbWJlZGVkIGNoYXJhY3RlcnMgP1xyXG4gIHByaXZhdGUgX2Zvcm1hdElkeDogbnVtYmVyID0gMDsgLy8gQ3VycmVudCBjaGFyIHByb2Nlc3NlZCBpbiBmb3JtYXRfO1xyXG4gIHByaXZhdGUgX2Zvcm1hdDogc3RyaW5nW10gPSBudWxsOyAvLyBUaGUgZm9ybWF0IHByb2Nlc3NlZFxyXG4gIHByaXZhdGUgaGVicmV3OiBib29sZWFuID0gZmFsc2U7IC8vIEhlYnJldyA/XHJcbiAgcHJpdmF0ZSBfaW1lTW9kZTogbnVtYmVyID0gLTE7IC8vIEpQTjogSU1FIHN1cHBvcnRcclxuICBwcml2YXRlIF9sZWZ0OiBib29sZWFuID0gZmFsc2U7IC8vIExlZnQganVzdGlmaWVkID9cclxuICBwcml2YXRlIF9tYXNrTGVuZ3RoOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX21hc2tDaGFyczogbnVtYmVyID0gMDsgLy8gTWFzayBjaGFycyBjb3VudFxyXG4gIHByaXZhdGUgX21hc2tTaXplOiBudW1iZXIgPSAwOyAvLyBTaXplIG9mIHBpY3R1cmUgaS9vIG1hc2tcclxuICBwcml2YXRlIF9taXhlZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBNaXhlZCBsYW5ndWFnZSA/XHJcbiAgcHJpdmF0ZSBfZm9ybWF0RXhwOmJvb2xlYW4gPSBmYWxzZTtcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEFkZGVkIHZhcmlhYmxlc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcHJpdmF0ZSBfbXNrOiBzdHJpbmdbXSA9IG51bGw7IC8vIFRoZSBtYXNrIGZvciB0aGUgc3BlY2lmaWVkIHBpY3R1cmUgZm9ybWF0XHJcbiAgcHJpdmF0ZSBfbmVlZExlbmd0aDogYm9vbGVhbiA9IGZhbHNlOyAvLyBnZXQgbGVuZ3RoIG9mIHRoZSBwaWN0dXJlIGFmdGVyIHBhcnNpbmdcclxuICBwcml2YXRlIF9uZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBOZWdhdGl2ZSB2YWx1ZXMgYWxsb3dlZCA/XHJcbiAgcHJpdmF0ZSBfcGFkOiBzdHJpbmcgPSAnXFwwJzsgLy8gUGFkIGNoYXJhY3RlclxyXG4gIHByaXZhdGUgX3ByZWZMZW46IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfc2l6ZTogbnVtYmVyID0gMDsgLy8gU2l6ZSBvZiBBbHBoYSBkYXRhICB3aXRob3V0IG1hc2sgY2hhcmFjdGVyc1xyXG4gIHByaXZhdGUgX3N1ZmZMZW46IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdGVybUZsYWc6IGJvb2xlYW4gPSBmYWxzZTsgLy8gYXJlIHRlcm1pbmF0b3JzIHNwZWNpZmllZCA/XHJcbiAgcHJpdmF0ZSBfdHJpbTogYm9vbGVhbiA9IGZhbHNlOyAvLyBUcmltID9cclxuICBwcml2YXRlIF93aG9sZTogbnVtYmVyID0gMDsgLy8gV2hvbGUgZGlnaXRzXHJcbiAgcHJpdmF0ZSBfemVybzogc3RyaW5nID0gJ1xcMCc7IC8vIFplcm8gY2hhcmFjdGVyXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGRzIGEgUElDIGNsYXNzIGZyb20gcGljdHVyZSBmb3JtYXQgYW5kIGF0dHJpYnV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj5UaGUgcGljdHVyZSBmb3JtYXQgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImF0dHJcIj5UaGUgZGF0YSBhdHRyaWJ1dGUgKE4vQS9EL1QvLi4uKTwvcGFyYW0+XHJcbiAgY29uc3RydWN0b3IocGljU3RyOiBzdHJpbmcsIGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIGNvbXBJZHg6IG51bWJlcikge1xyXG4gICAgdGhpcy5fcGljQXR0ciA9IGF0dHI7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fFxyXG4gICAgICB0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIGlmIChwaWNTdHIudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyhcIlBJQy5QSUMgdGhlIHBpY3R1cmUgb2YgQkxPQiBtdXN0IGJlIGVtcHR5IHN0cmluZ1wiKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZm9ybWF0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShwaWNTdHIpO1xyXG4gICAgdGhpcy5fZm9ybWF0SWR4ID0gMDtcclxuXHJcbiAgICB0aGlzLl9tc2tMZW4gPSB0aGlzLmdldE1hc2tMZW4oY29tcElkeCk7XHJcbiAgICB0aGlzLnByc19hbGwoY29tcElkeCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgaW5mb3JtYXRpb24gbWV0aG9kc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0hlYnJldygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmhlYnJldztcclxuICB9XHJcblxyXG4gIGlzTWl4ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWl4ZWQ7XHJcbiAgfVxyXG5cclxuICBlbWJlZGVkQ2hhcnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW1iZWRlZDtcclxuICB9XHJcblxyXG4gIGlzTmVnYXRpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmVnYXRpdmU7XHJcbiAgfVxyXG5cclxuICB3aXRoQ29tYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jb21tYTtcclxuICB9XHJcblxyXG4gIGlzTGVmdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9sZWZ0O1xyXG4gIH1cclxuXHJcbiAgcGFkRmlsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWRGaWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFkO1xyXG4gIH1cclxuXHJcbiAgemVyb0ZpbGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5femVyb0ZpbGw7XHJcbiAgfVxyXG5cclxuICBnZXRaZXJvUGFkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5femVybztcclxuICB9XHJcblxyXG4gIGlzVHJpbWVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyaW07XHJcbiAgfVxyXG5cclxuICBhdXRvU2tpcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hdXRvU2tpcF87XHJcbiAgfVxyXG5cclxuICB3aXRoRGVjaW1hbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNpbWFsO1xyXG4gIH1cclxuXHJcbiAgd2l0aFRlcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVybUZsYWc7XHJcbiAgfVxyXG5cclxuICBnZXRNYXNrQ2hhcnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXNrQ2hhcnM7XHJcbiAgfVxyXG5cclxuICBnZXRXaG9sZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl93aG9sZTtcclxuICB9XHJcblxyXG4gIGdldERlYygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlY2ltYWxEaWdpdHM7XHJcbiAgfVxyXG5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcclxuICB9XHJcblxyXG4gIGdldE1hc2tTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFza1NpemU7XHJcbiAgfVxyXG5cclxuICBnZXRNYXNrTGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFza0xlbmd0aDtcclxuICB9XHJcblxyXG4gIGRlY0luRmlyc3RQb3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjUG9pbnRJc0ZpcnN0O1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0RXhwKHZhbCA6Ym9vbGVhbikge1xyXG4gICAgdGhpcy5fZm9ybWF0RXhwID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgaXNGb3JtYXRFeHAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybWF0RXhwO1xyXG4gIH1cclxuICBnZXRQb3NQcmVmXygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Bvc1ByZWYuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldFBvc1N1ZmZfKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcG9zU3VmZi5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmVnUHJlZl8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdQcmVmLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBnZXROZWdTdWZmXygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX25lZ1N1ZmYuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldE1hc2soKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyh0aGlzLl9tc2spO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnModGhpcy5fZm9ybWF0KTtcclxuICB9XHJcblxyXG4gIGdldEF0dHIoKTogU3RvcmFnZUF0dHJpYnV0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGljQXR0cjtcclxuICB9XHJcblxyXG5cclxuICBzZXRBdHRyKHNldDpTdG9yYWdlQXR0cmlidXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9waWNBdHRyID09IHNldDtcclxuICB9XHJcblxyXG4gIGdldEltZU1vZGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pbWVNb2RlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBhcnNlIHRoZSBwaWN0dXJlIGZvcm1hdCBieSB0aGUgYXR0cmlidXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHByc19hbGwoY29tcElkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX25lZWRMZW5ndGgpIHtcclxuICAgICAgdGhpcy5fbXNrID0gbmV3IEFycmF5PHN0cmluZz4odGhpcy5fbXNrTGVuKTtcclxuICAgICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0aGlzLl9tc2subGVuZ3RoOyArK19haSlcclxuICAgICAgICB0aGlzLl9tc2tbX2FpXSA9ICdcXDAnO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLl9waWNBdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgdGhpcy5hbHBoYV9wcnMoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIHRoaXMubnVtX3BycygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgdGhpcy5kYXRlX3Bycyhjb21wSWR4KTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIHRoaXMudGltZV9wcnMoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHRoaXMuYm9vbF9wcnMoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAvLyBkbyBub3RoaW5nXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQYXJzZSBhbiBhbHBoYSBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhbHBoYV9wcnMoKTogdm9pZCB7XHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG4gICAgbGV0IGRydjogbnVtYmVyO1xyXG4gICAgbGV0IGNvdW50OiBudW1iZXI7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICdIJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5zZXRIZWJyZXcoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIHRoaXMuX2F1dG9Ta2lwXyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcjJzpcclxuICAgICAgICBjYXNlICdMJzpcclxuICAgICAgICBjYXNlICdVJzpcclxuICAgICAgICBjYXNlICdYJzpcclxuICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICAgICAgY2FzZSAnIyc6XHJcbiAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19OO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnTCc6XHJcbiAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19MO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnVSc6XHJcbiAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19VO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnWCc6XHJcbiAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19YO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGNvdW50KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIC8vIEpQTjogREJDUyBzdXBwb3J0XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIEpQTjogSU1FIHN1cHBvcnRcclxuICAgICAgICAgICAgbGV0IHVzZUltZUpwbjogYm9vbGVhbiA9IFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJDaHIgPT09ICdLJyAmJiB1c2VJbWVKcG4pIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5waWNfa2FuamkoKSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0TG9jYWxBczQwMFNldCgpKSB7XHJcbiAgICAgICAgICAgICAgZHJ2ID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGN1cnJDaHIgPT09ICdKJylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSjtcclxuICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyQ2hyID09PSAnVCcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1Q7XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyckNociA9PT0gJ0cnKVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19HO1xyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJDaHIgPT09ICdTJylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfUztcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGRydiAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gSlBOOiBJTUUgc3VwcG9ydFxyXG4gICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIElNRSBtb2RlIGZyb20gQVMvNDAwIHBpY3R1cmVzIGlmIEthbmppIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faW1lTW9kZSA9PT0gLTEgJiYgdXNlSW1lSnBuKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChkcnYgPT09IFBJQ0ludGVyZmFjZS5QSUNfSiB8fCBkcnYgPT09IFBJQ0ludGVyZmFjZS5QSUNfRylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbWVNb2RlID0gVXRpbEltZUpwbi5JTUVfWkVOX0hJUkFHQU5BX1JPTUFOO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGlmIChkcnYgPT09IFBJQ0ludGVyZmFjZS5QSUNfUylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbWVNb2RlID0gVXRpbEltZUpwbi5JTUVfRk9SQ0VfT0ZGO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGNvdW50KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjdXJyQ2hyKSkge1xyXG4gICAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfWCwgY291bnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEluIGNhc2UgdGhhdCBubyBwaWN0dXJlIGlzIHNwZWNpZmllZCwgYXNzdW1lIGFsbCBpcyBYc1xyXG4gICAgaWYgKHRoaXMuX21hc2tTaXplID09PSAwKVxyXG4gICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1gsIHRoaXMuX21za0xlbik7XHJcblxyXG4gICAgLy8gQ29tcHV0ZSBtYXNrIHNpemUgd2l0aG91dCB0aGUgbWFzayBjaGFyYWN0ZXJzXHJcbiAgICB0aGlzLl9zaXplID0gdGhpcy5fbWFza1NpemU7XHJcbiAgICBpZiAoIXRoaXMuX2VtYmVkZWQpXHJcbiAgICAgIHRoaXMuX3NpemUgLT0gdGhpcy5fbWFza0NoYXJzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBhcnNlIGEgbnVtZXJpYyBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBudW1fcHJzKCk6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG4gICAgbGV0IGNvdW50OiBudW1iZXI7XHJcbiAgICBsZXQgdG1wOiBudW1iZXI7XHJcbiAgICBsZXQgdG1wczogbnVtYmVyO1xyXG4gICAgbGV0IHRtcF9jOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGZpcnN0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5femVybyA9ICcgJy8qJyAnKi87XHJcbiAgICB0aGlzLl9wYWQgPSAnICcvKicgJyovO1xyXG4gICAgdGhpcy5fbmVnUHJlZi5BcHBlbmQoJy0nKS8qJy0nKi87XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuX2Zvcm1hdC5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICBpZiAodGhpcy5fZm9ybWF0W2ldID09PSAnKycgLyonKycqLyB8fCB0aGlzLl9mb3JtYXRbaV0gPT09ICctJy8qJy0nKi8pIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fZm9ybWF0W2ldID09PSAnXFxcXCcgLyonXFwnKi8gfHwgdGhpcy5fZm9ybWF0W2ldID09PSAnUCcvKidQJyovKSB7XHJcbiAgICAgICAgaSA9IGkgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9mb3JtYXRbaV0gPT09ICdDJy8qJ0MnKi8pIHtcclxuICAgICAgICB0aGlzLl9jb21tYSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJ04nOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9uZWdhdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnQyc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2NvbW1hID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdMJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fbGVmdCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnUCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX3BhZEZpbGwgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX3BhZCA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHgrK107XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX3plcm9GaWxsID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl96ZXJvID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCsrXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fYXV0b1NraXBfID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcuJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX25lZWRMZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX21hc2tMZW5ndGgrKztcclxuICAgICAgICAgIHRoaXMuX2RlY2ltYWwgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX21hc2tTaXplIDwgdGhpcy5fbXNrTGVuKVxyXG4gICAgICAgICAgICB0aGlzLl9tc2tbdGhpcy5fbWFza1NpemVdID0gIFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKTtcclxuICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAvLyAyNi8xMS85NyBTaGF5IFouIEJ1ZyAjNzcwNTI2IC0gTWFyayB0aGF0XHJcbiAgICAgICAgICAvLyBEZWNpbWFsIFBvaW50IGlzIGluIEZpcnN0IFBvc2l0aW9uOlxyXG4gICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgIGlmICh0aGlzLl9tYXNrU2l6ZSA9PT0gMClcclxuICAgICAgICAgICAgdGhpcy5fZGVjUG9pbnRJc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX21hc2tTaXplKys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnKyc6XHJcbiAgICAgICAgY2FzZSAnLSc6XHJcbiAgICAgICAgICB0aGlzLnBpa19zaWduKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjdXJyQ2hyKSB8fCBjdXJyQ2hyID09PSAnIycpIHtcclxuICAgICAgICAgICAgdG1wID0gdGhpcy5fZm9ybWF0SWR4O1xyXG4gICAgICAgICAgICBpZiAoY3VyckNociA9PT0gJyMnKVxyXG4gICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfTiwgY291bnQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0W3RtcF0gPT09ICcjJykge1xyXG4gICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdG1wcyA9IHRoaXMuX2Zvcm1hdElkeDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCA9IHRtcDtcclxuICAgICAgICAgICAgICAgIHRtcF9jID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggPSB0bXBzO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZmlyc3QgJiYgKHRtcF9jID4gMCB8fCBjb3VudCA+IDEpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAxKVxyXG4gICAgICAgICAgICAgICAgICB0bXBfYyA9IGNvdW50O1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIGNvbW1hcyBiZWZvciBwbGFjZXNcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21tYSAmJiAhdGhpcy5fZGVjaW1hbClcclxuICAgICAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19OLCBNYXRoLmZsb29yKCh0bXBfYyAtIDEpIC8gMykpO1xyXG4gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYWRkIGNvbW1hcyBiZWZvciBwbGFjZXNcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fY29tbWEgJiYgIXRoaXMuX2RlY2ltYWwpXHJcbiAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19OLCBNYXRoLmZsb29yKChjb3VudCAtIDEpIC8gMykpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RlY2ltYWwpXHJcbiAgICAgICAgICAgICAgdGhpcy5fZGVjaW1hbERpZ2l0cyArPSBjb3VudDtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRoaXMuX3dob2xlICs9IGNvdW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuLy8gU3RvcmUgdGhlIG1heGltYWwgbGVuZ3RoIG9mIHNpZ24gcHJlZml4IGFuZCBzdWZmaXggYmV0d2VlbiBuZWdhdGl2ZSBhbmQgcG9zaXRpdmVcclxuICAgIHRoaXMuX3ByZWZMZW4gPSB0aGlzLl9wb3NQcmVmLkxlbmd0aDtcclxuICAgIHRoaXMuX3N1ZmZMZW4gPSB0aGlzLl9wb3NTdWZmLkxlbmd0aDtcclxuICAgIGlmICh0aGlzLl9uZWdhdGl2ZSkge1xyXG4gICAgICBpZiAodGhpcy5fbmVnUHJlZi5MZW5ndGggPiB0aGlzLl9wcmVmTGVuKSB7XHJcbiAgICAgICAgdGhpcy5fcHJlZkxlbiA9IHRoaXMuX25lZ1ByZWYuTGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9uZWdTdWZmLkxlbmd0aCA+IHRoaXMuX3N1ZmZMZW4pIHtcclxuICAgICAgICB0aGlzLl9zdWZmTGVuID0gdGhpcy5fbmVnU3VmZi5MZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBmb3IgYSBmb3JtYXQgd2l0aG91dCBkaWdpdHNcclxuICAgIGlmICh0aGlzLl93aG9sZSA9PT0gMCAmJiB0aGlzLl9kZWNpbWFsRGlnaXRzID09PSAwKSB7XHJcbiAgICAgIGNvdW50ID0gUElDSW50ZXJmYWNlLlBJQ19NQVhfTVNLX0xFTiAtIHRoaXMuX3ByZWZMZW4gLSB0aGlzLl9zdWZmTGVuO1xyXG4gICAgICBpZiAodGhpcy5fbWFza1NpemUgPCBjb3VudCkge1xyXG4gICAgICAgIHRoaXMuX3dob2xlID0gY291bnQgLSB0aGlzLl9tYXNrU2l6ZTtcclxuICAgICAgICBpZiAodGhpcy5fY29tbWEpXHJcbiAgICAgICAgICB0aGlzLl93aG9sZSAtPSBNYXRoLmZsb29yKHRoaXMuX3dob2xlIC8gNCk7XHJcbiAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19OLCB0aGlzLl93aG9sZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgZXh0cmEgZm9yIHByZWYvc3VmZiBhbmQgY29tbWFzXHJcbiAgICBpZiAodGhpcy5fY29tbWEpIHtcclxuICAgICAgY291bnQgPSBNYXRoLmZsb29yKCh0aGlzLl93aG9sZSAtIDEpIC8gMyk7XHJcbiAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfTiwgY291bnQpO1xyXG4gICAgICAvLyByZW1vdmUgY29tbWFzIHBsYWNlc1xyXG4gICAgICB0aGlzLl9tYXNrU2l6ZSAtPSBjb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBpID0gdGhpcy5fcHJlZkxlbjtcclxuICAgIGlmIChpID4gMCAmJiB0aGlzLl9tc2sgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoKHRoaXMuX21hc2tTaXplICsgaSkgPD0gdGhpcy5fbXNrTGVuKSB7XHJcbiAgICAgICAgZm9yIChqID0gdGhpcy5fbWFza1NpemUgLSAxO1xyXG4gICAgICAgICAgICAgaiA+PSAwO1xyXG4gICAgICAgICAgICAgai0tKVxyXG4gICAgICAgICAgdGhpcy5fbXNrW2ogKyBpXSA9IHRoaXMuX21za1tqXTtcclxuICAgICAgICAvLyBtZW1zZXQgKHRoaXMtPm1zaywgUElDX04sIGkpOyAvLyBPcmlnaW5hbCBMaW5lXHJcbiAgICAgICAgZm9yIChqID0gMDtcclxuICAgICAgICAgICAgIGogPCBpO1xyXG4gICAgICAgICAgICAgaisrKVxyXG4gICAgICAgICAgaWYgKHRoaXMuX21zayAhPSBudWxsICYmIGogPCB0aGlzLl9tc2subGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl9tc2tbal0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWFza1NpemUgKz0gaTtcclxuICAgIH1cclxuICAgIGkgPSB0aGlzLl9zdWZmTGVuO1xyXG4gICAgaWYgKGkgPiAwICYmIHRoaXMuX21zayAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLl9tYXNrU2l6ZSArIHRoaXMuX3N1ZmZMZW4gPD0gdGhpcy5fbXNrTGVuKVxyXG4gICAgICAvLyBtZW1zZXQgKCZNc2tbdGhpcy0+cGljLT5tYXNrX3NpemVdLCBQSUNfTiwgdGhpcy0+cGljLT5zdWZmX2xlbik7IC8vIE9yaWdpbmFsIExpbmVcclxuICAgICAgICBmb3IgKGogPSAwO1xyXG4gICAgICAgICAgICAgaiA8IHRoaXMuX3N1ZmZMZW47XHJcbiAgICAgICAgICAgICBqKyspXHJcbiAgICAgICAgICB0aGlzLl9tc2tbdGhpcy5fbWFza1NpemUgKyBqXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKTtcclxuICAgICAgdGhpcy5fbWFza1NpemUgKz0gaTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXRVbmZvcm1hdHRlZE51bWVyaWNQaWMgZnJvbSBjdXJyZW50IHBpY1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGdldFVuZm9ybWF0dGVkTnVtZXJpY1BpYygpOiBQSUMge1xyXG4gICAgbGV0IHBpY1N0ciA9ICcnO1xyXG4gICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKVxyXG4gICAgICBwaWNTdHIgPSB0aGlzLmlzTmVnYXRpdmUoKSA/ICdOJzogJyc7XHJcblxyXG4gICAgcGljU3RyICs9IHRoaXMuZ2V0V2hvbGVzKCkudG9TdHJpbmcoKTtcclxuXHJcbiAgICBpZiAodGhpcy5nZXREZWMoKSA+IDApXHJcbiAgICAgIHBpY1N0ciArPSAgJy4nICsgdGhpcy5nZXREZWMoKS50b1N0cmluZygpO1xyXG4gICAgaWYgKHRoaXMuX3plcm9GaWxsKVxyXG4gICAgICBwaWNTdHIgKz0gJ1onO1xyXG4gICAgbGV0ICBuZXdQaWMgPSBuZXcgUElDIChwaWNTdHIsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgMCk7XHJcblxyXG4gICAgcmV0dXJuIG5ld1BpYztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQYXJzZSBhIGRhdGUgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZGF0ZV9wcnMoY29tcElkeDogbnVtYmVyKSB7XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gT3JpZ2luYWwgdmFyc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgb2NyOiBudW1iZXI7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlcjtcclxuICAgIGxldCBkcnY6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgU3dpdGNoQW5kRXhwYW5kRGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IFNXRXhwYW5kRGF0ZUNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gQWRkZWQgdmFyc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcbiAgICBsZXQgaXNKcG5FcmFZZWFyOiBib29sZWFuID0gZmFsc2U7IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgIHRoaXMuX3plcm8gPSAnICc7XHJcbiAgICBvY3IgPSAwO1xyXG5cclxuICAgIGlmICh0aGlzLl9mb3JtYXQubGVuZ3RoID09PSAwIHx8IHRoaXMuX2Zvcm1hdFswXSA9PT0gJ1xcMCcpXHJcbiAgICAgIHRoaXMuX2Zvcm1hdCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoUElDLmdldERlZmF1bHREYXRlTWFzayhHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSkpO1xyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5fZm9ybWF0Lmxlbmd0aDsgaisrKVxyXG4gICAgICBpZiAodGhpcy5fZm9ybWF0W2pdID09PSAnSCcpXHJcbiAgICAgICAgdGhpcy5zZXRIZWJyZXcoKTtcclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX3plcm9GaWxsID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl96ZXJvID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCsrXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdUJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fdHJpbSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2F1dG9Ta2lwXyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnTCc6XHJcbiAgICAgICAgICBpZiAodGhpcy5oZWJyZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfSEwsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnWSc6XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgIGkgPSBjb3VudDtcclxuICAgICAgICAgIHN3aXRjaCAoY291bnQpIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1lZO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1lZWVk7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19IWVlZWVk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0hZWVlZWTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkcnYgIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IGNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnTSc6XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgIGlmIChjb3VudCA9PT0gMilcclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NTUQ7XHJcbiAgICAgICAgICBlbHNlIGlmIChjb3VudCA+IDIpIHtcclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NTU07XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDEwKVxyXG4gICAgICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZHJ2ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBjb3VudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdEJzpcclxuICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgc3dpdGNoIChjb3VudCkge1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldykge1xyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ERDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyogIGZhbGxzIHRocm91Z2ggKi9cclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0RERDtcclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0hERDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19EREREO1xyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRydiAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGNvdW50KTtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IGNvdW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJyMnOlxyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgIGlmIChjb3VudCA9PT0gMikge1xyXG4gICAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgICBvY3IrKztcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgICBzd2l0Y2ggKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERhdGVNb2RlKGNvbXBJZHgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdCJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0UnOlxyXG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9jcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfREQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NTUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9jcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1EO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfREQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ0onOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2NyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFTV0V4cGFuZERhdGVDaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGZvcm1hdF8gY29udGFpbnMgXCIjIyMjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgU3dpdGNoQW5kRXhwYW5kRGF0ZSA9IE5TdHJpbmcuRnJvbUNoYXJzKHRoaXMuX2Zvcm1hdCkuaW5kZXhPZihcIiMjIyNcIikgPiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU1dFeHBhbmREYXRlQ2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoU3dpdGNoQW5kRXhwYW5kRGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19ZWVlZLCA0KTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01NRDtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0REO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZHJ2ICE9PSAwKVxyXG4gICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgMik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChjb3VudCA9PT0gNCkge1xyXG4gICAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgICBvY3IrKztcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgICBzd2l0Y2ggKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERhdGVNb2RlKGNvbXBJZHgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdCJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0UnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChvY3IgPT09IDMpXHJcbiAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWVlZO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdKJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgICAgICAgICAgICBpZiAob2NyID09PSAxKVxyXG4gICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVlZWTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTV0V4cGFuZERhdGVDaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBmb3JtYXRfIGNvbnRhaW5zIFwiIyMjI1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2hBbmRFeHBhbmREYXRlID0gIE5TdHJpbmcuRnJvbUNoYXJzKHRoaXMuX2Zvcm1hdCkuaW5kZXhPZihcIiMjIyNcIikgPiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgIFNXRXhwYW5kRGF0ZUNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoU3dpdGNoQW5kRXhwYW5kRGF0ZSAmJiBvY3IgPT09IDMpXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX0RELCAyKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRydiAhPT0gMClcclxuICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIDQpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAnVyc6XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgaSA9IGNvdW50O1xyXG4gICAgICAgICAgaWYgKGNvdW50ID09PSAxKVxyXG4gICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1c7XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSA1KVxyXG4gICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfV1dXO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICBlbHNlIGlmIChjb3VudCA+IDIgJiYgY291bnQgPD0gMTApXHJcbiAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfV1dXO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgaSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnLyc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERhdGUoKS5jaGFyQ29kZUF0KDApLCAxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdTJzogLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG5cclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgICAgaSA9IGNvdW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvdW50ICE9PSAyICYmIGNvdW50ICE9PSA0ICYmIGNvdW50ICE9PSA2KVxyXG4gICAgICAgICAgICAgIGkgPSAwO1xyXG5cclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19CQjtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IGNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdKJzogLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG5cclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgICAgaSA9IGNvdW50O1xyXG4gICAgICAgICAgICBpc0pwbkVyYVllYXIgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChjb3VudCkge1xyXG4gICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSlkxO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSlkyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSlk0O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgICAgICAgIGlzSnBuRXJhWWVhciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fbmVlZExlbmd0aCAmJiBpc0pwbkVyYVllYXIpXHJcbi8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAgIHtcclxuICAgICAgZm9yIChpID0gMDtcclxuICAgICAgICAgICBpIDwgdGhpcy5fbXNrLmxlbmd0aDtcclxuICAgICAgICAgICBpKyspIHtcclxuICAgICAgICBpZiAodGhpcy5fbXNrW2ldLmNoYXJDb2RlQXQoMCkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWVkpXHJcbiAgICAgICAgICB0aGlzLl9tc2tbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCBQSUNJbnRlcmZhY2UuUElDX1lKKTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9tc2tbaV0uY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19ZWVlZKVxyXG4gICAgICAgICAgdGhpcy5fbXNrW2ldID0gJ1knO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGFyc2UgYSBudW1lcmljIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHRpbWVfcHJzKCk6IHZvaWQge1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIE9yaWdpbmFsIHZhcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgZHJ2OiBudW1iZXI7XHJcbiAgICBsZXQgTm9Gb3JtYXQ6IHN0cmluZztcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBBZGRlZCB2YXJzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuXHJcbiAgICB0aGlzLl96ZXJvID0gJyAnO1xyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBVc2UgYSBkZWZhdWx0IGZvcm1hdCwgaWYgb25lIGlzIG5vdCBzcGVjaWZpZWRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAodGhpcy5fZm9ybWF0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9mb3JtYXRbMF0uY2hhckNvZGVBdCgwKSA9PT0gMCkge1xyXG4gICAgICBOb0Zvcm1hdCA9IFwiSEg6TU06U1NcIjtcclxuICAgICAgaWYgKHRoaXMuX21za0xlbiA8IDgpXHJcbiAgICAgICAgTm9Gb3JtYXQgPSBOb0Zvcm1hdC5zdWJzdHIoMCwgdGhpcy5fbXNrTGVuKTsgLy8gTm9Gb3JtYXRbdGhpcy0+bXNrX2xlbl0gPSAwOyAvLyBPcmlnaW5hbCBMaW5lXHJcbiAgICAgIHRoaXMuX2Zvcm1hdCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoTm9Gb3JtYXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuXHJcbiAgICAgIGxldCBtYXNrTGVuZ3RoOiBudW1iZXI7XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgIGNhc2UgJ00nOlxyXG4gICAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgICAgbWFza0xlbmd0aCA9IDI7XHJcbiAgICAgICAgICAvKiB3ZSBwYXJzZSAnSC9NL1MnIG9ubHkgaWYgaXQgaGFzIG9uZSBzaW1pbGFyIGNoYXJhY3RlciBhZnRlciBpdCAoaS5lLiAnSEgnLydNTScvJ1NTJykgKi9cclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggKyAxIDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCAmJiB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XSA9PT0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCArIDFdKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgICAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ISDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlICdNJzpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1UO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19TUztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLk5VTExfQ0hBUjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBtYXNrTGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIG1hc2tMZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnbSc6XHJcbiAgICAgICAgICBtYXNrTGVuZ3RoID0gMztcclxuICAgICAgICAgIC8qIHdlIHBhcnNlICdtJyBvbmx5IGlmIGl0IGhhcyAyIHNpbWlsYXIgY2hhcmFjdGVycyBhZnRlciBpdCAoaS5lLiAnbW1tJykgKi9cclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggKyAyIDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0gPT09IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAxXSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAxXSA9PT0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCArIDJdKSkge1xyXG4gICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01TO1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gbWFza0xlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBtYXNrTGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJzonOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaW1lKCkuY2hhckNvZGVBdCgwKSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX3plcm9GaWxsID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl96ZXJvID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCsrXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fYXV0b1NraXBfID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdQJzpcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4ICsgMV0gPT09ICdNJylcclxuICAgICAgICAgIC8vIGNoYW5nZWQgZnJvbSBmb3JtYXRfWzFdIC0+IGZvcm1hdF9bZm9ybWF0SWR4XysxXVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gMjtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19QTSwgMik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgUGljdHVyZSBmb3IgdGhlIHZhcmlhYmxlIG9mIHRoZSAndHlwZScgd2l0aCAndmFsdWUnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVcIj5vZiB0aGUgcGljdHVyZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWx1ZVwiPmlzIG5lZWRlZCB0byBiZSBldmFsdWF0ZWQgd2l0aCB0aGUgcGljdHVyZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBQSUN0dXJlIG9mIHRoZSBuZWVkZWQgJ3R5cGUnPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBzdGF0aWMgYnVpbGRQaWN0dXJlKHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHZhbDogc3RyaW5nLCBjb21wSWR4OiBudW1iZXIsIHVzZURlY2ltYWw6IGJvb2xlYW4pOiBQSUMge1xyXG4gICAgbGV0IHBpYzogUElDID0gbnVsbDtcclxuICAgIGxldCBtYXNrOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoMTApO1xyXG4gICAgbGV0IGRlY2ltYWxTZXBhcmF0b3I6IHN0cmluZztcclxuICAgIGxldCB0aG91c2FuZHM6IHN0cmluZztcclxuICAgIGxldCBjdXJyQ2hhcjogc3RyaW5nO1xyXG4gICAgbGV0IGNvdW50ZXI6IG51bWJlcjtcclxuICAgIGxldCBsZW5ndGg6IG51bWJlcjtcclxuICAgIGxldCBiZWZvcmVEZWM6IG51bWJlcjtcclxuICAgIGxldCBhZnRlckRlYzogbnVtYmVyO1xyXG4gICAgbGV0IGRlY2ltYWxEZWxpbUZvdW5kOiBib29sZWFuO1xyXG4gICAgbGV0IGlzVGhvdXNhbmRzRGVsaW06IGJvb2xlYW47XHJcbiAgICBsZXQgaXNOZWdhdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvciA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERlY2ltYWwoKTtcclxuICAgICAgICB0aG91c2FuZHMgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaG91c2FuZHMoKTtcclxuICAgICAgICBiZWZvcmVEZWMgPSBhZnRlckRlYyA9IDA7XHJcbiAgICAgICAgZGVjaW1hbERlbGltRm91bmQgPSBmYWxzZTtcclxuICAgICAgICBpc1Rob3VzYW5kc0RlbGltID0gZmFsc2U7XHJcbiAgICAgICAgaXNOZWdhdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbC5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICBiZWZvcmVEZWMgPSBhZnRlckRlYyA9IDE7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZW5ndGggPSB2YWwubGVuZ3RoO1xyXG4gICAgICAgICAgY291bnRlciA9IDA7XHJcblxyXG4gICAgICAgICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcclxuICAgICAgICAgICAgY3VyckNoYXIgPSB2YWxbY291bnRlcl07XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY3VyckNoYXIpIHtcclxuICAgICAgICAgICAgICBjYXNlICcrJzpcclxuICAgICAgICAgICAgICBjYXNlICctJzpcclxuICAgICAgICAgICAgICAgIGlzTmVnYXRpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZURlY2ltYWwgJiYgY3VyckNoYXIgPT09IGRlY2ltYWxTZXBhcmF0b3IpXHJcbiAgICAgICAgICAgICAgICAgIGRlY2ltYWxEZWxpbUZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJDaGFyID09PSB0aG91c2FuZHMpXHJcbiAgICAgICAgICAgICAgICAgIGlzVGhvdXNhbmRzRGVsaW0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjaW1hbERlbGltRm91bmQpXHJcbiAgICAgICAgICAgICAgICAgIGFmdGVyRGVjKys7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIGJlZm9yZURlYysrO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY291bnRlcisrO1xyXG4gICAgICAgICAgfSAvLyBlbmQgb2Ygd2hpbGUgZm9yIGxvb2tpbmcgaW4gdGhlIHZhbHVlXHJcblxyXG4gICAgICAgICAgbWFzay5BcHBlbmQoXCJcIiArIGJlZm9yZURlYyArIGRlY2ltYWxTZXBhcmF0b3IgKyBhZnRlckRlYyk7XHJcbiAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSlcclxuICAgICAgICAgICAgbWFzay5BcHBlbmQoJ04nKTtcclxuICAgICAgICAgIGlmIChpc1Rob3VzYW5kc0RlbGltKVxyXG4gICAgICAgICAgICBtYXNrLkFwcGVuZCgnQycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICBtYXNrLkFwcGVuZCh0aGlzLmdldERlZmF1bHREYXRlTWFzayhHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIG1hc2suQXBwZW5kKFwiSEhcIiArIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRpbWUoKSArIFwiTU1cIiArIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRpbWUoKSArIFwiU1NcIik7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgRXZlbnRzLldyaXRlRGV2VG9Mb2coXCJFdmVudC5idWlsZFBpY3R1cmUoKSB0aGVyZSBpcyBubyBQSUNUVVJFIGJ1aWxkaW5nIGZvciB0eXBlIDpcIiArIHR5cGUgK1xyXG4gICAgICAgICAgXCIgYW5kIHZhbHVlIDpcIiArIHZhbCk7XHJcbiAgICAgICAgcmV0dXJuIHBpYzsgLy8gbnVsbCwgdGhlIFBJQyBkaWRuJ3QgYnVpbGRcclxuICAgIH1cclxuXHJcbiAgICBwaWMgPSBuZXcgUElDKG1hc2suVG9TdHJpbmcoKSwgdHlwZSwgY29tcElkeCk7XHJcbiAgICByZXR1cm4gcGljO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgc2V0IEhlYnJldyB0byB0cnVlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0SGVicmV3KCk6IHZvaWQge1xyXG4gICAgLy8gRGVmZWN0IDExNjI1OC4gU2V0IGhlYnJldyBmbGFnIG9ubHkgZm9yIGhlYnJldyBtZ2NvbnN0LlxyXG4gICAgaWYgKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50Lkxhbmd1YWdlID09PSAnSCcpXHJcbiAgICAgIHRoaXMuaGVicmV3ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGdldCBkZWZhdWx0IG1hc2sgZm9yIERhdGUgdHlwZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFNb2RlXCI+LSBkYXRhIG1vZGUgKEosUyxCLEUsQSk8L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+IG1hc2sgb2YgZGVmYXVsdCBkYXRlPC9yZXR1cm5zPlxyXG4gIHByb3RlY3RlZCBzdGF0aWMgZ2V0RGVmYXVsdERhdGVNYXNrKGRhdGFNb2RlOiBzdHJpbmcpIHtcclxuICAgIGxldCBmcm10OiBzdHJpbmc7XHJcbiAgICBzd2l0Y2ggKGRhdGFNb2RlKSB7XHJcbiAgICAgIGNhc2UgJ0onOlxyXG4gICAgICBjYXNlICdTJzpcclxuICAgICAgICBmcm10ID0gXCIjIyMjLyMjLyMjXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdCJzpcclxuICAgICAgY2FzZSAnRSc6XHJcbiAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGZybXQgPSBcIiMjLyMjLyMjIyNcIjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBmcm10O1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgUGFyc2UgYSBudW1lcmljIHBpY3R1cmUgZm9ybWF0XHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBib29sX3BycygpOiB2b2lkIHtcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBPcmlnaW5hbCB2YXJzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGNvdW50OiBudW1iZXI7IC8vIENvdW50IG9mIGRpcmV2dGl2ZSBvciBtYXNrIGNoYXJhY3RlclxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEFkZGVkIHZhcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuc2V0SGVicmV3KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9hdXRvU2tpcF8gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlICdYJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19YLCBjb3VudCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoY3VyckNocikpIHtcclxuICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1gsIGNvdW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gRmlsbCBpbiBhbiBlbXB0eSBmb3JtYXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAodGhpcy5fbWFza1NpemUgPT09IDApXHJcbiAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfWCwgdGhpcy5fbXNrTGVuKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFBhcnNlIHRoZSBzaWduIHByZWZpeC9zdWZmaXggZnJvbSB0aGUgZm9ybWF0XHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBwaWtfc2lnbigpOiB2b2lkIHtcclxuICAgIGxldCBwb3NTaWduOiBib29sZWFuO1xyXG4gICAgbGV0IHNpZ25TdHI6IFN0cmluZ0J1aWxkZXI7XHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG5cclxuICAgIHBvc1NpZ24gPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XSA9PT0gJysnXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcblxyXG4gICAgaWYgKHBvc1NpZ24pXHJcbiAgICAgIHNpZ25TdHIgPSB0aGlzLl9wb3NQcmVmO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX25lZ1ByZWYuUmVtb3ZlKDAsIHRoaXMuX25lZ1ByZWYuTGVuZ3RoKTtcclxuICAgICAgc2lnblN0ciA9IHRoaXMuX25lZ1ByZWY7XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICc7JzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAnLCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGlmIChwb3NTaWduKVxyXG4gICAgICAgICAgICBzaWduU3RyID0gdGhpcy5fcG9zU3VmZjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgc2lnblN0ciA9IHRoaXMuX25lZ1N1ZmY7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgJ1xcXFwnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4ID49IHRoaXMuX2Zvcm1hdC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHNpZ25TdHIuQXBwZW5kKGN1cnJDaHIpO1xyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgUGFyc2UgYSBudW1iZXIgd2hpY2ggaXMgYSBjb3VudGVyIG9mIHNwZWNpZmljIGNoYXIgaW4gdGhlIGZvcm1hdFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgcGlrX2NvdW50KCk6IG51bWJlciB7XHJcbiAgICBsZXQgc3BlY2lhbFZhbE5ld1BvbGljeTogYm9vbGVhbiA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNwZWNpYWxWYWxOZXdQb2xpY3koKTtcclxuICAgIGxldCB2YWw6IG51bWJlcjtcclxuICAgIGxldCBpc0RpZ2l0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgdmFsID0gMDtcclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdCh0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XSkpIHtcclxuICAgICAgdmFsICo9IDEwO1xyXG4gICAgICBpc0RpZ2l0ID0gdHJ1ZTtcclxuICAgICAgdmFsICs9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdLmNoYXJDb2RlQXQoMCkgLSAnMCcuY2hhckNvZGVBdCgwKTtcclxuICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbCA+IDMyMDAwKVxyXG4gICAgICB2YWwgPSAzMjAwMDtcclxuICAgIGVsc2UgaWYgKHZhbCA8PSAwKSB7XHJcbiAgICAgIC8vIElmICBmbGFnIFNwZWNpYWxWYWxOZXdQb2xpY3kgaXMgc2V0LCB0aGVuIHBpY3R1cmUgaGF2aW5nIHdob2xlL2RlYyBhcyAwIGUuZy4gJzMuMCcgc2hvdWxkIHJldHVybiBhcyAwLlxyXG4gICAgICBpZiAoc3BlY2lhbFZhbE5ld1BvbGljeSAmJiBpc0RpZ2l0ICYmIHZhbCA9PT0gMClcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHZhbCA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbCA+IEludDMyLk1heFZhbHVlKVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLlNUUl9FUlJfTUFYX1ZBUl9TSVpFKSk7XHJcblxyXG4gICAgcmV0dXJuICh2YWwpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgRmlsbCBhIHNwZWNpZmljIG1hc2sgY2hhcmFjdGVyIGluIHRoZSBtYXNrIHN0cmluZ1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImRydlwiPiAgICBUaGUgbWFzayBjaGFyYWN0ZXIgdG8gZmlsbDwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiY291bnRcIj4gIE51bWJlciBvZiB0aW1lcyBmb3IgdGhlIG1hc2sgY2hhcmFjdGVyIHRvIGFwZWFyPC9wYXJhbT5cclxuICBwcml2YXRlIHBpa19kcnZfZmlsbChkcnY6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgIGxldCBNc2taOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMuX25lZWRMZW5ndGgpIHtcclxuICAgICAgdGhpcy5fbWFza0xlbmd0aCArPSBjb3VudDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIE1za1ogPSB0aGlzLl9tYXNrU2l6ZTtcclxuICAgIHRoaXMuX21hc2tTaXplICs9IGNvdW50O1xyXG5cclxuICAgIGlmIChNc2taICsgY291bnQgPiB0aGlzLl9tc2tMZW4pXHJcbiAgICAgIGNvdW50ID0gdGhpcy5fbXNrTGVuIC0gTXNrWjtcclxuXHJcbiAgICBpZiAoY291bnQgPiAwKSB7XHJcbiAgICAgIC8vIG1lbXNldCAoJnRoaXMtPm1za1t0aGlzLk1za1pdLCAoVWNoYXIpIGRydiwgY291bnQpOyAvLyBPcmlnaW5hbCBMaW5lXHJcbiAgICAgIGZvciAoaSA9IDA7XHJcbiAgICAgICAgICAgaSA8IGNvdW50O1xyXG4gICAgICAgICAgIGkrKylcclxuICAgICAgICB0aGlzLl9tc2tbTXNrWiArIGldID0gU3RyaW5nLmZyb21DaGFyQ29kZShkcnYpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBQYXJzZSBhIGdlbmVyYWwgbWFzayBjaGFyYWN0ZXJcclxuLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHBpa19tYXNrKCk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuICAgIGxldCBjb3VudDogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XSA9PT0gJ1xcXFwnKVxyXG4gICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoY3VyckNoci5jaGFyQ29kZUF0KDApLCBjb3VudCk7XHJcbiAgICAgIHRoaXMuX21hc2tDaGFycyArPSBjb3VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIENvdW50IGNvbnRpbnVlcyBvY2N1cnJlbmNlcyBvZiBhIG1hc2sgY2hhcmFjdGVyIGluIHRoZSBmb3JtYXQgc3RyaW5nXHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBwaWtfZHVwKCk6IG51bWJlciB7XHJcblxyXG4gICAgbGV0IGR1cENvdW50ID0gMTtcclxuXHJcbiAgICBsZXQgYzogc3RyaW5nO1xyXG5cclxuICAgIGxldCB0bXBJZHggPSB0aGlzLl9mb3JtYXRJZHg7XHJcblxyXG4gICAgYyA9IHRoaXMuX2Zvcm1hdFt0bXBJZHhdO1xyXG4gICAgdG1wSWR4Kys7XHJcbiAgICB3aGlsZSAodG1wSWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCAmJiBjID09PSB0aGlzLl9mb3JtYXRbdG1wSWR4XSkge1xyXG4gICAgICBkdXBDb3VudCsrO1xyXG4gICAgICB0bXBJZHgrKztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZHVwQ291bnQ7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBzZXQgSU1FIG1vZGUgZGVwZW5kcyBvbiBLIHBpY3R1cmUgKEswIC0gSzkpXHJcbi8vLyAgIChKUE46IElNRSBzdXBwb3J0KVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgcGljX2thbmppKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvdW50O1xyXG5cclxuICAgIGlmICh0aGlzLl9mb3JtYXRJZHggKyAxID49IHRoaXMuX2Zvcm1hdC5sZW5ndGgpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoIVV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAxXSkpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuXHJcbiAgICBpZiAodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0gPT09ICcwJykgIC8vIEswXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuX2ltZU1vZGUgPSBVdGlsSW1lSnBuLklNRV9GT1JDRV9PRkY7XHJcbiAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgaWYgKDEgPD0gY291bnQgJiYgY291bnQgPD0gOSkgLy8gSzEgLSBLOVxyXG4gICAgICAgIHRoaXMuX2ltZU1vZGUgPSBjb3VudDtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgRmluZCBsZW5ndGggb2YgdGhlIHBpY3R1cmUgYWZ0ZXIgcGFyc2luZyB0aGUgcGljdHVyZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+IGxlbmd0aCBvZiB0aGUgcGljdHVyZTwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldE1hc2tMZW4oY29tcElkeDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9uZWVkTGVuZ3RoID0gdHJ1ZTtcclxuICAgIHRoaXMuX21hc2tMZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fZm9ybWF0SWR4ID0gMDtcclxuXHJcbiAgICB0aGlzLnByc19hbGwoY29tcElkeCk7XHJcblxyXG4gICAgLy8gYWRkIHByZWZpeCBhbmQgc3VmZml4IGxlbmd0aCB0byB0aGUgbWFza1xyXG4gICAgaWYgKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyAmJiAodGhpcy5fcHJlZkxlbiA+IDAgfHwgdGhpcy5fc3VmZkxlbiA+IDApKVxyXG4gICAgICB0aGlzLl9tYXNrTGVuZ3RoICs9ICh0aGlzLl9wcmVmTGVuICsgdGhpcy5fc3VmZkxlbik7XHJcblxyXG4gICAgdGhpcy5fbmVlZExlbmd0aCA9IGZhbHNlO1xyXG4gICAgLy8gaW5pdCBmb3IgbmV4dCBydW5uaW5nIDpcclxuICAgIHRoaXMuX2Zvcm1hdElkeCA9IHRoaXMuX21hc2tDaGFycyA9IHRoaXMuX3dob2xlID0gdGhpcy5fZGVjaW1hbERpZ2l0cyA9IHRoaXMuX3NpemUgPSB0aGlzLl9tYXNrU2l6ZSA9IHRoaXMuX3ByZWZMZW4gPSB0aGlzLl9zdWZmTGVuID0gMDtcclxuICAgIHRoaXMuX3BhZCA9IHRoaXMuX3plcm8gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApO1xyXG4gICAgdGhpcy5oZWJyZXcgPSB0aGlzLl9taXhlZCA9IHRoaXMuX2VtYmVkZWQgPSB0aGlzLl9uZWdhdGl2ZSA9IHRoaXMuX2NvbW1hID0gdGhpcy5fbGVmdCA9IHRoaXMuX3BhZEZpbGwgPSB0aGlzLl96ZXJvRmlsbCA9IHRoaXMuX3RyaW0gPSB0aGlzLl9hdXRvU2tpcF8gPSB0aGlzLl9kZWNpbWFsID0gdGhpcy5fdGVybUZsYWcgPSB0aGlzLl9kZWNQb2ludElzRmlyc3QgPSBmYWxzZTtcclxuICAgIHRoaXMuX3Bvc1ByZWYuUmVtb3ZlKDAsIHRoaXMuX3Bvc1ByZWYuTGVuZ3RoKTtcclxuICAgIHRoaXMuX3Bvc1N1ZmYuUmVtb3ZlKDAsIHRoaXMuX3Bvc1N1ZmYuTGVuZ3RoKTtcclxuICAgIHRoaXMuX25lZ1ByZWYuUmVtb3ZlKDAsIHRoaXMuX25lZ1ByZWYuTGVuZ3RoKTtcclxuICAgIHRoaXMuX25lZ1N1ZmYuUmVtb3ZlKDAsIHRoaXMuX25lZ1N1ZmYuTGVuZ3RoKTtcclxuICAgIHJldHVybiB0aGlzLl9tYXNrTGVuZ3RoO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVtYmVkZWQgY2hhciBpbiB0aGUgbWFzayBpbiBhIGdpdnZlbiBwb3NpdGlvbi5cclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+IHRydWUgaWYgcGljIGlzIG1hc2s8L3JldHVybnM+XHJcbiAgcHVibGljIHBpY0lzTWFzayhwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHBvcyA8IDAgfHwgcG9zID49IHRoaXMuX21hc2tMZW5ndGgpXHJcbiAgICAgIHBvcyA9IDA7XHJcbiAgICByZXR1cm4gdGhpcy5fbXNrW3Bvc10uY2hhckNvZGVBdCgwKSA+IFBJQ0ludGVyZmFjZS5QSUNfTUFYX09QO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJzIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwibXNrUG9zXCI+PC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJidWZQb3NcIj48L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImJ1ZlwiPjwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0RGlyZWN0aXZlTGVuKHBvczogbnVtYmVyKTogbnVtYmVyO1xyXG4gIGdldERpcmVjdGl2ZUxlbihtc2tQb3M6IG51bWJlciwgYnVmUG9zOiBudW1iZXIsIGJ1Zjogc3RyaW5nKTogbnVtYmVyO1xyXG4gIGdldERpcmVjdGl2ZUxlbihwb3NPck1za1BvczogbnVtYmVyLCBidWZQb3M/OiBudW1iZXIsIGJ1Zj86IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSlcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlyZWN0aXZlTGVuXzAocG9zT3JNc2tQb3MpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXREaXJlY3RpdmVMZW5fMShwb3NPck1za1BvcywgYnVmUG9zLCBidWYpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFycyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbnVtYmVyIG9mIGNoYXJzIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2U8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXREaXJlY3RpdmVMZW5fMChwb3M6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgYzogc3RyaW5nID0gdGhpcy5fbXNrW3Bvc107XHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSBwb3M7XHJcbiAgICB3aGlsZSAobnVtIDwgdGhpcy5fbWFza1NpemUgJiYgYyA9PT0gdGhpcy5fbXNrW251bV0pIHtcclxuICAgICAgbnVtID0gbnVtICsgMTtcclxuICAgIH1cclxuICAgIHJldHVybiBudW0gLSBwb3M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJzIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1za1Bvc1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJidWZQb3NcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnVmXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0RGlyZWN0aXZlTGVuXzEobXNrUG9zOiBudW1iZXIsIGJ1ZlBvczogbnVtYmVyLCBidWY6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgZHJ2OiBzdHJpbmcgPSB0aGlzLl9tc2tbbXNrUG9zXTtcclxuICAgIGxldCBjdXJyTXNrUG9zOiBudW1iZXIgPSBtc2tQb3M7XHJcbiAgICBsZXQgY3VyckJ1ZlBvczogbnVtYmVyID0gYnVmUG9zO1xyXG5cclxuICAgIC8vIHRpbGwgdGhlIGVuZCBvZiB0aGUgbWFzaywgaWYgbWFza1twb3NdIGhhcyBzYW1lIGRpcmVjdGl2ZSBhcyBvdXJzLCB0aGlzIGlzIHRoZSBzYW1lIHNlcXVlbmNlLlxyXG4gICAgd2hpbGUgKGN1cnJNc2tQb3MgPCB0aGlzLl9tYXNrU2l6ZSAmJiBkcnYgPT09IHRoaXMuX21za1tjdXJyTXNrUG9zXSkge1xyXG4gICAgICAvLyBJZ25vcmUgdGhlIGNoYW5nZSBvZiBzZXF1ZW5jZSBpZiBpdCBpcyBpbi1iZXR3ZWVuIGEgREJDUyBjaGFyLlxyXG4gICAgICAvLyBJZiB0aGUgY3VycmVudCBjaGFyIGlzIGEgRnVsbCBXaWR0aCBjaGFyLCB0aGVuIHRoZSBuZXh0IG1hc2sgYml0XHJcbiAgICAgIC8vIGlzIGFjdHVhbGx5IG5vdCB1c2VkLiBTbywgaWdub3JlIHRoYXQgYml0IGFuZCBtb3ZlIG9uLlxyXG4gICAgICBpZiAoY3VyckJ1ZlBvcyA8IGJ1Zi5sZW5ndGggJiYgVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiB0aGlzLmlzQXR0ckFscGhhT3JEYXRlKCkpIHtcclxuICAgICAgICBpZiAoIVV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChidWZbY3VyckJ1ZlBvcysrXSkpXHJcbiAgICAgICAgICBjdXJyTXNrUG9zKys7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1cnJNc2tQb3MrKztcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXR1cm4gb25seSBob3cgbWFueSBjaGFycyB0byB0aGUgZW5kLCBpbmNsdWRpbmcgb3VyIHBvcy5cclxuICAgIHJldHVybiAoY3Vyck1za1BvcyAtIG1za1Bvcyk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiBjaGFyIGlzIHZhbGlkIGluIHRoZSBnaXZlbiBtYXNrIHBvc2l0aW9uXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiY2hhclRvVmFsaWRhdGVcIj5cclxuLy8vIDwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+b2YgZGlyZWN0aXZlIG1hc2sgdG8gY2hlY2tcclxuLy8vICAgVGhlIHJldHVybmVkIGNoYXIgbWlnaHQgYmUgZGlmZmVyZW50IHRoZW4gdGhlIGNoYXIgdGhhdCB3YXMgY2hlY2tlZC5cclxuLy8vICAgVGhlIHJlYXNvbiBpcyB0aGF0ICdVJyBhbmQgJ0wnIGRpcmVjdGl2ZSBtaWdodCBjaGFuZ2UgaXQsIGFuZCBpbiBudW1lcmljLFxyXG4vLy8gICBkZWNpbWFsIHNlcGFyYXRvciBhbmQgdGhvdXNhbmQgc2VwYXJhdG9yIG1pZ2h0IGJlIGNoYW5nZWQgYXMgd2VsbCB3aGlsZSB0eXBpbmcuXHJcbi8vLyA8L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+IDAgaWYgbm90IHZhbGlkIG9yIGEgY2hhciBpZiB2YWxpZC48L3JldHVybnM+XHJcbiAgcHVibGljIHZhbGlkYXRlQ2hhcihjaGFyVG9WYWxpZGF0ZTogc3RyaW5nLCBwb3M6IG51bWJlcikge1xyXG4gICAgbGV0IGNoYXJSZXR1cm5lZCA9IGNoYXJUb1ZhbGlkYXRlO1xyXG4gICAgaWYgKHBvcyA+PSB0aGlzLmdldE1hc2tTaXplKCkpXHJcbiAgICAgIHJldHVybiBjaGFyUmV0dXJuZWQ7XHJcblxyXG4gICAgLy8gd2UgbmVlZCB0byBza2lwIGFueSBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBlbWJlZGVkIGludG8gdGhlIHBpY3R1cmVcclxuICAgIHdoaWxlICh0aGlzLnBpY0lzTWFzayhwb3MpKVxyXG4gICAgICBwb3MrKztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX21za1twb3NdLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1U6XHJcbiAgICAgICAgY2hhclJldHVybmVkID0gY2hhclRvVmFsaWRhdGUudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19MOlxyXG4gICAgICAgIGNoYXJSZXR1cm5lZCA9IGNoYXJUb1ZhbGlkYXRlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaWYgKCFVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjaGFyVG9WYWxpZGF0ZSkpXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IFBJQ0ludGVyZmFjZS5OdW1EaXJlY3RpdmUubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tc2tbcG9zXS5jaGFyQ29kZUF0KDApID09PSBQSUNJbnRlcmZhY2UuTnVtRGlyZWN0aXZlW2ldKSB7XHJcbiAgICAgICAgICAgICAgY2hhclJldHVybmVkID0gdGhpcy5pc1ZhbGlkSW5OdW0oY2hhclRvVmFsaWRhdGUpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hhclJldHVybmVkO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQ2hlY2tzIHdoZXRoZXIgYSBub24gZGlnaXQgY2hhcmFjdGVyIGlzIHZhbGlkIGluIGEgbnVtZXJpYyBtYXNrXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwibGV0dGVyOlwiPmEgY2hhcmFjdGVyIHRvIGJlIGNoZWNrZWQuPC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiAwIGlmIG5vdCB2YWxpZC4gY2hhciBpZiB2YWxpZC4gY2hhciBtaWdodCBiZSBkaWZmZXJlbnQgdGhlbiBsZXR0ZXIuPC9yZXR1cm5zPlxyXG4gIGlzVmFsaWRJbk51bShsZXR0ZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY2hhclJldCA9ICdcXDAnO1xyXG4gICAgbGV0IGRlY2ltYWxDaGFyOiBzdHJpbmcgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREZWNpbWFsKCk7XHJcblxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gICAgLyogIHJlcGxhY2UgJy4nIHdpdGggYSBkaWZmZXJlbnQgY2hhciBmb3IgbnVtZXJpYyBzZXBlcmF0b3Igb25seSBpZlxyXG4gICAgKiAgU3BlY2lhbE1vZGlmaWVkRGVjaW1hbFNlcGFyYXRvciA9IFkqL1xyXG4gICAgLy8gZm9yIG51bWVyaWMsIGlmICcuJyB3YXMgZW50ZXJlZCwgY2hhbmdlIGl0IHRvIHRoZSBlbnYgc2VwZXJhdG9yLlxyXG4gICAgLy8gIzkzMTc4NDogSWYgU3BlY2lhbE1vZGlmaWVkRGVjaW1hbFNlcGFyYXRvciA9IFkgdGhlbiByZXBsYWNlICcuJyBieSBkZWNpbWFsIHNlcGFyYXRvci5cclxuICAgIGlmIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5DYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcigpICYmIHRoaXMuaXNBdHRyTnVtZXJpYygpKVxyXG4gICAgICBpZiAobGV0dGVyID09PSAnLicpXHJcbiAgICAgICAgbGV0dGVyID0gZGVjaW1hbENoYXI7XHJcblxyXG4gICAgc3dpdGNoIChsZXR0ZXIpIHtcclxuICAgICAgY2FzZSAnICc6XHJcbiAgICAgIGNhc2UgJy0nOlxyXG4gICAgICBjYXNlICcqJzpcclxuICAgICAgY2FzZSAnKyc6XHJcbiAgICAgIGNhc2UgJy8nOlxyXG4gICAgICAgIGNoYXJSZXQgPSBsZXR0ZXI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIC8vIHRoZSBlbnYgZGVjaW1hbCBzZXBlcmF0b3IgYW5kIHRob3VzYW5kcyBzZXBlcmF0b3IgYXJlIGFsc28gdmFsaWRcclxuICAgICAgICBpZiAobGV0dGVyID09PSBkZWNpbWFsQ2hhciB8fCBsZXR0ZXIgPT09IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRob3VzYW5kcygpKVxyXG4gICAgICAgICAgY2hhclJldCA9IGxldHRlcjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2hhclJldDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbG9naWNhbFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJMb2dpY2FsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyBudW1lcmljXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQXR0ck51bWVyaWMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIGFscGhhXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQXR0ckFscGhhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgdW5pY29kZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJVbmljb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHBoYSBvciBkYXRlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQXR0ckFscGhhT3JEYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIHRpbWUgb3IgZGF0ZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJEYXRlT3JUaW1lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUgfHwgdGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgYmxvYlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJCbG9iKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHxcclxuICAgICAgdGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUik7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgbWFzayBhdCBhIGdpdmVuIHBvc2l0aW9uIGlzIG51bWVyaWNcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc051bWVyaWMocG9zOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9tc2sgW3Bvc10gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBtYXNrIGlzIGFsbCBYXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGlzQWxsWCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fbXNrWzBdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfWCkgJiYgdGhpcy5nZXREaXJlY3RpdmVMZW4oMCkgPT09IHRoaXMuX21hc2tTaXplKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlzIG1hc2sgYXQgcG9zaXRpb24gcG9zIGlzIHNhbWUgYXMgcGFyYW1ldGVyIG1hc2tQaWNcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj48L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcIm1hc2tQaWNcIj48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc01hc2tQaWNFcShwb3M6IG51bWJlciwgbWFza1BpYzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbXNrW3Bvc10gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUobWFza1BpYyk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgaW5wdXQgY2hhciBpcyB2YWxpZCBmb3IgbG9jYWwgQVM0MDAgKHN5c3RlbSBpKSBwaWN0dXJlcy5cclxuLy8vICAgKERCQ1MgU3VwcG9ydClcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJjaGFyVG9WYWxpZGF0ZVwiPjwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiZmlyc3RDaGFyXCI+PC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+IDAgaWYgbm90IHZhbGlkIG9yIGEgY2hhciBpZiB2YWxpZC48L3JldHVybnM+XHJcbiAgcHVibGljIGlzVmFsaWRDaGFyX2FzNDAwKGNoYXJUb1ZhbGlkYXRlOiBzdHJpbmcsIGZpcnN0Q2hhcjogc3RyaW5nLCBwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldCA9IHRydWU7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLl9tc2tbcG9zXS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19KOlxyXG4gICAgICAvLyBvbmx5IGZ1bGwtd2lkdGggY2hhcmFjdGVycyBhcmUgYWxsb3dlZFxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfRzpcclxuICAgICAgICByZXQgPSAhVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGNoYXJUb1ZhbGlkYXRlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfVCk6IC8vIG1peHR1cmUgb2YgZnVsbC13aWR0aCBhbmQgaGFsZi13aWR0aCBpcyBub3QgYWxsb3dlZFxyXG4gICAgICAgIGlmIChmaXJzdENoYXIgPT09ICdcXHgwMDAwJylcclxuICAgICAgICAgIHJldCA9IHRydWU7XHJcbiAgICAgICAgZWxzZSBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGZpcnN0Q2hhcikpXHJcbiAgICAgICAgICByZXQgPSBVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoY2hhclRvVmFsaWRhdGUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldCA9ICFVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoY2hhclRvVmFsaWRhdGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19TKTogLy8gb25seSBoYWxmLXdpZHRoIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWRcclxuICAgICAgICByZXQgPSBVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoY2hhclRvVmFsaWRhdGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICByZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlIGxlbmd0aFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIGdldE1pbmltdW1WYWx1ZUxlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbkxlbmd0aCA9IHRoaXMuZ2V0TWFza0xlbmd0aCgpO1xyXG5cclxuICAgIC8vIHRyYXZlcnNlIGZyb20gcmlnaHQgdGlsbCBhIHZhbGlkIG1hc2sgY2hhciBpcyBlbmNvdW50ZXJlZFxyXG4gICAgd2hpbGUgKG1pbkxlbmd0aCA+IDAgJiYgIXRoaXMucGljSXNNYXNrKG1pbkxlbmd0aCAtIDEpKVxyXG4gICAgICBtaW5MZW5ndGgtLTtcclxuXHJcbiAgICByZXR1cm4gbWluTGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJ7UGljdHVyZTogXCIgKyB0aGlzLl9mb3JtYXQgKyBcIn1cIjtcclxuICB9XHJcbn1cclxuIl19
|