occam-nominal 1.0.601 → 1.0.604

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.
@@ -1079,7 +1079,11 @@ function lemmaFromSectionNode(sectionNode, context) {
1079
1079
  return lemma;
1080
1080
  }
1081
1081
  function termFromPropertyNode(propertyNode, context) {
1082
- const termNode = propertyNode.getTermNode(), term = termFromTermNode(termNode, context);
1082
+ let term = null;
1083
+ const termNode = propertyNode.getTermNode();
1084
+ if (termNode !== null) {
1085
+ term = termFromTermNode(termNode, context);
1086
+ }
1083
1087
  return term;
1084
1088
  }
1085
1089
  function typeFromPropertyNode(propertyNode, context) {
@@ -1115,7 +1119,11 @@ function nameFromParaneterNode(parameterNode, context) {
1115
1119
  return name;
1116
1120
  }
1117
1121
  function termFromGeneratorNode(generatorNode, context) {
1118
- const termNode = generatorNode.getTermNode(), term = termFromTermNode(termNode, context);
1122
+ let term = null;
1123
+ const termNode = generatorNode.getTermNode();
1124
+ if (termNode !== null) {
1125
+ term = termFromTermNode(termNode, context);
1126
+ }
1119
1127
  return term;
1120
1128
  }
1121
1129
  function typeFromGeneratorNode(generatorNode, context) {
@@ -1195,7 +1203,11 @@ function negatedFromEqualityNode(equalityNode, context) {
1195
1203
  return negated;
1196
1204
  }
1197
1205
  function termFromConstructorNode(ocnstructorNode, context) {
1198
- const termNode = ocnstructorNode.getTermNode(), term = termFromTermNode(termNode, context);
1206
+ let term = null;
1207
+ const termNode = ocnstructorNode.getTermNode();
1208
+ if (termNode !== null) {
1209
+ term = termFromTermNode(termNode, context);
1210
+ }
1199
1211
  return term;
1200
1212
  }
1201
1213
  function typeFromConstructorNode(ocnstructorNode, context) {
@@ -1356,7 +1368,11 @@ function statementFromAssumptionNode(assumptionNode, context) {
1356
1368
  return statement;
1357
1369
  }
1358
1370
  function statementFromCombinatorNode(combinatorNode, context) {
1359
- const statementNode = combinatorNode.getStatementNode(), statement = statementFromStatementNode(statementNode, context);
1371
+ let statement;
1372
+ const statementNode = combinatorNode.getStatementNode();
1373
+ if (statementNode !== null) {
1374
+ statement = statementFromStatementNode(statementNode, context);
1375
+ }
1360
1376
  return statement;
1361
1377
  }
1362
1378
  function statementFromConclusionNode(conclusinoNode, context) {
@@ -1832,4 +1848,4 @@ function propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNo
1832
1848
  return propertyDeclrations;
1833
1849
  }
1834
1850
 
1835
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSxcbiAgICAgICAgIHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uLFxuICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nRnJvbU5hbWVBbmRQYXJhbWV0ZXJzLFxuICAgICAgICAgc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uLFxuICAgICAgICAgc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbixcbiAgICAgICAgIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0RlY2xhcmF0aW9uQW5kQ2xhaW0sXG4gICAgICAgICBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGU7XG5cbiAgaWYgKHR5cGVOb2RlID09PSBudWxsKSB7XG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSB0eXBlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpLFxuICAgICAgICAgIHN0cmluZyA9IHR5cGVTdHJpbmcsICAvLy9cbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0ZXAgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RlcE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNjaGVtYUFzc2VydGlvbiA9IHNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQsIHByb2NlZHVyZVJlZmVyZW5jZSwgc2NoZW1hQXNzZXJ0aW9uLCBzaWduYXR1cmVBc3NlcnRpb24pO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZUZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJ1bGUgfSA9IGVsZW1lbnRzLFxuICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICBub2RlID0gcnVsZU5vZGUsICAvLy9cbiAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pO1xuXG4gIHJldHVybiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExpbmsgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGlua05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxpbmsgPSBuZXcgTGluayhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbmV3IExhYmVsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY2xhaW1Ob2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hID0gbmV3IExlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb29mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IGF4aW9tTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY2xhaW1TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTY2hlbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gc2NoZW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNjaGVtYVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzY2hlbWEgPSBuZXcgU2NoZW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgY29uc3RyYWludHMpO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2VjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGh5cG90aGVzaXNOb2RlcyA9IHNlY3Rpb25Ob2RlLmdldEh5cG90aGVzaXNOb2RlcygpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltID0gY2xhaW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbShoeXBvdGhlc2VzLCBkZWNsYXJhdGlvbiwgY2xhaW0pLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgaHlwb3RoZXNlcywgZGVjbGFyYXRpb24sIGNsYWltKTtcblxuICByZXR1cm4gc2VjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByZW1pc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlID0gbmV3IFByZW1pc2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSB0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICBwcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGlkZW50aWZpZXIsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVkdWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJzdGl0dXRpb24pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEdlbmVyYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBnZW5lcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGh5cG9odGVzaXMgPSBuZXcgSHlwb3RoZXNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gaHlwb2h0ZXNpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJhaW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cmFpbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RyYWludCA9IG5ldyBDb25zdHJhaW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBjb25zdHJhaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSBjb25qZWN0dXJlTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvciA9IG5ldyBDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdXBwb3NpdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9uID0gbmV3IFN1cHBvc2l0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YkRlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3ViRGVyaXZhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YkRlcml2YXRpb24gPSBuZXcgU3ViRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBzdWJEZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwID0gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcE9yU3VicHJvb2YgPSAoc3RlcCB8fCBzdWJwcm9vZik7XG5cbiAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZURlY2xhcmF0aW9uRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZURlY2xhcmF0aW9uID0gbmV3IFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hQXNzZXJ0aW9uRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNjaGVtYUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzY2hlbWFBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbGluayA9IGxpbmtGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVtYUFzc2VydGlvbiA9IG5ldyBTY2hlbWFBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBmcmFtZSk7XG5cbiAgcmV0dXJuIHNjaGVtYUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IG5ldyBEZWZpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRhcmdldFRlcm0gPSB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IG5ldyBUZXJtU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFRlcm0sIHJlcGxhY2VtZW50VGVybSk7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3ViamVjdFRlcm0gPSBzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3ViamVjdFRlcm0sIHByb3BlcnR5VGVybSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3R5cGVEZWNsYXJhdGlvbkZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ290eXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCh0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCksXG4gICAgICAgIHN0cmluZyA9IGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY290eXBlRGVjbGFyYXRpb24gPSBuZXcgQ290eXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCwgcHJvcGVydHlEZWNsYXJhdGlvbnMpO1xuXG4gIHJldHVybiBjb3R5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcgPSBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmdGcm9tTmFtZUFuZFBhcmFtZXRlcnMobmFtZSwgcGFyYW1ldGVycyksXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlID0gbmV3IFByb2NlZHVyZVJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHBhcmFtZXRlcnMpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb24gPSBuZXcgQ29udGFpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbGluayA9IGxpbmtGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG5ldyBTaWduYXR1cmVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBJbXBsaWNpdEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSBuZXcgSW1wbGljaXRBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb24gPSBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3BlcnR5KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVEZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdmFyaWFibGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yID0gbmV3IEJyYWNrZXRlZENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBicmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBuZXcgQnJhY2tldGVkQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGdlbmVyYXRvckRlY2xhcmF0aW9uID0gbmV3IEdlbmVyYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGdlbmVyYXRvcik7XG5cbiAgcmV0dXJuIGdlbmVyYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXhEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGVQcmVmaXgpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzb2x2ZWQgPSBzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzb2x2ZWQsIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBjbGFpbU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHJ1bGVOb2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBjbGFpbU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb29mTm9kZSA9IHNjaGVtYU5vZGUuZ2V0UHJvb2ZOb2RlKCksXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZSA9IHNjaGVtYU5vZGUuZ2V0TGFiZWxOb2RlKCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYWltRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltID0gKGF4aW9tIHx8IGxlbW1hIHx8IHRoZW9yZW0gfHwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIGNsYWltO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGF4aW9tID0gbnVsbDtcblxuICBjb25zdCBheGlvbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRBeGlvbU5vZGUoKTtcblxuICBpZiAoYXhpb21Ob2RlICE9PSBudWxsKSB7XG4gICAgYXhpb20gPSBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW1tYSA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWFOb2RlID0gc2VjdGlvbk5vZGUuZ2V0TGVtbWFOb2RlKCk7XG5cbiAgaWYgKGxlbW1hTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGdlbmVyYXRvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBudWxsO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBydWxlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gY2xhaW1Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IGNsYWltTm9kZS5nZXRTaWduYXR1cmVOb2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0aGVvcmVtID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtTm9kZSA9IHNlY3Rpb25Ob2RlLmdldFRoZW9yZW1Ob2RlKCk7XG5cbiAgaWYgKHRoZW9yZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeE5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbmtOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgbGluayA9IGxpbmtGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IHNjaGVtYU5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBlcXVhbGl0eU5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBvY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsaW5rTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2UgPSBudWxsO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YW1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGFtZXRhdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZW1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBjbGFpbU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbGFiZWxOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuXG4gIHJldHVybiBjb25zdHJhaW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbmplY3R1cmUgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmVOb2RlID0gc2VjdGlvbk5vZGUuZ2V0Q29uamVjdHVyZU5vZGUoKTtcblxuICBpZiAoY29uamVjdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVxdWFsaXR5ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEVxdWFsaXR5Tm9kZSgpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzY2hlbWFOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yRGVjbGFyYXRpb24gPSBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlY2xhcmF0aW9uID0gKGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gfHwgZ2VuZXJhdG9yRGVjbGFyYXRpb24pO1xuXG4gIHJldHVybiBkZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyTm9kZS5nZXRJZGVudGlmaWVyKCk7XG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBkZWR1Y3Rpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzY2hlbWFBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVtYUFzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTY2hlbWFBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNjaGVtYUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzY2hlbWFBc3NlcnRpb24gPSBzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzY2hlbWFBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyTm9kZS5nZXRJZGVudGlmaWVyKCk7XG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVzbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlc21lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBzY2hlbWFBc3NlcnRpb25Ob2RlLmdldExpbmtOb2RlKCksXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZWwgPSBudWxsO1xuXG4gIHJldHVybiByZWZlcmVuY2VsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlID0gbnVsbDtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUeXBlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYmxlTm9kZSA9IGNvbnN0cmFpbnROb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGUuaXNTdWJwcm9vZk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSkge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsaW5rTm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gbGlua0Zyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0R2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3Qgc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1NvbHZlZCgpO1xuXG4gIHJldHVybiBzb2x2ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViamVjdFRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFN1YmplY3RUZXJtTm9kZSgpLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUoc3ViamVjdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViamVjdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlUmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5VGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0UHJvcGVydHlUZXJtTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHByb3BlcnR5VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmF0b3JOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldEdlbmVyYXRvck5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy8vLy9cbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50VGVybU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyZXBsYWNlbWVudFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVQcmVmaXhOb2RlKCksXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbWJpbmF0b3JOb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRDb21iaW5hdG9yTm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHRhcmdldFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xhcmF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGVzID0gdHlwZXNOb2RlLmdldFR5cGVOb2RlcygpLFxuICAgICAgICB0eXBlcyA9IHR5cGVOb2Rlcy5tYXAoKHR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxOb2Rlcy5tYXAoKGxhYmVsTm9kZSkgPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VzID0gcHJlbWlzZU5vZGVzLm1hcCgocHJlbWlzZU5vZGUpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlID0gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IGh5cG90aGVzaXNOb2Rlcy5tYXAoKGh5cG90aGVzZU5vZGUpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gZGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gc3ViRGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNscmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMubWFwKChwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5RGVjbGNhcmF0aW9uID0gcHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlEZWNsY2FyYXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xyYXRpb25zO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJheGlvbUZyb21TZWN0aW9uTm9kZSIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJjbGFpbUZyb21TZWN0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVJ1bGVOb2RlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiY290eXBlRGVjbGFyYXRpb25Gcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwiZGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlIiwiZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlIiwiZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUiLCJlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZnJhbWVGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUNsYWltTm9kZSIsImh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSIsImltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tU2NoZW1hTm9kZSIsImxhYmVsc0Zyb21DbGFpbU5vZGUiLCJsYWJlbHNGcm9tTGFiZWxOb2RlcyIsImxhYmVsc0Zyb21SdWxlTm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hRnJvbVNlY3Rpb25Ob2RlIiwibGlua0Zyb21Bc3N1bXB0aW9uTm9kZSIsImxpbmtGcm9tTGlua05vZGUiLCJsaW5rRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJsaW5rRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tQ29uc3RyYWludE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJuYW1lRnJvbVBhcmFtdGVyTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21FcXVhbGl0eU5vZGUiLCJuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIm5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSHlwb3RoZXNpc05vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21TdXBwb3NpdGlvbk5vZGUiLCJwcm9vZkZyb21DbGFpbU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVNjaGVtYU5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZUZyb21TdXBwb3NpdGlvbk5vZGUiLCJyZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwicmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJ1bGVGcm9tUnVsZU5vZGUiLCJzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZSIsInNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZSIsInNjaGVtYUZyb21TY2hlbWFOb2RlIiwic2VjdGlvbkZyb21TZWN0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUiLCJzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUiLCJzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJ0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tR2VuZXJhdG9yTm9kZSIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21Qcm9wZXJ0eU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVEZWNsYXJhdGlvbkZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21HZW5lcmF0b3JOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tUHJvcGVydHlOb2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwiVHlwZSIsImVsZW1lbnRzIiwibm9kZSIsIm5hbWUiLCJwcmVmaXhOYW1lIiwic3VwZXJUeXBlcyIsInByb3BlcnRpZXMiLCJwcm92aXNpb25hbCIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJ0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsImJyZWFrUG9pbnQiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwic2NoZW1hQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwic3RlcCIsInJ1bGVOb2RlIiwiUnVsZSIsInByb29mIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwicnVsZVN0cmluZyIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwicnVsZSIsImxpbmtOb2RlIiwiTGluayIsIm1ldGF2YXJpYWJsZSIsImxpbmsiLCJsYWJlbE5vZGUiLCJMYWJlbCIsImxhYmVsIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImxlbW1hTm9kZSIsIkxlbW1hIiwiY2xhaW1Ob2RlIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsImNsYWltU3RyaW5nIiwiY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibGVtbWEiLCJmcmFtZU5vZGUiLCJGcmFtZSIsImFzc3VtcHRpb25zIiwiZnJhbWUiLCJwcm9vZk5vZGUiLCJQcm9vZiIsImRlcml2YXRpb24iLCJheGlvbU5vZGUiLCJBeGlvbSIsImF4aW9tIiwic2NoZW1hTm9kZSIsIlNjaGVtYSIsImNvbnN0cmFpbnRzIiwic2NoZW1hU3RyaW5nIiwic2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwic2NoZW1hIiwic2VjdGlvbk5vZGUiLCJTZWN0aW9uIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwiZGVjbGFyYXRpb24iLCJjbGFpbSIsInNlY3Rpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZENsYWltIiwic2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByZW1pc2UiLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJ0aGVvcmVtIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHkiLCJQcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3VicHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VicHJvb2YiLCJlcXVhbGl0eU5vZGUiLCJFcXVhbGl0eSIsIm5lZ2F0ZWQiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImVxdWFsaXR5IiwiZGVkdWN0aW9uTm9kZSIsIkRlZHVjdGlvbiIsInN0YXRlbWVudE5vZGUiLCJTdGF0ZW1lbnQiLCJzdWJzdGl0dXRpb24iLCJzaWduYXR1cmVOb2RlIiwiU2lnbmF0dXJlIiwidGVybXMiLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsImdlbmVyYXRvck5vZGUiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJoeXBvdGhlc2VOb2RlIiwiSHlwb3RoZXNpcyIsImh5cG9odGVzaXMiLCJjb25zdHJhaW50Tm9kZSIsIkNvbnN0cmFpbnQiLCJjb25zdHJhaW50IiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImNvbWJpbmF0b3JOb2RlIiwiQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJjb25jbHVzaW9uTm9kZSIsIkNvbmNsdXNpb24iLCJkZXJpdmF0aW9uTm9kZSIsIkRlcml2YXRpb24iLCJzdGVwc09yU3VicHJvb2ZzIiwidHlwZVByZWZpeE5vZGUiLCJUeXBlUHJlZml4IiwidHlwZVByZWZpeCIsImFzc3VtcHRpb25Ob2RlIiwiQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJzdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZiIsInR5cGVEZWNsYXJhdGlvbk5vZGUiLCJUeXBlRGVjbGFyYXRpb24iLCJ0eXBlRGVjbGFyYXRpb24iLCJzY2hlbWFBc3NlcnRpb25Ob2RlIiwiU2NoZW1hQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwiaXNOZWdhdGVkIiwiZGVmaW5lZEFzc2VydGlvbiIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJUZXJtU3Vic3RpdHV0aW9uIiwiY29udGV4dHMiLCJ0YXJnZXRUZXJtIiwicmVwbGFjZW1lbnRUZXJtIiwidGVybVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwic3ViamVjdFRlcm0iLCJwcm9wZXJ0eVRlcm0iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY290eXBlRGVjbGFyYXRpb25Ob2RlIiwiQ290eXBlRGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9ucyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nIiwiY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImNvdHlwZURlY2xhcmF0aW9uIiwicHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIlByb2NlZHVyZVJlZmVyZW5jZSIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmciLCJwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmdGcm9tTmFtZUFuZFBhcmFtZXRlcnMiLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsIlNpZ25hdHVyZUFzc2VydGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsIlByb3BlcnR5RGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsImJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwiR2VuZXJhdG9yRGVjbGFyYXRpb24iLCJnZW5lcmF0b3JEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInNvbHZlZCIsInRhcmdldFN0YXRlbWVudCIsInJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIk1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZ2V0UHJvb2ZOb2RlIiwibGFiZWxOb2RlcyIsImdldExhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJwcmVtaXNlTm9kZXMiLCJnZXRQcmVtaXNlTm9kZXMiLCJnZXRBeGlvbU5vZGUiLCJnZXRMZW1tYU5vZGUiLCJnZXRUZXJtTm9kZSIsImdldE5hbWUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldERlZHVjdGlvbk5vZGUiLCJnZXRTaWduYXR1cmVOb2RlIiwiZ2V0VGhlb3JlbU5vZGUiLCJ0ZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJnZXRMaW5rTm9kZSIsImdldERlcml2YXRpb25Ob2RlIiwib2Nuc3RydWN0b3JOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsIm1ldGFtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInR5cGVtTm9kZSIsImdldFR5cGVOb2RlIiwic3VwcG9zaXRpb25Ob2RlcyIsImdldFN1cHBvc2l0aW9uTm9kZXMiLCJnZXRDb25qZWN0dXJlTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZ2V0RXF1YWxpdHlOb2RlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0SWRlbnRpZmllciIsInN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlIiwiaXNTdGVwTm9kZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImdldFNjaGVtYUFzc2VydGlvbk5vZGUiLCJzdGF0ZXNtZW50Tm9kZSIsImNvbmNsdXNpbm9Ob2RlIiwiaHlwb3RoZXNpc05vZGUiLCJyZWZlcmVuY2VsIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwiZnJvbVN0YXRlbWVudE5vZGUiLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJtZXRhdmFyaWJsZU5vZGUiLCJtZXRhdmFyaWJsZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0eXBlc05vZGUiLCJnZXRUeXBlc05vZGUiLCJ0eXBlcyIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldEdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJnZXRQcm9wZXJ0eU5vZGUiLCJpc1NvbHZlZCIsInN1YmplY3RUZXJtTm9kZSIsImdldFN1YmplY3RUZXJtTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJnZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5VGVybU5vZGUiLCJnZXRQcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0R2VuZXJhdG9yTm9kZSIsInJlcGxhY2VtZW50VGVybU5vZGUiLCJnZXRSZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwiZ2V0Q29uc3RydWN0b3JOb2RlIiwidGFyZ2V0U3RhdGVtZW50Tm9kZSIsImdldFRhcmdldFN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzIiwiZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwibWFwIiwidHlwZU5vZGVzIiwiZ2V0VHlwZU5vZGVzIiwiaHlwb3RoZXNpcyIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIiwicHJvcGVydHlEZWNscmF0aW9ucyIsInByb3BlcnR5RGVjbGNhcmF0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFpZ0JnQkE7ZUFBQUE7O1FBMm9EQUM7ZUFBQUE7O1FBMzZCQUM7ZUFBQUE7O1FBL2lDQUM7ZUFBQUE7O1FBMjBCQUM7ZUFBQUE7O1FBbk5BQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBOExBQztlQUFBQTs7UUFuSkFDO2VBQUFBOztRQTRxQ0FDO2VBQUFBOztRQWhrREFDO2VBQUFBOztRQWNBQztlQUFBQTs7UUFrcEJBQztlQUFBQTs7UUFyckJBQztlQUFBQTs7UUF5NEJBQztlQUFBQTs7UUFyNUJBQztlQUFBQTs7UUErNEJBQztlQUFBQTs7UUExYkFDO2VBQUFBOztRQXFrQ0FDO2VBQUFBOztRQXFGQUM7ZUFBQUE7O1FB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
1851
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSxcbiAgICAgICAgIHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uLFxuICAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nRnJvbU5hbWVBbmRQYXJhbWV0ZXJzLFxuICAgICAgICAgc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uLFxuICAgICAgICAgc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbixcbiAgICAgICAgIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0RlY2xhcmF0aW9uQW5kQ2xhaW0sXG4gICAgICAgICBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGU7XG5cbiAgaWYgKHR5cGVOb2RlID09PSBudWxsKSB7XG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSB0eXBlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpLFxuICAgICAgICAgIHN0cmluZyA9IHR5cGVTdHJpbmcsICAvLy9cbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0ZXAgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RlcE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNjaGVtYUFzc2VydGlvbiA9IHNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQsIHByb2NlZHVyZVJlZmVyZW5jZSwgc2NoZW1hQXNzZXJ0aW9uLCBzaWduYXR1cmVBc3NlcnRpb24pO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZUZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJ1bGUgfSA9IGVsZW1lbnRzLFxuICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICBub2RlID0gcnVsZU5vZGUsICAvLy9cbiAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pO1xuXG4gIHJldHVybiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExpbmsgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGlua05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxpbmsgPSBuZXcgTGluayhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbmV3IExhYmVsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY2xhaW1Ob2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hID0gbmV3IExlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb29mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IGF4aW9tTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY2xhaW1TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTY2hlbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gc2NoZW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNjaGVtYVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzY2hlbWEgPSBuZXcgU2NoZW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgY29uc3RyYWludHMpO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2VjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGh5cG90aGVzaXNOb2RlcyA9IHNlY3Rpb25Ob2RlLmdldEh5cG90aGVzaXNOb2RlcygpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltID0gY2xhaW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbShoeXBvdGhlc2VzLCBkZWNsYXJhdGlvbiwgY2xhaW0pLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgaHlwb3RoZXNlcywgZGVjbGFyYXRpb24sIGNsYWltKTtcblxuICByZXR1cm4gc2VjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByZW1pc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlID0gbmV3IFByZW1pc2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSB0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICBwcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGlkZW50aWZpZXIsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVkdWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJzdGl0dXRpb24pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEdlbmVyYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBnZW5lcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGh5cG9odGVzaXMgPSBuZXcgSHlwb3RoZXNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gaHlwb2h0ZXNpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJhaW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cmFpbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RyYWludCA9IG5ldyBDb25zdHJhaW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBjb25zdHJhaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSBjb25qZWN0dXJlTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvciA9IG5ldyBDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdXBwb3NpdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9uID0gbmV3IFN1cHBvc2l0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YkRlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3ViRGVyaXZhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YkRlcml2YXRpb24gPSBuZXcgU3ViRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBzdWJEZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwID0gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcE9yU3VicHJvb2YgPSAoc3RlcCB8fCBzdWJwcm9vZik7XG5cbiAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZURlY2xhcmF0aW9uRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZURlY2xhcmF0aW9uID0gbmV3IFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hQXNzZXJ0aW9uRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNjaGVtYUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzY2hlbWFBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbGluayA9IGxpbmtGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVtYUFzc2VydGlvbiA9IG5ldyBTY2hlbWFBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBmcmFtZSk7XG5cbiAgcmV0dXJuIHNjaGVtYUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IG5ldyBEZWZpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRhcmdldFRlcm0gPSB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IG5ldyBUZXJtU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRhcmdldFRlcm0sIHJlcGxhY2VtZW50VGVybSk7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3ViamVjdFRlcm0gPSBzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3ViamVjdFRlcm0sIHByb3BlcnR5VGVybSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3R5cGVEZWNsYXJhdGlvbkZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ290eXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCh0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCksXG4gICAgICAgIHN0cmluZyA9IGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY290eXBlRGVjbGFyYXRpb24gPSBuZXcgQ290eXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCwgcHJvcGVydHlEZWNsYXJhdGlvbnMpO1xuXG4gIHJldHVybiBjb3R5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcgPSBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmdGcm9tTmFtZUFuZFBhcmFtZXRlcnMobmFtZSwgcGFyYW1ldGVycyksXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlID0gbmV3IFByb2NlZHVyZVJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHBhcmFtZXRlcnMpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb24gPSBuZXcgQ29udGFpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbGluayA9IGxpbmtGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG5ldyBTaWduYXR1cmVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBJbXBsaWNpdEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSBuZXcgSW1wbGljaXRBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb24gPSBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3BlcnR5KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVEZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdmFyaWFibGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yID0gbmV3IEJyYWNrZXRlZENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBicmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBuZXcgQnJhY2tldGVkQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGdlbmVyYXRvckRlY2xhcmF0aW9uID0gbmV3IEdlbmVyYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGdlbmVyYXRvcik7XG5cbiAgcmV0dXJuIGdlbmVyYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXhEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGVQcmVmaXgpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzb2x2ZWQgPSBzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzb2x2ZWQsIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBjbGFpbU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHJ1bGVOb2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBjbGFpbU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb29mTm9kZSA9IHNjaGVtYU5vZGUuZ2V0UHJvb2ZOb2RlKCksXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZSA9IHNjaGVtYU5vZGUuZ2V0TGFiZWxOb2RlKCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYWltRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltID0gKGF4aW9tIHx8IGxlbW1hIHx8IHRoZW9yZW0gfHwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIGNsYWltO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGF4aW9tID0gbnVsbDtcblxuICBjb25zdCBheGlvbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRBeGlvbU5vZGUoKTtcblxuICBpZiAoYXhpb21Ob2RlICE9PSBudWxsKSB7XG4gICAgYXhpb20gPSBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW1tYSA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWFOb2RlID0gc2VjdGlvbk5vZGUuZ2V0TGVtbWFOb2RlKCk7XG5cbiAgaWYgKGxlbW1hTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBnZW5lcmF0b3JOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwZXJUeXBlcyA9IG51bGw7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBudWxsO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIHByZWZpeE5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBwcmVmaXhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25jbHVzaW9uTm9kZSA9IHJ1bGVOb2RlLmdldENvbmNsdXNpb25Ob2RlKCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBjbGFpbU5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gY2xhaW1Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRoZW9yZW0gPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW1Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0VGhlb3JlbU5vZGUoKTtcblxuICBpZiAodGhlb3JlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBzaWduYXR1cmVOb2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlUHJlZml4Tm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBuYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRMaW5rTm9kZSgpLFxuICAgICAgICBsaW5rID0gbGlua0Zyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVyaXZhdGlvbk5vZGUgPSBwcm9vZk5vZGUuZ2V0RGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gc2NoZW1hTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGVxdWFsaXR5Tm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBvY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbGlua05vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlID0gbnVsbDtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSBtZXRhbWV0YXZhcmlhYmxlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gY2xhaW1Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50c0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcblxuICByZXR1cm4gY29uc3RyYWludHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc2NoZW1hTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWNsYXJhdGlvbiA9IChjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIHx8IGdlbmVyYXRvckRlY2xhcmF0aW9uKTtcblxuICByZXR1cm4gZGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgIGlkZW50aWZpZXIgPSB2YXJpYWJsZUlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXAgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlLmlzU3RlcE5vZGUoKTtcblxuICBpZiAoc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUpIHtcbiAgICBjb25zdCBzdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgcmV0dXJuIG5vbWluYWxUeXBlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2NoZW1hQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzY2hlbWFBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2NoZW1hQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzY2hlbWFBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50O1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBzY2hlbWFBc3NlcnRpb25Ob2RlLmdldExpbmtOb2RlKCksXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZWwgPSBudWxsO1xuXG4gIHJldHVybiByZWZlcmVuY2VsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlID0gbnVsbDtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUeXBlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYmxlTm9kZSA9IGNvbnN0cmFpbnROb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGUuaXNTdWJwcm9vZk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSkge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsaW5rTm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gbGlua0Zyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0R2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3Qgc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1NvbHZlZCgpO1xuXG4gIHJldHVybiBzb2x2ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViamVjdFRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFN1YmplY3RUZXJtTm9kZSgpLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUoc3ViamVjdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViamVjdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlUmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5VGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0UHJvcGVydHlUZXJtTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHByb3BlcnR5VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmF0b3JOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldEdlbmVyYXRvck5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy8vLy9cbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50VGVybU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyZXBsYWNlbWVudFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVQcmVmaXhOb2RlKCksXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbWJpbmF0b3JOb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRDb21iaW5hdG9yTm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHRhcmdldFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xhcmF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGVzID0gdHlwZXNOb2RlLmdldFR5cGVOb2RlcygpLFxuICAgICAgICB0eXBlcyA9IHR5cGVOb2Rlcy5tYXAoKHR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxOb2Rlcy5tYXAoKGxhYmVsTm9kZSkgPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VzID0gcHJlbWlzZU5vZGVzLm1hcCgocHJlbWlzZU5vZGUpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlID0gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IGh5cG90aGVzaXNOb2Rlcy5tYXAoKGh5cG90aGVzZU5vZGUpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gZGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gc3ViRGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNscmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMubWFwKChwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5RGVjbGNhcmF0aW9uID0gcHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlEZWNsY2FyYXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xyYXRpb25zO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJheGlvbUZyb21TZWN0aW9uTm9kZSIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJjbGFpbUZyb21TZWN0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVJ1bGVOb2RlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiY290eXBlRGVjbGFyYXRpb25Gcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwiZGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlIiwiZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlIiwiZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUiLCJlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZnJhbWVGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUNsYWltTm9kZSIsImh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSIsImltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tU2NoZW1hTm9kZSIsImxhYmVsc0Zyb21DbGFpbU5vZGUiLCJsYWJlbHNGcm9tTGFiZWxOb2RlcyIsImxhYmVsc0Zyb21SdWxlTm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hRnJvbVNlY3Rpb25Ob2RlIiwibGlua0Zyb21Bc3N1bXB0aW9uTm9kZSIsImxpbmtGcm9tTGlua05vZGUiLCJsaW5rRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJsaW5rRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tQ29uc3RyYWludE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJuYW1lRnJvbVBhcmFtdGVyTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21FcXVhbGl0eU5vZGUiLCJuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIm5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSHlwb3RoZXNpc05vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21TdXBwb3NpdGlvbk5vZGUiLCJwcm9vZkZyb21DbGFpbU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVNjaGVtYU5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZUZyb21TdXBwb3NpdGlvbk5vZGUiLCJyZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwicmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJ1bGVGcm9tUnVsZU5vZGUiLCJzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZSIsInNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZSIsInNjaGVtYUZyb21TY2hlbWFOb2RlIiwic2VjdGlvbkZyb21TZWN0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUiLCJzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUiLCJzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJ0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tR2VuZXJhdG9yTm9kZSIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21Qcm9wZXJ0eU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVEZWNsYXJhdGlvbkZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21HZW5lcmF0b3JOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tUHJvcGVydHlOb2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwiVHlwZSIsImVsZW1lbnRzIiwibm9kZSIsIm5hbWUiLCJwcmVmaXhOYW1lIiwic3VwZXJUeXBlcyIsInByb3BlcnRpZXMiLCJwcm92aXNpb25hbCIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJ0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsImJyZWFrUG9pbnQiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwic2NoZW1hQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwic3RlcCIsInJ1bGVOb2RlIiwiUnVsZSIsInByb29mIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwicnVsZVN0cmluZyIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwicnVsZSIsImxpbmtOb2RlIiwiTGluayIsIm1ldGF2YXJpYWJsZSIsImxpbmsiLCJsYWJlbE5vZGUiLCJMYWJlbCIsImxhYmVsIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImxlbW1hTm9kZSIsIkxlbW1hIiwiY2xhaW1Ob2RlIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsImNsYWltU3RyaW5nIiwiY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibGVtbWEiLCJmcmFtZU5vZGUiLCJGcmFtZSIsImFzc3VtcHRpb25zIiwiZnJhbWUiLCJwcm9vZk5vZGUiLCJQcm9vZiIsImRlcml2YXRpb24iLCJheGlvbU5vZGUiLCJBeGlvbSIsImF4aW9tIiwic2NoZW1hTm9kZSIsIlNjaGVtYSIsImNvbnN0cmFpbnRzIiwic2NoZW1hU3RyaW5nIiwic2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwic2NoZW1hIiwic2VjdGlvbk5vZGUiLCJTZWN0aW9uIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwiZGVjbGFyYXRpb24iLCJjbGFpbSIsInNlY3Rpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZENsYWltIiwic2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByZW1pc2UiLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJ0aGVvcmVtIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHkiLCJQcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3VicHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VicHJvb2YiLCJlcXVhbGl0eU5vZGUiLCJFcXVhbGl0eSIsIm5lZ2F0ZWQiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImVxdWFsaXR5IiwiZGVkdWN0aW9uTm9kZSIsIkRlZHVjdGlvbiIsInN0YXRlbWVudE5vZGUiLCJTdGF0ZW1lbnQiLCJzdWJzdGl0dXRpb24iLCJzaWduYXR1cmVOb2RlIiwiU2lnbmF0dXJlIiwidGVybXMiLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsImdlbmVyYXRvck5vZGUiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJoeXBvdGhlc2VOb2RlIiwiSHlwb3RoZXNpcyIsImh5cG9odGVzaXMiLCJjb25zdHJhaW50Tm9kZSIsIkNvbnN0cmFpbnQiLCJjb25zdHJhaW50IiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImNvbWJpbmF0b3JOb2RlIiwiQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJjb25jbHVzaW9uTm9kZSIsIkNvbmNsdXNpb24iLCJkZXJpdmF0aW9uTm9kZSIsIkRlcml2YXRpb24iLCJzdGVwc09yU3VicHJvb2ZzIiwidHlwZVByZWZpeE5vZGUiLCJUeXBlUHJlZml4IiwidHlwZVByZWZpeCIsImFzc3VtcHRpb25Ob2RlIiwiQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJzdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZiIsInR5cGVEZWNsYXJhdGlvbk5vZGUiLCJUeXBlRGVjbGFyYXRpb24iLCJ0eXBlRGVjbGFyYXRpb24iLCJzY2hlbWFBc3NlcnRpb25Ob2RlIiwiU2NoZW1hQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwiaXNOZWdhdGVkIiwiZGVmaW5lZEFzc2VydGlvbiIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJUZXJtU3Vic3RpdHV0aW9uIiwiY29udGV4dHMiLCJ0YXJnZXRUZXJtIiwicmVwbGFjZW1lbnRUZXJtIiwidGVybVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwic3ViamVjdFRlcm0iLCJwcm9wZXJ0eVRlcm0iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY290eXBlRGVjbGFyYXRpb25Ob2RlIiwiQ290eXBlRGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9ucyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nIiwiY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImNvdHlwZURlY2xhcmF0aW9uIiwicHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIlByb2NlZHVyZVJlZmVyZW5jZSIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmciLCJwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmdGcm9tTmFtZUFuZFBhcmFtZXRlcnMiLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsIlNpZ25hdHVyZUFzc2VydGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsIlByb3BlcnR5RGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsImJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwiR2VuZXJhdG9yRGVjbGFyYXRpb24iLCJnZW5lcmF0b3JEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInNvbHZlZCIsInRhcmdldFN0YXRlbWVudCIsInJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIk1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZ2V0UHJvb2ZOb2RlIiwibGFiZWxOb2RlcyIsImdldExhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJwcmVtaXNlTm9kZXMiLCJnZXRQcmVtaXNlTm9kZXMiLCJnZXRBeGlvbU5vZGUiLCJnZXRMZW1tYU5vZGUiLCJnZXRUZXJtTm9kZSIsImdldE5hbWUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldERlZHVjdGlvbk5vZGUiLCJnZXRTaWduYXR1cmVOb2RlIiwiZ2V0VGhlb3JlbU5vZGUiLCJ0ZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJnZXRMaW5rTm9kZSIsImdldERlcml2YXRpb25Ob2RlIiwib2Nuc3RydWN0b3JOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsIm1ldGFtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInR5cGVtTm9kZSIsImdldFR5cGVOb2RlIiwic3VwcG9zaXRpb25Ob2RlcyIsImdldFN1cHBvc2l0aW9uTm9kZXMiLCJnZXRDb25qZWN0dXJlTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZ2V0RXF1YWxpdHlOb2RlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0SWRlbnRpZmllciIsInN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlIiwiaXNTdGVwTm9kZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImdldFNjaGVtYUFzc2VydGlvbk5vZGUiLCJzdGF0ZXNtZW50Tm9kZSIsImNvbmNsdXNpbm9Ob2RlIiwiaHlwb3RoZXNpc05vZGUiLCJyZWZlcmVuY2VsIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwiZnJvbVN0YXRlbWVudE5vZGUiLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJtZXRhdmFyaWJsZU5vZGUiLCJtZXRhdmFyaWJsZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0eXBlc05vZGUiLCJnZXRUeXBlc05vZGUiLCJ0eXBlcyIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldEdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJnZXRQcm9wZXJ0eU5vZGUiLCJpc1NvbHZlZCIsInN1YmplY3RUZXJtTm9kZSIsImdldFN1YmplY3RUZXJtTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJnZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5VGVybU5vZGUiLCJnZXRQcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0R2VuZXJhdG9yTm9kZSIsInJlcGxhY2VtZW50VGVybU5vZGUiLCJnZXRSZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwiZ2V0Q29uc3RydWN0b3JOb2RlIiwidGFyZ2V0U3RhdGVtZW50Tm9kZSIsImdldFRhcmdldFN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzIiwiZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwibWFwIiwidHlwZU5vZGVzIiwiZ2V0VHlwZU5vZGVzIiwiaHlwb3RoZXNpcyIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIiwicHJvcGVydHlEZWNscmF0aW9ucyIsInByb3BlcnR5RGVjbGNhcmF0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFpZ0JnQkE7ZUFBQUE7O1FBK3BEQUM7ZUFBQUE7O1FBaDdCQUM7ZUFBQUE7O1FBOWpDQUM7ZUFBQUE7O1FBMjBCQUM7ZUFBQUE7O1FBbk5BQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBOExBQztlQUFBQTs7UUFuSkFDO2VBQUFBOztRQWdzQ0FDO2VBQUFBOztRQXBsREFDO2VBQUFBOztRQWNBQztlQUFBQTs7UUE0cEJBQztlQUFBQTs7UUEvckJBQztlQUFBQTs7UUF3NUJBQztlQUFBQTs7UUFwNkJBQztlQUFBQTs7UUE4NUJBQztlQUFBQTs7UUF6Y0FDO2VBQUFBOztRQXlsQ0FDO2VBQUFBOztRQXFGQUM7ZUFBQUE7O1FBOWhEQUM7ZUFBQUE7O1FBaU5BQztlQUFBQTs7UUFpbkNBQztlQUFBQTs7UUFucENBQztlQUFBQTs7UUFvc0JBQztlQUFBQTs7UUF0UUFDO2VBQUFBOztRQS95QkFDO2VBQUFBOztRQTQzQkFDO2VBQUFBOztRQXhrQkFDO2VBQUFBOztRQW1vQ0FDO2VBQUFBOztRQWh5Q0FDO2VBQUFBOztRQTh0QkFDO2VBQUFBOztRQXI0QkFDO2VBQUFBOztRQW9pQ0FDO2VBQUFBOztRQS91Q0FDO2VBQUFBOztRQWtDQUM7ZUFBQUE7O1FBMDVDQUM7ZUFBQUE7O1FBN3VCQUM7ZUFBQUE7O1FBd2lDQUM7ZUFBQUE7O1FBOElBQztlQUFBQTs7UUE1bURBQztlQUFBQTs7UUF5bkRBQztlQUFBQTs7UUFwMUJBQztlQUFBQTs7UUFtYkFDO2VBQUFBOztRQXBKQUM7ZUFBQUE7O1FBc3NCQUM7ZUFBQUE7O1FBMXZEQUM7ZUFBQUE7O1FBOGlDQUM7ZUFBQUE7O1FBeERBQztlQUFBQTs7UUFQQUM7ZUFBQUE7O1FBM29CQUM7ZUFBQUE7O1FBeHBCQUM7ZUFBQUE7O1FBaTNCQUM7ZUFBQUE7O1FBZEFDO2VBQUFBOztRQW1xQ0FDO2VBQUFBOztRQTFxQ0FDO2VBQUFBOztRQXFVQUM7ZUFBQUE7O1FBem9DQUM7ZUFBQUE7O1FBeTRCQUM7ZUFBQUE7O1FBaUtBQztlQUFBQTs7UUE3a0NBQztlQUFBQTs7UUFrN0NBQztlQUFBQTs7UUE2S0FDO2VBQUFBOztRQTJXQUM7ZUFBQUE7O1FBdnBDQUM7ZUFBQUE7O1FBMndCQUM7ZUFBQUE7O1FBNVdBQztlQUFBQTs7UUFtQkFDO2VBQUFBOztRQXpGQUM7ZUFBQUE7O1FBazFCQUM7ZUFBQUE7O1FBOWdEQUM7ZUFBQUE7O1FBd2lDQUM7ZUFBQUE7O1FBWkFDO2VBQUFBOztRQXpUQUM7ZUFBQUE7O1FBbk9BQztlQUFBQTs7UUE4QkFDO2VBQUFBOztRQXduQkFDO2VBQUFBOztRQXB5QkFDO2VBQUFBOztRQW9RQUM7ZUFBQUE7O1FBNG5CQUM7ZUFBQUE7O1FBOWtCQUM7ZUFBQUE7O1FBNmdCQUM7ZUFBQUE7O1FBNVNBQztlQUFBQTs7UUFyakNBQztlQUFBQTs7UUErd0RBQztlQUFBQTs7UUExTEFDO2VBQUFBOztRQW4yQkFDO2VBQUFBOztRQXQ0QkFDO2VBQUFBOztRQSs0REFDO2VBQUFBOztRQTVvQ0FDO2VBQUFBOztRQXM4QkFDO2VBQUFBOztRQXpMQUM7ZUFBQUE7O1FBeGlDQUM7ZUFBQUE7O1FBdzdCQUM7ZUFBQUE7O1FBNFZBQztlQUFBQTs7UUE3aUNBQztlQUFBQTs7UUFweEJBQztlQUFBQTs7UUF3d0JBQztlQUFBQTs7UUFzQ0FDO2VBQUFBOztRQXVKQUM7ZUFBQUE7O1FBdmNBQztlQUFBQTs7UUEyb0NBQztlQUFBQTs7UUFsaUNBQztlQUFBQTs7UUErekNBQztlQUFBQTs7UUFnSUFDO2VBQUFBOztRQWpUQUM7ZUFBQUE7O1FBOW9EQUM7ZUFBQUE7O1FBc3VEQUM7ZUFBQUE7O1FBb0VBQztlQUFBQTs7UUFoSEFDO2VBQUFBOztRQThFQUM7ZUFBQUE7O1FBdDFCQUM7ZUFBQUE7O1FBd29CQUM7ZUFBQUE7O1FBOW9CQUM7ZUFBQUE7O1FBdzBCQUM7ZUFBQUE7O1FBM2pCQUM7ZUFBQUE7O1FBak1BQztlQUFBQTs7UUFqNUJBQztlQUFBQTs7UUE2c0JBQztlQUFBQTs7UUEwZUFDO2VBQUFBOztRQXdpQkFDO2VBQUFBOztRQXRFQUM7ZUFBQUE7O1FBaHJCQUM7ZUFBQUE7O1FBaHhDQUM7ZUFBQUE7O1FBd2lCQUM7ZUFBQUE7O1FBcTBCQUM7ZUFBQUE7O1FBanZDQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7UUEwaEJBQztlQUFBQTs7UUE2bUNBQztlQUFBQTs7UUFqT0FDO2VBQUFBOztRQXpmQUM7ZUFBQUE7O1FBN3hCQUM7ZUFBQUE7O1FBcWtEQUM7ZUFBQUE7O1FBdGRBQztlQUFBQTs7UUFxZkFDO2VBQUFBOztRQTllQUM7ZUFBQUE7O1FBWUFDO2VBQUFBOztRQXdCQUM7ZUFBQUE7O1FBaVpBQztlQUFBQTs7UUExZkFDO2VBQUFBOztRQTZGQUM7ZUFBQUE7O1FBc1pBQztlQUFBQTs7UUFwcEJBQztlQUFBQTs7UUE5NUJBQztlQUFBQTs7UUEwdEJBQztlQUFBQTs7UUEwZUFDO2VBQUFBOztRQS9xQkFDO2VBQUFBOztRQW94Q0FDO2VBQUFBOztRQTlQQUM7ZUFBQUE7O1FBMzBEQUM7ZUFBQUE7O1FBMjJDQUM7ZUFBQUE7O1FBejBCQUM7ZUFBQUE7O1FBeWxEQUM7ZUFBQUE7O1FBV0FDO2VBQUFBOztRQWpvREFDO2VBQUFBOztRQW9nQ0FDO2VBQUFBOztRQTRYQUM7ZUFBQUE7O1FBcklBQztlQUFBQTs7UUF4b0NBQztlQUFBQTs7UUFpL0JBQztlQUFBQTs7UUFwM0NBQztlQUFBQTs7UUE4eUNBQztlQUFBQTs7UUEwUkFDO2VBQUFBOztRQXJHQUM7ZUFBQUE7O1FBOXFCQUM7ZUFBQUE7O1FBbmtCQUM7ZUFBQUE7O1FBMnhCQUM7ZUFBQUE7O1FBaUVBQztlQUFBQTs7UUEwSkFDO2VBQUFBOztRQW9wQkFDO2VBQUFBOztRQXhHQUM7ZUFBQUE7O1FBN1JBQztlQUFBQTs7UUFqRUFDO2VBQUFBOztRQTdnQkFDO2VBQUFBOztRQXlkQUM7ZUFBQUE7O1FBMUhBQztlQUFBQTs7UUFyZUFDO2VBQUFBOztRQXloQkFDO2VBQUFBOztRQW5WQUM7ZUFBQUE7O1FBbFFBQztlQUFBQTs7UUEzK0JBQztlQUFBQTs7UUFvMENBQztlQUFBQTs7UUE3dEJBQztlQUFBQTs7UUF3akNBQztlQUFBQTs7UUE3aUJBQztlQUFBQTs7UUE2N0JBQztlQUFBQTs7UUF6OEJBQztlQUFBQTs7UUExNUJBQztlQUFBQTs7UUF5NUNBQztlQUFBQTs7UUFua0NBQztlQUFBQTs7UUF1QkFDO2VBQUFBOztRQXdvQ0FDO2VBQUFBOztRQWdHQUM7ZUFBQUE7O1FBeG1CQUM7ZUFBQUE7O1FBbVpBQztlQUFBQTs7UUE0SEFDO2VBQUFBOztRQXJwQkFDO2VBQUFBOztRQXNNQUM7ZUFBQUE7O1FBNmFBQztlQUFBQTs7UUEvcUJBQztlQUFBQTs7UUEzSEFDO2VBQUFBOztRQStjQUM7ZUFBQUE7O1FBbUpBQztlQUFBQTs7UUExL0NBQztlQUFBQTs7UUF5c0RBQztlQUFBQTs7UUFockJBQztlQUFBQTs7UUFyTkFDO2VBQUFBOztRQXVzQ0FDO2VBQUFBOztRQXRpREFDO2VBQUFBOztRQWduREFDO2VBQUFBOztRQXowQ0FDO2VBQUFBOztRQXNNQUM7ZUFBQUE7O1FBcThCQUM7ZUFBQUE7O1FBdm9EQUM7ZUFBQUE7OztpRUE1Uks7c0JBRWU7d0JBUW9DOzs7Ozs7QUFFakUsU0FBU1YsaUJBQWlCVyxRQUFRLEVBQUVDLE9BQU87SUFDaEQsSUFBSUM7SUFFSixJQUFJRixhQUFhLE1BQU07UUFDckIsTUFBTUcsV0FBV0MsSUFBQUEseUJBQW1CO1FBRXBDRixPQUFPQyxVQUFXLEdBQUc7SUFDdkIsT0FBTztRQUNMLE1BQU0sRUFBRUUsSUFBSSxFQUFFLEdBQUdDLGlCQUFRLEVBQ25CQyxPQUFPUCxVQUNQUSxPQUFPbEosaUJBQWlCMEksVUFBVUMsVUFDbENRLGFBQWExSSx1QkFBdUJpSSxVQUFVQyxVQUM5Q1MsYUFBYTVELHVCQUF1QmtELFVBQVVDLFVBQzlDVSxhQUFhL0gsdUJBQXVCb0gsVUFBVUMsVUFDOUNXLGNBQWNsSCx3QkFBd0JzRyxVQUFVQyxVQUNoRFksa0JBQWtCbEosNEJBQTRCcUksVUFBVUMsVUFDeERhLGFBQWFDLElBQUFBLHFDQUE2QixFQUFDRixrQkFDM0NHLFNBQVNGLFlBQ1RHLGFBQWE7UUFFbkJoQixVQUFVO1FBRVZDLE9BQU8sSUFBSUcsS0FBS0osU0FBU2UsUUFBUVQsTUFBTVUsWUFBWVQsTUFBTUMsWUFBWUMsWUFBWUMsWUFBWUM7SUFDL0Y7SUFFQSxPQUFPVjtBQUNUO0FBRU8sU0FBU3BDLGlCQUFpQm9ELFFBQVEsRUFBRWpCLE9BQU87SUFDaEQsTUFBTSxFQUFFa0IsSUFBSSxFQUFFLEdBQUdiLGlCQUFRLEVBQ25CQyxPQUFPVyxVQUNQRixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiZixPQUFPaEIsaUJBQWlCZ0MsVUFBVWpCLFVBQ2xDVyxjQUFjcEgsd0JBQXdCMEgsVUFBVWpCO0lBRXREQSxVQUFVO0lBRVYsTUFBTW9CLE9BQU8sSUFBSUYsS0FBS2xCLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU1VO0lBRS9ELE9BQU9TO0FBQ1Q7QUFFTyxTQUFTdEYsaUJBQWlCdUYsUUFBUSxFQUFFckIsT0FBTztJQUNoRCxNQUFNLEVBQUVzQixJQUFJLEVBQUUsR0FBR2pCLGlCQUFRLEVBQ25CQyxPQUFPZSxVQUNQTixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiTyxZQUFZOUYsc0JBQXNCNEYsVUFBVXJCLFVBQzVDd0IsWUFBWTFILHNCQUFzQnVILFVBQVVyQixVQUM1Q3lCLHFCQUFxQnBKLCtCQUErQmdKLFVBQVVyQixVQUM5RDBCLGtCQUFrQnJILDRCQUE0QmdILFVBQVVyQixVQUN4RDJCLHFCQUFxQmpILCtCQUErQjJHLFVBQVVyQjtJQUVwRUEsVUFBVTtJQUVWLE1BQU00QixPQUFPLElBQUlOLEtBQUt0QixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZUSxXQUFXRCxXQUFXRSxvQkFBb0JDLGlCQUFpQkM7SUFFcEgsT0FBT0M7QUFDVDtBQUVPLFNBQVN6SCxpQkFBaUIwSCxRQUFRLEVBQUU3QixPQUFPO0lBQ2hELE1BQU0sRUFBRThCLElBQUksRUFBRSxHQUFHekIsaUJBQVEsRUFDdkIwQixRQUFRdEosa0JBQWtCb0osVUFBVTdCLFVBQ3BDZ0MsU0FBU2pNLG1CQUFtQjhMLFVBQVU3QixVQUN0Q2lDLFdBQVdoSyxxQkFBcUI0SixVQUFVN0IsVUFDMUNrQyxhQUFhOU8sdUJBQXVCeU8sVUFBVTdCLFVBQzlDbUMsYUFBYUMsSUFBQUEsaURBQXlDLEVBQUNKLFFBQVFDLFVBQVVDLGFBQ3pFNUIsT0FBT3VCLFVBQ1BkLFNBQVNvQixZQUNUbkIsYUFBYTtJQUVmaEIsVUFBVTtJQUVWLE1BQU1xQyxPQUFPLElBQUlQLEtBQUs5QixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZZSxPQUFPQyxRQUFRQyxVQUFVQztJQUVsRixPQUFPRztBQUNUO0FBRU8sU0FBU2pNLGlCQUFpQmtNLFFBQVEsRUFBRXRDLE9BQU87SUFDaEQsTUFBTSxFQUFFdUMsSUFBSSxFQUFFLEdBQUdsQyxpQkFBUSxFQUNuQkMsT0FBT2dDLFVBQ1B2QixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNid0IsZUFBZTVMLHlCQUF5QjBMLFVBQVV0QyxVQUNsRHlDLE9BQU8sSUFBSUYsS0FBS3ZDLFNBQVNlLFFBQVFULE1BQU1VLFlBQVl3QjtJQUV6RCxPQUFPQztBQUNUO0FBRU8sU0FBUzlNLG1CQUFtQitNLFNBQVMsRUFBRTFDLE9BQU87SUFDbkQsTUFBTSxFQUFFMkMsS0FBSyxFQUFFLEdBQUd0QyxpQkFBUSxFQUNwQkMsT0FBT29DLFdBQ1AzQixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNid0IsZUFBZTdMLDBCQUEwQitMLFdBQVcxQyxVQUNwRDRDLFFBQVEsSUFBSUQsTUFBTTNDLFNBQVNlLFFBQVFULE1BQU1VLFlBQVl3QjtJQUUzRCxPQUFPSTtBQUNUO0FBRU8sU0FBU2xPLG1CQUFtQm1PLFNBQVMsRUFBRTdDLE9BQU87SUFDbkQsTUFBTSxFQUFFOEMsS0FBSyxFQUFFLEdBQUd6QyxpQkFBUSxFQUNwQkMsT0FBT3VDLFdBQ1A5QixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYTtJQUVuQmhCLFVBQVU7SUFFVixNQUFNK0MsUUFBUSxJQUFJRCxNQUFNOUMsU0FBU2UsUUFBUVQsTUFBTVU7SUFFL0MsT0FBTytCO0FBQ1Q7QUFFTyxTQUFTOU0sbUJBQW1CK00sU0FBUyxFQUFFaEQsT0FBTztJQUNuRCxNQUFNLEVBQUVpRCxLQUFLLEVBQUUsR0FBRzVDLGlCQUFRLEVBQ3BCNkMsWUFBWUYsV0FDWmpCLFFBQVF4SixtQkFBbUIySyxXQUFXbEQsVUFDdENnQyxTQUFTbk0sb0JBQW9CcU4sV0FBV2xELFVBQ3hDbUQsWUFBWWxQLHVCQUF1QmlQLFdBQVdsRCxVQUM5Q29ELGVBQWVyRywwQkFBMEJtRyxXQUFXbEQsVUFDcERxRCxZQUFZMUksdUJBQXVCdUksV0FBV2xELFVBQzlDc0QsYUFBYXBPLHdCQUF3QmdPLFdBQVdsRCxVQUNoRHVELGNBQWNDLElBQUFBLDhEQUFzRCxFQUFDeEIsUUFBUXFCLFdBQVdELGNBQWNELFlBQ3RHN0MsT0FBTzBDLFdBQ1BqQyxTQUFTd0MsYUFDVHZDLGFBQWE7SUFFbkJoQixVQUFVO0lBRVYsTUFBTXlELFFBQVEsSUFBSVIsTUFBTWpELFNBQVNlLFFBQVFULE1BQU1VLFlBQVlnQixRQUFRb0IsY0FBY0QsV0FBV3BCLE9BQU9zQixXQUFXQztJQUU5RyxPQUFPRztBQUNUO0FBRU8sU0FBUzlPLG1CQUFtQitPLFNBQVMsRUFBRTFELE9BQU87SUFDbkQsTUFBTSxFQUFFMkQsS0FBSyxFQUFFLEdBQUd0RCxpQkFBUSxFQUNwQkMsT0FBT29ELFdBQ1AzQyxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiNEMsY0FBY2xSLHlCQUF5QmdSLFdBQVcxRCxVQUNsRHdDLGVBQWU5TCwwQkFBMEJnTixXQUFXMUQ7SUFFMURBLFVBQVU7SUFFVixNQUFNNkQsUUFBUSxJQUFJRixNQUFNM0QsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWTRDLGFBQWFwQjtJQUV4RSxPQUFPcUI7QUFDVDtBQUVPLFNBQVNyTCxtQkFBbUJzTCxTQUFTLEVBQUU5RCxPQUFPO0lBQ25ELE1BQU0sRUFBRStELEtBQUssRUFBRSxHQUFHMUQsaUJBQVEsRUFDcEJDLE9BQU93RCxXQUNQL0MsU0FBUyxNQUNUQyxhQUFhLE1BQ2JnRCxhQUFhelAsd0JBQXdCdVAsV0FBVzlEO0lBRXREQSxVQUFVO0lBRVYsTUFBTStCLFFBQVEsSUFBSWdDLE1BQU0vRCxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZZ0Q7SUFFM0QsT0FBT2pDO0FBQ1Q7QUFFTyxTQUFTcFAsbUJBQW1Cc1IsU0FBUyxFQUFFakUsT0FBTztJQUNuRCxNQUFNLEVBQUVrRSxLQUFLLEVBQUUsR0FBRzdELGlCQUFRLEVBQ3BCNkMsWUFBWWUsV0FDWmxDLFFBQVF4SixtQkFBbUIySyxXQUFXbEQsVUFDdENnQyxTQUFTbk0sb0JBQW9CcU4sV0FBV2xELFVBQ3hDbUQsWUFBWWxQLHVCQUF1QmlQLFdBQVdsRCxVQUM5Q29ELGVBQWVyRywwQkFBMEJtRyxXQUFXbEQsVUFDcERxRCxZQUFZMUksdUJBQXVCdUksV0FBV2xELFVBQzlDc0QsYUFBYXBPLHdCQUF3QmdPLFdBQVdsRCxVQUNoRHVELGNBQWNDLElBQUFBLDhEQUFzRCxFQUFDeEIsUUFBUXFCLFdBQVdELGNBQWNELFlBQ3RHN0MsT0FBTzJELFdBQ1BsRCxTQUFTd0MsYUFDVHZDLGFBQWE7SUFFbkJoQixVQUFVO0lBRVYsTUFBTW1FLFFBQVEsSUFBSUQsTUFBTWxFLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlnQixRQUFRb0IsY0FBY0QsV0FBV3BCLE9BQU9zQixXQUFXQztJQUU5RyxPQUFPYTtBQUNUO0FBRU8sU0FBUzdKLHFCQUFxQjhKLFVBQVUsRUFBRXBFLE9BQU87SUFDdEQsTUFBTSxFQUFFcUUsTUFBTSxFQUFFLEdBQUdoRSxpQkFBUSxFQUNyQjBCLFFBQVFySixvQkFBb0IwTCxZQUFZcEUsVUFDeEM0QyxRQUFRaE4sb0JBQW9Cd08sWUFBWXBFLFVBQ3hDbUQsWUFBWWhQLHdCQUF3QmlRLFlBQVlwRSxVQUNoRG9ELGVBQWVwRywyQkFBMkJvSCxZQUFZcEUsVUFDdERzRSxjQUFjOVEsMEJBQTBCNFEsWUFBWXBFLFVBQ3BEdUUsZUFBZUMsSUFBQUEscURBQTZDLEVBQUM1QixPQUFPUSxjQUFjRCxZQUNsRjdDLE9BQU84RCxZQUNQckQsU0FBU3dELGNBQ1R2RCxhQUFhLE1BQ2J5RCxTQUFTLElBQUlKLE9BQU9yRSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZNEIsT0FBT1EsY0FBY0QsV0FBV3BCLE9BQU91QztJQUVwRyxPQUFPRztBQUNUO0FBRU8sU0FBU2xLLHVCQUF1Qm1LLFdBQVcsRUFBRTFFLE9BQU87SUFDekQsTUFBTSxFQUFFMkUsT0FBTyxFQUFFLEdBQUd0RSxpQkFBUSxFQUN0QnVFLGtCQUFrQkYsWUFBWUcsa0JBQWtCLElBQ2hEdkIsYUFBYWpPLDhCQUE4QnVQLGlCQUFpQjVFLFVBQzVEOEUsY0FBYzlRLDJCQUEyQjBRLGFBQWExRSxVQUN0RCtFLFFBQVFoUyxxQkFBcUIyUixhQUFhMUUsVUFDMUNnRixnQkFBZ0JDLElBQUFBLHNEQUE4QyxFQUFDM0IsWUFBWXdCLGFBQWFDLFFBQ3hGekUsT0FBT29FLGFBQ1AzRCxTQUFTaUUsZUFDVGhFLGFBQWE7SUFFbkJoQixVQUFVO0lBRVYsTUFBTWtGLFVBQVUsSUFBSVAsUUFBUTNFLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlzQyxZQUFZd0IsYUFBYUM7SUFFeEYsT0FBT0c7QUFDVDtBQUVPLFNBQVNuTix1QkFBdUJvTixXQUFXLEVBQUVuRixPQUFPO0lBQ3pELE1BQU0sRUFBRW9GLE9BQU8sRUFBRSxHQUFHL0UsaUJBQVEsRUFDdEJDLE9BQU82RSxhQUNQcEUsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYlEsWUFBWTVILHlCQUF5QnVMLGFBQWFuRixVQUNsRHVCLFlBQVloRyx5QkFBeUI0SixhQUFhbkYsVUFDbER5QixxQkFBcUJ0SixrQ0FBa0NnTixhQUFhbkYsVUFDcEVxRixVQUFVLElBQUlELFFBQVFwRixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZUSxXQUFXRCxXQUFXRTtJQUVyRixPQUFPNEQ7QUFDVDtBQUVPLFNBQVNqSCx1QkFBdUJrSCxXQUFXLEVBQUV0RixPQUFPO0lBQ3pELE1BQU0sRUFBRXVGLE9BQU8sRUFBRSxHQUFHbEYsaUJBQVEsRUFDdEI2QyxZQUFZb0MsYUFDWnZELFFBQVF4SixtQkFBbUIySyxXQUFXbEQsVUFDdENnQyxTQUFTbk0sb0JBQW9CcU4sV0FBV2xELFVBQ3hDbUQsWUFBWWxQLHVCQUF1QmlQLFdBQVdsRCxVQUM5Q29ELGVBQWVyRywwQkFBMEJtRyxXQUFXbEQsVUFDcERxRCxZQUFZMUksdUJBQXVCdUksV0FBV2xELFVBQzlDc0QsYUFBYXBPLHdCQUF3QmdPLFdBQVdsRCxVQUNoRHVELGNBQWNDLElBQUFBLDhEQUFzRCxFQUFDeEIsUUFBUXFCLFdBQVdELGNBQWNELFlBQ3RHN0MsT0FBT2dGLGFBQ1B2RSxTQUFTd0MsYUFDVHZDLGFBQWE7SUFFbkJoQixVQUFVO0lBRVYsTUFBTXdGLFVBQVUsSUFBSUQsUUFBUXZGLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlnQixRQUFRb0IsY0FBY0QsV0FBV3BCLE9BQU9zQixXQUFXQztJQUVsSCxPQUFPa0M7QUFDVDtBQUVPLFNBQVN0TSx5QkFBeUJ1TSxZQUFZLEVBQUV6RixPQUFPO0lBQzVELElBQUkwRixXQUFXO0lBRWYsSUFBSUQsZ0JBQWdCLE1BQU07UUFDeEIsTUFBTSxFQUFFRSxRQUFRLEVBQUUsR0FBR3RGLGlCQUFRLEVBQ3ZCQyxPQUFPbUYsY0FDUDFFLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JJLE9BQU94RCxxQkFBcUI2SCxjQUFjekYsVUFDMUNDLE9BQU9qQixxQkFBcUJ5RyxjQUFjekY7UUFFaERBLFVBQVU7UUFFVjBGLFdBQVcsSUFBSUMsU0FBUzNGLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlJLE1BQU1uQjtJQUNuRTtJQUVBLE9BQU95RjtBQUNUO0FBRU8sU0FBUzVGLHlCQUF5QjhGLFlBQVksRUFBRTVGLE9BQU87SUFDNUQsTUFBTSxFQUFFNkYsUUFBUSxFQUFFLEdBQUd4RixpQkFBUSxFQUN2QkMsT0FBT3NGLGNBQ1A3RSxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiZixPQUFPWCxxQkFBcUJzRyxjQUFjNUYsVUFDMUM4RixhQUFhclEsMkJBQTJCbVEsY0FBYzVGLFVBQ3REVyxjQUFjaEgsNEJBQTRCaU0sY0FBYzVGO0lBRTlEQSxVQUFVO0lBRVYsTUFBTStGLFdBQVcsSUFBSUYsU0FBUzdGLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU02RixZQUFZbkY7SUFFbkYsT0FBT29GO0FBQ1Q7QUFFTyxTQUFTdEoseUJBQXlCdUosWUFBWSxFQUFFaEcsT0FBTztJQUM1RCxNQUFNLEVBQUVpRyxRQUFRLEVBQUUsR0FBRzVGLGlCQUFRLEVBQ3ZCQyxPQUFPMEYsY0FDUGhGLGFBQWEsTUFDYm9DLGVBQWVuRyw2QkFBNkIrSSxjQUFjaEcsVUFDMURrRyxnQkFBZ0I5Siw4QkFBOEI0SixjQUFjaEcsVUFDNURtRyxpQkFBaUJDLElBQUFBLHNEQUE4QyxFQUFDaEQsY0FBYzhDLGVBQWVsRyxVQUM3RmUsU0FBU29GLGdCQUFpQixHQUFHO0lBRW5DbkcsVUFBVTtJQUVWLE1BQU1xRyxXQUFXLElBQUlKLFNBQVNqRyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZb0MsY0FBYzhDO0lBRS9FLE9BQU9HO0FBQ1Q7QUFFTyxTQUFTN1IseUJBQXlCOFIsWUFBWSxFQUFFdEcsT0FBTztJQUM1RCxNQUFNLEVBQUV1RyxRQUFRLEVBQUUsR0FBR2xHLGlCQUFRLEVBQ3ZCQyxPQUFPZ0csY0FDUHZGLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2J3RixVQUFVaFAsd0JBQXdCOE8sY0FBY3RHLFVBQ2hEeUcsV0FBV3pRLHlCQUF5QnNRLGNBQWN0RyxVQUNsRDBHLFlBQVl4TSwwQkFBMEJvTSxjQUFjdEc7SUFFMURBLFVBQVU7SUFFVixNQUFNMkcsV0FBVyxJQUFJSixTQUFTdkcsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXdGLFNBQVNDLFVBQVVDO0lBRXBGLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTelMsMkJBQTJCMFMsYUFBYSxFQUFFNUcsT0FBTztJQUMvRCxNQUFNLEVBQUU2RyxTQUFTLEVBQUUsR0FBR3hHLGlCQUFRLEVBQ3hCQyxPQUFPc0csZUFDUDdGLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JPLFlBQVluRywyQkFBMkJ3TCxlQUFlNUcsVUFDdERtRCxZQUFZLElBQUkwRCxVQUFVN0csU0FBU2UsUUFBUVQsTUFBTVUsWUFBWU87SUFFbkUsT0FBTzRCO0FBQ1Q7QUFFTyxTQUFTM0gsMkJBQTJCc0wsYUFBYSxFQUFFOUcsT0FBTztJQUMvRCxNQUFNLEVBQUUrRyxTQUFTLEVBQUUsR0FBRzFHLGlCQUFRLEVBQ3hCQyxPQUFPd0csZUFDUC9GLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JnRyxlQUFldEssOEJBQThCb0ssZUFBZTlHO0lBRWxFQSxVQUFVO0lBRVYsTUFBTXVCLFlBQVksSUFBSXdGLFVBQVUvRyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZZ0c7SUFFbkUsT0FBT3pGO0FBQ1Q7QUFFTyxTQUFTM0csMkJBQTJCcU0sYUFBYSxFQUFFakgsT0FBTztJQUMvRCxNQUFNLEVBQUVrSCxTQUFTLEVBQUUsR0FBRzdHLGlCQUFRLEVBQ3hCQyxPQUFPMkcsZUFDUGxHLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JtRyxRQUFRbEosdUJBQXVCZ0osZUFBZWpILFVBQzlDcUQsWUFBWSxJQUFJNkQsVUFBVWxILFNBQVNlLFFBQVFULE1BQU1VLFlBQVltRztJQUVuRSxPQUFPOUQ7QUFDVDtBQUVPLFNBQVN4SiwyQkFBMkJ1TixhQUFhLEVBQUVwSCxPQUFPO0lBQy9ELE1BQU0sRUFBRXFILFNBQVMsRUFBRSxHQUFHaEgsaUJBQVEsRUFDeEJDLE9BQU84RyxlQUNQckcsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYndCLGVBQWV6TCw4QkFBOEJxUSxlQUFlcEgsVUFDNUR3QixZQUFZLElBQUk2RixVQUFVckgsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXdCO0lBRW5FLE9BQU9oQjtBQUNUO0FBRU8sU0FBUzdKLDJCQUEyQjJQLGFBQWEsRUFBRXRILE9BQU87SUFDL0QsTUFBTSxFQUFFdUgsU0FBUyxFQUFFLEdBQUdsSCxpQkFBUSxFQUN4QkMsT0FBT2dILGVBQ1B2RyxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiVCxPQUFPckoscUJBQXFCb1EsZUFBZXRILFVBQzNDOEYsYUFBYXRRLDJCQUEyQjhSLGVBQWV0SDtJQUU3REEsVUFBVTtJQUVWLE1BQU13SCxZQUFZLElBQUlELFVBQVV2SCxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZVCxNQUFNdUY7SUFFekUsT0FBTzBCO0FBQ1Q7QUFFTyxTQUFTeFMsMkJBQTJCeVMsYUFBYSxFQUFFekgsT0FBTztJQUMvRCxNQUFNLEVBQUUwSCxTQUFTLEVBQUUsR0FBR3JILGlCQUFRLEVBQ3hCQyxPQUFPbUgsZUFDUDFHLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JJLE9BQU8zRCxzQkFBc0JnSyxlQUFlekgsVUFDNUNDLE9BQU9wQixzQkFBc0I0SSxlQUFlekgsVUFDNUNzRCxhQUFhbE8sNEJBQTRCcVMsZUFBZXpIO0lBRTlEQSxVQUFVO0lBRVYsTUFBTTJILFlBQVksSUFBSUQsVUFBVTFILFNBQVNlLFFBQVFULE1BQU1VLFlBQVlJLE1BQU1uQixNQUFNcUQ7SUFFL0UsT0FBT3FFO0FBQ1Q7QUFFTyxTQUFTclMsNkJBQTZCc1MsYUFBYSxFQUFFNUgsT0FBTztJQUNqRSxNQUFNLEVBQUU2SCxVQUFVLEVBQUUsR0FBR3hILGlCQUFRLEVBQ3pCQyxPQUFPc0gsZUFDUDdHLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JPLFlBQVlsRyw0QkFBNEJ1TSxlQUFlNUgsVUFDdkR5QixxQkFBcUJ2SixxQ0FBcUMwUCxlQUFlNUg7SUFFL0VBLFVBQVU7SUFFVixNQUFNOEgsYUFBYSxJQUFJRCxXQUFXN0gsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWU8sV0FBV0U7SUFFaEYsT0FBT3FHO0FBQ1Q7QUFFTyxTQUFTdlUsNkJBQTZCd1UsY0FBYyxFQUFFL0gsT0FBTztJQUNsRSxNQUFNLEVBQUVnSSxVQUFVLEVBQUUsR0FBRzNILGlCQUFRLEVBQ3pCQyxPQUFPeUgsZ0JBQ1BoSCxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiTyxZQUFZckcsNEJBQTRCNk0sZ0JBQWdCL0gsVUFDeER3QyxlQUFlL0wsK0JBQStCc1IsZ0JBQWdCL0gsVUFDOURpSSxhQUFhLElBQUlELFdBQVdoSSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZTyxXQUFXaUI7SUFFaEYsT0FBT3lGO0FBQ1Q7QUFFTyxTQUFTNVUsNkJBQTZCNlUsY0FBYyxFQUFFbEksT0FBTztJQUNsRSxNQUFNLEVBQUVtSSxVQUFVLEVBQUUsR0FBRzlILGlCQUFRLEVBQ3pCNkMsWUFBWWdGLGdCQUNabkcsUUFBUXhKLG1CQUFtQjJLLFdBQVdsRCxVQUN0Q2dDLFNBQVNuTSxvQkFBb0JxTixXQUFXbEQsVUFDeENtRCxZQUFZbFAsdUJBQXVCaVAsV0FBV2xELFVBQzlDb0QsZUFBZXJHLDBCQUEwQm1HLFdBQVdsRCxVQUNwRHFELFlBQVkxSSx1QkFBdUJ1SSxXQUFXbEQsVUFDOUNzRCxhQUFhcE8sd0JBQXdCZ08sV0FBV2xELFVBQ2hEdUQsY0FBY0MsSUFBQUEsOERBQXNELEVBQUN4QixRQUFRcUIsV0FBV0QsY0FBY0QsWUFDdEc3QyxPQUFPNEgsZ0JBQ1BuSCxTQUFTd0MsYUFDVHZDLGFBQWE7SUFFbkJoQixVQUFVO0lBRVYsTUFBTW9JLGFBQWEsSUFBSUQsV0FBV25JLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlnQixRQUFRb0IsY0FBY0QsV0FBV3BCLE9BQU9zQixXQUFXQztJQUV4SCxPQUFPOEU7QUFDVDtBQUVPLFNBQVNsViw2QkFBNkJtVixjQUFjLEVBQUVySSxPQUFPO0lBQ2xFLE1BQU0sRUFBRXNJLFVBQVUsRUFBRSxHQUFHakksaUJBQVEsRUFDekJDLE9BQU8rSCxnQkFDUHRILFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JPLFlBQVl2Ryw0QkFBNEJxTixnQkFBZ0JySTtJQUU5REEsVUFBVTtJQUVWLE1BQU11SSxhQUFhLElBQUlELFdBQVd0SSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZTztJQUVyRSxPQUFPZ0g7QUFDVDtBQUVPLFNBQVNwViw2QkFBNkJxVixjQUFjLEVBQUV4SSxPQUFPO0lBQ2xFLE1BQU0sRUFBRXlJLFVBQVUsRUFBRSxHQUFHcEksaUJBQVEsRUFDekJDLE9BQU9rSSxnQkFDUHpILFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JPLFlBQVl0Ryw0QkFBNEJ1TixnQkFBZ0J4SSxVQUN4RGtDLGFBQWEsSUFBSXVHLFdBQVd6SSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZTztJQUVyRSxPQUFPVztBQUNUO0FBRU8sU0FBUzVOLDZCQUE2Qm9VLGNBQWMsRUFBRTFJLE9BQU87SUFDbEUsTUFBTSxFQUFFMkksVUFBVSxFQUFFLEdBQUd0SSxpQkFBUSxFQUN6QkMsT0FBT29JLGdCQUNQM0gsU0FBUyxNQUNUQyxhQUFhLE1BQ2I0SCxtQkFBbUIzTSxtQ0FBbUN5TSxnQkFBZ0IxSTtJQUU1RUEsVUFBVTtJQUVWLE1BQU1nRSxhQUFhLElBQUkyRSxXQUFXM0ksU0FBU2UsUUFBUVQsTUFBTVUsWUFBWTRIO0lBRXJFLE9BQU81RTtBQUNUO0FBRU8sU0FBU3ZFLDZCQUE2Qm9KLGNBQWMsRUFBRTdJLE9BQU87SUFDbEUsTUFBTSxFQUFFOEksVUFBVSxFQUFFLEdBQUd6SSxpQkFBUSxFQUN6QkMsT0FBT3VJLGdCQUNQOUgsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYlQsT0FBT2pKLHVCQUF1QnVSLGdCQUFnQjdJO0lBRXBEQSxVQUFVO0lBRVYsTUFBTStJLGFBQWEsSUFBSUQsV0FBVzlJLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlUO0lBRXJFLE9BQU93STtBQUNUO0FBRU8sU0FBU3ZXLDZCQUE2QndXLGNBQWMsRUFBRWhKLE9BQU87SUFDbEUsTUFBTSxFQUFFaUosVUFBVSxFQUFFLEdBQUc1SSxpQkFBUSxFQUN6QkMsT0FBTzBJLGdCQUNQakksU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYnlCLE9BQU90TSx1QkFBdUI2UyxnQkFBZ0JoSixVQUM5Q3VCLFlBQVl6Ryw0QkFBNEJrTyxnQkFBZ0JoSjtJQUU5REEsVUFBVTtJQUVWLE1BQU1rSixhQUFhLElBQUlELFdBQVdqSixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZeUIsTUFBTWxCO0lBRTNFLE9BQU8ySDtBQUNUO0FBRU8sU0FBU3RWLCtCQUErQnVWLGVBQWUsRUFBRW5KLE9BQU87SUFDckUsTUFBTSxFQUFFb0osV0FBVyxFQUFFLEdBQUcvSSxpQkFBUSxFQUMxQkMsT0FBTzZJLGlCQUNQcEksU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYkksT0FBTzlELHdCQUF3QjZMLGlCQUFpQm5KLFVBQ2hEQyxPQUFPdkIsd0JBQXdCeUssaUJBQWlCbkosVUFDaERzRCxhQUFhbk8sOEJBQThCZ1UsaUJBQWlCbko7SUFFbEVBLFVBQVU7SUFFVixNQUFNcUosY0FBYyxJQUFJRCxZQUFZcEosU0FBU2UsUUFBUVQsTUFBTVUsWUFBWUksTUFBTW5CLE1BQU1xRDtJQUVuRixPQUFPK0Y7QUFDVDtBQUVPLFNBQVN2TSwrQkFBK0J3TSxlQUFlLEVBQUV0SixPQUFPO0lBQ3JFLE1BQU0sRUFBRXVKLFdBQVcsRUFBRSxHQUFHbEosaUJBQVEsRUFDMUJDLE9BQU9nSixpQkFDUHZJLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JRLFlBQVl6SCw2QkFBNkJ1UCxpQkFBaUJ0SixVQUMxRHVCLFlBQVk3Riw2QkFBNkI0TixpQkFBaUJ0SixVQUMxRHlCLHFCQUFxQm5KLHNDQUFzQ2dSLGlCQUFpQnRKLFVBQzVFd0osY0FBYyxJQUFJRCxZQUFZdkosU0FBU2UsUUFBUVQsTUFBTVUsWUFBWVEsV0FBV0QsV0FBV0U7SUFFN0YsT0FBTytIO0FBQ1Q7QUFFTyxTQUFTMVMsaUNBQWlDMlMsZ0JBQWdCLEVBQUV6SixPQUFPO0lBQ3hFLE1BQU0sRUFBRTBKLFlBQVksRUFBRSxHQUFHckosaUJBQVEsRUFDM0JDLE9BQU9tSixrQkFDUDFJLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JULE9BQU90Six5QkFBeUJ3UyxrQkFBa0J6SixVQUNsRG9CLE9BQU96RCx5QkFBeUI4TCxrQkFBa0J6SixVQUNsREMsT0FBT25CLHlCQUF5QjJLLGtCQUFrQnpKLFVBQ2xEMkosV0FBVztJQUVqQjNKLFVBQVU7SUFFVixNQUFNd0MsZUFBZSxJQUFJa0gsYUFBYTFKLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlULE1BQU1hLE1BQU1uQixNQUFNMEo7SUFFM0YsT0FBT25IO0FBQ1Q7QUFFTyxTQUFTckcsbUNBQW1DeU4saUJBQWlCLEVBQUU1SixPQUFPO0lBQzNFLE1BQU0sRUFBRTZKLGFBQWEsRUFBRSxHQUFHeEosaUJBQVEsRUFDNUJDLE9BQU9zSixtQkFDUDdJLFNBQVMsTUFDVEMsYUFBYSxNQUNiNEgsbUJBQW1CMU0sc0NBQXNDME4sbUJBQW1CNUo7SUFFbEZBLFVBQVU7SUFFVixNQUFNa0csZ0JBQWdCLElBQUkyRCxjQUFjN0osU0FBU2UsUUFBUVQsTUFBTVUsWUFBWTRIO0lBRTNFLE9BQU8xQztBQUNUO0FBRU8sU0FBUzVILG1DQUFtQ3dMLGlCQUFpQixFQUFFOUosT0FBTztJQUMzRSxNQUFNLEVBQUUrSixhQUFhLEVBQUUsR0FBRzFKLGlCQUFRLEVBQzVCQyxPQUFPd0osbUJBQ1AvSSxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiSSxPQUFPdEQsMEJBQTBCZ00sbUJBQW1COUosVUFDcERDLE9BQU9mLDBCQUEwQjRLLG1CQUFtQjlKO0lBRTFEQSxVQUFVO0lBRVYsTUFBTWdLLGdCQUFnQixJQUFJRCxjQUFjL0osU0FBU2UsUUFBUVQsTUFBTVUsWUFBWUksTUFBTW5CO0lBRWpGLE9BQU8rSjtBQUNUO0FBRU8sU0FBU2hPLHFDQUFxQ2lPLGtCQUFrQixFQUFFakssT0FBTztJQUM5RSxNQUFNNEIsT0FBTzdGLDJCQUEyQmtPLG9CQUFvQmpLLFVBQ3REcUcsV0FBVzdKLCtCQUErQnlOLG9CQUFvQmpLLFVBQzlEa0ssaUJBQWtCdEksUUFBUXlFO0lBRWhDLE9BQU82RDtBQUNUO0FBRU8sU0FBUzNMLHVDQUF1QzRMLG1CQUFtQixFQUFFbkssT0FBTztJQUNqRixNQUFNLEVBQUVvSyxlQUFlLEVBQUUsR0FBRy9KLGlCQUFRLEVBQzlCQyxPQUFPNkoscUJBQ1BwSixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiZixPQUFPZCw0QkFBNEJnTCxxQkFBcUJuSyxVQUN4RFMsYUFBYTdELGtDQUFrQ3VOLHFCQUFxQm5LLFVBQ3BFVyxjQUFjbkgsbUNBQW1DMlEscUJBQXFCbks7SUFFNUVBLFVBQVU7SUFFVixNQUFNcUssa0JBQWtCLElBQUlELGdCQUFnQnBLLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU1RLFlBQVlFO0lBRWpHLE9BQU8wSjtBQUNUO0FBRU8sU0FBU2pRLHVDQUF1Q2tRLG1CQUFtQixFQUFFdEssT0FBTztJQUNqRixNQUFNLEVBQUV1SyxlQUFlLEVBQUUsR0FBR2xLLGlCQUFRLEVBQzlCQyxPQUFPZ0sscUJBQ1B2SixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNieUIsT0FBT3BNLDRCQUE0QmlVLHFCQUFxQnRLLFVBQ3hENkQsUUFBUWpQLDZCQUE2QjBWLHFCQUFxQnRLO0lBRWhFQSxVQUFVO0lBRVYsTUFBTTBCLGtCQUFrQixJQUFJNkksZ0JBQWdCdkssU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXlCLE1BQU1vQjtJQUVyRixPQUFPbkM7QUFDVDtBQUVPLFNBQVN0Tix5Q0FBeUNvVyxvQkFBb0IsRUFBRXhLLE9BQU87SUFDcEYsTUFBTSxFQUFFeUssZ0JBQWdCLEVBQUUsR0FBR3BLLGlCQUFRLEVBQy9CQyxPQUFPa0ssc0JBQ1B6SixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNid0YsVUFBVWdFLHFCQUFxQkUsU0FBUyxJQUN4Q3RKLE9BQU81RCw2QkFBNkJnTixzQkFBc0J4SztJQUVoRUEsVUFBVTtJQUVWLE1BQU0ySyxtQkFBbUIsSUFBSUYsaUJBQWlCekssU0FBU2UsUUFBUVQsTUFBTVUsWUFBWUksTUFBTW9GO0lBRXZGLE9BQU9tRTtBQUNUO0FBRU8sU0FBUzVNLHlDQUF5QzZNLG9CQUFvQixFQUFFQyxjQUFjLEVBQUVDLGVBQWU7SUFDNUcsTUFBTSxFQUFFQyxnQkFBZ0IsRUFBRSxHQUFHMUssaUJBQVEsRUFDL0JDLE9BQU9zSyxzQkFDUDVLLFVBQVU4SyxpQkFDVi9KLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCMEssV0FBVztRQUNUSDtRQUNBQztLQUNELEVBQ0Q5SixhQUFhLE1BQ2JpSyxhQUFhN04sbUNBQW1Dd04sc0JBQXNCQyxpQkFDdEVLLGtCQUFrQmpSLHdDQUF3QzJRLHNCQUFzQkUsa0JBQ2hGSyxtQkFBbUIsSUFBSUosaUJBQWlCQyxVQUFVakssUUFBUVQsTUFBTVUsWUFBWWlLLFlBQVlDO0lBRTlGLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTdlMsMkNBQTJDd1MscUJBQXFCLEVBQUVwTCxPQUFPO0lBQ3ZGLE1BQU0sRUFBRXFMLGlCQUFpQixFQUFFLEdBQUdoTCxpQkFBUSxFQUNoQ0MsT0FBTzhLLHVCQUNQckssU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYnNLLGNBQWNqUCxxQ0FBcUMrTyx1QkFBdUJwTCxVQUMxRXVMLGVBQWVwUyxzQ0FBc0NpUyx1QkFBdUJwTDtJQUVsRkEsVUFBVTtJQUVWLE1BQU13TCxvQkFBb0IsSUFBSUgsa0JBQWtCckwsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXNLLGFBQWFDO0lBRWhHLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTalAsMkNBQTJDa1AscUJBQXFCLEVBQUV6TCxPQUFPO0lBQ3ZGLE1BQU0sRUFBRTBMLGlCQUFpQixFQUFFLEdBQUdyTCxpQkFBUSxFQUNoQ0MsT0FBT21MLHVCQUNQMUssU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYjJLLGFBQWE5UCxvQ0FBb0M0UCx1QkFBdUJ6TDtJQUU5RUEsVUFBVTtJQUVWLE1BQU00TCxvQkFBb0IsSUFBSUYsa0JBQWtCMUwsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWTJLO0lBRW5GLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTN1gsMkNBQTJDOFgscUJBQXFCLEVBQUU3TCxPQUFPO0lBQ3ZGLE1BQU0sRUFBRThMLGlCQUFpQixFQUFFLEdBQUd6TCxpQkFBUSxFQUNoQ0MsT0FBT3VMLHVCQUNQN0ssYUFBYSxNQUNiZixPQUFPdEIsOEJBQThCa04sdUJBQXVCN0wsVUFDNURTLGFBQWE5RCxvQ0FBb0NrUCx1QkFBdUI3TCxVQUN4RVcsY0FBY3RILHFDQUFxQ3dTLHVCQUF1QjdMLFVBQzFFK0wsdUJBQXVCaFQsOENBQThDOFMsdUJBQXVCN0wsVUFDNUZnTSwwQkFBMEJDLElBQUFBLCtEQUF1RCxFQUFDaE0sTUFBTVEsWUFBWUUsY0FDcEdJLFNBQVNpTCx5QkFBMEIsR0FBRztJQUU1Q2hNLFVBQVU7SUFFVixNQUFNa00sb0JBQW9CLElBQUlKLGtCQUFrQjlMLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU1RLFlBQVlFLGFBQWFvTDtJQUVsSCxPQUFPRztBQUNUO0FBRU8sU0FBUzlULDZDQUE2QytULHNCQUFzQixFQUFFbk0sT0FBTztJQUMxRixNQUFNLEVBQUVvTSxrQkFBa0IsRUFBRSxHQUFHL0wsaUJBQVEsRUFDakNFLE9BQU9uSiwrQkFBK0IrVSx3QkFBd0JuTSxVQUM5RHFNLGFBQWF4VSxxQ0FBcUNzVSx3QkFBd0JuTSxVQUMxRXNNLDJCQUEyQkMsSUFBQUEscURBQTZDLEVBQUNoTSxNQUFNOEwsYUFDL0UvTCxPQUFPNkwsd0JBQ1BwTCxTQUFTdUwsMEJBQ1R0TCxhQUFhO0lBRW5CaEIsVUFBVTtJQUVWLE1BQU15QixxQkFBcUIsSUFBSTJLLG1CQUFtQnBNLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlULE1BQU04TDtJQUUzRixPQUFPNUs7QUFDVDtBQUVPLFNBQVM1Tiw2Q0FBNkMyWSxzQkFBc0IsRUFBRXhNLE9BQU87SUFDMUYsTUFBTSxFQUFFeU0sa0JBQWtCLEVBQUUsR0FBR3BNLGlCQUFRLEVBQ2pDQyxPQUFPa00sd0JBQ1B6TCxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiSSxPQUFPN0QsK0JBQStCaVAsd0JBQXdCeE0sVUFDOUR3RyxVQUFValAsa0NBQWtDaVYsd0JBQXdCeE0sVUFDcEV1QixZQUFZcEcsb0NBQW9DcVIsd0JBQXdCeE07SUFFOUVBLFVBQVU7SUFFVixNQUFNME0scUJBQXFCLElBQUlELG1CQUFtQnpNLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlJLE1BQU1vRixTQUFTakY7SUFFcEcsT0FBT21MO0FBQ1Q7QUFFTyxTQUFTbFMsNkNBQTZDbVMsc0JBQXNCLEVBQUUzTSxPQUFPO0lBQzFGLE1BQU0sRUFBRTRNLGtCQUFrQixFQUFFLEdBQUd2TSxpQkFBUSxFQUNqQ0MsT0FBT3FNLHdCQUNQNUwsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYnlCLE9BQU9uTSwrQkFBK0JxVyx3QkFBd0IzTSxVQUM5RG1ILFFBQVFuSixnQ0FBZ0MyTyx3QkFBd0IzTTtJQUV0RUEsVUFBVTtJQUVWLE1BQU0yQixxQkFBcUIsSUFBSWlMLG1CQUFtQjVNLFNBQVNlLFFBQVFULE1BQU1VLFlBQVl5QixNQUFNMEU7SUFFM0YsT0FBT3hGO0FBQ1Q7QUFFTyxTQUFTak0sNkNBQTZDbVgsc0JBQXNCLEVBQUU3TSxPQUFPO0lBQzFGLE1BQU0sRUFBRThNLGtCQUFrQixFQUFFLEdBQUd6TSxpQkFBUSxFQUNqQ0MsT0FBT3VNLHdCQUNQOUwsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYk8sWUFBWWpHLG9DQUFvQ3VSLHdCQUF3QjdNLFVBQ3hFK00scUJBQXFCLElBQUlELG1CQUFtQjlNLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlPO0lBRXJGLE9BQU93TDtBQUNUO0FBRU8sU0FBU2pVLCtDQUErQ2tVLHVCQUF1QixFQUFFaE4sT0FBTztJQUM3RixNQUFNLEVBQUVpTixtQkFBbUIsRUFBRSxHQUFHNU0saUJBQVEsRUFDbENDLE9BQU8wTSx5QkFDUGpNLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JmLE9BQU9sQixnQ0FBZ0NpTyx5QkFBeUJoTixVQUNoRTBGLFdBQVd6TSxvQ0FBb0MrVCx5QkFBeUJoTjtJQUU5RUEsVUFBVTtJQUVWLE1BQU1rTixzQkFBc0IsSUFBSUQsb0JBQW9Cak4sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWYsTUFBTXlGO0lBRTdGLE9BQU93SDtBQUNUO0FBRU8sU0FBU3ZOLCtDQUErQ3dOLHVCQUF1QixFQUFFbk4sT0FBTztJQUM3RixNQUFNLEVBQUVvTixtQkFBbUIsRUFBRSxHQUFHL00saUJBQVEsRUFDbENDLE9BQU82TSx5QkFDUHBNLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JmLE9BQU9aLGdDQUFnQzhOLHlCQUF5Qm5OLFVBQ2hFK0YsV0FBV2xHLG9DQUFvQ3NOLHlCQUF5Qm5OLFVBQ3hFVyxjQUFjakgsdUNBQXVDeVQseUJBQXlCbk47SUFFcEZBLFVBQVU7SUFFVixNQUFNcU4sc0JBQXNCLElBQUlELG9CQUFvQnBOLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU04RixVQUFVcEY7SUFFdkcsT0FBTzBNO0FBQ1Q7QUFFTyxTQUFTeGEsK0NBQStDeWEsdUJBQXVCLEVBQUV0TixPQUFPO0lBQzdGLE1BQU0sRUFBRXVOLG1CQUFtQixFQUFFLEdBQUdsTixpQkFBUSxFQUNsQ0MsT0FBT2dOLHlCQUNQdk0sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYk8sWUFBWXhHLHFDQUFxQ3VTLHlCQUF5QnROLFVBQzFFd04sc0JBQXNCLElBQUlELG9CQUFvQnZOLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlPO0lBRXZGLE9BQU9pTTtBQUNUO0FBRU8sU0FBUzFhLGlEQUFpRDJhLHdCQUF3QixFQUFFek4sT0FBTztJQUNoRyxNQUFNLEVBQUUwTixvQkFBb0IsRUFBRSxHQUFHck4saUJBQVEsRUFDbkNDLE9BQU9tTiwwQkFDUDFNLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JJLE9BQU8vRCxpQ0FBaUNvUSwwQkFBMEJ6TixVQUNsRUMsT0FBT3pCLGlDQUFpQ2lQLDBCQUEwQnpOLFVBQ2xFc0QsYUFBYXJPLHVDQUF1Q3dZLDBCQUEwQnpOLFVBQzlFMk4sdUJBQXVCLElBQUlELHFCQUFxQjFOLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlJLE1BQU1uQixNQUFNcUQ7SUFFckcsT0FBT3FLO0FBQ1Q7QUFFTyxTQUFTOVksaURBQWlEK1ksd0JBQXdCLEVBQUU1TixPQUFPO0lBQ2hHLE1BQU0sRUFBRTZOLG9CQUFvQixFQUFFLEdBQUd4TixpQkFBUSxFQUNuQ0MsT0FBT3NOLDBCQUNQN00sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYmYsT0FBT3JCLGlDQUFpQ2dQLDBCQUEwQjVOLFVBQ2xFVyxjQUFjckgsd0NBQXdDc1UsMEJBQTBCNU4sVUFDaEYySCxZQUFZNVMsc0NBQXNDNlksMEJBQTBCNU47SUFFbEZBLFVBQVU7SUFFVixNQUFNOE4sdUJBQXVCLElBQUlELHFCQUFxQjdOLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU1VLGFBQWFnSDtJQUU1RyxPQUFPbUc7QUFDVDtBQUVPLFNBQVN2TyxtREFBbUR3Tyx5QkFBeUIsRUFBRS9OLE9BQU87SUFDbkcsTUFBTSxFQUFFZ08scUJBQXFCLEVBQUUsR0FBRzNOLGlCQUFRLEVBQ3BDQyxPQUFPeU4sMkJBQ1BoTixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiK0gsYUFBYXZKLHdDQUF3Q3VPLDJCQUEyQi9OO0lBRXRGQSxVQUFVO0lBRVYsTUFBTWlPLHdCQUF3QixJQUFJRCxzQkFBc0JoTyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZK0g7SUFFM0YsT0FBT2tGO0FBQ1Q7QUFFTyxTQUFTamIsbURBQW1Ea2IseUJBQXlCLEVBQUVsTyxPQUFPO0lBQ25HLE1BQU0sRUFBRW1PLHFCQUFxQixFQUFFLEdBQUc5TixpQkFBUSxFQUNwQ0MsT0FBTzROLDJCQUNQbk4sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYnVILGFBQWF0Vix3Q0FBd0NpYiwyQkFBMkJsTztJQUV0RkEsVUFBVTtJQUVWLE1BQU1vTyx3QkFBd0IsSUFBSUQsc0JBQXNCbk8sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXVIO0lBRTNGLE9BQU82RjtBQUNUO0FBRU8sU0FBU3pTLG1EQUFtRDBTLHlCQUF5QixFQUFFeEQsY0FBYyxFQUFFQyxlQUFlO0lBQzNILE1BQU0sRUFBRXdELHFCQUFxQixFQUFFLEdBQUdqTyxpQkFBUSxFQUNwQ0MsT0FBTytOLDJCQUNQck8sVUFBVThLLGlCQUNWL0osU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUIwSyxXQUFXO1FBQ1RIO1FBQ0FDO0tBQ0QsRUFDRDlKLGFBQWEsTUFDYnVOLFNBQVMxVCxvQ0FBb0N3VCwyQkFBMkJ4RCxnQkFBZ0JDLGtCQUN4RjBELGtCQUFrQnJSLDZDQUE2Q2tSLDJCQUEyQnhELGlCQUMxRjRELHVCQUF1QnpVLGtEQUFrRHFVLDJCQUEyQnZELGtCQUNwRzRELHdCQUF3QixJQUFJSixzQkFBc0J0RCxVQUFVakssUUFBUVQsTUFBTVUsWUFBWXVOLFFBQVFDLGlCQUFpQkM7SUFFckgsT0FBT0M7QUFDVDtBQUVPLFNBQVNqYixxREFBcURrYiwwQkFBMEIsRUFBRTNPLE9BQU87SUFDdEcsTUFBTSxFQUFFNE8sc0JBQXNCLEVBQUUsR0FBR3ZPLGlCQUFRLEVBQ3JDQyxPQUFPcU8sNEJBQ1A1TixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiZixPQUFPeEIsbUNBQW1Da1EsNEJBQTRCM08sVUFDdEVXLGNBQWN2SCwwQ0FBMEN1Viw0QkFBNEIzTyxVQUNwRnFKLGNBQWMxViwwQ0FBMENnYiw0QkFBNEIzTztJQUUxRkEsVUFBVTtJQUVWLE1BQU02Tyx5QkFBeUIsSUFBSUQsdUJBQXVCNU8sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWYsTUFBTVUsYUFBYTBJO0lBRWhILE9BQU93RjtBQUNUO0FBRU8sU0FBU3JZLHVEQUF1RHNZLDJCQUEyQixFQUFFOU8sT0FBTztJQUN6RyxNQUFNLEVBQUUrTyx1QkFBdUIsRUFBRSxHQUFHMU8saUJBQVEsRUFDdENDLE9BQU93Tyw2QkFDUC9OLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2IySSxXQUFXcFQsd0NBQXdDdVksNkJBQTZCOU8sVUFDaEZ3QyxlQUFlM0wsNENBQTRDaVksNkJBQTZCOU87SUFFOUZBLFVBQVU7SUFFVixNQUFNZ1AsMEJBQTBCLElBQUlELHdCQUF3Qi9PLFNBQVNlLFFBQVFULE1BQU1VLFlBQVkySSxVQUFVbkg7SUFFekcsT0FBT3dNO0FBQ1Q7QUFFTyxTQUFTM1gsaUJBQWlCMEksUUFBUSxFQUFFQyxPQUFPO0lBQ2hELE1BQU1pUCxXQUFXbFAsU0FBU21QLFdBQVcsSUFDL0IzTyxPQUFPME8sVUFBVyxHQUFHO0lBRTNCLE9BQU8xTztBQUNUO0FBRU8sU0FBU3RCLGlCQUFpQmdDLFFBQVEsRUFBRWpCLE9BQU87SUFDaEQsTUFBTUMsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTeEgsa0JBQWtCb0osUUFBUSxFQUFFN0IsT0FBTztJQUNqRCxJQUFJK0IsUUFBUTtJQUVaLE1BQU0rQixZQUFZakMsU0FBU3NOLFlBQVk7SUFFdkMsSUFBSXJMLGNBQWMsTUFBTTtRQUN0Qi9CLFFBQVF2SixtQkFBbUJzTCxXQUFXOUQ7SUFDeEM7SUFFQSxPQUFPK0I7QUFDVDtBQUVPLFNBQVN4SixtQkFBbUIySyxTQUFTLEVBQUVsRCxPQUFPO0lBQ25ELElBQUkrQixRQUFRO0lBRVosTUFBTStCLFlBQVlaLFVBQVVpTSxZQUFZO0lBRXhDLElBQUlyTCxjQUFjLE1BQU07UUFDdEIvQixRQUFRdkosbUJBQW1Cc0wsV0FBVzlEO0lBQ3hDO0lBRUEsT0FBTytCO0FBQ1Q7QUFFTyxTQUFTaE0sbUJBQW1COEwsUUFBUSxFQUFFN0IsT0FBTztJQUNsRCxNQUFNb1AsYUFBYXZOLFNBQVN3TixhQUFhLElBQ25Dck4sU0FBU2xNLHFCQUFxQnNaLFlBQVlwUDtJQUVoRCxPQUFPZ0M7QUFDVDtBQUVPLFNBQVNuTSxvQkFBb0JxTixTQUFTLEVBQUVsRCxPQUFPO0lBQ3BELE1BQU1vUCxhQUFhbE0sVUFBVW1NLGFBQWEsSUFDcENyTixTQUFTbE0scUJBQXFCc1osWUFBWXBQO0lBRWhELE9BQU9nQztBQUNUO0FBRU8sU0FBU3RKLG9CQUFvQjBMLFVBQVUsRUFBRXBFLE9BQU87SUFDckQsTUFBTThELFlBQVlNLFdBQVcrSyxZQUFZLElBQ25DcE4sUUFBUXZKLG1CQUFtQnNMLFdBQVc5RDtJQUU1QyxPQUFPK0I7QUFDVDtBQUVPLFNBQVNuTSxvQkFBb0J3TyxVQUFVLEVBQUVwRSxPQUFPO0lBQ3JELE1BQU0wQyxZQUFZMEIsV0FBV2tMLFlBQVksSUFDbkMxTSxRQUFRak4sbUJBQW1CK00sV0FBVzFDO0lBRTVDLE9BQU80QztBQUNUO0FBRU8sU0FBU2hELHFCQUFxQnFCLFFBQVEsRUFBRWpCLE9BQU87SUFDcEQsSUFBSStGLFdBQVc7SUFFZixNQUFNSCxlQUFlM0UsU0FBU3NPLGVBQWU7SUFFN0MsSUFBSTNKLGlCQUFpQixNQUFNO1FBQ3pCRyxXQUFXakcseUJBQXlCOEYsY0FBYzVGO0lBQ3BEO0lBRUEsT0FBTytGO0FBQ1Q7QUFFTyxTQUFTOU4scUJBQXFCNEosUUFBUSxFQUFFN0IsT0FBTztJQUNwRCxNQUFNd1AsZUFBZTNOLFNBQVM0TixlQUFlLElBQ3ZDeE4sV0FBV2pLLHlCQUF5QndYLGNBQWN4UDtJQUV4RCxPQUFPaUM7QUFDVDtBQUVPLFNBQVNsUCxxQkFBcUIyUixXQUFXLEVBQUUxRSxPQUFPO0lBQ3ZELE1BQU1tRSxRQUFRdlIscUJBQXFCOFIsYUFBYTFFLFVBQzFDeUQsUUFBUXZOLHFCQUFxQndPLGFBQWExRSxVQUMxQ3dGLFVBQVVySCx1QkFBdUJ1RyxhQUFhMUUsVUFDOUNvSSxhQUFhOVUsMEJBQTBCb1IsYUFBYTFFLFVBQ3BEK0UsUUFBU1osU0FBU1YsU0FBUytCLFdBQVc0QztJQUU1QyxPQUFPckQ7QUFDVDtBQUVPLFNBQVNuUyxxQkFBcUI4UixXQUFXLEVBQUUxRSxPQUFPO0lBQ3ZELElBQUltRSxRQUFRO0lBRVosTUFBTUYsWUFBWVMsWUFBWWdMLFlBQVk7SUFFMUMsSUFBSXpMLGNBQWMsTUFBTTtRQUN0QkUsUUFBUXhSLG1CQUFtQnNSLFdBQVdqRTtJQUN4QztJQUVBLE9BQU9tRTtBQUNUO0FBRU8sU0FBU2pPLHFCQUFxQndPLFdBQVcsRUFBRTFFLE9BQU87SUFDdkQsSUFBSXlELFFBQVE7SUFFWixNQUFNVCxZQUFZMEIsWUFBWWlMLFlBQVk7SUFFMUMsSUFBSTNNLGNBQWMsTUFBTTtRQUN0QlMsUUFBUXhOLG1CQUFtQitNLFdBQVdoRDtJQUN4QztJQUVBLE9BQU95RDtBQUNUO0FBRU8sU0FBUzdGLHFCQUFxQjZILFlBQVksRUFBRXpGLE9BQU87SUFDeEQsSUFBSW9CLE9BQU87SUFFWCxNQUFNSCxXQUFXd0UsYUFBYW1LLFdBQVc7SUFFekMsSUFBSTNPLGFBQWEsTUFBTTtRQUNyQkcsT0FBT3ZELGlCQUFpQm9ELFVBQVVqQjtJQUNwQztJQUVBLE9BQU9vQjtBQUNUO0FBRU8sU0FBU3BDLHFCQUFxQnlHLFlBQVksRUFBRXpGLE9BQU87SUFDeEQsTUFBTUMsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTWCxxQkFBcUJzRyxZQUFZLEVBQUU1RixPQUFPO0lBQ3hELE1BQU1DLE9BQU87SUFFYixPQUFPQTtBQUNUO0FBRU8sU0FBUy9JLHFCQUFxQm9RLGFBQWEsRUFBRXRILE9BQU87SUFDekQsTUFBTU8sT0FBTytHLGNBQWN1SSxPQUFPO0lBRWxDLE9BQU90UDtBQUNUO0FBRU8sU0FBUzlFLHNCQUFzQjRGLFFBQVEsRUFBRXJCLE9BQU87SUFDckQsSUFBSXVCLFlBQVk7SUFFaEIsTUFBTXVGLGdCQUFnQnpGLFNBQVN5TyxnQkFBZ0I7SUFFL0MsSUFBSWhKLGtCQUFrQixNQUFNO1FBQzFCdkYsWUFBWS9GLDJCQUEyQnNMLGVBQWU5RztJQUN4RDtJQUVBLE9BQU91QjtBQUNUO0FBRU8sU0FBU3pILHNCQUFzQnVILFFBQVEsRUFBRXJCLE9BQU87SUFDckQsSUFBSXdCLFlBQVk7SUFFaEIsTUFBTTRGLGdCQUFnQi9GLFNBQVMwTyxnQkFBZ0I7SUFFL0MsSUFBSTNJLGtCQUFrQixNQUFNO1FBQzFCNUYsWUFBWTNILDJCQUEyQnVOLGVBQWVwSDtJQUN4RDtJQUVBLE9BQU93QjtBQUNUO0FBRU8sU0FBU3JLLHNCQUFzQm1RLGFBQWEsRUFBRXRILE9BQU87SUFDMUQsTUFBTU8sT0FBTytHLGNBQWN1SSxPQUFPO0lBRWxDLE9BQU90UDtBQUNUO0FBRU8sU0FBUzlDLHNCQUFzQmdLLGFBQWEsRUFBRXpILE9BQU87SUFDMUQsSUFBSW9CLE9BQU87SUFFWCxNQUFNSCxXQUFXd0csY0FBY21JLFdBQVc7SUFFMUMsSUFBSTNPLGFBQWEsTUFBTTtRQUNyQkcsT0FBT3ZELGlCQUFpQm9ELFVBQVVqQjtJQUNwQztJQUVBLE9BQU9vQjtBQUNUO0FBRU8sU0FBU3ZDLHNCQUFzQjRJLGFBQWEsRUFBRXpILE9BQU87SUFDMUQsTUFBTUMsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTcEQsdUJBQXVCa0QsUUFBUSxFQUFFQyxPQUFPO0lBQ3RELE1BQU1TLGFBQWE7SUFFbkIsT0FBT0E7QUFDVDtBQUVPLFNBQVM5SCx1QkFBdUJvSCxRQUFRLEVBQUVDLE9BQU87SUFDdEQsTUFBTVUsYUFBYTtJQUVuQixPQUFPQTtBQUNUO0FBRU8sU0FBUzVJLHVCQUF1QmlJLFFBQVEsRUFBRUMsT0FBTztJQUN0RCxNQUFNZ1EsaUJBQWlCalEsU0FBU2tRLGlCQUFpQixJQUMzQ3pQLGFBQWF3UCxnQkFBaUIsR0FBRztJQUV2QyxPQUFPeFA7QUFDVDtBQUVPLFNBQVNwTix1QkFBdUJ5TyxRQUFRLEVBQUU3QixPQUFPO0lBQ3RELE1BQU13SSxpQkFBaUIzRyxTQUFTcU8saUJBQWlCLElBQzNDaE8sYUFBYS9PLDZCQUE2QnFWLGdCQUFnQnhJO0lBRWhFLE9BQU9rQztBQUNUO0FBRU8sU0FBU2pPLHVCQUF1QmlQLFNBQVMsRUFBRWxELE9BQU87SUFDdkQsTUFBTTRHLGdCQUFnQjFELFVBQVVpTixnQkFBZ0IsSUFDOUNoTixZQUFZalAsMkJBQTJCMFMsZUFBZTVHO0lBRXhELE9BQU9tRDtBQUNUO0FBRU8sU0FBU3hJLHVCQUF1QnVJLFNBQVMsRUFBRWxELE9BQU87SUFDdkQsSUFBSXFELFlBQVk7SUFFaEIsTUFBTTRELGdCQUFnQi9ELFVBQVVrTixnQkFBZ0I7SUFFaEQsSUFBSW5KLGtCQUFrQixNQUFNO1FBQzFCNUQsWUFBWXpJLDJCQUEyQnFNLGVBQWVqSDtJQUN4RDtJQUVBLE9BQU9xRDtBQUNUO0FBRU8sU0FBU2xGLHVCQUF1QnVHLFdBQVcsRUFBRTFFLE9BQU87SUFDekQsSUFBSXdGLFVBQVU7SUFFZCxNQUFNRixjQUFjWixZQUFZMkwsY0FBYztJQUU5QyxJQUFJL0ssZ0JBQWdCLE1BQU07UUFDeEJFLFVBQVVwSCx1QkFBdUJrSCxhQUFhdEY7SUFDaEQ7SUFFQSxPQUFPd0Y7QUFDVDtBQUVPLFNBQVN2SCx1QkFBdUJnSixhQUFhLEVBQUVqSCxPQUFPO0lBQzNELE1BQU1zUSxZQUFZckosY0FBY3NKLFlBQVksSUFDdENwSixRQUFRakosbUJBQW1Cb1MsV0FBV3RRO0lBRTVDLE9BQU9tSDtBQUNUO0FBRU8sU0FBUzdQLHVCQUF1QnVSLGNBQWMsRUFBRTdJLE9BQU87SUFDNUQsTUFBTWdRLGlCQUFpQm5ILGVBQWVvSCxpQkFBaUIsSUFDakQxUCxPQUFPeVAsZ0JBQWlCLEdBQUc7SUFFakMsT0FBT3pQO0FBQ1Q7QUFFTyxTQUFTcEssdUJBQXVCNlMsY0FBYyxFQUFFaEosT0FBTztJQUM1RCxNQUFNc0MsV0FBVzBHLGVBQWV3SCxXQUFXLElBQ3JDL04sT0FBT3JNLGlCQUFpQmtNLFVBQVV0QztJQUV4QyxPQUFPeUM7QUFDVDtBQUVPLFNBQVN2Tix3QkFBd0JnTyxTQUFTLEVBQUVsRCxPQUFPO0lBQ3hELE1BQU1zRCxhQUFhLEVBQUU7SUFFckIsT0FBT0E7QUFDVDtBQUVPLFNBQVM3Six3QkFBd0JzRyxRQUFRLEVBQUVDLE9BQU87SUFDdkQsTUFBTVcsY0FBYztJQUVwQixPQUFPQTtBQUNUO0FBRU8sU0FBU3BILHdCQUF3QjBILFFBQVEsRUFBRWpCLE9BQU87SUFDdkQsTUFBTVcsY0FBYztJQUVwQixPQUFPQTtBQUNUO0FBRU8sU0FBU3BNLHdCQUF3QnVQLFNBQVMsRUFBRTlELE9BQU87SUFDeEQsTUFBTTBJLGlCQUFpQjVFLFVBQVUyTSxpQkFBaUIsSUFDNUN6TSxhQUFhMVAsNkJBQTZCb1UsZ0JBQWdCMUk7SUFFaEUsT0FBT2dFO0FBQ1Q7QUFFTyxTQUFTN1Asd0JBQXdCaVEsVUFBVSxFQUFFcEUsT0FBTztJQUN6RCxNQUFNNEcsZ0JBQWdCeEMsV0FBVytMLGdCQUFnQixJQUMzQ2hOLFlBQVlqUCwyQkFBMkIwUyxlQUFlNUc7SUFFNUQsT0FBT21EO0FBQ1Q7QUFFTyxTQUFTM0wsd0JBQXdCOE8sWUFBWSxFQUFFdEcsT0FBTztJQUMzRCxNQUFNd0csVUFBVUYsYUFBYW9FLFNBQVM7SUFFdEMsT0FBT2xFO0FBQ1Q7QUFFTyxTQUFTbEosd0JBQXdCb1QsZUFBZSxFQUFFMVEsT0FBTztJQUM5RCxJQUFJb0IsT0FBTztJQUVYLE1BQU1ILFdBQVd5UCxnQkFBZ0JkLFdBQVc7SUFFNUMsSUFBSTNPLGFBQWEsTUFBTTtRQUNyQkcsT0FBT3ZELGlCQUFpQm9ELFVBQVVqQjtJQUNwQztJQUVBLE9BQU9vQjtBQUNUO0FBRU8sU0FBUzFDLHdCQUF3QmdTLGVBQWUsRUFBRTFRLE9BQU87SUFDOUQsTUFBTUMsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTckoseUJBQXlCMEwsUUFBUSxFQUFFdEMsT0FBTztJQUN4RCxNQUFNeUosbUJBQW1CbkgsU0FBU3FPLG1CQUFtQixJQUMvQ25PLGVBQWUxTCxpQ0FBaUMyUyxrQkFBa0J6SjtJQUV4RSxPQUFPd0M7QUFDVDtBQUVPLFNBQVM5UCx5QkFBeUJnUixTQUFTLEVBQUUxRCxPQUFPO0lBQ3pELE1BQU00USxrQkFBa0JsTixVQUFVbU4sa0JBQWtCLElBQzlDak4sY0FBY25SLCtCQUErQm1lLGlCQUFpQjVRO0lBRXBFLE9BQU80RDtBQUNUO0FBRU8sU0FBU3JJLHlCQUF5QjRKLFdBQVcsRUFBRW5GLE9BQU87SUFDM0QsSUFBSXVCLFlBQVk7SUFFaEIsTUFBTXVGLGdCQUFnQjNCLFlBQVkySyxnQkFBZ0I7SUFFbEQsSUFBSWhKLGtCQUFrQixNQUFNO1FBQzFCdkYsWUFBWS9GLDJCQUEyQnNMLGVBQWU5RztJQUN4RDtJQUVBLE9BQU91QjtBQUNUO0FBRU8sU0FBUzNILHlCQUF5QnVMLFdBQVcsRUFBRW5GLE9BQU87SUFDM0QsTUFBTXlCLHFCQUFxQjtJQUUzQixPQUFPQTtBQUNUO0FBRU8sU0FBU3pMLHlCQUF5QnNRLFlBQVksRUFBRXRHLE9BQU87SUFDNUQsTUFBTThRLGVBQWV4SyxhQUFheUssZUFBZSxJQUMzQ3RLLFdBQVc1SSxpQkFBaUJpVCxjQUFjOVE7SUFFaEQsT0FBT3lHO0FBQ1Q7QUFFTyxTQUFTeFAseUJBQXlCd1MsZ0JBQWdCLEVBQUV6SixPQUFPO0lBQ2hFLE1BQU1nUix1QkFBdUJ2SCxpQkFBaUJ3SCxtQkFBbUIsSUFDM0QxUSxPQUFPeVEsc0JBQXVCLEdBQUc7SUFFdkMsT0FBT3pRO0FBQ1Q7QUFFTyxTQUFTNUMseUJBQXlCOEwsZ0JBQWdCLEVBQUV6SixPQUFPO0lBQ2hFLElBQUlvQixPQUFPO0lBRVgsTUFBTUgsV0FBV3dJLGlCQUFpQm1HLFdBQVc7SUFFN0MsSUFBSTNPLGFBQWEsTUFBTTtRQUNyQkcsT0FBT3ZELGlCQUFpQm9ELFVBQVVqQjtJQUNwQztJQUVBLE9BQU9vQjtBQUNUO0FBRU8sU0FBU3RDLHlCQUF5QjJLLGdCQUFnQixFQUFFekosT0FBTztJQUNoRSxJQUFJQyxPQUFPO0lBRVgsTUFBTWlSLFlBQVl6SCxpQkFBaUIwSCxXQUFXO0lBRTlDLElBQUlELGNBQWMsTUFBTTtRQUN0QmpSLE9BQU9iLGlCQUFpQjhSLFdBQVdsUjtJQUNyQztJQUVBLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTdkosMEJBQTBCZ04sU0FBUyxFQUFFMUQsT0FBTztJQUMxRCxJQUFJd0MsZUFBZTtJQUVuQixNQUFNaUgsbUJBQW1CL0YsVUFBVWlOLG1CQUFtQjtJQUV0RCxJQUFJbEgscUJBQXFCLE1BQU07UUFDN0JqSCxlQUFlMUwsaUNBQWlDMlMsa0JBQWtCeko7SUFDcEU7SUFFQSxPQUFPd0M7QUFDVDtBQUVPLFNBQVN6RiwwQkFBMEJtRyxTQUFTLEVBQUVsRCxPQUFPO0lBQzFELE1BQU1vUixtQkFBbUJsTyxVQUFVbU8sbUJBQW1CLElBQ3BEak8sZUFBZWxHLGlDQUFpQ2tVLGtCQUFrQnBSO0lBRXBFLE9BQU9vRDtBQUNUO0FBRU8sU0FBU3pNLDBCQUEwQitMLFNBQVMsRUFBRTFDLE9BQU87SUFDMUQsTUFBTXlKLG1CQUFtQi9HLFVBQVVpTyxtQkFBbUIsSUFDaERuTyxlQUFlMUwsaUNBQWlDMlMsa0JBQWtCeko7SUFFeEUsT0FBT3dDO0FBQ1Q7QUFFTyxTQUFTaFAsMEJBQTBCNFEsVUFBVSxFQUFFcEUsT0FBTztJQUMzRCxNQUFNc0UsY0FBYyxFQUFFO0lBRXRCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTaFIsMEJBQTBCb1IsV0FBVyxFQUFFMUUsT0FBTztJQUM1RCxJQUFJb0ksYUFBYTtJQUVqQixNQUFNRixpQkFBaUJ4RCxZQUFZNE0saUJBQWlCO0lBRXBELElBQUlwSixtQkFBbUIsTUFBTTtRQUMzQkUsYUFBYS9VLDZCQUE2QjZVLGdCQUFnQmxJO0lBQzVEO0lBRUEsT0FBT29JO0FBQ1Q7QUFFTyxTQUFTbE8sMEJBQTBCb00sWUFBWSxFQUFFdEcsT0FBTztJQUM3RCxNQUFNdVIsZ0JBQWdCakwsYUFBYWtMLGdCQUFnQixJQUM3QzlLLFlBQVk3SSxpQkFBaUIwVCxlQUFldlI7SUFFbEQsT0FBTzBHO0FBQ1Q7QUFFTyxTQUFTalMsMEJBQTBCcVMsYUFBYSxFQUFFOUcsT0FBTztJQUM5RCxJQUFJMkcsV0FBVztJQUVmLE1BQU1MLGVBQWVRLGNBQWMySyxlQUFlO0lBRWxELElBQUluTCxpQkFBaUIsTUFBTTtRQUN6QkssV0FBV25TLHlCQUF5QjhSLGNBQWN0RztJQUNwRDtJQUVBLE9BQU8yRztBQUNUO0FBRU8sU0FBUzdJLDBCQUEwQmdNLGlCQUFpQixFQUFFOUosT0FBTztJQUNsRSxNQUFNaUIsV0FBVzZJLGtCQUFrQjhGLFdBQVcsSUFDeEN4TyxPQUFPdkQsaUJBQWlCb0QsVUFBVWpCO0lBRXhDLE9BQU9vQjtBQUNUO0FBRU8sU0FBU2xDLDBCQUEwQjRLLGlCQUFpQixFQUFFOUosT0FBTztJQUNsRSxNQUFNRCxXQUFXK0osa0JBQWtCcUgsV0FBVyxJQUN4Q2xSLE9BQU9iLGlCQUFpQlcsVUFBVUM7SUFFeEMsT0FBT0M7QUFDVDtBQUVPLFNBQVNqRCwyQkFBMkJvSCxVQUFVLEVBQUVwRSxPQUFPO0lBQzVELE1BQU1vUixtQkFBbUJoTixXQUFXaU4sbUJBQW1CLElBQ2pEak8sZUFBZWxHLGlDQUFpQ2tVLGtCQUFrQnBSO0lBRXhFLE9BQU9vRDtBQUNUO0FBRU8sU0FBU3BQLDJCQUEyQjBRLFdBQVcsRUFBRTFFLE9BQU87SUFDN0QsTUFBTTZPLHlCQUF5Qm5iLHNDQUFzQ2dSLGFBQWExRSxVQUM1RThOLHVCQUF1QmhaLG9DQUFvQzRQLGFBQWExRSxVQUN4RThFLGNBQWUrSiwwQkFBMEJmO0lBRS9DLE9BQU9oSjtBQUNUO0FBRU8sU0FBU3JQLDJCQUEyQm1RLFlBQVksRUFBRTVGLE9BQU87SUFDOUQsTUFBTTBSLHFCQUFxQjlMLGFBQWErTCxxQkFBcUIsSUFDM0Q3TCxhQUFhNEwsb0JBQXFCLEdBQUc7SUFFdkMsT0FBTzVMO0FBQ1Q7QUFFTyxTQUFTdFEsMkJBQTJCOFIsYUFBYSxFQUFFdEgsT0FBTztJQUMvRCxNQUFNOEYsYUFBYXdCLGNBQWNzSyxhQUFhO0lBRTlDLE9BQU85TDtBQUNUO0FBRU8sU0FBUzFLLDJCQUEyQndMLGFBQWEsRUFBRTVHLE9BQU87SUFDL0QsSUFBSXVCLFlBQVk7SUFFaEIsTUFBTXVGLGdCQUFnQkYsY0FBY2tKLGdCQUFnQjtJQUVwRCxJQUFJaEosa0JBQWtCLE1BQU07UUFDMUJ2RixZQUFZL0YsMkJBQTJCc0wsZUFBZTlHO0lBQ3hEO0lBRUEsT0FBT3VCO0FBQ1Q7QUFFTyxTQUFTeEYsMkJBQTJCa08sa0JBQWtCLEVBQUVqSyxPQUFPO0lBQ3BFLElBQUk0QixPQUFPO0lBRVgsTUFBTWlRLDZCQUE2QjVILG1CQUFtQjZILFVBQVU7SUFFaEUsSUFBSUQsNEJBQTRCO1FBQzlCLE1BQU14USxXQUFXNEksb0JBQXFCLEdBQUc7UUFFekNySSxPQUFPOUYsaUJBQWlCdUYsVUFBVXJCO0lBQ3BDO0lBRUEsT0FBTzRCO0FBQ1Q7QUFFTyxTQUFTbEssNEJBQTRCcUksUUFBUSxFQUFFQyxPQUFPO0lBQzNELE1BQU1ZLGtCQUFrQmIsU0FBU2dTLGtCQUFrQjtJQUVuRCxPQUFPblI7QUFDVDtBQUVPLFNBQVN2Ryw0QkFBNEJnSCxRQUFRLEVBQUVyQixPQUFPO0lBQzNELElBQUkwQixrQkFBa0I7SUFFdEIsTUFBTTRJLHNCQUFzQmpKLFNBQVMyUSxzQkFBc0I7SUFFM0QsSUFBSTFILHdCQUF3QixNQUFNO1FBQ2hDNUksa0JBQWtCdEgsdUNBQXVDa1EscUJBQXFCdEs7SUFDaEY7SUFFQSxPQUFPMEI7QUFDVDtBQUVPLFNBQVMvSCw0QkFBNEJpTSxZQUFZLEVBQUU1RixPQUFPO0lBQy9ELE1BQU1XLGNBQWM7SUFFcEIsT0FBT0E7QUFDVDtBQUVPLFNBQVNwTCw0QkFBNEIrUixhQUFhLEVBQUV0SCxPQUFPO0lBQ2hFLE1BQU04RixhQUFhd0IsY0FBY3NLLGFBQWE7SUFFOUMsT0FBTzlMO0FBQ1Q7QUFFTyxTQUFTMVEsNEJBQTRCcVMsYUFBYSxFQUFFekgsT0FBTztJQUNoRSxNQUFNc0QsYUFBYSxFQUFFO0lBRXJCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTeEksNEJBQTRCa08sY0FBYyxFQUFFaEosT0FBTztJQUNqRSxNQUFNaVMsaUJBQWlCakosZUFBZThHLGdCQUFnQixJQUNoRHZPLFlBQVkvRiwyQkFBMkJ5VyxnQkFBZ0JqUztJQUU3RCxPQUFPdUI7QUFDVDtBQUVPLFNBQVN2Ryw0QkFBNEJxTixjQUFjLEVBQUVySSxPQUFPO0lBQ2pFLElBQUl1QjtJQUVKLE1BQU11RixnQkFBZ0J1QixlQUFleUgsZ0JBQWdCO0lBRXJELElBQUloSixrQkFBa0IsTUFBTTtRQUMxQnZGLFlBQVkvRiwyQkFBMkJzTCxlQUFlOUc7SUFDeEQ7SUFFQSxPQUFPdUI7QUFDVDtBQUVPLFNBQVN0Ryw0QkFBNEJpWCxjQUFjLEVBQUVsUyxPQUFPO0lBQ2pFLElBQUl1QixZQUFZO0lBRWhCLE1BQU11RixnQkFBZ0JvTCxlQUFlcEMsZ0JBQWdCO0lBRXJELElBQUloSixrQkFBa0IsTUFBTTtRQUMxQnZGLFlBQVkvRiwyQkFBMkJzTCxlQUFlOUc7SUFDeEQ7SUFFQSxPQUFPdUI7QUFDVDtBQUVPLFNBQVNsRyw0QkFBNEI4VyxjQUFjLEVBQUVuUyxPQUFPO0lBQ2pFLElBQUl1QixZQUFZO0lBRWhCLE1BQU11RixnQkFBZ0JxTCxlQUFlckMsZ0JBQWdCO0lBRXJELElBQUloSixrQkFBa0IsTUFBTTtRQUMxQnZGLFlBQVkvRiwyQkFBMkJzTCxlQUFlOUc7SUFDeEQ7SUFFQSxPQUFPdUI7QUFDVDtBQUVPLFNBQVNyRyw0QkFBNEI2TSxjQUFjLEVBQUUvSCxPQUFPO0lBQ2pFLE1BQU04RyxnQkFBZ0JpQixlQUFlK0gsZ0JBQWdCLElBQy9Ddk8sWUFBWS9GLDJCQUEyQnNMLGVBQWU5RztJQUU1RCxPQUFPdUI7QUFDVDtBQUVPLFNBQVNwQyw0QkFBNEJnTCxtQkFBbUIsRUFBRW5LLE9BQU87SUFDdEUsTUFBTUQsV0FBV29LLG9CQUFvQmdILFdBQVcsSUFDMUNsUixPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTNUosNEJBQTRCaVUsbUJBQW1CLEVBQUV0SyxPQUFPO0lBQ3RFLE1BQU1zQyxXQUFXZ0ksb0JBQW9Ca0csV0FBVyxJQUMxQy9OLE9BQU9yTSxpQkFBaUJrTSxVQUFVdEM7SUFFeEMsT0FBT3lDO0FBQ1Q7QUFFTyxTQUFTeEYsNkJBQTZCK0ksWUFBWSxFQUFFaEcsT0FBTztJQUNoRSxNQUFNb1IsbUJBQW1CcEwsYUFBYXFMLG1CQUFtQixJQUNuRGpPLGVBQWVsRyxpQ0FBaUNrVSxrQkFBa0JwUjtJQUV4RSxPQUFPb0Q7QUFDVDtBQUVPLFNBQVMxSCw2QkFBNkI0TixlQUFlLEVBQUV0SixPQUFPO0lBQ25FLElBQUl1QixZQUFZO0lBRWhCLE1BQU11RixnQkFBZ0J3QyxnQkFBZ0J3RyxnQkFBZ0I7SUFFdEQsSUFBSWhKLGtCQUFrQixNQUFNO1FBQzFCdkYsWUFBWS9GLDJCQUEyQnNMLGVBQWU5RztJQUN4RDtJQUVBLE9BQU91QixXQUFXLEdBQUc7QUFDdkI7QUFFTyxTQUFTeEgsNkJBQTZCdVAsZUFBZSxFQUFFdEosT0FBTztJQUNuRSxJQUFJb1MsYUFBYTtJQUVqQixPQUFPQTtBQUNUO0FBRU8sU0FBU3hkLDZCQUE2QjBWLG1CQUFtQixFQUFFdEssT0FBTztJQUN2RSxNQUFNMEQsWUFBWTRHLG9CQUFvQitILFlBQVksSUFDNUN4TyxRQUFRbFAsbUJBQW1CK08sV0FBVzFEO0lBRTVDLE9BQU82RDtBQUNUO0FBRU8sU0FBU3JHLDZCQUE2QmdOLG9CQUFvQixFQUFFeEssT0FBTztJQUN4RSxJQUFJb0IsT0FBTztJQUVYLE1BQU1ILFdBQVd1SixxQkFBcUJvRixXQUFXO0lBRWpELElBQUkzTyxhQUFhLE1BQU07UUFDckJHLE9BQU92RCxpQkFBaUJvRCxVQUFVakI7SUFDcEM7SUFFQSxPQUFPb0I7QUFDVDtBQUVPLFNBQVNoRiw4QkFBOEI0SixZQUFZLEVBQUVoRyxPQUFPO0lBQ2pFLE1BQU00SixvQkFBb0I1RCxhQUFhc00sb0JBQW9CLElBQ3JEQyxnQkFBZ0JwVyxtQ0FBbUN5TixtQkFBbUI1SjtJQUU1RSxPQUFPdVM7QUFDVDtBQUVPLFNBQVN2Yiw4QkFBOEI4UCxhQUFhLEVBQUU5RyxPQUFPO0lBQ2xFLElBQUl3QyxlQUFlO0lBRW5CLE1BQU1pSCxtQkFBbUIzQyxjQUFjNkosbUJBQW1CO0lBRTFELElBQUlsSCxxQkFBcUIsTUFBTTtRQUM3QmpILGVBQWUxTCxpQ0FBaUMyUyxrQkFBa0J6SjtJQUNwRTtJQUVBLE9BQU93QztBQUNUO0FBRU8sU0FBU3pMLDhCQUE4QnFRLGFBQWEsRUFBRXBILE9BQU87SUFDbEUsTUFBTXlKLG1CQUFtQnJDLGNBQWN1SixtQkFBbUIsSUFDcERuTyxlQUFlMUwsaUNBQWlDMlMsa0JBQWtCeko7SUFFeEUsT0FBT3dDO0FBQ1Q7QUFFTyxTQUFTOUYsOEJBQThCb0ssYUFBYSxFQUFFOUcsT0FBTztJQUNsRSxNQUFNLEVBQUUrSyxnQkFBZ0IsRUFBRSxHQUFHMUssaUJBQVEsRUFDL0I4SyxtQkFBbUJKLGlCQUFpQnlILGlCQUFpQixDQUFDMUwsZUFBZTlHLFVBQ3JFZ0gsZUFBZW1FLGtCQUFtQixHQUFHO0lBRTNDLE9BQU9uRTtBQUNUO0FBRU8sU0FBUzdSLDhCQUE4QmdVLGVBQWUsRUFBRW5KLE9BQU87SUFDcEUsTUFBTXNELGFBQWEsRUFBRTtJQUVyQixPQUFPQTtBQUNUO0FBRU8sU0FBUzVGLDhCQUE4QjhNLG9CQUFvQixFQUFFeEssT0FBTztJQUN6RSxJQUFJb0IsT0FBTztJQUVYLE1BQU1ILFdBQVd1SixxQkFBcUJvRixXQUFXO0lBRWpELElBQUkzTyxhQUFhLE1BQU07UUFDckJHLE9BQU92RCxpQkFBaUJvRCxVQUFVakI7SUFDcEM7SUFFQSxPQUFPb0I7QUFDVDtBQUVPLFNBQVN6Qyw4QkFBOEJrTixxQkFBcUIsRUFBRTdMLE9BQU87SUFDMUUsTUFBTUQsV0FBVzhMLHNCQUFzQnNGLFdBQVcsSUFDNUNsUixPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTdkYsK0JBQStCMkcsUUFBUSxFQUFFckIsT0FBTztJQUM5RCxJQUFJMkIscUJBQXFCO0lBRXpCLE1BQU1nTCx5QkFBeUJ0TCxTQUFTb1IseUJBQXlCO0lBRWpFLElBQUk5RiwyQkFBMkIsTUFBTTtRQUNuQ2hMLHFCQUFxQm5ILDZDQUE2Q21TLHdCQUF3QjNNO0lBQzVGO0lBRUEsT0FBTzJCO0FBQ1Q7QUFFTyxTQUFTdEosK0JBQStCZ0osUUFBUSxFQUFFckIsT0FBTztJQUM5RCxNQUFNeUIscUJBQXFCO0lBRTNCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTcEQsK0JBQStCeUksYUFBYSxFQUFFOUcsT0FBTztJQUNuRSxJQUFJZ0ssZ0JBQWdCO0lBRXBCLE1BQU1GLG9CQUFvQmhELGNBQWM0TCxvQkFBb0I7SUFFNUQsSUFBSTVJLHNCQUFzQixNQUFNO1FBQzlCRSxnQkFBZ0IxTCxtQ0FBbUN3TCxtQkFBbUI5SjtJQUN4RTtJQUVBLE9BQU9nSztBQUNUO0FBRU8sU0FBU3ZULCtCQUErQnNSLGNBQWMsRUFBRS9ILE9BQU87SUFDcEUsTUFBTTJTLGtCQUFrQjVLLGVBQWU0SSxtQkFBbUIsSUFDcERpQyxjQUFjOWIsaUNBQWlDNmIsaUJBQWlCM1M7SUFFdEUsT0FBTzRTO0FBQ1Q7QUFFTyxTQUFTcFcsK0JBQStCcVcsc0JBQXNCLEVBQUU3UyxPQUFPO0lBQzVFLElBQUlxRyxXQUFXO0lBRWYsTUFBTXlNLHFDQUFxQ0QsdUJBQXVCRSxjQUFjO0lBRWhGLElBQUlELG9DQUFvQztRQUN0QyxNQUFNOU0sZUFBZTZNLHdCQUF5QixHQUFHO1FBRWpEeE0sV0FBVzVKLHlCQUF5QnVKLGNBQWNoRztJQUNwRDtJQUVBLE9BQU9xRztBQUNUO0FBRU8sU0FBUzlJLCtCQUErQmlQLHNCQUFzQixFQUFFeE0sT0FBTztJQUM1RSxJQUFJb0IsT0FBTztJQUVYLE1BQU1ILFdBQVd1TCx1QkFBdUJvRCxXQUFXO0lBRW5ELElBQUkzTyxhQUFhLE1BQU07UUFDckJHLE9BQU92RCxpQkFBaUJvRCxVQUFVakI7SUFDcEM7SUFFQSxPQUFPb0I7QUFDVDtBQUVPLFNBQVM5SywrQkFBK0JxVyxzQkFBc0IsRUFBRTNNLE9BQU87SUFDNUUsTUFBTXNDLFdBQVdxSyx1QkFBdUI2RCxXQUFXLElBQzdDaFAsWUFBWXBMLGlCQUFpQmtNLFVBQVV0QztJQUU3QyxPQUFPd0I7QUFDVDtBQUVPLFNBQVNwSywrQkFBK0IrVSxzQkFBc0IsRUFBRW5NLE9BQU87SUFDNUUsTUFBTU8sT0FBTzRMLHVCQUF1QjBELE9BQU87SUFFM0MsT0FBT3RQO0FBQ1Q7QUFFTyxTQUFTdkMsZ0NBQWdDMk8sc0JBQXNCLEVBQUUzTSxPQUFPO0lBQzdFLE1BQU1zUSxZQUFZM0QsdUJBQXVCNEQsWUFBWSxJQUMvQ3BKLFFBQVFqSixtQkFBbUJvUyxXQUFXdFE7SUFFNUMsT0FBT21IO0FBQ1Q7QUFFTyxTQUFTcEksZ0NBQWdDaU8sdUJBQXVCLEVBQUVoTixPQUFPO0lBQzlFLE1BQU1ELFdBQVdpTix3QkFBd0JtRSxXQUFXLElBQzlDbFIsT0FBT2IsaUJBQWlCVyxVQUFVQztJQUV4QyxPQUFPQztBQUNUO0FBRU8sU0FBU1osZ0NBQWdDOE4sdUJBQXVCLEVBQUVuTixPQUFPO0lBQzlFLE1BQU1ELFdBQVdvTix3QkFBd0JnRSxXQUFXLElBQzlDbFIsT0FBT2IsaUJBQWlCVyxVQUFVQztJQUV4QyxPQUFPQztBQUNUO0FBRU8sU0FBU3hJLGlDQUFpQytTLG9CQUFvQixFQUFFeEssT0FBTztJQUM1RSxNQUFNd0csVUFBVWdFLHFCQUFxQkUsU0FBUztJQUU5QyxPQUFPbEU7QUFDVDtBQUVPLFNBQVNuSixpQ0FBaUMyVix3QkFBd0IsRUFBRWhULE9BQU87SUFDaEYsTUFBTWlCLFdBQVcrUix5QkFBeUJwRCxXQUFXLElBQy9DeE8sT0FBT3ZELGlCQUFpQm9ELFVBQVVqQjtJQUV4QyxPQUFPb0I7QUFDVDtBQUVPLFNBQVM1QyxpQ0FBaUN3VSx3QkFBd0IsRUFBRWhULE9BQU87SUFDaEYsTUFBTUUsV0FBV0MsSUFBQUEseUJBQW1CLEtBQzlCRixPQUFPQyxVQUFXLEdBQUc7SUFFM0IsT0FBT0Q7QUFDVDtBQUVPLFNBQVNyQixpQ0FBaUNnUCx3QkFBd0IsRUFBRTVOLE9BQU87SUFDaEYsTUFBTUQsV0FBVzZOLHlCQUF5QnVELFdBQVcsSUFDL0NsUixPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTOUgsa0NBQWtDZ04sV0FBVyxFQUFFbkYsT0FBTztJQUNwRSxJQUFJeUIscUJBQXFCO0lBRXpCLE1BQU0wSyx5QkFBeUJoSCxZQUFZOE4seUJBQXlCO0lBRXBFLElBQUk5RywyQkFBMkIsTUFBTTtRQUNuQzFLLHFCQUFxQnJKLDZDQUE2QytULHdCQUF3Qm5NO0lBQzVGO0lBRUEsT0FBT3lCO0FBQ1Q7QUFFTyxTQUFTcE4sa0NBQWtDeVMsYUFBYSxFQUFFOUcsT0FBTztJQUN0RSxJQUFJMkssbUJBQW1CO0lBRXZCLE1BQU1ILHVCQUF1QjFELGNBQWNvTSx1QkFBdUI7SUFFbEUsSUFBSTFJLHlCQUF5QixNQUFNO1FBQ2pDRyxtQkFBbUJ2Vyx5Q0FBeUNvVyxzQkFBc0J4SztJQUNwRjtJQUVBLE9BQU8ySztBQUNUO0FBRU8sU0FBUy9OLGtDQUFrQ3VOLG1CQUFtQixFQUFFbkssT0FBTztJQUM1RSxJQUFJUyxhQUFhLEVBQUU7SUFFbkIsTUFBTTBTLFlBQVloSixvQkFBb0JpSixZQUFZO0lBRWxELElBQUlELGNBQWMsTUFBTTtRQUN0QixNQUFNRSxRQUFRM1QsbUJBQW1CeVQsV0FBV25UO1FBRTVDUyxhQUFhNFMsT0FBTyxHQUFHO0lBQ3pCO0lBRUEsT0FBTzVTO0FBQ1Q7QUFFTyxTQUFTbEosa0NBQWtDaVYsc0JBQXNCLEVBQUV4TSxPQUFPO0lBQy9FLE1BQU13RyxVQUFVZ0csdUJBQXVCOUIsU0FBUztJQUVoRCxPQUFPbEU7QUFDVDtBQUVPLFNBQVNwSixtQ0FBbUN3TixvQkFBb0IsRUFBRUMsY0FBYztJQUNyRixNQUFNN0ssVUFBVTZLLGdCQUNWeUksaUJBQWlCMUkscUJBQXFCMkksaUJBQWlCLElBQ3ZEdEksYUFBYXBOLGlCQUFpQnlWLGdCQUFnQnRUO0lBRXBELE9BQU9pTDtBQUNUO0FBRU8sU0FBU3BTLG1DQUFtQ2lPLGFBQWEsRUFBRTlHLE9BQU87SUFDdkUsSUFBSXdMLG9CQUFvQjtJQUV4QixNQUFNSix3QkFBd0J0RSxjQUFjME0sd0JBQXdCO0lBRXBFLElBQUlwSSwwQkFBMEIsTUFBTTtRQUNsQ0ksb0JBQW9CNVMsMkNBQTJDd1MsdUJBQXVCcEw7SUFDeEY7SUFFQSxPQUFPd0w7QUFDVDtBQUVPLFNBQVNsUCxtQ0FBbUN3SyxhQUFhLEVBQUU5RyxPQUFPO0lBQ3ZFLElBQUk0TCxvQkFBb0I7SUFFeEIsTUFBTUgsd0JBQXdCM0UsY0FBYzJNLHdCQUF3QjtJQUVwRSxJQUFJaEksMEJBQTBCLE1BQU07UUFDbENHLG9CQUFvQnJQLDJDQUEyQ2tQLHVCQUF1QnpMO0lBQ3hGO0lBRUEsT0FBTzRMO0FBQ1Q7QUFFTyxTQUFTcFMsbUNBQW1DMlEsbUJBQW1CLEVBQUVuSyxPQUFPO0lBQzdFLE1BQU1XLGNBQWN3SixvQkFBb0J1SixhQUFhO0lBRXJELE9BQU8vUztBQUNUO0FBRU8sU0FBU2xDLG1DQUFtQ2tRLDBCQUEwQixFQUFFM08sT0FBTztJQUNwRixNQUFNRCxXQUFXNE8sMkJBQTJCd0MsV0FBVyxJQUNqRGxSLE9BQU9iLGlCQUFpQlcsVUFBVUM7SUFFeEMsT0FBT0M7QUFDVDtBQUVPLFNBQVNuTSxvQ0FBb0NnVCxhQUFhLEVBQUU5RyxPQUFPO0lBQUc7SUFDM0UsSUFBSTBNLHFCQUFxQjtJQUV6QixNQUFNRix5QkFBeUIxRixjQUFjNk0seUJBQXlCO0lBRXRFLElBQUluSCwyQkFBMkIsTUFBTTtRQUNuQ0UscUJBQXFCN1ksNkNBQTZDMlksd0JBQXdCeE07SUFDNUY7SUFFQSxPQUFPME07QUFDVDtBQUVPLFNBQVNqUyxvQ0FBb0NxTSxhQUFhLEVBQUU5RyxPQUFPO0lBQ3hFLElBQUkyQixxQkFBcUI7SUFFekIsTUFBTWdMLHlCQUF5QjdGLGNBQWMyTCx5QkFBeUI7SUFFdEUsSUFBSTlGLDJCQUEyQixNQUFNO1FBQ25DaEwscUJBQXFCbkgsNkNBQTZDbVMsd0JBQXdCM007SUFDNUY7SUFFQSxPQUFPMkI7QUFDVDtBQUVPLFNBQVM3TSxvQ0FBb0M0UCxXQUFXLEVBQUUxRSxPQUFPO0lBQ3RFLElBQUk4Tix1QkFBdUI7SUFFM0IsTUFBTUYsMkJBQTJCbEosWUFBWWtQLDJCQUEyQjtJQUV4RSxJQUFJaEcsNkJBQTZCLE1BQU07UUFDckNFLHVCQUF1QmpaLGlEQUFpRCtZLDBCQUEwQjVOO0lBQ3BHO0lBRUEsT0FBTzhOO0FBQ1Q7QUFFTyxTQUFTblIsb0NBQW9Da1AscUJBQXFCLEVBQUU3TCxPQUFPO0lBQ2hGLElBQUlTLGFBQWEsRUFBRTtJQUVuQixNQUFNMFMsWUFBWXRILHNCQUFzQnVILFlBQVk7SUFFcEQsSUFBSUQsY0FBYyxNQUFNO1FBQ3RCLE1BQU1FLFFBQVEzVCxtQkFBbUJ5VCxXQUFXblQ7UUFFNUNTLGFBQWE0UyxPQUFPLEdBQUc7SUFDekI7SUFFQSxPQUFPNVM7QUFDVDtBQUVPLFNBQVM1RSxvQ0FBb0M0UCxxQkFBcUIsRUFBRXpMLE9BQU87SUFDaEYsTUFBTTZULGlCQUFpQnBJLHNCQUFzQnFJLGlCQUFpQixJQUN4RG5JLGFBQWEvUCw2QkFBNkJpWSxnQkFBZ0I3VDtJQUVoRSxPQUFPMkw7QUFDVDtBQUVPLFNBQVNyUSxvQ0FBb0N1UixzQkFBc0IsRUFBRTdNLE9BQU87SUFDakYsTUFBTWlTLGlCQUFpQnBGLHVCQUF1QmlELGdCQUFnQixJQUN4RHZPLFlBQVkvRiwyQkFBMkJ5VyxnQkFBZ0JqUztJQUU3RCxPQUFPdUI7QUFDVDtBQUVPLFNBQVNwRyxvQ0FBb0NxUixzQkFBc0IsRUFBRXhNLE9BQU87SUFDakYsTUFBTThHLGdCQUFnQjBGLHVCQUF1QnNELGdCQUFnQixJQUN2RHZPLFlBQVkvRiwyQkFBMkJzTCxlQUFlOUc7SUFFNUQsT0FBT3VCO0FBQ1Q7QUFFTyxTQUFTdEksb0NBQW9DK1QsdUJBQXVCLEVBQUVoTixPQUFPO0lBQ2xGLElBQUkwRixXQUFXO0lBRWYsTUFBTUQsZUFBZXVILHdCQUF3QitHLGVBQWU7SUFFNUQsSUFBSXRPLGlCQUFpQixNQUFNO1FBQ3pCQyxXQUFXeE0seUJBQXlCdU0sY0FBY3pGO0lBQ3BEO0lBRUEsT0FBTzBGO0FBQ1Q7QUFFTyxTQUFTN0Ysb0NBQW9Dc04sdUJBQXVCLEVBQUVuTixPQUFPO0lBQ2xGLE1BQU00RixlQUFldUgsd0JBQXdCb0MsZUFBZSxJQUN0RHhKLFdBQVdqRyx5QkFBeUI4RixjQUFjNUY7SUFFeEQsT0FBTytGO0FBQ1Q7QUFFTyxTQUFTbEwsb0NBQW9Dd1QseUJBQXlCLEVBQUV4RCxjQUFjLEVBQUVDLGVBQWU7SUFDNUcsTUFBTXlELFNBQVNGLDBCQUEwQjJGLFFBQVE7SUFFakQsT0FBT3pGO0FBQ1Q7QUFFTyxTQUFTclcscUNBQXFDaWEsY0FBYyxFQUFFblMsT0FBTztJQUMxRSxJQUFJeUIscUJBQXFCO0lBRXpCLE1BQU0wSyx5QkFBeUJnRyxlQUFlYyx5QkFBeUI7SUFFdkUsSUFBSTlHLDJCQUEyQixNQUFNO1FBQ25DMUsscUJBQXFCckosNkNBQTZDK1Qsd0JBQXdCbk07SUFDNUY7SUFFQSxPQUFPeUI7QUFDVDtBQUVPLFNBQVNwRixxQ0FBcUMrTyxxQkFBcUIsRUFBRXBMLE9BQU87SUFDakYsTUFBTWlVLGtCQUFrQjdJLHNCQUFzQjhJLGtCQUFrQixJQUMxRDVJLGNBQWN6TixpQkFBaUJvVyxpQkFBaUJqVTtJQUV0RCxPQUFPc0w7QUFDVDtBQUVPLFNBQVNqUyxxQ0FBcUN3UyxxQkFBcUIsRUFBRTdMLE9BQU87SUFDakYsTUFBTVcsY0FBY2tMLHNCQUFzQjZILGFBQWE7SUFFdkQsT0FBTy9TO0FBQ1Q7QUFFTyxTQUFTNUYscUNBQXFDdVMsdUJBQXVCLEVBQUV0TixPQUFPO0lBQ25GLE1BQU04RyxnQkFBZ0J3Ryx3QkFBd0J3QyxnQkFBZ0IsSUFDeER2TyxZQUFZL0YsMkJBQTJCc0wsZUFBZTlHO0lBRTVELE9BQU91QjtBQUNUO0FBRU8sU0FBUzFKLHFDQUFxQ3NVLHNCQUFzQixFQUFFbk0sT0FBTztJQUNsRixNQUFNbVUsaUJBQWlCaEksdUJBQXVCaUksaUJBQWlCLElBQ3pEL0gsYUFBYXpVLDZCQUE2QnVjLGdCQUFnQm5VO0lBRWhFLE9BQU9xTTtBQUNUO0FBRU8sU0FBUzNZLHNDQUFzQ2dSLFdBQVcsRUFBRTFFLE9BQU87SUFDeEUsSUFBSTZPLHlCQUF5QjtJQUU3QixNQUFNRiw2QkFBNkJqSyxZQUFZMlAsNkJBQTZCO0lBRTVFLElBQUkxRiwrQkFBK0IsTUFBTTtRQUN2Q0UseUJBQXlCcGIscURBQXFEa2IsNEJBQTRCM087SUFDNUc7SUFFQSxPQUFPNk87QUFDVDtBQUVPLFNBQVN2VyxzQ0FBc0NnUixlQUFlLEVBQUV0SixPQUFPO0lBQzVFLElBQUl5QixxQkFBcUI7SUFFekIsTUFBTTBLLHlCQUF5QjdDLGdCQUFnQjJKLHlCQUF5QjtJQUV4RSxJQUFJOUcsMkJBQTJCLE1BQU07UUFDbkMxSyxxQkFBcUJySiw2Q0FBNkMrVCx3QkFBd0JuTTtJQUM1RjtJQUVBLE9BQU95QjtBQUNUO0FBRU8sU0FBU3RJLHNDQUFzQ2lTLHFCQUFxQixFQUFFcEwsT0FBTztJQUNsRixNQUFNc1UsbUJBQW1CbEosc0JBQXNCbUosbUJBQW1CLElBQzVEaEosZUFBZTFOLGlCQUFpQnlXLGtCQUFrQnRVO0lBRXhELE9BQU91TDtBQUNUO0FBRU8sU0FBU3hXLHNDQUFzQzZZLHdCQUF3QixFQUFFNU4sT0FBTztJQUNyRixNQUFNeUgsZ0JBQWdCbUcseUJBQXlCNEcsZ0JBQWdCLElBQ3pEN00sWUFBWTNTLDJCQUEyQnlTLGVBQWV6SDtJQUU1RCxPQUFPMkg7QUFDVDtBQUVPLFNBQVNqTyx1Q0FBdUN5VCx1QkFBdUIsRUFBRW5OLE9BQU87SUFDckYsTUFBTVcsY0FBY3dNLHdCQUF3QnVHLGFBQWE7SUFFekQsT0FBTy9TO0FBQ1Q7QUFFTyxTQUFTMUwsdUNBQXVDd1ksd0JBQXdCLEVBQUV6TixPQUFPO0lBQ3RGLE1BQU1zRCxhQUFhLEVBQUU7SUFFckIsT0FBT0E7QUFDVDtBQUVPLFNBQVNySix3Q0FBd0MyUSxvQkFBb0IsRUFBRUUsZUFBZTtJQUMzRixNQUFNOUssVUFBVThLLGlCQUNWMkosc0JBQXNCN0oscUJBQXFCOEosc0JBQXNCLElBQ2pFeEosa0JBQWtCck4saUJBQWlCNFcscUJBQXFCelU7SUFFOUQsT0FBT2tMO0FBQ1Q7QUFFTyxTQUFTNVIsd0NBQXdDc1Usd0JBQXdCLEVBQUU1TixPQUFPO0lBQ3ZGLE1BQU1XLGNBQWNpTix5QkFBeUI4RixhQUFhO0lBRTFELE9BQU8vUztBQUNUO0FBRU8sU0FBU25CLHdDQUF3Q3VPLHlCQUF5QixFQUFFL04sT0FBTztJQUN4RixNQUFNNkksaUJBQWlCa0YsMEJBQTBCNEcsaUJBQWlCLElBQzVENUwsYUFBYXRKLDZCQUE2Qm9KLGdCQUFnQjdJO0lBRWhFLE9BQU8rSTtBQUNUO0FBRU8sU0FBUzlWLHdDQUF3Q2liLHlCQUF5QixFQUFFbE8sT0FBTztJQUN4RixNQUFNcUksaUJBQWlCNkYsMEJBQTBCMEcsaUJBQWlCLElBQzVEck0sYUFBYXJWLDZCQUE2Qm1WLGdCQUFnQnJJO0lBRWhFLE9BQU91STtBQUNUO0FBRU8sU0FBU2hTLHdDQUF3Q3VZLDJCQUEyQixFQUFFOU8sT0FBTztJQUMxRixNQUFNNlUsZUFBZS9GLDRCQUE0QmdHLGVBQWUsSUFDMURuTCxXQUFXM0osUUFBUStVLDBCQUEwQixDQUFDRjtJQUVwRCxPQUFPbEw7QUFDVDtBQUVPLFNBQVNoVywwQ0FBMENnYiwwQkFBMEIsRUFBRTNPLE9BQU87SUFDM0YsTUFBTW1KLGtCQUFrQndGLDJCQUEyQnFHLGtCQUFrQixJQUMvRDNMLGNBQWN6ViwrQkFBK0J1VixpQkFBaUJuSjtJQUVwRSxPQUFPcUo7QUFDVDtBQUVPLFNBQVNqUSwwQ0FBMEN1ViwwQkFBMEIsRUFBRTNPLE9BQU87SUFDM0YsTUFBTVcsY0FBY2dPLDJCQUEyQitFLGFBQWE7SUFFNUQsT0FBTy9TO0FBQ1Q7QUFFTyxTQUFTOUosNENBQTRDaVksMkJBQTJCLEVBQUU5TyxPQUFPO0lBQzlGLE1BQU15SixtQkFBbUJxRiw0QkFBNEI2QixtQkFBbUIsSUFDbEVuTyxlQUFlMUwsaUNBQWlDMlMsa0JBQWtCeko7SUFFeEUsT0FBT3dDO0FBQ1Q7QUFFTyxTQUFTckYsNkNBQTZDa1IseUJBQXlCLEVBQUV4RCxjQUFjO0lBQ3BHLE1BQU03SyxVQUFVNkssZ0JBQ1ZvSyxzQkFBc0I1RywwQkFBMEI2RyxzQkFBc0IsSUFDdEUxRyxrQkFBa0JoVCwyQkFBMkJ5WixxQkFBcUJqVjtJQUV4RSxPQUFPd087QUFDVDtBQUVPLFNBQVN6Viw4Q0FBOEM4UyxxQkFBcUIsRUFBRTdMLE9BQU87SUFDMUYsTUFBTW1WLDRCQUE0QnRKLHNCQUFzQnVKLDJCQUEyQixJQUM3RXJKLHVCQUF1Qi9TLGlEQUFpRG1jLDJCQUEyQm5WO0lBRXpHLE9BQU8rTDtBQUNUO0FBRU8sU0FBUy9SLGtEQUFrRHFVLHlCQUF5QixFQUFFdkQsZUFBZTtJQUMxRyxNQUFNOUssVUFBVThLLGlCQUNWdUssMkJBQTJCaEgsMEJBQTBCaUgsMkJBQTJCLElBQ2hGN0csdUJBQXVCalQsMkJBQTJCNlosMEJBQTBCclY7SUFFbEYsT0FBT3lPO0FBQ1Q7QUFFTyxTQUFTdlEsbUJBQW1Cb1MsU0FBUyxFQUFFdFEsT0FBTztJQUNuRCxNQUFNbUgsUUFBUW1KLFVBQVVpRixHQUFHLENBQUMsQ0FBQ3RVO1FBQzNCLE1BQU1HLE9BQU92RCxpQkFBaUJvRCxVQUFVakI7UUFFeEMsT0FBT29CO0lBQ1Q7SUFFQSxPQUFPK0Y7QUFDVDtBQUVPLFNBQVN6SCxtQkFBbUJ5VCxTQUFTLEVBQUVuVCxPQUFPO0lBQ25ELE1BQU13VixZQUFZckMsVUFBVXNDLFlBQVksSUFDbENwQyxRQUFRbUMsVUFBVUQsR0FBRyxDQUFDLENBQUN4VjtRQUNyQixNQUFNRSxPQUFPYixpQkFBaUJXLFVBQVVDO1FBRXhDLE9BQU9DO0lBQ1Q7SUFFTixPQUFPb1Q7QUFDVDtBQUVPLFNBQVN2ZCxxQkFBcUJzWixVQUFVLEVBQUVwUCxPQUFPO0lBQ3RELE1BQU1nQyxTQUFTb04sV0FBV21HLEdBQUcsQ0FBQyxDQUFDN1M7UUFDN0IsTUFBTUUsUUFBUWpOLG1CQUFtQitNLFdBQVcxQztRQUU1QyxPQUFPNEM7SUFDVDtJQUVBLE9BQU9aO0FBQ1Q7QUFFTyxTQUFTaEsseUJBQXlCd1gsWUFBWSxFQUFFeFAsT0FBTztJQUM1RCxNQUFNaUMsV0FBV3VOLGFBQWErRixHQUFHLENBQUMsQ0FBQ3BRO1FBQ2pDLE1BQU1FLFVBQVV0Tix1QkFBdUJvTixhQUFhbkY7UUFFcEQsT0FBT3FGO0lBQ1Q7SUFFQSxPQUFPcEQ7QUFDVDtBQUVPLFNBQVNyRyw2QkFBNkJpWSxjQUFjLEVBQUU3VCxPQUFPO0lBQ2xFLE1BQU0yTCxhQUFha0ksZUFBZTBCLEdBQUcsQ0FBQyxDQUFDek87UUFDckMsTUFBTXZGLFlBQVkvRiwyQkFBMkJzTCxlQUFlOUc7UUFFNUQsT0FBT3VCO0lBQ1Q7SUFFQSxPQUFPb0s7QUFDVDtBQUVPLFNBQVMvVCw2QkFBNkJ1YyxjQUFjLEVBQUVuVSxPQUFPO0lBQ2xFLE1BQU1xTSxhQUFhOEgsZUFBZW9CLEdBQUcsQ0FBQyxDQUFDak87UUFDckMsTUFBTUUsWUFBWTdQLDJCQUEyQjJQLGVBQWV0SDtRQUU1RCxPQUFPd0g7SUFDVDtJQUVBLE9BQU82RTtBQUNUO0FBRU8sU0FBU2hYLDhCQUE4QnVQLGVBQWUsRUFBRTVFLE9BQU87SUFDcEUsTUFBTXNELGFBQWFzQixnQkFBZ0IyUSxHQUFHLENBQUMsQ0FBQzNOO1FBQ3RDLE1BQU04TixhQUFhcGdCLDZCQUE2QnNTLGVBQWU1SDtRQUUvRCxPQUFPMFY7SUFDVDtJQUVBLE9BQU9wUztBQUNUO0FBRU8sU0FBUzdRLCtCQUErQm1lLGVBQWUsRUFBRTVRLE9BQU87SUFDckUsTUFBTTRELGNBQWNnTixnQkFBZ0IyRSxHQUFHLENBQUMsQ0FBQ3ZNO1FBQ3ZDLE1BQU1FLGFBQWExVyw2QkFBNkJ3VyxnQkFBZ0JoSjtRQUVoRSxPQUFPa0o7SUFDVDtJQUVBLE9BQU90RjtBQUNUO0FBRU8sU0FBUzFHLGlDQUFpQ2tVLGdCQUFnQixFQUFFcFIsT0FBTztJQUN4RSxNQUFNb0QsZUFBZWdPLGlCQUFpQm1FLEdBQUcsQ0FBQyxDQUFDak07UUFDekMsTUFBTUUsY0FBYzFNLCtCQUErQndNLGlCQUFpQnRKO1FBRXBFLE9BQU93SjtJQUNUO0lBRUEsT0FBT3BHO0FBQ1Q7QUFFTyxTQUFTbkgsbUNBQW1DeU0sY0FBYyxFQUFFMUksT0FBTztJQUN4RSxNQUFNMlYsc0JBQXNCak4sZUFBZWtOLHNCQUFzQixJQUMzRGhOLG1CQUFtQitNLG9CQUFvQkosR0FBRyxDQUFDLENBQUN0TDtRQUMxQyxNQUFNQyxpQkFBaUJsTyxxQ0FBcUNpTyxvQkFBb0JqSztRQUVoRixPQUFPa0s7SUFDVDtJQUVOLE9BQU90QjtBQUNUO0FBRU8sU0FBUzFNLHNDQUFzQzBOLGlCQUFpQixFQUFFNUosT0FBTztJQUM5RSxNQUFNMlYsc0JBQXNCL0wsa0JBQWtCZ00sc0JBQXNCLElBQzlEaE4sbUJBQW1CK00sb0JBQW9CSixHQUFHLENBQUMsQ0FBQ3RMO1FBQzFDLE1BQU1DLGlCQUFpQmxPLHFDQUFxQ2lPLG9CQUFvQmpLO1FBRWhGLE9BQU9rSztJQUNUO0lBRU4sT0FBT3RCO0FBQ1Q7QUFFTyxTQUFTNVAsaURBQWlEbWMseUJBQXlCLEVBQUVuVixPQUFPO0lBQ2pHLE1BQU02VixzQkFBc0JWLDBCQUEwQkksR0FBRyxDQUFDLENBQUN2STtRQUN6RCxNQUFNOEksdUJBQXVCaGQsK0NBQStDa1UseUJBQXlCaE47UUFFckcsT0FBTzhWO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-nominal",
3
3
  "author": "James Smith",
4
- "version": "1.0.601",
4
+ "version": "1.0.604",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-nominal",
7
7
  "description": "Occam's Nominal language.",
@@ -1044,8 +1044,13 @@ export function lemmaFromSectionNode(sectionNode, context) {
1044
1044
  }
1045
1045
 
1046
1046
  export function termFromPropertyNode(propertyNode, context) {
1047
- const termNode = propertyNode.getTermNode(),
1047
+ let term = null;
1048
+
1049
+ const termNode = propertyNode.getTermNode();
1050
+
1051
+ if (termNode !== null) {
1048
1052
  term = termFromTermNode(termNode, context);
1053
+ }
1049
1054
 
1050
1055
  return term;
1051
1056
  }
@@ -1099,8 +1104,13 @@ export function nameFromParaneterNode(parameterNode, context) {
1099
1104
  }
1100
1105
 
1101
1106
  export function termFromGeneratorNode(generatorNode, context) {
1102
- const termNode = generatorNode.getTermNode(),
1103
- term = termFromTermNode(termNode, context);
1107
+ let term = null;
1108
+
1109
+ const termNode = generatorNode.getTermNode();
1110
+
1111
+ if (termNode !== null) {
1112
+ term = termFromTermNode(termNode, context);
1113
+ }
1104
1114
 
1105
1115
  return term;
1106
1116
  }
@@ -1228,8 +1238,13 @@ export function negatedFromEqualityNode(equalityNode, context) {
1228
1238
  }
1229
1239
 
1230
1240
  export function termFromConstructorNode(ocnstructorNode, context) {
1231
- const termNode = ocnstructorNode.getTermNode(),
1232
- term = termFromTermNode(termNode, context);
1241
+ let term = null;
1242
+
1243
+ const termNode = ocnstructorNode.getTermNode();
1244
+
1245
+ if (termNode !== null) {
1246
+ term = termFromTermNode(termNode, context);
1247
+ }
1233
1248
 
1234
1249
  return term;
1235
1250
  }
@@ -1485,8 +1500,13 @@ export function statementFromAssumptionNode(assumptionNode, context) {
1485
1500
  }
1486
1501
 
1487
1502
  export function statementFromCombinatorNode(combinatorNode, context) {
1488
- const statementNode = combinatorNode.getStatementNode(),
1489
- statement = statementFromStatementNode(statementNode, context);
1503
+ let statement;
1504
+
1505
+ const statementNode = combinatorNode.getStatementNode();
1506
+
1507
+ if (statementNode !== null) {
1508
+ statement = statementFromStatementNode(statementNode, context);
1509
+ }
1490
1510
 
1491
1511
  return statement;
1492
1512
  }