occam-nominal 1.0.643 → 1.0.645

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.
@@ -687,7 +687,7 @@ function typeFromTypeNode(typeNode, context) {
687
687
  if (typeNode === null) {
688
688
  type = baseType; ///
689
689
  } else {
690
- const node = typeNode, string = context.nodeAsString(node), baseTypeString = baseType.getString(), stringBaseTypeString = string === baseTypeString;
690
+ const node = typeNode, string = typeNode.getString(), baseTypeString = baseType.getString(), stringBaseTypeString = string === baseTypeString;
691
691
  if (stringBaseTypeString) {
692
692
  type = baseType; ///
693
693
  } else {
@@ -1299,9 +1299,9 @@ function termFromMetavariableNode(metavariableNode, context) {
1299
1299
  }
1300
1300
  function typeFromMetavariableNode(metavariableNode, context) {
1301
1301
  let type = null;
1302
- const typemNode = metavariableNode.getTypeNode();
1303
- if (typemNode !== null) {
1304
- type = typeFromTypeNode(typemNode, context);
1302
+ const typeNode = metavariableNode.getTypeNode();
1303
+ if (typeNode !== null) {
1304
+ type = typeFromTypeNode(typeNode, context);
1305
1305
  }
1306
1306
  return type;
1307
1307
  }
@@ -1899,4 +1899,4 @@ function propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNo
1899
1899
  return propertyDeclrations;
1900
1900
  }
1901
1901
 
1902
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbixcbiAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZ0Zyb21OYW1lQW5kUGFyYW1ldGVycyxcbiAgICAgICAgIHNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZENsYWltLFxuICAgICAgICAgY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uLFxuICAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlO1xuXG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gIGlmICh0eXBlTm9kZSA9PT0gbnVsbCkge1xuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG5vZGUgPSB0eXBlTm9kZSwgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIGJhc2VUeXBlU3RyaW5nID0gYmFzZVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nQmFzZVR5cGVTdHJpbmcgPSAoc3RyaW5nID09PSBiYXNlVHlwZVN0cmluZyk7XG5cbiAgICBpZiAoc3RyaW5nQmFzZVR5cGVTdHJpbmcpIHtcbiAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgY2xvc2VkID0gY2xvc2VkRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICB0eXBlID0gbmV3IFR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBjbG9zZWQsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGVwID0gbmV3IFN0ZXAoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlLCBzY2hlbWFBc3NlcnRpb24sIHNpZ25hdHVyZUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgcHJvb2YgPSBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgbGFiZWxzID0gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgcnVsZVN0cmluZyA9IHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pLFxuICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgIHN0cmluZyA9IHJ1bGVTdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGluayB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsaW5rTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGluayA9IG5ldyBMaW5rKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY2xhaW1TdHJpbmcgPSBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mID0gbmV3IFByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY2xhaW1Ob2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBheGlvbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGF4aW9tID0gbmV3IEF4aW9tKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNjaGVtYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBzY2hlbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc2NoZW1hU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHNjaGVtYSA9IG5ldyBTY2hlbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBjb25zdHJhaW50cyk7XG5cbiAgcmV0dXJuIHNjaGVtYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTZWN0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaHlwb3RoZXNpc05vZGVzID0gc2VjdGlvbk5vZGUuZ2V0SHlwb3RoZXNpc05vZGVzKCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBkZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY2xhaW0gPSBjbGFpbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZENsYWltKGh5cG90aGVzZXMsIGRlY2xhcmF0aW9uLCBjbGFpbSksXG4gICAgICAgIG5vZGUgPSBzZWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNlY3Rpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBoeXBvdGhlc2VzLCBkZWNsYXJhdGlvbiwgY2xhaW0pO1xuXG4gIHJldHVybiBzZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByZW1pc2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gIHJldHVybiBwcmVtaXNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSB0aGVvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbSA9IG5ldyBUaGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPSBudWxsKSB7XG4gICAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHByb3BlcnR5ID0gbmV3IFByb3BlcnR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgaWRlbnRpZmllciwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3ViRGVyaXZhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbihzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24sIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBzdWJwcm9vZlN0cmluZzsgIC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mID0gbmV3IFN1YnByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgaWRlbnRpZmllcik7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBHZW5lcmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgR2VuZXJhdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBbGlhc0Zyb21UeXBlQWxpYXNOb2RlKHR5cGVBbGlhc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlQWxpYXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFsaWFzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFsaWFzTm9kZSh0eXBlQWxpYXNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlQWxpYXNOb2RlKHR5cGVBbGlhc05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBbGlhcyA9IG5ldyBUeXBlQWxpYXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0eXBlTmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVBbGlhcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgaHlwb2h0ZXNpcyA9IG5ldyBIeXBvdGhlc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cmFpbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RyYWludE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJhaW50ID0gbmV3IENvbnN0cmFpbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IGNvbmplY3R1cmVOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBjb25qZWN0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZSA9IG5ldyBDb25qZWN0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uY2x1c2lvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZXJpdmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlcml2YXRpb24gPSBuZXcgRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbGluayA9IGxpbmtGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFUeXBlID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgdGVybSwgdHlwZSwgbWV0YVR5cGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRGVjbGFyYXRpb25Gcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsb3NlZCA9IGNsb3NlZEZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZURlY2xhcmF0aW9uID0gbmV3IFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGNsb3NlZCwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0eXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2NoZW1hQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsaW5rID0gbGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2NoZW1hQXNzZXJ0aW9uID0gbmV3IFNjaGVtYUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIGZyYW1lKTtcblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0VGVybSwgcmVwbGFjZW1lbnRUZXJtKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJqZWN0VGVybSwgcHJvcGVydHlUZXJtKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb3R5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmcgPSBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsKHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSxcbiAgICAgICAgc3RyaW5nID0gY290eXBlRGVjbGFyYXRpb25TdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb3R5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb3R5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eURlY2xhcmF0aW9ucyk7XG5cbiAgcmV0dXJuIGNvdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZVJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyA9IHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZ0Zyb21OYW1lQW5kUGFyYW1ldGVycyhuYW1lLCBwYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcGFyYW1ldGVycyk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb250YWluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsaW5rID0gbGlua0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbmV3IFNpZ25hdHVyZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEltcGxpY2l0QXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IG5ldyBJbXBsaWNpdEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRHZW5lcmF0b3JGcm9tQnJhY2tldGVkR2VuZXJhdG9yTm9kZShicmFja2V0ZWRHZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkR2VuZXJhdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZEdlbmVyYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUoYnJhY2tldGVkR2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUoYnJhY2tldGVkR2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUoYnJhY2tldGVkR2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZEdlbmVyYXRvciA9IG5ldyBCcmFja2V0ZWRHZW5lcmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYnJhY2tldGVkR2VuZXJhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb24gPSBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3BlcnR5KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVEZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdmFyaWFibGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yID0gbmV3IEJyYWNrZXRlZENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBicmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBuZXcgQnJhY2tldGVkQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGdlbmVyYXRvckRlY2xhcmF0aW9uID0gbmV3IEdlbmVyYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGdlbmVyYXRvcik7XG5cbiAgcmV0dXJuIGdlbmVyYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFsaWFzRGVjbGFyYXRpb25Gcm9tVHlwZUFsaWFzRGVjbGFyYXRpb25Ob2RlKHR5cGVBbGlhc0RlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBbGlhc0RlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVBbGlhc0RlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZUFsaWFzID0gdHlwZUFsaWFzRnJvbVR5cGVBbGlhc0RlY2xhcmF0aW9uTm9kZSh0eXBlQWxpYXNEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBbGlhc0RlY2xhcmF0aW9uID0gbmV3IFR5cGVBbGlhc0RlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZUFsaWFzKTtcblxuICByZXR1cm4gdHlwZUFsaWFzRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeERlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGVQcmVmaXgpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzb2x2ZWQgPSBzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzb2x2ZWQsIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlZEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjbG9zZWQgPSBudWxsO1xuXG4gIHJldHVybiBjbG9zZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gY2xhaW1Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBydWxlTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gY2xhaW1Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBzY2hlbWFOb2RlLmdldFByb29mTm9kZSgpLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBzY2hlbWFOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlTm9kZXMgPSBydWxlTm9kZS5nZXRQcmVtaXNlTm9kZXMoKSxcbiAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFpbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBheGlvbSA9IGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVtbWEgPSBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbSA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpO1xuXG4gIHJldHVybiBjbGFpbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5Tm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXBOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc3RlcE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZ2VuZXJhdG9yTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBbGlhc05vZGUodHlwZUFsaWFzTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlQWxpYXNOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBudWxsO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBydWxlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gY2xhaW1Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IGNsYWltTm9kZS5nZXRTaWduYXR1cmVOb2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0aGVvcmVtID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtTm9kZSA9IHNlY3Rpb25Ob2RlLmdldFRoZW9yZW1Ob2RlKCk7XG5cbiAgaWYgKHRoZW9yZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeE5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbmtOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgbGluayA9IGxpbmtGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IHNjaGVtYU5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBlcXVhbGl0eU5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gb2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxpbmtOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGVzID0gZnJhbWVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YW1ldGF2YXJpYWJsZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IGNsYWltTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVOYW1lRnJvbVR5cGVBbGlhc05vZGUodHlwZUFsaWFzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVBbGlhc05vZGUuZ2V0VHlwZU5hbWUoKTtcblxuICByZXR1cm4gdHlwZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVxdWFsaXR5ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEVxdWFsaXR5Tm9kZSgpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzY2hlbWFOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yRGVjbGFyYXRpb24gPSBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlY2xhcmF0aW9uID0gKGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gfHwgZ2VuZXJhdG9yRGVjbGFyYXRpb24pO1xuXG4gIHJldHVybiBkZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyTm9kZS5nZXRJZGVudGlmaWVyKCk7XG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBkZWR1Y3Rpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2NoZW1hQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzY2hlbWFBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2NoZW1hQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzY2hlbWFBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50O1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBzY2hlbWFBc3NlcnRpb25Ob2RlLmdldExpbmtOb2RlKCksXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZWwgPSBudWxsO1xuXG4gIHJldHVybiByZWZlcmVuY2VsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZWRGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNsb3NlZCA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuaXNDbG9zZWQoKTtcblxuICByZXR1cm4gY2xvc2VkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWJsZU5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUoYnJhY2tldGVkR2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZEdlbmVyYXRvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21CcmFja2V0ZWRHZW5lcmF0b3JOb2RlKGJyYWNrZXRlZEdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN1YnByb29mT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZS5pc1N1YnByb29mTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbmtOb2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZS5nZXRMaW5rTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0R2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3Qgc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1NvbHZlZCgpO1xuXG4gIHJldHVybiBzb2x2ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViamVjdFRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFN1YmplY3RUZXJtTm9kZSgpLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUoc3ViamVjdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViamVjdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUoYnJhY2tldGVkR2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlUmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5VGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0UHJvcGVydHlUZXJtTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHByb3BlcnR5VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmF0b3JOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldEdlbmVyYXRvck5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBbGlhc0Zyb21UeXBlQWxpYXNEZWNsYXJhdGlvbk5vZGUodHlwZUFsaWFzRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVBbGlhc05vZGUgPSB0eXBlQWxpYXNEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZUFsaWFzTm9kZSgpLFxuICAgICAgICB0eXBlQWxpYXMgPSB0eXBlQWxpYXNGcm9tVHlwZUFsaWFzTm9kZSh0eXBlQWxpYXNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZUFsaWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vLy8vL1xuICAgICAgICByZXBsYWNlbWVudFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJlcGxhY2VtZW50VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4Tm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZVByZWZpeE5vZGUoKSxcbiAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29tYmluYXRvck5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbWJpbmF0b3JOb2RlKCksXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YVR5cGVOYW1lID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRDb25zdHJ1Y3Rvck5vZGUoKSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgIHRhcmdldFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUodGFyZ2V0U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMoKSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZXMgPSB0eXBlc05vZGUuZ2V0VHlwZU5vZGVzKCksXG4gICAgICAgIHR5cGVzID0gdHlwZU5vZGVzLm1hcCgodHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZXMgPSBwcmVtaXNlTm9kZXMubWFwKChwcmVtaXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2UgPSBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gaHlwb3RoZXNpc05vZGVzLm1hcCgoaHlwb3RoZXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25Ob2Rlcy5tYXAoKGFzc3VtcHRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25Ob2Rlcy5tYXAoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2Rlcy5tYXAoKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlEZWNsY2FyYXRpb24gPSBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eURlY2xjYXJhdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbHJhdGlvbnM7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tRnJvbVNlY3Rpb25Ob2RlIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsImJyYWNrZXRlZEdlbmVyYXRvckZyb21CcmFja2V0ZWRHZW5lcmF0b3JOb2RlIiwiY2xhaW1Gcm9tU2VjdGlvbk5vZGUiLCJjbG9zZWRGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsImNsb3NlZEZyb21UeXBlTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVJ1bGVOb2RlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiY290eXBlRGVjbGFyYXRpb25Gcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwiZGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlIiwiZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlIiwiZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUiLCJlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZnJhbWVGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUNsYWltTm9kZSIsImh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSIsImltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tU2NoZW1hTm9kZSIsImxhYmVsc0Zyb21DbGFpbU5vZGUiLCJsYWJlbHNGcm9tTGFiZWxOb2RlcyIsImxhYmVsc0Zyb21SdWxlTm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hRnJvbVNlY3Rpb25Ob2RlIiwibGlua0Zyb21Bc3N1bXB0aW9uTm9kZSIsImxpbmtGcm9tTGlua05vZGUiLCJsaW5rRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJsaW5rRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tQ29uc3RyYWludE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJuYW1lRnJvbVBhcmFtdGVyTm9kZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21FcXVhbGl0eU5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcmVmaXhOYW1lRnJvbVR5cGVOb2RlIiwicHJlbWlzZUZyb21QcmVtaXNlTm9kZSIsInByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyIsInByZW1pc2VzRnJvbVJ1bGVOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbUh5cG90aGVzaXNOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3RlcE5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvb2ZGcm9tQ2xhaW1Ob2RlIiwicHJvb2ZGcm9tUHJvb2ZOb2RlIiwicHJvb2ZGcm9tUnVsZU5vZGUiLCJwcm9vZkZyb21TY2hlbWFOb2RlIiwicHJvcGVydGllc0Zyb21UeXBlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UZXJtTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVByZW1pc2VOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU3RlcE5vZGUiLCJyZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJydWxlRnJvbVJ1bGVOb2RlIiwic2NoZW1hQXNzZXJ0aW9uRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJzY2hlbWFBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzY2hlbWFGcm9tU2NoZW1hTm9kZSIsInNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2lnbmF0dXJlRnJvbUNsYWltTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlIiwic3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlIiwic3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3ViamVjdFRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVR5cGVOb2RlIiwic3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzIiwidGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbUdlbmVyYXRvck5vZGUiLCJ0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5Tm9kZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJ0ZXJtc0Zyb21TaWduYXR1cmVOb2RlIiwidGVybXNGcm9tVGVybU5vZGVzIiwidGhlb3JlbUZyb21TZWN0aW9uTm9kZSIsInRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUiLCJ0eXBlQWxpYXNEZWNsYXJhdGlvbkZyb21UeXBlQWxpYXNEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlQWxpYXNGcm9tVHlwZUFsaWFzRGVjbGFyYXRpb25Ob2RlIiwidHlwZUFsaWFzRnJvbVR5cGVBbGlhc05vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZURlY2xhcmF0aW9uRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tQnJhY2tldGVkR2VuZXJhdG9yTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUdlbmVyYXRvck5vZGUiLCJ0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Qcm9wZXJ0eU5vZGUiLCJ0eXBlRnJvbVRlcm1Ob2RlIiwidHlwZUZyb21UeXBlQWxpYXNOb2RlIiwidHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVHlwZU5vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTmFtZUZyb21UeXBlQWxpYXNOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwibm9kZSIsInN0cmluZyIsIm5vZGVBc1N0cmluZyIsImJhc2VUeXBlU3RyaW5nIiwiZ2V0U3RyaW5nIiwic3RyaW5nQmFzZVR5cGVTdHJpbmciLCJUeXBlIiwiZWxlbWVudHMiLCJuYW1lIiwiY2xvc2VkIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJicmVha1BvaW50IiwidGVybU5vZGUiLCJUZXJtIiwidGVybSIsInN0ZXBOb2RlIiwiU3RlcCIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZSIsInNjaGVtYUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXAiLCJydWxlTm9kZSIsIlJ1bGUiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInJ1bGUiLCJsaW5rTm9kZSIsIkxpbmsiLCJtZXRhdmFyaWFibGUiLCJsaW5rIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsImNsYWltTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJjbGFpbVN0cmluZyIsImNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNjaGVtYU5vZGUiLCJTY2hlbWEiLCJjb25zdHJhaW50cyIsInNjaGVtYVN0cmluZyIsInNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInNjaGVtYSIsInNlY3Rpb25Ob2RlIiwiU2VjdGlvbiIsImh5cG90aGVzaXNOb2RlcyIsImdldEh5cG90aGVzaXNOb2RlcyIsImRlY2xhcmF0aW9uIiwiY2xhaW0iLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbSIsInNlY3Rpb24iLCJwcmVtaXNlTm9kZSIsIlByZW1pc2UiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwidGhlb3JlbSIsInByb3BlcnR5Tm9kZSIsInByb3BlcnR5IiwiUHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsInN1YnByb29mTm9kZSIsIlN1YnByb29mIiwic3ViRGVyaXZhdGlvbiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1YnByb29mIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJuZWdhdGVkIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic3Vic3RpdHV0aW9uIiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJnZW5lcmF0b3JOb2RlIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwidHlwZUFsaWFzTm9kZSIsIlR5cGVBbGlhcyIsInR5cGVOYW1lIiwidHlwZUFsaWFzIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aGVzaXMiLCJoeXBvaHRlc2lzIiwiY29uc3RyYWludE5vZGUiLCJDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiY29uc3RydWN0b3JOb2RlIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJtZXRhdmFyaWFibGVOb2RlIiwiTWV0YXZhcmlhYmxlIiwibWV0YVR5cGUiLCJzdWJEZXJpdmF0aW9uTm9kZSIsIlN1YkRlcml2YXRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwic3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2YiLCJ0eXBlRGVjbGFyYXRpb25Ob2RlIiwiVHlwZURlY2xhcmF0aW9uIiwidHlwZURlY2xhcmF0aW9uIiwic2NoZW1hQXNzZXJ0aW9uTm9kZSIsIlNjaGVtYUFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiRGVmaW5lZEFzc2VydGlvbiIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiVGVybVN1YnN0aXR1dGlvbiIsImNvbnRleHRzIiwidGFyZ2V0VGVybSIsInJlcGxhY2VtZW50VGVybSIsInRlcm1TdWJzdGl0dXRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJQcm9wZXJ0eUFzc2VydGlvbiIsInN1YmplY3RUZXJtIiwicHJvcGVydHlUZXJtIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvdHlwZURlY2xhcmF0aW9uTm9kZSIsIkNvdHlwZURlY2xhcmF0aW9uIiwicHJvcGVydHlEZWNsYXJhdGlvbnMiLCJjb3R5cGVEZWNsYXJhdGlvblN0cmluZyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwiLCJjb3R5cGVEZWNsYXJhdGlvbiIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nIiwicHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nRnJvbU5hbWVBbmRQYXJhbWV0ZXJzIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJTaWduYXR1cmVBc3NlcnRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiSW1wbGljaXRBc3N1bXB0aW9uIiwiaW1wbGljaXRBc3N1bXB0aW9uIiwiYnJhY2tldGVkR2VuZXJhdG9yTm9kZSIsIkJyYWNrZXRlZEdlbmVyYXRvciIsImJyYWNrZXRlZEdlbmVyYXRvciIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwiUHJvcGVydHlEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIlZhcmlhYmxlRGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwiYnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsIkJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJHZW5lcmF0b3JEZWNsYXJhdGlvbiIsImdlbmVyYXRvckRlY2xhcmF0aW9uIiwidHlwZUFsaWFzRGVjbGFyYXRpb25Ob2RlIiwiVHlwZUFsaWFzRGVjbGFyYXRpb24iLCJ0eXBlQWxpYXNEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInNvbHZlZCIsInRhcmdldFN0YXRlbWVudCIsInJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIk1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJnZXRUeXBlTmFtZSIsImdldFByb29mTm9kZSIsImxhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwicHJlbWlzZU5vZGVzIiwiZ2V0UHJlbWlzZU5vZGVzIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwiZ2V0VGVybU5vZGUiLCJnZXROYW1lIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJnZXRUeXBlTm9kZSIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldERlZHVjdGlvbk5vZGUiLCJnZXRTaWduYXR1cmVOb2RlIiwiZ2V0VGhlb3JlbU5vZGUiLCJ0ZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJnZXRMaW5rTm9kZSIsImdldERlcml2YXRpb25Ob2RlIiwib2Nuc3RydWN0b3JOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsIm1ldGFtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInR5cGVtTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImdldElkZW50aWZpZXIiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXRTY2hlbWFBc3NlcnRpb25Ob2RlIiwic3RhdGVzbWVudE5vZGUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwicmVmZXJlbmNlbCIsImdldEZyYW1lTm9kZSIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsImZyb21TdGF0ZW1lbnROb2RlIiwiaXNDbG9zZWQiLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJtZXRhdmFyaWJsZU5vZGUiLCJtZXRhdmFyaWJsZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0eXBlc05vZGUiLCJnZXRUeXBlc05vZGUiLCJ0eXBlcyIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldEdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJnZXRQcm9wZXJ0eU5vZGUiLCJpc1NvbHZlZCIsInN1YmplY3RUZXJtTm9kZSIsImdldFN1YmplY3RUZXJtTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJnZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5VGVybU5vZGUiLCJnZXRQcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0R2VuZXJhdG9yTm9kZSIsImdldFR5cGVBbGlhc05vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFR5cGVQcmVmaXhOb2RlIiwiZ2V0Q29tYmluYXRvck5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsImdldENvbnN0cnVjdG9yTm9kZSIsInRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUYXJnZXRTdGF0ZW1lbnROb2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyIsImdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsInJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsIm1hcCIsInR5cGVOb2RlcyIsImdldFR5cGVOb2RlcyIsImh5cG90aGVzaXMiLCJzdGVwT3JTdWJwcm9vZk5vZGVzIiwiZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcyIsInByb3BlcnR5RGVjbHJhdGlvbnMiLCJwcm9wZXJ0eURlY2xjYXJhdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBcWhCZ0JBO2VBQUFBOztRQWd0REFDO2VBQUFBOztRQXo3QkFDO2VBQUFBOztRQXJuQ0FDO2VBQUFBOztRQTQzQkFDO2VBQUFBOztRQXZPQUM7ZUFBQUE7O1FBV0FDO2VBQUFBOztRQXZEQUM7ZUFBQUE7O1FBeVFBQztlQUFBQTs7UUF1bkJBQztlQUFBQTs7UUF4ckJBQztlQUFBQTs7UUF4RkFDO2VBQUFBOztRQXF0Q0FDO2VBQUFBOztRQXJvREFDO2VBQUFBOztRQWNBQztlQUFBQTs7UUFvc0JBQztlQUFBQTs7UUF2dUJBQztlQUFBQTs7UUFnOEJBQztlQUFBQTs7UUE1OEJBQztlQUFBQTs7UUFzOEJBQztlQUFBQTs7UUFyZEFDO2VBQUFBOztRQXVtQ0FDO2VBQUFBOztRQTRGQUM7ZUFBQUE7O1FBL2tEQUM7ZUFBQUE7O1FBa05BQztlQUFBQTs7UUFvcENBQztlQUFBQTs7UUF0ckNBQztlQUFBQTs7UUFpdkJBQztlQUFBQTs7UUE1UUFDO2VBQUFBOztRQXQyQkFDO2VBQUFBOztRQW03QkFDO2VBQUFBOztRQS9tQkFDO2VBQUFBOztRQXNxQ0FDO2VBQUFBOztRQXAwQ0FDO2VBQUFBOztRQXN3QkFDO2VBQUFBOztRQTU3QkFDO2VBQUFBOztRQWltQ0FDO2VBQUFBOztRQTV5Q0FDO2VBQUFBOztRQWtDQUM7ZUFBQUE7O1FBMjhDQUM7ZUFBQUE7O1FBandCQUM7ZUFBQUE7O1FBOGpDQUM7ZUFBQUE7O1FBb0pBQztlQUFBQTs7UUFycURBQztlQUFBQTs7UUF5ckRBQztlQUFBQTs7UUF6REFDO2VBQUFBOztRQXB5QkFDO2VBQUFBOztRQTZhQUM7ZUFBQUE7O1FBcEpBQztlQUFBQTs7UUFxdEJBQztlQUFBQTs7UUEzeURBQztlQUFBQTs7UUFvaUNBQztlQUFBQTs7UUFQQUM7ZUFBQUE7O1FBeHJCQUM7ZUFBQUE7O1FBeHFCQUM7ZUFBQUE7O1FBazZCQUM7ZUFBQUE7O1FBZEFDO2VBQUFBOztRQWtyQ0FDO2VBQUFBOztRQXpyQ0FDO2VBQUFBOztRQTJVQUM7ZUFBQUE7O1FBaHNDQUM7ZUFBQUE7O1FBMDdCQUM7ZUFBQUE7O1FBdUtBQztlQUFBQTs7UUFwb0NBQztlQUFBQTs7UUFtK0NBQztlQUFBQTs7UUFxTEFDO2VBQUFBOztRQWtYQUM7ZUFBQUE7O1FBNXFDQUM7ZUFBQUE7O1FBMndCQUM7ZUFBQUE7O1FBaFdBQztlQUFBQTs7UUFtQkFDO2VBQUFBOztRQXpGQUM7ZUFBQUE7O1FBMjFCQUM7ZUFBQUE7O1FBL2pEQUM7ZUFBQUE7O1FBMGtDQUM7ZUFBQUE7O1FBWkFDO2VBQUFBOztRQW5UQUM7ZUFBQUE7O1FBek9BQztlQUFBQTs7UUE4cEJBQztlQUFBQTs7UUFsekJBQztlQUFBQTs7UUFnUkFDO2VBQUFBOztRQXduQkFDO2VBQUFBOztRQTFrQkFDO2VBQUFBOztRQTM0QkFDO2VBQUFBOztRQSswREFDO2VBQUFBOztRQXZNQUM7ZUFBQUE7O1FBLzFCQUM7ZUFBQUE7O1FBNzdCQUM7ZUFBQUE7O1FBKzhEQUM7ZUFBQUE7O1FBM3BDQUM7ZUFBQUE7O1FBdzhCQUM7ZUFBQUE7O1FBekxBQztlQUFBQTs7UUEza0NBQztlQUFBQTs7UUFtOUJBQztlQUFBQTs7UUEwV0FDO2VBQUFBOztRQXJqQ0FDO2VBQUFBOztRQXIwQkFDO2VBQUFBOztRQW16QkFDO2VBQUFBOztRQTRDQUM7ZUFBQUE7O1FBNkpBQztlQUFBQTs7UUE5ZUFDO2VBQUFBOztRQThxQ0FDO2VBQUFBOztRQXhqQ0FDO2VBQUFBOztRQWsyQ0FDO2VBQUFBOztRQWdJQUM7ZUFBQUE7O1FBOVRBQztlQUFBQTs7UUFqc0RBQztlQUFBQTs7UUEreERBQztlQUFBQTs7UUEyRUFDO2VBQUFBOztRQTdIQUM7ZUFBQUE7O1FBMkZBQztlQUFBQTs7UUEvMUJBQztlQUFBQTs7UUFvb0JBQztlQUFBQTs7UUExb0JBQztlQUFBQTs7UUFpMUJBQztlQUFBQTs7UUFwa0JBQztlQUFBQTs7UUFqTUFDO2VBQUFBOztRQXg4QkFDO2VBQUFBOztRQTh2QkFDO2VBQUFBOztRQTBlQUM7ZUFBQUE7O1FBdWpCQUM7ZUFBQUE7O1FBdEVBQztlQUFBQTs7UUF6ckJBQztlQUFBQTs7UUF2MENBQztlQUFBQTs7UUF3akJBQztlQUFBQTs7UUE0MkJBQztlQUFBQTs7UUF4eUNBQztlQUFBQTs7UUFnQkFDO2VBQUFBOztRQTBpQkFDO2VBQUFBOztRQWdwQ0FDO2VBQUFBOztRQXpPQUM7ZUFBQUE7O1FBN2VBQztlQUFBQTs7UUFwMUJBQztlQUFBQTs7UUF3bkRBQztlQUFBQTs7UUF4ZEFDO2VBQUFBOztRQXVmQUM7ZUFBQUE7O1FBaGZBQztlQUFBQTs7UUFZQUM7ZUFBQUE7O1FBd0JBQztlQUFBQTs7UUFtWkFDO2VBQUFBOztRQWhmQUM7ZUFBQUE7O1FBaUZBQztlQUFBQTs7UUF3WkFDO2VBQUFBOztRQWhwQkFDO2VBQUFBOztRQXI5QkFDO2VBQUFBOztRQTJ3QkFDO2VBQUFBOztRQTBlQUM7ZUFBQUE7O1FBcnJCQUM7ZUFBQUE7O1FBeXlDQUM7ZUFBQUE7O1FBM1FBQztlQUFBQTs7UUE5M0RBQztlQUFBQTs7UUF3NkNBQztlQUFBQTs7UUF2M0JBQztlQUFBQTs7UUEwb0RBQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBbHJEQUM7ZUFBQUE7O1FBc2lDQUM7ZUFBQUE7O1FBOFhBQztlQUFBQTs7UUFySUFDO2VBQUFBOztRQTNxQ0FDO2VBQUFBOztRQTBoQ0FDO2VBQUFBOztRQTc2Q0FDO2VBQUFBOztRQSsxQ0FDO2VBQUFBOztRQTRSQUM7ZUFBQUE7O1FBckdBQztlQUFBQTs7UUExcUJBQztlQUFBQTs7UUEzbUJBQztlQUFBQTs7UUFtMEJBQztlQUFBQTs7UUF1RUFDO2VBQUFBOztRQThJQUM7ZUFBQUE7O1FBbXFCQUM7ZUFBQUE7O1FBeEdBQztlQUFBQTs7UUExU0FDO2VBQUFBOztRQWpFQUM7ZUFBQUE7O1FBMUVBQztlQUFBQTs7UUEvYkFDO2VBQUFBOztRQTJkQUM7ZUFBQUE7O1FBbElBQztlQUFBQTs7UUEzZUFDO2VBQUFBOztRQWtOQUM7ZUFBQUE7O1FBeFFBQztlQUFBQTs7UUE1aENBQztlQUFBQTs7UUFpNENBQztlQUFBQTs7UUExd0JBQztlQUFBQTs7UUFpbUNBQztlQUFBQTs7UUEvaUJBQztlQUFBQTs7UUFzOEJBQztlQUFBQTs7UUFsOUJBQztlQUFBQTs7UUFqOUJBQztlQUFBQTs7UUF5bkJBQztlQUFBQTs7UUF5c0NBQztlQUFBQTs7UUE1cERBQztlQUFBQTs7UUE4eENBQztlQUFBQTs7UUEvbENBQztlQUFBQTs7UUF1QkFDO2VBQUFBOztRQTRxQ0FDO2VBQUFBOztRQTFFQUM7ZUFBQUE7O1FBMEtBQztlQUFBQTs7UUFwbUJBQztlQUFBQTs7UUF1WUFDO2VBQUFBOztRQW9JQUM7ZUFBQUE7O1FBN3BCQUM7ZUFBQUE7O1FBa05BQztlQUFBQTs7UUErYUFDO2VBQUFBOztRQXZyQkFDO2VBQUFBOztRQWpJQUM7ZUFBQUE7O1FBNkxBQztlQUFBQTs7UUFvU0FDO2VBQUFBOztRQXVJQUM7ZUFBQUE7O1FBampEQUM7ZUFBQUE7O1FBd3dEQUM7ZUFBQUE7O1FBeHJCQUM7ZUFBQUE7O1FBaVVBQztlQUFBQTs7UUE1aEJBQztlQUFBQTs7UUE0dENBQztlQUFBQTs7UUF2bERBQztlQUFBQTs7UUFpcURBQztlQUFBQTs7UUE1MkNBQztlQUFBQTs7UUEwTkFDO2VBQUFBOztRQXU4QkFDO2VBQUFBOztRQTFyREFDO2VBQUFBOzs7aUVBalNLO3NCQUVlO3dCQU9vQzs7Ozs7O0FBRWpFLFNBQVNYLGlCQUFpQlksUUFBUSxFQUFFQyxPQUFPO0lBQ2hELElBQUlDO0lBRUosTUFBTUMsV0FBV0MsSUFBQUEseUJBQW1CO0lBRXBDLElBQUlKLGFBQWEsTUFBTTtRQUNyQkUsT0FBT0MsVUFBVyxHQUFHO0lBQ3ZCLE9BQU87UUFDTCxNQUFNRSxPQUFPTCxVQUNQTSxTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCRyxpQkFBaUJMLFNBQVNNLFNBQVMsSUFDbkNDLHVCQUF3QkosV0FBV0U7UUFFekMsSUFBSUUsc0JBQXNCO1lBQ3hCUixPQUFPQyxVQUFXLEdBQUc7UUFDdkIsT0FBTztZQUNMLE1BQU0sRUFBRVEsSUFBSSxFQUFFLEdBQUdDLGlCQUFRLEVBQ25CQyxPQUFPM0osaUJBQWlCOEksVUFBVUMsVUFDbENhLFNBQVNqTyxtQkFBbUJtTixVQUFVQyxVQUN0Q2MsYUFBYXRKLHVCQUF1QnVJLFVBQVVDLFVBQzlDZSxhQUFheEUsdUJBQXVCd0QsVUFBVUMsVUFDOUNnQixhQUFhM0ksdUJBQXVCMEgsVUFBVUMsVUFDOUNpQixjQUFjOUgsd0JBQXdCNEcsVUFBVUMsVUFDaERrQixhQUFhO1lBRW5CbEIsVUFBVTtZQUVWQyxPQUFPLElBQUlTLEtBQUtWLFNBQVNLLFFBQVFELE1BQU1jLFlBQVlOLE1BQU1DLFFBQVFDLFlBQVlDLFlBQVlDLFlBQVlDO1FBQ3ZHO0lBQ0Y7SUFFQSxPQUFPaEI7QUFDVDtBQUVPLFNBQVMxQyxpQkFBaUI0RCxRQUFRLEVBQUVuQixPQUFPO0lBQ2hELE1BQU0sRUFBRW9CLElBQUksRUFBRSxHQUFHVCxpQkFBUSxFQUNuQlAsT0FBT2UsVUFDUGQsU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiakIsT0FBT2xCLGlCQUFpQm9DLFVBQVVuQixVQUNsQ2lCLGNBQWNoSSx3QkFBd0JrSSxVQUFVbkI7SUFFdERBLFVBQVU7SUFFVixNQUFNcUIsT0FBTyxJQUFJRCxLQUFLcEIsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWWpCLE1BQU1nQjtJQUUvRCxPQUFPSTtBQUNUO0FBRU8sU0FBUzdGLGlCQUFpQjhGLFFBQVEsRUFBRXRCLE9BQU87SUFDaEQsTUFBTSxFQUFFdUIsSUFBSSxFQUFFLEdBQUdaLGlCQUFRLEVBQ25CUCxPQUFPa0IsVUFDUGpCLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYk0sWUFBWXJHLHNCQUFzQm1HLFVBQVV0QixVQUM1Q3lCLFlBQVlqSSxzQkFBc0I4SCxVQUFVdEIsVUFDNUMwQixxQkFBcUIzSiwrQkFBK0J1SixVQUFVdEIsVUFDOUQyQixrQkFBa0I1SCw0QkFBNEJ1SCxVQUFVdEIsVUFDeEQ0QixxQkFBcUJ4SCwrQkFBK0JrSCxVQUFVdEI7SUFFcEVBLFVBQVU7SUFFVixNQUFNNkIsT0FBTyxJQUFJTixLQUFLdkIsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWU8sV0FBV0QsV0FBV0Usb0JBQW9CQyxpQkFBaUJDO0lBRXBILE9BQU9DO0FBQ1Q7QUFFTyxTQUFTaEksaUJBQWlCaUksUUFBUSxFQUFFOUIsT0FBTztJQUNoRCxNQUFNLEVBQUUrQixJQUFJLEVBQUUsR0FBR3BCLGlCQUFRLEVBQ3ZCcUIsUUFBUTdKLGtCQUFrQjJKLFVBQVU5QixVQUNwQ2lDLFNBQVNyTSxtQkFBbUJrTSxVQUFVOUIsVUFDdENrQyxXQUFXdksscUJBQXFCbUssVUFBVTlCLFVBQzFDbUMsYUFBYWxQLHVCQUF1QjZPLFVBQVU5QixVQUM5Q29DLGFBQWFDLElBQUFBLGlEQUF5QyxFQUFDSixRQUFRQyxVQUFVQyxhQUN6RS9CLE9BQU8wQixVQUNQekIsU0FBUytCLFlBQ1RsQixhQUFhO0lBRWZsQixVQUFVO0lBRVYsTUFBTXNDLE9BQU8sSUFBSVAsS0FBSy9CLFNBQVNLLFFBQVFELE1BQU1jLFlBQVljLE9BQU9DLFFBQVFDLFVBQVVDO0lBRWxGLE9BQU9HO0FBQ1Q7QUFFTyxTQUFTck0saUJBQWlCc00sUUFBUSxFQUFFdkMsT0FBTztJQUNoRCxNQUFNLEVBQUV3QyxJQUFJLEVBQUUsR0FBRzdCLGlCQUFRLEVBQ25CUCxPQUFPbUMsVUFDUGxDLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYnVCLGVBQWVoTSx5QkFBeUI4TCxVQUFVdkMsVUFDbEQwQyxPQUFPLElBQUlGLEtBQUt4QyxTQUFTSyxRQUFRRCxNQUFNYyxZQUFZdUI7SUFFekQsT0FBT0M7QUFDVDtBQUVPLFNBQVNsTixtQkFBbUJtTixTQUFTLEVBQUUzQyxPQUFPO0lBQ25ELE1BQU0sRUFBRTRDLEtBQUssRUFBRSxHQUFHakMsaUJBQVEsRUFDcEJQLE9BQU91QyxXQUNQdEMsU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNidUIsZUFBZWpNLDBCQUEwQm1NLFdBQVczQyxVQUNwRDZDLFFBQVEsSUFBSUQsTUFBTTVDLFNBQVNLLFFBQVFELE1BQU1jLFlBQVl1QjtJQUUzRCxPQUFPSTtBQUNUO0FBRU8sU0FBU3RPLG1CQUFtQnVPLFNBQVMsRUFBRTlDLE9BQU87SUFDbkQsTUFBTSxFQUFFK0MsS0FBSyxFQUFFLEdBQUdwQyxpQkFBUSxFQUNwQlAsT0FBTzBDLFdBQ1B6QyxTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhO0lBRW5CbEIsVUFBVTtJQUVWLE1BQU1nRCxRQUFRLElBQUlELE1BQU0vQyxTQUFTSyxRQUFRRCxNQUFNYztJQUUvQyxPQUFPOEI7QUFDVDtBQUVPLFNBQVNsTixtQkFBbUJtTixTQUFTLEVBQUVqRCxPQUFPO0lBQ25ELE1BQU0sRUFBRWtELEtBQUssRUFBRSxHQUFHdkMsaUJBQVEsRUFDcEJ3QyxZQUFZRixXQUNaakIsUUFBUS9KLG1CQUFtQmtMLFdBQVduRCxVQUN0Q2lDLFNBQVN2TSxvQkFBb0J5TixXQUFXbkQsVUFDeENvRCxZQUFZdFAsdUJBQXVCcVAsV0FBV25ELFVBQzlDcUQsZUFBZTVHLDBCQUEwQjBHLFdBQVduRCxVQUNwRHNELFlBQVlqSix1QkFBdUI4SSxXQUFXbkQsVUFDOUN1RCxhQUFhdk8sd0JBQXdCbU8sV0FBV25ELFVBQ2hEd0QsY0FBY0MsSUFBQUEsOERBQXNELEVBQUN4QixRQUFRcUIsV0FBV0QsY0FBY0QsWUFDdEdoRCxPQUFPNkMsV0FDUDVDLFNBQVNtRCxhQUNUdEMsYUFBYTtJQUVuQmxCLFVBQVU7SUFFVixNQUFNMEQsUUFBUSxJQUFJUixNQUFNbEQsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWWUsUUFBUW9CLGNBQWNELFdBQVdwQixPQUFPc0IsV0FBV0M7SUFFOUcsT0FBT0c7QUFDVDtBQUVPLFNBQVNsUCxtQkFBbUJtUCxTQUFTLEVBQUUzRCxPQUFPO0lBQ25ELE1BQU0sRUFBRTRELEtBQUssRUFBRSxHQUFHakQsaUJBQVEsRUFDcEJQLE9BQU91RCxXQUNQdEQsU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiMkMsY0FBY3pSLHlCQUF5QnVSLFdBQVczRCxVQUNsRHlDLGVBQWVsTSwwQkFBMEJvTixXQUFXM0Q7SUFFMURBLFVBQVU7SUFFVixNQUFNOEQsUUFBUSxJQUFJRixNQUFNNUQsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWTJDLGFBQWFwQjtJQUV4RSxPQUFPcUI7QUFDVDtBQUVPLFNBQVM1TCxtQkFBbUI2TCxTQUFTLEVBQUUvRCxPQUFPO0lBQ25ELE1BQU0sRUFBRWdFLEtBQUssRUFBRSxHQUFHckQsaUJBQVEsRUFDcEJQLE9BQU8yRCxXQUNQMUQsU0FBUyxNQUNUYSxhQUFhLE1BQ2IrQyxhQUFhN1Asd0JBQXdCMlAsV0FBVy9EO0lBRXREQSxVQUFVO0lBRVYsTUFBTWdDLFFBQVEsSUFBSWdDLE1BQU1oRSxTQUFTSyxRQUFRRCxNQUFNYyxZQUFZK0M7SUFFM0QsT0FBT2pDO0FBQ1Q7QUFFTyxTQUFTM1AsbUJBQW1CNlIsU0FBUyxFQUFFbEUsT0FBTztJQUNuRCxNQUFNLEVBQUVtRSxLQUFLLEVBQUUsR0FBR3hELGlCQUFRLEVBQ3BCd0MsWUFBWWUsV0FDWmxDLFFBQVEvSixtQkFBbUJrTCxXQUFXbkQsVUFDdENpQyxTQUFTdk0sb0JBQW9CeU4sV0FBV25ELFVBQ3hDb0QsWUFBWXRQLHVCQUF1QnFQLFdBQVduRCxVQUM5Q3FELGVBQWU1RywwQkFBMEIwRyxXQUFXbkQsVUFDcERzRCxZQUFZakosdUJBQXVCOEksV0FBV25ELFVBQzlDdUQsYUFBYXZPLHdCQUF3Qm1PLFdBQVduRCxVQUNoRHdELGNBQWNDLElBQUFBLDhEQUFzRCxFQUFDeEIsUUFBUXFCLFdBQVdELGNBQWNELFlBQ3RHaEQsT0FBTzhELFdBQ1A3RCxTQUFTbUQsYUFDVHRDLGFBQWE7SUFFbkJsQixVQUFVO0lBRVYsTUFBTW9FLFFBQVEsSUFBSUQsTUFBTW5FLFNBQVNLLFFBQVFELE1BQU1jLFlBQVllLFFBQVFvQixjQUFjRCxXQUFXcEIsT0FBT3NCLFdBQVdDO0lBRTlHLE9BQU9hO0FBQ1Q7QUFFTyxTQUFTcEsscUJBQXFCcUssVUFBVSxFQUFFckUsT0FBTztJQUN0RCxNQUFNLEVBQUVzRSxNQUFNLEVBQUUsR0FBRzNELGlCQUFRLEVBQ3JCcUIsUUFBUTVKLG9CQUFvQmlNLFlBQVlyRSxVQUN4QzZDLFFBQVFwTixvQkFBb0I0TyxZQUFZckUsVUFDeENvRCxZQUFZcFAsd0JBQXdCcVEsWUFBWXJFLFVBQ2hEcUQsZUFBZTNHLDJCQUEyQjJILFlBQVlyRSxVQUN0RHVFLGNBQWNsUiwwQkFBMEJnUixZQUFZckUsVUFDcER3RSxlQUFlQyxJQUFBQSxxREFBNkMsRUFBQzVCLE9BQU9RLGNBQWNELFlBQ2xGaEQsT0FBT2lFLFlBQ1BoRSxTQUFTbUUsY0FDVHRELGFBQWEsTUFDYndELFNBQVMsSUFBSUosT0FBT3RFLFNBQVNLLFFBQVFELE1BQU1jLFlBQVkyQixPQUFPUSxjQUFjRCxXQUFXcEIsT0FBT3VDO0lBRXBHLE9BQU9HO0FBQ1Q7QUFFTyxTQUFTekssdUJBQXVCMEssV0FBVyxFQUFFM0UsT0FBTztJQUN6RCxNQUFNLEVBQUU0RSxPQUFPLEVBQUUsR0FBR2pFLGlCQUFRLEVBQ3RCa0Usa0JBQWtCRixZQUFZRyxrQkFBa0IsSUFDaER2QixhQUFhcE8sOEJBQThCMFAsaUJBQWlCN0UsVUFDNUQrRSxjQUFjbFIsMkJBQTJCOFEsYUFBYTNFLFVBQ3REZ0YsUUFBUXRTLHFCQUFxQmlTLGFBQWEzRSxVQUMxQ2lGLGdCQUFnQkMsSUFBQUEsc0RBQThDLEVBQUMzQixZQUFZd0IsYUFBYUMsUUFDeEY1RSxPQUFPdUUsYUFDUHRFLFNBQVM0RSxlQUNUL0QsYUFBYTtJQUVuQmxCLFVBQVU7SUFFVixNQUFNbUYsVUFBVSxJQUFJUCxRQUFRNUUsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWXFDLFlBQVl3QixhQUFhQztJQUV4RixPQUFPRztBQUNUO0FBRU8sU0FBUzFOLHVCQUF1QjJOLFdBQVcsRUFBRXBGLE9BQU87SUFDekQsTUFBTSxFQUFFcUYsT0FBTyxFQUFFLEdBQUcxRSxpQkFBUSxFQUN0QlAsT0FBT2dGLGFBQ1AvRSxTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2JPLFlBQVluSSx5QkFBeUI4TCxhQUFhcEYsVUFDbER3QixZQUFZdkcseUJBQXlCbUssYUFBYXBGLFVBQ2xEMEIscUJBQXFCN0osa0NBQWtDdU4sYUFBYXBGLFVBQ3BFc0YsVUFBVSxJQUFJRCxRQUFRckYsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWU8sV0FBV0QsV0FBV0U7SUFFckYsT0FBTzREO0FBQ1Q7QUFFTyxTQUFTeEgsdUJBQXVCeUgsV0FBVyxFQUFFdkYsT0FBTztJQUN6RCxNQUFNLEVBQUV3RixPQUFPLEVBQUUsR0FBRzdFLGlCQUFRLEVBQ3RCd0MsWUFBWW9DLGFBQ1p2RCxRQUFRL0osbUJBQW1Ca0wsV0FBV25ELFVBQ3RDaUMsU0FBU3ZNLG9CQUFvQnlOLFdBQVduRCxVQUN4Q29ELFlBQVl0UCx1QkFBdUJxUCxXQUFXbkQsVUFDOUNxRCxlQUFlNUcsMEJBQTBCMEcsV0FBV25ELFVBQ3BEc0QsWUFBWWpKLHVCQUF1QjhJLFdBQVduRCxVQUM5Q3VELGFBQWF2Tyx3QkFBd0JtTyxXQUFXbkQsVUFDaER3RCxjQUFjQyxJQUFBQSw4REFBc0QsRUFBQ3hCLFFBQVFxQixXQUFXRCxjQUFjRCxZQUN0R2hELE9BQU9tRixhQUNQbEYsU0FBU21ELGFBQ1R0QyxhQUFhO0lBRW5CbEIsVUFBVTtJQUVWLE1BQU15RixVQUFVLElBQUlELFFBQVF4RixTQUFTSyxRQUFRRCxNQUFNYyxZQUFZZSxRQUFRb0IsY0FBY0QsV0FBV3BCLE9BQU9zQixXQUFXQztJQUVsSCxPQUFPa0M7QUFDVDtBQUVPLFNBQVM3TSx5QkFBeUI4TSxZQUFZLEVBQUUxRixPQUFPO0lBQzVELElBQUkyRixXQUFXO0lBRWYsSUFBSUQsZ0JBQWdCLE1BQU07UUFDeEIsTUFBTSxFQUFFRSxRQUFRLEVBQUUsR0FBR2pGLGlCQUFRLEVBQ3ZCUCxPQUFPc0YsY0FDUHJGLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYkcsT0FBTy9ELHFCQUFxQm9JLGNBQWMxRixVQUMxQ0MsT0FBT25CLHFCQUFxQjRHLGNBQWMxRjtRQUVoREEsVUFBVTtRQUVWMkYsV0FBVyxJQUFJQyxTQUFTNUYsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWUcsTUFBTXBCO0lBQ25FO0lBRUEsT0FBTzBGO0FBQ1Q7QUFFTyxTQUFTN0YseUJBQXlCK0YsWUFBWSxFQUFFN0YsT0FBTztJQUM1RCxNQUFNLEVBQUU4RixRQUFRLEVBQUUsR0FBR25GLGlCQUFRLEVBQ3ZCUCxPQUFPeUYsY0FDUHhGLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYmpCLE9BQU9aLHFCQUFxQndHLGNBQWM3RixVQUMxQytGLGFBQWF6USwyQkFBMkJ1USxjQUFjN0YsVUFDdERpQixjQUFjNUgsNEJBQTRCd00sY0FBYzdGO0lBRTlEQSxVQUFVO0lBRVYsTUFBTWdHLFdBQVcsSUFBSUYsU0FBUzlGLFNBQVNLLFFBQVFELE1BQU1jLFlBQVlqQixNQUFNOEYsWUFBWTlFO0lBRW5GLE9BQU8rRTtBQUNUO0FBRU8sU0FBUzdKLHlCQUF5QjhKLFlBQVksRUFBRWpHLE9BQU87SUFDNUQsTUFBTSxFQUFFa0csUUFBUSxFQUFFLEdBQUd2RixpQkFBUSxFQUN2QlAsT0FBTzZGLGNBQ1AvRSxhQUFhLE1BQ2JtQyxlQUFlMUcsNkJBQTZCc0osY0FBY2pHLFVBQzFEbUcsZ0JBQWdCckssOEJBQThCbUssY0FBY2pHLFVBQzVEb0csaUJBQWlCQyxJQUFBQSxzREFBOEMsRUFBQ2hELGNBQWM4QyxlQUFlbkcsVUFDN0ZLLFNBQVMrRixnQkFBaUIsR0FBRztJQUVuQ3BHLFVBQVU7SUFFVixNQUFNc0csV0FBVyxJQUFJSixTQUFTbEcsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWW1DLGNBQWM4QztJQUUvRSxPQUFPRztBQUNUO0FBRU8sU0FBU2pTLHlCQUF5QmtTLFlBQVksRUFBRXZHLE9BQU87SUFDNUQsTUFBTSxFQUFFd0csUUFBUSxFQUFFLEdBQUc3RixpQkFBUSxFQUN2QlAsT0FBT21HLGNBQ1BsRyxTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2J1RixVQUFVclAsd0JBQXdCbVAsY0FBY3ZHLFVBQ2hEMEcsV0FBVzdRLHlCQUF5QjBRLGNBQWN2RyxVQUNsRDJHLFlBQVkvTSwwQkFBMEIyTSxjQUFjdkc7SUFFMURBLFVBQVU7SUFFVixNQUFNNEcsV0FBVyxJQUFJSixTQUFTeEcsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWXVGLFNBQVNDLFVBQVVDO0lBRXBGLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTN1MsMkJBQTJCOFMsYUFBYSxFQUFFN0csT0FBTztJQUMvRCxNQUFNLEVBQUU4RyxTQUFTLEVBQUUsR0FBR25HLGlCQUFRLEVBQ3hCUCxPQUFPeUcsZUFDUHhHLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYk0sWUFBWTFHLDJCQUEyQitMLGVBQWU3RyxVQUN0RG9ELFlBQVksSUFBSTBELFVBQVU5RyxTQUFTSyxRQUFRRCxNQUFNYyxZQUFZTTtJQUVuRSxPQUFPNEI7QUFDVDtBQUVPLFNBQVNsSSwyQkFBMkI2TCxhQUFhLEVBQUUvRyxPQUFPO0lBQy9ELE1BQU0sRUFBRWdILFNBQVMsRUFBRSxHQUFHckcsaUJBQVEsRUFDeEJQLE9BQU8yRyxlQUNQMUcsU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiK0YsZUFBZTdLLDhCQUE4QjJLLGVBQWUvRztJQUVsRUEsVUFBVTtJQUVWLE1BQU13QixZQUFZLElBQUl3RixVQUFVaEgsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWStGO0lBRW5FLE9BQU96RjtBQUNUO0FBRU8sU0FBU2xILDJCQUEyQjRNLGFBQWEsRUFBRWxILE9BQU87SUFDL0QsTUFBTSxFQUFFbUgsU0FBUyxFQUFFLEdBQUd4RyxpQkFBUSxFQUN4QlAsT0FBTzhHLGVBQ1A3RyxTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2JrRyxRQUFRekosdUJBQXVCdUosZUFBZWxILFVBQzlDc0QsWUFBWSxJQUFJNkQsVUFBVW5ILFNBQVNLLFFBQVFELE1BQU1jLFlBQVlrRztJQUVuRSxPQUFPOUQ7QUFDVDtBQUVPLFNBQVMvSiwyQkFBMkI4TixhQUFhLEVBQUVySCxPQUFPO0lBQy9ELE1BQU0sRUFBRXNILFNBQVMsRUFBRSxHQUFHM0csaUJBQVEsRUFDeEJQLE9BQU9pSCxlQUNQaEgsU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNidUIsZUFBZTdMLDhCQUE4QnlRLGVBQWVySCxVQUM1RHlCLFlBQVksSUFBSTZGLFVBQVV0SCxTQUFTSyxRQUFRRCxNQUFNYyxZQUFZdUI7SUFFbkUsT0FBT2hCO0FBQ1Q7QUFFTyxTQUFTcEssMkJBQTJCa1EsYUFBYSxFQUFFdkgsT0FBTztJQUMvRCxNQUFNLEVBQUV3SCxTQUFTLEVBQUUsR0FBRzdHLGlCQUFRLEVBQ3hCUCxPQUFPbUgsZUFDUGxILFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYk4sT0FBTzdKLHFCQUFxQndRLGVBQWV2SCxVQUMzQytGLGFBQWExUSwyQkFBMkJrUyxlQUFldkg7SUFFN0RBLFVBQVU7SUFFVixNQUFNeUgsWUFBWSxJQUFJRCxVQUFVeEgsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWU4sTUFBTW1GO0lBRXpFLE9BQU8wQjtBQUNUO0FBRU8sU0FBUzVTLDJCQUEyQjZTLGFBQWEsRUFBRTFILE9BQU87SUFDL0QsTUFBTSxFQUFFMkgsU0FBUyxFQUFFLEdBQUdoSCxpQkFBUSxFQUN4QlAsT0FBT3NILGVBQ1BySCxTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2JHLE9BQU9qRSxzQkFBc0JzSyxlQUFlMUgsVUFDNUNDLE9BQU90QixzQkFBc0IrSSxlQUFlMUgsVUFDNUN1RCxhQUFhck8sNEJBQTRCd1MsZUFBZTFIO0lBRTlEQSxVQUFVO0lBRVYsTUFBTTRILFlBQVksSUFBSUQsVUFBVTNILFNBQVNLLFFBQVFELE1BQU1jLFlBQVlHLE1BQU1wQixNQUFNc0Q7SUFFL0UsT0FBT3FFO0FBQ1Q7QUFFTyxTQUFTM0osMkJBQTJCNEosYUFBYSxFQUFFN0gsT0FBTztJQUMvRCxNQUFNLEVBQUU4SCxTQUFTLEVBQUUsR0FBR25ILGlCQUFRLEVBQ3hCUCxPQUFPeUgsZUFDUHhILFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYmpCLE9BQU9qQixzQkFBc0I2SSxlQUFlN0gsVUFDNUMrSCxXQUFXekksMEJBQTBCdUksZUFBZTdIO0lBRTFEQSxVQUFVO0lBRVYsTUFBTWdJLFlBQVksSUFBSUYsVUFBVTlILFNBQVNLLFFBQVFELE1BQU1jLFlBQVlqQixNQUFNOEg7SUFFekUsT0FBT0M7QUFDVDtBQUVPLFNBQVM1Uyw2QkFBNkI2UyxhQUFhLEVBQUVqSSxPQUFPO0lBQ2pFLE1BQU0sRUFBRWtJLFVBQVUsRUFBRSxHQUFHdkgsaUJBQVEsRUFDekJQLE9BQU82SCxlQUNQNUgsU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiTSxZQUFZekcsNEJBQTRCa04sZUFBZWpJLFVBQ3ZEMEIscUJBQXFCOUoscUNBQXFDcVEsZUFBZWpJO0lBRS9FQSxVQUFVO0lBRVYsTUFBTW1JLGFBQWEsSUFBSUQsV0FBV2xJLFNBQVNLLFFBQVFELE1BQU1jLFlBQVlNLFdBQVdFO0lBRWhGLE9BQU95RztBQUNUO0FBRU8sU0FBUy9VLDZCQUE2QmdWLGNBQWMsRUFBRXBJLE9BQU87SUFDbEUsTUFBTSxFQUFFcUksVUFBVSxFQUFFLEdBQUcxSCxpQkFBUSxFQUN6QlAsT0FBT2dJLGdCQUNQL0gsU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiTSxZQUFZNUcsNEJBQTRCd04sZ0JBQWdCcEksVUFDeER5QyxlQUFlbk0sK0JBQStCOFIsZ0JBQWdCcEksVUFDOURzSSxhQUFhLElBQUlELFdBQVdySSxTQUFTSyxRQUFRRCxNQUFNYyxZQUFZTSxXQUFXaUI7SUFFaEYsT0FBTzZGO0FBQ1Q7QUFFTyxTQUFTcFYsNkJBQTZCcVYsY0FBYyxFQUFFdkksT0FBTztJQUNsRSxNQUFNLEVBQUV3SSxVQUFVLEVBQUUsR0FBRzdILGlCQUFRLEVBQ3pCd0MsWUFBWW9GLGdCQUNadkcsUUFBUS9KLG1CQUFtQmtMLFdBQVduRCxVQUN0Q2lDLFNBQVN2TSxvQkFBb0J5TixXQUFXbkQsVUFDeENvRCxZQUFZdFAsdUJBQXVCcVAsV0FBV25ELFVBQzlDcUQsZUFBZTVHLDBCQUEwQjBHLFdBQVduRCxVQUNwRHNELFlBQVlqSix1QkFBdUI4SSxXQUFXbkQsVUFDOUN1RCxhQUFhdk8sd0JBQXdCbU8sV0FBV25ELFVBQ2hEd0QsY0FBY0MsSUFBQUEsOERBQXNELEVBQUN4QixRQUFRcUIsV0FBV0QsY0FBY0QsWUFDdEdoRCxPQUFPbUksZ0JBQ1BsSSxTQUFTbUQsYUFDVHRDLGFBQWE7SUFFbkJsQixVQUFVO0lBRVYsTUFBTXlJLGFBQWEsSUFBSUQsV0FBV3hJLFNBQVNLLFFBQVFELE1BQU1jLFlBQVllLFFBQVFvQixjQUFjRCxXQUFXcEIsT0FBT3NCLFdBQVdDO0lBRXhILE9BQU9rRjtBQUNUO0FBRU8sU0FBUzFWLDZCQUE2QjJWLGNBQWMsRUFBRTFJLE9BQU87SUFDbEUsTUFBTSxFQUFFMkksVUFBVSxFQUFFLEdBQUdoSSxpQkFBUSxFQUN6QlAsT0FBT3NJLGdCQUNQckksU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiTSxZQUFZOUcsNEJBQTRCZ08sZ0JBQWdCMUk7SUFFOURBLFVBQVU7SUFFVixNQUFNNEksYUFBYSxJQUFJRCxXQUFXM0ksU0FBU0ssUUFBUUQsTUFBTWMsWUFBWU07SUFFckUsT0FBT29IO0FBQ1Q7QUFFTyxTQUFTNVYsNkJBQTZCNlYsY0FBYyxFQUFFN0ksT0FBTztJQUNsRSxNQUFNLEVBQUU4SSxVQUFVLEVBQUUsR0FBR25JLGlCQUFRLEVBQ3pCUCxPQUFPeUksZ0JBQ1B4SSxTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2JNLFlBQVk3Ryw0QkFBNEJrTyxnQkFBZ0I3SSxVQUN4RG1DLGFBQWEsSUFBSTJHLFdBQVc5SSxTQUFTSyxRQUFRRCxNQUFNYyxZQUFZTTtJQUVyRSxPQUFPVztBQUNUO0FBRU8sU0FBU2hPLDZCQUE2QjRVLGNBQWMsRUFBRS9JLE9BQU87SUFDbEUsTUFBTSxFQUFFZ0osVUFBVSxFQUFFLEdBQUdySSxpQkFBUSxFQUN6QlAsT0FBTzJJLGdCQUNQMUksU0FBUyxNQUNUYSxhQUFhLE1BQ2IrSCxtQkFBbUJ0TixtQ0FBbUNvTixnQkFBZ0IvSTtJQUU1RUEsVUFBVTtJQUVWLE1BQU1pRSxhQUFhLElBQUkrRSxXQUFXaEosU0FBU0ssUUFBUUQsTUFBTWMsWUFBWStIO0lBRXJFLE9BQU9oRjtBQUNUO0FBRU8sU0FBU3hFLDZCQUE2QnlKLGNBQWMsRUFBRWxKLE9BQU87SUFDbEUsTUFBTSxFQUFFbUosVUFBVSxFQUFFLEdBQUd4SSxpQkFBUSxFQUN6QlAsT0FBTzhJLGdCQUNQN0ksU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiTixPQUFPMUosdUJBQXVCZ1MsZ0JBQWdCbEo7SUFFcERBLFVBQVU7SUFFVixNQUFNb0osYUFBYSxJQUFJRCxXQUFXbkosU0FBU0ssUUFBUUQsTUFBTWMsWUFBWU47SUFFckUsT0FBT3dJO0FBQ1Q7QUFFTyxTQUFTbFgsNkJBQTZCbVgsY0FBYyxFQUFFckosT0FBTztJQUNsRSxNQUFNLEVBQUVzSixVQUFVLEVBQUUsR0FBRzNJLGlCQUFRLEVBQ3pCUCxPQUFPaUosZ0JBQ1BoSixTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2J3QixPQUFPMU0sdUJBQXVCcVQsZ0JBQWdCckosVUFDOUN3QixZQUFZaEgsNEJBQTRCNk8sZ0JBQWdCcko7SUFFOURBLFVBQVU7SUFFVixNQUFNdUosYUFBYSxJQUFJRCxXQUFXdEosU0FBU0ssUUFBUUQsTUFBTWMsWUFBWXdCLE1BQU1sQjtJQUUzRSxPQUFPK0g7QUFDVDtBQUVPLFNBQVM5ViwrQkFBK0IrVixlQUFlLEVBQUV4SixPQUFPO0lBQ3JFLE1BQU0sRUFBRXlKLFdBQVcsRUFBRSxHQUFHOUksaUJBQVEsRUFDMUJQLE9BQU9vSixpQkFDUG5KLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYkcsT0FBT3BFLHdCQUF3QnVNLGlCQUFpQnhKLFVBQ2hEQyxPQUFPekIsd0JBQXdCZ0wsaUJBQWlCeEosVUFDaER1RCxhQUFhdE8sOEJBQThCdVUsaUJBQWlCeEo7SUFFbEVBLFVBQVU7SUFFVixNQUFNMEosY0FBYyxJQUFJRCxZQUFZekosU0FBU0ssUUFBUUQsTUFBTWMsWUFBWUcsTUFBTXBCLE1BQU1zRDtJQUVuRixPQUFPbUc7QUFDVDtBQUVPLFNBQVNsTiwrQkFBK0JtTixlQUFlLEVBQUUzSixPQUFPO0lBQ3JFLE1BQU0sRUFBRTRKLFdBQVcsRUFBRSxHQUFHakosaUJBQVEsRUFDMUJQLE9BQU91SixpQkFDUHRKLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYk8sWUFBWWhJLDZCQUE2QmtRLGlCQUFpQjNKLFVBQzFEd0IsWUFBWXBHLDZCQUE2QnVPLGlCQUFpQjNKLFVBQzFEMEIscUJBQXFCMUosc0NBQXNDMlIsaUJBQWlCM0osVUFDNUU2SixjQUFjLElBQUlELFlBQVk1SixTQUFTSyxRQUFRRCxNQUFNYyxZQUFZTyxXQUFXRCxXQUFXRTtJQUU3RixPQUFPbUk7QUFDVDtBQUVPLFNBQVNsVCxpQ0FBaUNtVCxnQkFBZ0IsRUFBRTlKLE9BQU87SUFDeEUsTUFBTSxFQUFFK0osWUFBWSxFQUFFLEdBQUdwSixpQkFBUSxFQUMzQlAsT0FBTzBKLGtCQUNQekosU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiTixPQUFPOUoseUJBQXlCZ1Qsa0JBQWtCOUosVUFDbERxQixPQUFPaEUseUJBQXlCeU0sa0JBQWtCOUosVUFDbERDLE9BQU9yQix5QkFBeUJrTCxrQkFBa0I5SixVQUNsRGdLLFdBQVc7SUFFakJoSyxVQUFVO0lBRVYsTUFBTXlDLGVBQWUsSUFBSXNILGFBQWEvSixTQUFTSyxRQUFRRCxNQUFNYyxZQUFZTixNQUFNUyxNQUFNcEIsTUFBTStKO0lBRTNGLE9BQU92SDtBQUNUO0FBRU8sU0FBUzVHLG1DQUFtQ29PLGlCQUFpQixFQUFFakssT0FBTztJQUMzRSxNQUFNLEVBQUVrSyxhQUFhLEVBQUUsR0FBR3ZKLGlCQUFRLEVBQzVCUCxPQUFPNkosbUJBQ1A1SixTQUFTLE1BQ1RhLGFBQWEsTUFDYitILG1CQUFtQnJOLHNDQUFzQ3FPLG1CQUFtQmpLO0lBRWxGQSxVQUFVO0lBRVYsTUFBTW1HLGdCQUFnQixJQUFJK0QsY0FBY2xLLFNBQVNLLFFBQVFELE1BQU1jLFlBQVkrSDtJQUUzRSxPQUFPOUM7QUFDVDtBQUVPLFNBQVNoSSxtQ0FBbUNnTSxpQkFBaUIsRUFBRW5LLE9BQU87SUFDM0UsTUFBTSxFQUFFb0ssYUFBYSxFQUFFLEdBQUd6SixpQkFBUSxFQUM1QlAsT0FBTytKLG1CQUNQOUosU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiRyxPQUFPN0QsMEJBQTBCMk0sbUJBQW1CbkssVUFDcERDLE9BQU9oQiwwQkFBMEJrTCxtQkFBbUJuSztJQUUxREEsVUFBVTtJQUVWLE1BQU1xSyxnQkFBZ0IsSUFBSUQsY0FBY3BLLFNBQVNLLFFBQVFELE1BQU1jLFlBQVlHLE1BQU1wQjtJQUVqRixPQUFPb0s7QUFDVDtBQUVPLFNBQVMzTyxxQ0FBcUM0TyxrQkFBa0IsRUFBRXRLLE9BQU87SUFDOUUsTUFBTTZCLE9BQU9wRywyQkFBMkI2TyxvQkFBb0J0SyxVQUN0RHNHLFdBQVdwSywrQkFBK0JvTyxvQkFBb0J0SyxVQUM5RHVLLGlCQUFrQjFJLFFBQVF5RTtJQUVoQyxPQUFPaUU7QUFDVDtBQUVPLFNBQVNuTSx1Q0FBdUNvTSxtQkFBbUIsRUFBRXhLLE9BQU87SUFDakYsTUFBTSxFQUFFeUssZUFBZSxFQUFFLEdBQUc5SixpQkFBUSxFQUM5QlAsT0FBT29LLHFCQUNQbkssU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiakIsT0FBT2YsNEJBQTRCc0wscUJBQXFCeEssVUFDeERhLFNBQVNsTyw4QkFBOEI2WCxxQkFBcUJ4SyxVQUM1RGUsYUFBYXpFLGtDQUFrQ2tPLHFCQUFxQnhLLFVBQ3BFaUIsY0FBYy9ILG1DQUFtQ3NSLHFCQUFxQnhLO0lBRTVFQSxVQUFVO0lBRVYsTUFBTTBLLGtCQUFrQixJQUFJRCxnQkFBZ0J6SyxTQUFTSyxRQUFRRCxNQUFNYyxZQUFZakIsTUFBTVksUUFBUUUsWUFBWUU7SUFFekcsT0FBT3lKO0FBQ1Q7QUFFTyxTQUFTNVEsdUNBQXVDNlEsbUJBQW1CLEVBQUUzSyxPQUFPO0lBQ2pGLE1BQU0sRUFBRTRLLGVBQWUsRUFBRSxHQUFHakssaUJBQVEsRUFDOUJQLE9BQU91SyxxQkFDUHRLLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYndCLE9BQU94TSw0QkFBNEJ5VSxxQkFBcUIzSyxVQUN4RDhELFFBQVFyUCw2QkFBNkJrVyxxQkFBcUIzSztJQUVoRUEsVUFBVTtJQUVWLE1BQU0yQixrQkFBa0IsSUFBSWlKLGdCQUFnQjVLLFNBQVNLLFFBQVFELE1BQU1jLFlBQVl3QixNQUFNb0I7SUFFckYsT0FBT25DO0FBQ1Q7QUFFTyxTQUFTMU4seUNBQXlDNFcsb0JBQW9CLEVBQUU3SyxPQUFPO0lBQ3BGLE1BQU0sRUFBRThLLGdCQUFnQixFQUFFLEdBQUduSyxpQkFBUSxFQUMvQlAsT0FBT3lLLHNCQUNQeEssU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNidUYsVUFBVW9FLHFCQUFxQkUsU0FBUyxJQUN4QzFKLE9BQU9sRSw2QkFBNkIwTixzQkFBc0I3SztJQUVoRUEsVUFBVTtJQUVWLE1BQU1nTCxtQkFBbUIsSUFBSUYsaUJBQWlCOUssU0FBU0ssUUFBUUQsTUFBTWMsWUFBWUcsTUFBTW9GO0lBRXZGLE9BQU91RTtBQUNUO0FBRU8sU0FBU3ZOLHlDQUF5Q3dOLG9CQUFvQixFQUFFQyxjQUFjLEVBQUVDLGVBQWU7SUFDNUcsTUFBTSxFQUFFQyxnQkFBZ0IsRUFBRSxHQUFHekssaUJBQVEsRUFDL0JQLE9BQU82SyxzQkFDUGpMLFVBQVVtTCxpQkFDVjlLLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJpTCxXQUFXO1FBQ1RIO1FBQ0FDO0tBQ0QsRUFDRGpLLGFBQWEsTUFDYm9LLGFBQWF4TyxtQ0FBbUNtTyxzQkFBc0JDLGlCQUN0RUssa0JBQWtCNVIsd0NBQXdDc1Isc0JBQXNCRSxrQkFDaEZLLG1CQUFtQixJQUFJSixpQkFBaUJDLFVBQVVoTCxRQUFRRCxNQUFNYyxZQUFZb0ssWUFBWUM7SUFFOUYsT0FBT0M7QUFDVDtBQUVPLFNBQVNsVCwyQ0FBMkNtVCxxQkFBcUIsRUFBRXpMLE9BQU87SUFDdkYsTUFBTSxFQUFFMEwsaUJBQWlCLEVBQUUsR0FBRy9LLGlCQUFRLEVBQ2hDUCxPQUFPcUwsdUJBQ1BwTCxTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2J5SyxjQUFjNVAscUNBQXFDMFAsdUJBQXVCekwsVUFDMUU0TCxlQUFlL1Msc0NBQXNDNFMsdUJBQXVCekw7SUFFbEZBLFVBQVU7SUFFVixNQUFNNkwsb0JBQW9CLElBQUlILGtCQUFrQjFMLFNBQVNLLFFBQVFELE1BQU1jLFlBQVl5SyxhQUFhQztJQUVoRyxPQUFPQztBQUNUO0FBRU8sU0FBUzVQLDJDQUEyQzZQLHFCQUFxQixFQUFFOUwsT0FBTztJQUN2RixNQUFNLEVBQUUrTCxpQkFBaUIsRUFBRSxHQUFHcEwsaUJBQVEsRUFDaENQLE9BQU8wTCx1QkFDUHpMLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYjhLLGFBQWF6USxvQ0FBb0N1USx1QkFBdUI5TDtJQUU5RUEsVUFBVTtJQUVWLE1BQU1pTSxvQkFBb0IsSUFBSUYsa0JBQWtCL0wsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWThLO0lBRW5GLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTclksMkNBQTJDc1kscUJBQXFCLEVBQUVsTSxPQUFPO0lBQ3ZGLE1BQU0sRUFBRW1NLGlCQUFpQixFQUFFLEdBQUd4TCxpQkFBUSxFQUNoQ1AsT0FBTzhMLHVCQUNQaEwsYUFBYSxNQUNiakIsT0FBT3hCLDhCQUE4QnlOLHVCQUF1QmxNLFVBQzVEZSxhQUFhMUUsb0NBQW9DNlAsdUJBQXVCbE0sVUFDeEVpQixjQUFjbEkscUNBQXFDbVQsdUJBQXVCbE0sVUFDMUVvTSx1QkFBdUIzVCw4Q0FBOEN5VCx1QkFBdUJsTSxVQUM1RnFNLDBCQUEwQkMsSUFBQUEsK0RBQXVELEVBQUNyTSxNQUFNYyxZQUFZRSxjQUNwR1osU0FBU2dNLHlCQUEwQixHQUFHO0lBRTVDck0sVUFBVTtJQUVWLE1BQU11TSxvQkFBb0IsSUFBSUosa0JBQWtCbk0sU0FBU0ssUUFBUUQsTUFBTWMsWUFBWWpCLE1BQU1jLFlBQVlFLGFBQWFtTDtJQUVsSCxPQUFPRztBQUNUO0FBRU8sU0FBU3pVLDZDQUE2QzBVLHNCQUFzQixFQUFFeE0sT0FBTztJQUMxRixNQUFNLEVBQUV5TSxrQkFBa0IsRUFBRSxHQUFHOUwsaUJBQVEsRUFDakNDLE9BQU81SiwrQkFBK0J3Vix3QkFBd0J4TSxVQUM5RDBNLGFBQWFuVixxQ0FBcUNpVix3QkFBd0J4TSxVQUMxRTJNLDJCQUEyQkMsSUFBQUEscURBQTZDLEVBQUNoTSxNQUFNOEwsYUFDL0V0TSxPQUFPb00sd0JBQ1BuTSxTQUFTc00sMEJBQ1R6TCxhQUFhO0lBRW5CbEIsVUFBVTtJQUVWLE1BQU0wQixxQkFBcUIsSUFBSStLLG1CQUFtQnpNLFNBQVNLLFFBQVFELE1BQU1jLFlBQVlOLE1BQU04TDtJQUUzRixPQUFPaEw7QUFDVDtBQUVPLFNBQVNoTyw2Q0FBNkNtWixzQkFBc0IsRUFBRTdNLE9BQU87SUFDMUYsTUFBTSxFQUFFOE0sa0JBQWtCLEVBQUUsR0FBR25NLGlCQUFRLEVBQ2pDUCxPQUFPeU0sd0JBQ1B4TSxTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2JHLE9BQU9uRSwrQkFBK0IyUCx3QkFBd0I3TSxVQUM5RHlHLFVBQVV0UCxrQ0FBa0MwVix3QkFBd0I3TSxVQUNwRXdCLFlBQVkzRyxvQ0FBb0NnUyx3QkFBd0I3TTtJQUU5RUEsVUFBVTtJQUVWLE1BQU0rTSxxQkFBcUIsSUFBSUQsbUJBQW1COU0sU0FBU0ssUUFBUUQsTUFBTWMsWUFBWUcsTUFBTW9GLFNBQVNqRjtJQUVwRyxPQUFPdUw7QUFDVDtBQUVPLFNBQVM3Uyw2Q0FBNkM4UyxzQkFBc0IsRUFBRWhOLE9BQU87SUFDMUYsTUFBTSxFQUFFaU4sa0JBQWtCLEVBQUUsR0FBR3RNLGlCQUFRLEVBQ2pDUCxPQUFPNE0sd0JBQ1AzTSxTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2J3QixPQUFPdk0sK0JBQStCNlcsd0JBQXdCaE4sVUFDOURvSCxRQUFRMUosZ0NBQWdDc1Asd0JBQXdCaE47SUFFdEVBLFVBQVU7SUFFVixNQUFNNEIscUJBQXFCLElBQUlxTCxtQkFBbUJqTixTQUFTSyxRQUFRRCxNQUFNYyxZQUFZd0IsTUFBTTBFO0lBRTNGLE9BQU94RjtBQUNUO0FBRU8sU0FBU3JNLDZDQUE2QzJYLHNCQUFzQixFQUFFbE4sT0FBTztJQUMxRixNQUFNLEVBQUVtTixrQkFBa0IsRUFBRSxHQUFHeE0saUJBQVEsRUFDakNQLE9BQU84TSx3QkFDUDdNLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYk0sWUFBWXhHLG9DQUFvQ2tTLHdCQUF3QmxOLFVBQ3hFb04scUJBQXFCLElBQUlELG1CQUFtQm5OLFNBQVNLLFFBQVFELE1BQU1jLFlBQVlNO0lBRXJGLE9BQU80TDtBQUNUO0FBRU8sU0FBUzNhLDZDQUE2QzRhLHNCQUFzQixFQUFFck4sT0FBTztJQUMxRixNQUFNLEVBQUVzTixrQkFBa0IsRUFBRSxHQUFHM00saUJBQVEsRUFDakNQLE9BQU9pTix3QkFDUGhOLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYkcsT0FBT3JFLCtCQUErQnFRLHdCQUF3QnJOLFVBQzlEQyxPQUFPM0IsK0JBQStCK08sd0JBQXdCck4sVUFDOUR1RCxhQUFheE8scUNBQXFDc1ksd0JBQXdCck4sVUFDMUV1TixxQkFBcUIsSUFBSUQsbUJBQW1CdE4sU0FBU0ssUUFBUUQsTUFBTWMsWUFBWUcsTUFBTXBCLE1BQU1zRDtJQUVqRyxPQUFPZ0s7QUFDVDtBQUVPLFNBQVMvVSwrQ0FBK0NnVix1QkFBdUIsRUFBRXhOLE9BQU87SUFDN0YsTUFBTSxFQUFFeU4sbUJBQW1CLEVBQUUsR0FBRzlNLGlCQUFRLEVBQ2xDUCxPQUFPb04seUJBQ1BuTixTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2JqQixPQUFPcEIsZ0NBQWdDMk8seUJBQXlCeE4sVUFDaEUyRixXQUFXaE4sb0NBQW9DNlUseUJBQXlCeE47SUFFOUVBLFVBQVU7SUFFVixNQUFNME4sc0JBQXNCLElBQUlELG9CQUFvQnpOLFNBQVNLLFFBQVFELE1BQU1jLFlBQVlqQixNQUFNMEY7SUFFN0YsT0FBTytIO0FBQ1Q7QUFFTyxTQUFTL04sK0NBQStDZ08sdUJBQXVCLEVBQUUzTixPQUFPO0lBQzdGLE1BQU0sRUFBRTROLG1CQUFtQixFQUFFLEdBQUdqTixpQkFBUSxFQUNsQ1AsT0FBT3VOLHlCQUNQdE4sU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiakIsT0FBT2IsZ0NBQWdDdU8seUJBQXlCM04sVUFDaEVnRyxXQUFXbkcsb0NBQW9DOE4seUJBQXlCM04sVUFDeEVpQixjQUFjN0gsdUNBQXVDdVUseUJBQXlCM047SUFFcEZBLFVBQVU7SUFFVixNQUFNNk4sc0JBQXNCLElBQUlELG9CQUFvQjVOLFNBQVNLLFFBQVFELE1BQU1jLFlBQVlqQixNQUFNK0YsVUFBVS9FO0lBRXZHLE9BQU80TTtBQUNUO0FBRU8sU0FBU3RiLCtDQUErQ3ViLHVCQUF1QixFQUFFOU4sT0FBTztJQUM3RixNQUFNLEVBQUUrTixtQkFBbUIsRUFBRSxHQUFHcE4saUJBQVEsRUFDbENQLE9BQU8wTix5QkFDUHpOLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYk0sWUFBWS9HLHFDQUFxQ3FULHlCQUF5QjlOLFVBQzFFZ08sc0JBQXNCLElBQUlELG9CQUFvQi9OLFNBQVNLLFFBQVFELE1BQU1jLFlBQVlNO0lBRXZGLE9BQU93TTtBQUNUO0FBRU8sU0FBU3hiLGlEQUFpRHliLHdCQUF3QixFQUFFak8sT0FBTztJQUNoRyxNQUFNLEVBQUVrTyxvQkFBb0IsRUFBRSxHQUFHdk4saUJBQVEsRUFDbkNQLE9BQU82TiwwQkFDUDVOLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYkcsT0FBT3RFLGlDQUFpQ2tSLDBCQUEwQmpPLFVBQ2xFQyxPQUFPNUIsaUNBQWlDNFAsMEJBQTBCak8sVUFDbEV1RCxhQUFhek8sdUNBQXVDbVosMEJBQTBCak8sVUFDOUVtTyx1QkFBdUIsSUFBSUQscUJBQXFCbE8sU0FBU0ssUUFBUUQsTUFBTWMsWUFBWUcsTUFBTXBCLE1BQU1zRDtJQUVyRyxPQUFPNEs7QUFDVDtBQUVPLFNBQVN6WixpREFBaUQwWix3QkFBd0IsRUFBRXBPLE9BQU87SUFDaEcsTUFBTSxFQUFFcU8sb0JBQW9CLEVBQUUsR0FBRzFOLGlCQUFRLEVBQ25DUCxPQUFPZ08sMEJBQ1AvTixTQUFTTCxRQUFRTSxZQUFZLENBQUNGLE9BQzlCYyxhQUFhLE1BQ2JqQixPQUFPdkIsaUNBQWlDMFAsMEJBQTBCcE8sVUFDbEVpQixjQUFjakksd0NBQXdDb1YsMEJBQTBCcE8sVUFDaEY0SCxZQUFZaFQsc0NBQXNDd1osMEJBQTBCcE87SUFFbEZBLFVBQVU7SUFFVixNQUFNc08sdUJBQXVCLElBQUlELHFCQUFxQnJPLFNBQVNLLFFBQVFELE1BQU1jLFlBQVlqQixNQUFNZ0IsYUFBYTJHO0lBRTVHLE9BQU8wRztBQUNUO0FBRU8sU0FBU3ZRLGlEQUFpRHdRLHdCQUF3QixFQUFFdk8sT0FBTztJQUNoRyxNQUFNLEVBQUV3TyxvQkFBb0IsRUFBRSxHQUFHN04saUJBQVEsRUFDbkNQLE9BQU9tTywwQkFDUGxPLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYjhHLFlBQVloSyxzQ0FBc0N1USwwQkFBMEJ2TztJQUVsRkEsVUFBVTtJQUVWLE1BQU15Tyx1QkFBdUIsSUFBSUQscUJBQXFCeE8sU0FBU0ssUUFBUUQsTUFBTWMsWUFBWThHO0lBRXpGLE9BQU95RztBQUNUO0FBRU8sU0FBU2xQLG1EQUFtRG1QLHlCQUF5QixFQUFFMU8sT0FBTztJQUNuRyxNQUFNLEVBQUUyTyxxQkFBcUIsRUFBRSxHQUFHaE8saUJBQVEsRUFDcENQLE9BQU9zTywyQkFDUHJPLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYmtJLGFBQWE1Six3Q0FBd0NrUCwyQkFBMkIxTztJQUV0RkEsVUFBVTtJQUVWLE1BQU00Tyx3QkFBd0IsSUFBSUQsc0JBQXNCM08sU0FBU0ssUUFBUUQsTUFBTWMsWUFBWWtJO0lBRTNGLE9BQU93RjtBQUNUO0FBRU8sU0FBUy9iLG1EQUFtRGdjLHlCQUF5QixFQUFFN08sT0FBTztJQUNuRyxNQUFNLEVBQUU4TyxxQkFBcUIsRUFBRSxHQUFHbk8saUJBQVEsRUFDcENQLE9BQU95TywyQkFDUHhPLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYjBILGFBQWE5Vix3Q0FBd0MrYiwyQkFBMkI3TztJQUV0RkEsVUFBVTtJQUVWLE1BQU0rTyx3QkFBd0IsSUFBSUQsc0JBQXNCOU8sU0FBU0ssUUFBUUQsTUFBTWMsWUFBWTBIO0lBRTNGLE9BQU9tRztBQUNUO0FBRU8sU0FBUzFULG1EQUFtRDJULHlCQUF5QixFQUFFOUQsY0FBYyxFQUFFQyxlQUFlO0lBQzNILE1BQU0sRUFBRThELHFCQUFxQixFQUFFLEdBQUd0TyxpQkFBUSxFQUNwQ1AsT0FBTzRPLDJCQUNQaFAsVUFBVW1MLGlCQUNWOUssU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmlMLFdBQVc7UUFDVEg7UUFDQUM7S0FDRCxFQUNEakssYUFBYSxNQUNiZ08sU0FBUzNVLG9DQUFvQ3lVLDJCQUEyQjlELGdCQUFnQkMsa0JBQ3hGZ0Usa0JBQWtCdFMsNkNBQTZDbVMsMkJBQTJCOUQsaUJBQzFGa0UsdUJBQXVCMVYsa0RBQWtEc1YsMkJBQTJCN0Qsa0JBQ3BHa0Usd0JBQXdCLElBQUlKLHNCQUFzQjVELFVBQVVoTCxRQUFRRCxNQUFNYyxZQUFZZ08sUUFBUUMsaUJBQWlCQztJQUVySCxPQUFPQztBQUNUO0FBRU8sU0FBUy9iLHFEQUFxRGdjLDBCQUEwQixFQUFFdFAsT0FBTztJQUN0RyxNQUFNLEVBQUV1UCxzQkFBc0IsRUFBRSxHQUFHNU8saUJBQVEsRUFDckNQLE9BQU9rUCw0QkFDUGpQLFNBQVNMLFFBQVFNLFlBQVksQ0FBQ0YsT0FDOUJjLGFBQWEsTUFDYmpCLE9BQU8xQixtQ0FBbUMrUSw0QkFBNEJ0UCxVQUN0RWlCLGNBQWNuSSwwQ0FBMEN3Vyw0QkFBNEJ0UCxVQUNwRjBKLGNBQWNsVywwQ0FBMEM4Yiw0QkFBNEJ0UDtJQUUxRkEsVUFBVTtJQUVWLE1BQU13UCx5QkFBeUIsSUFBSUQsdUJBQXVCdlAsU0FBU0ssUUFBUUQsTUFBTWMsWUFBWWpCLE1BQU1nQixhQUFheUk7SUFFaEgsT0FBTzhGO0FBQ1Q7QUFFTyxTQUFTblosdURBQXVEb1osMkJBQTJCLEVBQUV6UCxPQUFPO0lBQ3pHLE1BQU0sRUFBRTBQLHVCQUF1QixFQUFFLEdBQUcvTyxpQkFBUSxFQUN0Q1AsT0FBT3FQLDZCQUNQcFAsU0FBU0wsUUFBUU0sWUFBWSxDQUFDRixPQUM5QmMsYUFBYSxNQUNiOEksV0FBVzVULHdDQUF3Q3FaLDZCQUE2QnpQLFVBQ2hGeUMsZUFBZS9MLDRDQUE0QytZLDZCQUE2QnpQO0lBRTlGQSxVQUFVO0lBRVYsTUFBTTJQLDBCQUEwQixJQUFJRCx3QkFBd0IxUCxTQUFTSyxRQUFRRCxNQUFNYyxZQUFZOEksVUFBVXZIO0lBRXpHLE9BQU9rTjtBQUNUO0FBRU8sU0FBUzFZLGlCQUFpQjhJLFFBQVEsRUFBRUMsT0FBTztJQUNoRCxNQUFNK0gsV0FBV2hJLFNBQVM2UCxXQUFXLElBQy9CaFAsT0FBT21ILFVBQVcsR0FBRztJQUUzQixPQUFPbkg7QUFDVDtBQUVPLFNBQVM3QixpQkFBaUJvQyxRQUFRLEVBQUVuQixPQUFPO0lBQ2hELE1BQU1DLE9BQU87SUFFYixPQUFPQTtBQUNUO0FBRU8sU0FBUzlILGtCQUFrQjJKLFFBQVEsRUFBRTlCLE9BQU87SUFDakQsSUFBSWdDLFFBQVE7SUFFWixNQUFNK0IsWUFBWWpDLFNBQVMrTixZQUFZO0lBRXZDLElBQUk5TCxjQUFjLE1BQU07UUFDdEIvQixRQUFROUosbUJBQW1CNkwsV0FBVy9EO0lBQ3hDO0lBRUEsT0FBT2dDO0FBQ1Q7QUFFTyxTQUFTcFAsbUJBQW1CbU4sUUFBUSxFQUFFQyxPQUFPO0lBQ2xELE1BQU1hLFNBQVM7SUFFZixPQUFPQTtBQUNUO0FBRU8sU0FBUzVJLG1CQUFtQmtMLFNBQVMsRUFBRW5ELE9BQU87SUFDbkQsSUFBSWdDLFFBQVE7SUFFWixNQUFNK0IsWUFBWVosVUFBVTBNLFlBQVk7SUFFeEMsSUFBSTlMLGNBQWMsTUFBTTtRQUN0Qi9CLFFBQVE5SixtQkFBbUI2TCxXQUFXL0Q7SUFDeEM7SUFFQSxPQUFPZ0M7QUFDVDtBQUVPLFNBQVNwTSxtQkFBbUJrTSxRQUFRLEVBQUU5QixPQUFPO0lBQ2xELE1BQU04UCxhQUFhaE8sU0FBU2lPLGFBQWEsSUFDbkM5TixTQUFTdE0scUJBQXFCbWEsWUFBWTlQO0lBRWhELE9BQU9pQztBQUNUO0FBRU8sU0FBU3ZNLG9CQUFvQnlOLFNBQVMsRUFBRW5ELE9BQU87SUFDcEQsTUFBTThQLGFBQWEzTSxVQUFVNE0sYUFBYSxJQUNwQzlOLFNBQVN0TSxxQkFBcUJtYSxZQUFZOVA7SUFFaEQsT0FBT2lDO0FBQ1Q7QUFFTyxTQUFTN0osb0JBQW9CaU0sVUFBVSxFQUFFckUsT0FBTztJQUNyRCxNQUFNK0QsWUFBWU0sV0FBV3dMLFlBQVksSUFDbkM3TixRQUFROUosbUJBQW1CNkwsV0FBVy9EO0lBRTVDLE9BQU9nQztBQUNUO0FBRU8sU0FBU3ZNLG9CQUFvQjRPLFVBQVUsRUFBRXJFLE9BQU87SUFDckQsTUFBTTJDLFlBQVkwQixXQUFXMkwsWUFBWSxJQUNuQ25OLFFBQVFyTixtQkFBbUJtTixXQUFXM0M7SUFFNUMsT0FBTzZDO0FBQ1Q7QUFFTyxTQUFTakQscUJBQXFCdUIsUUFBUSxFQUFFbkIsT0FBTztJQUNwRCxJQUFJZ0csV0FBVztJQUVmLE1BQU1ILGVBQWUxRSxTQUFTOE8sZUFBZTtJQUU3QyxJQUFJcEssaUJBQWlCLE1BQU07UUFDekJHLFdBQVdsRyx5QkFBeUIrRixjQUFjN0Y7SUFDcEQ7SUFFQSxPQUFPZ0c7QUFDVDtBQUVPLFNBQVNyTyxxQkFBcUJtSyxRQUFRLEVBQUU5QixPQUFPO0lBQ3BELE1BQU1rUSxlQUFlcE8sU0FBU3FPLGVBQWUsSUFDdkNqTyxXQUFXeEsseUJBQXlCd1ksY0FBY2xRO0lBRXhELE9BQU9rQztBQUNUO0FBRU8sU0FBU3hQLHFCQUFxQmlTLFdBQVcsRUFBRTNFLE9BQU87SUFDdkQsTUFBTW9FLFFBQVE5UixxQkFBcUJxUyxhQUFhM0UsVUFDMUMwRCxRQUFRM04scUJBQXFCNE8sYUFBYTNFLFVBQzFDeUYsVUFBVTVILHVCQUF1QjhHLGFBQWEzRSxVQUM5Q3lJLGFBQWF0ViwwQkFBMEJ3UixhQUFhM0UsVUFDcERnRixRQUFTWixTQUFTVixTQUFTK0IsV0FBV2dEO0lBRTVDLE9BQU96RDtBQUNUO0FBRU8sU0FBUzFTLHFCQUFxQnFTLFdBQVcsRUFBRTNFLE9BQU87SUFDdkQsSUFBSW9FLFFBQVE7SUFFWixNQUFNRixZQUFZUyxZQUFZeUwsWUFBWTtJQUUxQyxJQUFJbE0sY0FBYyxNQUFNO1FBQ3RCRSxRQUFRL1IsbUJBQW1CNlIsV0FBV2xFO0lBQ3hDO0lBRUEsT0FBT29FO0FBQ1Q7QUFFTyxTQUFTck8scUJBQXFCNE8sV0FBVyxFQUFFM0UsT0FBTztJQUN2RCxJQUFJMEQsUUFBUTtJQUVaLE1BQU1ULFlBQVkwQixZQUFZMEwsWUFBWTtJQUUxQyxJQUFJcE4sY0FBYyxNQUFNO1FBQ3RCUyxRQUFRNU4sbUJBQW1CbU4sV0FBV2pEO0lBQ3hDO0lBRUEsT0FBTzBEO0FBQ1Q7QUFFTyxTQUFTcEcscUJBQXFCb0ksWUFBWSxFQUFFMUYsT0FBTztJQUN4RCxJQUFJcUIsT0FBTztJQUVYLE1BQU1GLFdBQVd1RSxhQUFhNEssV0FBVztJQUV6QyxJQUFJblAsYUFBYSxNQUFNO1FBQ3JCRSxPQUFPOUQsaUJBQWlCNEQsVUFBVW5CO0lBQ3BDO0lBRUEsT0FBT3FCO0FBQ1Q7QUFFTyxTQUFTdkMscUJBQXFCNEcsWUFBWSxFQUFFMUYsT0FBTztJQUN4RCxNQUFNQyxPQUFPO0lBRWIsT0FBT0E7QUFDVDtBQUVPLFNBQVNaLHFCQUFxQndHLFlBQVksRUFBRTdGLE9BQU87SUFDeEQsTUFBTUMsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTbEoscUJBQXFCd1EsYUFBYSxFQUFFdkgsT0FBTztJQUN6RCxNQUFNWSxPQUFPMkcsY0FBY2dKLE9BQU87SUFFbEMsT0FBTzNQO0FBQ1Q7QUFFTyxTQUFTekYsc0JBQXNCbUcsUUFBUSxFQUFFdEIsT0FBTztJQUNyRCxJQUFJd0IsWUFBWTtJQUVoQixNQUFNdUYsZ0JBQWdCekYsU0FBU2tQLGdCQUFnQjtJQUUvQyxJQUFJekosa0JBQWtCLE1BQU07UUFDMUJ2RixZQUFZdEcsMkJBQTJCNkwsZUFBZS9HO0lBQ3hEO0lBRUEsT0FBT3dCO0FBQ1Q7QUFFTyxTQUFTaEksc0JBQXNCOEgsUUFBUSxFQUFFdEIsT0FBTztJQUNyRCxJQUFJeUIsWUFBWTtJQUVoQixNQUFNNEYsZ0JBQWdCL0YsU0FBU21QLGdCQUFnQjtJQUUvQyxJQUFJcEosa0JBQWtCLE1BQU07UUFDMUI1RixZQUFZbEksMkJBQTJCOE4sZUFBZXJIO0lBQ3hEO0lBRUEsT0FBT3lCO0FBQ1Q7QUFFTyxTQUFTckUsc0JBQXNCc0ssYUFBYSxFQUFFMUgsT0FBTztJQUMxRCxJQUFJcUIsT0FBTztJQUVYLE1BQU1GLFdBQVd1RyxjQUFjNEksV0FBVztJQUUxQyxJQUFJblAsYUFBYSxNQUFNO1FBQ3JCRSxPQUFPOUQsaUJBQWlCNEQsVUFBVW5CO0lBQ3BDO0lBRUEsT0FBT3FCO0FBQ1Q7QUFFTyxTQUFTMUMsc0JBQXNCK0ksYUFBYSxFQUFFMUgsT0FBTztJQUMxRCxNQUFNQyxPQUFPO0lBRWIsT0FBT0E7QUFDVDtBQUVPLFNBQVNqQixzQkFBc0I2SSxhQUFhLEVBQUU3SCxPQUFPO0lBQzFELElBQUlDLE9BQU87SUFFWCxNQUFNRixXQUFXOEgsY0FBYzZJLFdBQVc7SUFFMUMsSUFBSTNRLGFBQWEsTUFBTTtRQUNyQkUsT0FBT2QsaUJBQWlCWSxVQUFVQztJQUNwQztJQUVBLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTMUQsdUJBQXVCd0QsUUFBUSxFQUFFQyxPQUFPO0lBQ3RELE1BQU1lLGFBQWE7SUFFbkIsT0FBT0E7QUFDVDtBQUVPLFNBQVMxSSx1QkFBdUIwSCxRQUFRLEVBQUVDLE9BQU87SUFDdEQsTUFBTWdCLGFBQWE7SUFFbkIsT0FBT0E7QUFDVDtBQUVPLFNBQVN4Six1QkFBdUJ1SSxRQUFRLEVBQUVDLE9BQU87SUFDdEQsTUFBTTJRLGlCQUFpQjVRLFNBQVM2USxpQkFBaUIsSUFDM0M5UCxhQUFhNlAsZ0JBQWlCLEdBQUc7SUFFdkMsT0FBTzdQO0FBQ1Q7QUFFTyxTQUFTN04sdUJBQXVCNk8sUUFBUSxFQUFFOUIsT0FBTztJQUN0RCxNQUFNNkksaUJBQWlCL0csU0FBUytPLGlCQUFpQixJQUMzQzFPLGFBQWFuUCw2QkFBNkI2VixnQkFBZ0I3STtJQUVoRSxPQUFPbUM7QUFDVDtBQUVPLFNBQVNyTyx1QkFBdUJxUCxTQUFTLEVBQUVuRCxPQUFPO0lBQ3ZELE1BQU02RyxnQkFBZ0IxRCxVQUFVMk4sZ0JBQWdCLElBQzlDMU4sWUFBWXJQLDJCQUEyQjhTLGVBQWU3RztJQUV4RCxPQUFPb0Q7QUFDVDtBQUVPLFNBQVMvSSx1QkFBdUI4SSxTQUFTLEVBQUVuRCxPQUFPO0lBQ3ZELElBQUlzRCxZQUFZO0lBRWhCLE1BQU00RCxnQkFBZ0IvRCxVQUFVNE4sZ0JBQWdCO0lBRWhELElBQUk3SixrQkFBa0IsTUFBTTtRQUMxQjVELFlBQVloSiwyQkFBMkI0TSxlQUFlbEg7SUFDeEQ7SUFFQSxPQUFPc0Q7QUFDVDtBQUVPLFNBQVN6Rix1QkFBdUI4RyxXQUFXLEVBQUUzRSxPQUFPO0lBQ3pELElBQUl5RixVQUFVO0lBRWQsTUFBTUYsY0FBY1osWUFBWXFNLGNBQWM7SUFFOUMsSUFBSXpMLGdCQUFnQixNQUFNO1FBQ3hCRSxVQUFVM0gsdUJBQXVCeUgsYUFBYXZGO0lBQ2hEO0lBRUEsT0FBT3lGO0FBQ1Q7QUFFTyxTQUFTOUgsdUJBQXVCdUosYUFBYSxFQUFFbEgsT0FBTztJQUMzRCxNQUFNaVIsWUFBWS9KLGNBQWNnSyxZQUFZLElBQ3RDOUosUUFBUXhKLG1CQUFtQnFULFdBQVdqUjtJQUU1QyxPQUFPb0g7QUFDVDtBQUVPLFNBQVNsUSx1QkFBdUJnUyxjQUFjLEVBQUVsSixPQUFPO0lBQzVELE1BQU0yUSxpQkFBaUJ6SCxlQUFlMEgsaUJBQWlCLElBQ2pEaFEsT0FBTytQLGdCQUFpQixHQUFHO0lBRWpDLE9BQU8vUDtBQUNUO0FBRU8sU0FBUzVLLHVCQUF1QnFULGNBQWMsRUFBRXJKLE9BQU87SUFDNUQsTUFBTXVDLFdBQVc4RyxlQUFlOEgsV0FBVyxJQUNyQ3pPLE9BQU96TSxpQkFBaUJzTSxVQUFVdkM7SUFFeEMsT0FBTzBDO0FBQ1Q7QUFFTyxTQUFTMU4sd0JBQXdCbU8sU0FBUyxFQUFFbkQsT0FBTztJQUN4RCxNQUFNdUQsYUFBYSxFQUFFO0lBRXJCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTcEssd0JBQXdCNEcsUUFBUSxFQUFFQyxPQUFPO0lBQ3ZELE1BQU1pQixjQUFjO0lBRXBCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTaEksd0JBQXdCa0ksUUFBUSxFQUFFbkIsT0FBTztJQUN2RCxNQUFNaUIsY0FBYztJQUVwQixPQUFPQTtBQUNUO0FBRU8sU0FBUzdNLHdCQUF3QjJQLFNBQVMsRUFBRS9ELE9BQU87SUFDeEQsTUFBTStJLGlCQUFpQmhGLFVBQVVxTixpQkFBaUIsSUFDNUNuTixhQUFhOVAsNkJBQTZCNFUsZ0JBQWdCL0k7SUFFaEUsT0FBT2lFO0FBQ1Q7QUFFTyxTQUFTalEsd0JBQXdCcVEsVUFBVSxFQUFFckUsT0FBTztJQUN6RCxNQUFNNkcsZ0JBQWdCeEMsV0FBV3lNLGdCQUFnQixJQUMzQzFOLFlBQVlyUCwyQkFBMkI4UyxlQUFlN0c7SUFFNUQsT0FBT29EO0FBQ1Q7QUFFTyxTQUFTaE0sd0JBQXdCbVAsWUFBWSxFQUFFdkcsT0FBTztJQUMzRCxNQUFNeUcsVUFBVUYsYUFBYXdFLFNBQVM7SUFFdEMsT0FBT3RFO0FBQ1Q7QUFFTyxTQUFTeEosd0JBQXdCb1UsZUFBZSxFQUFFclIsT0FBTztJQUM5RCxJQUFJcUIsT0FBTztJQUVYLE1BQU1GLFdBQVdrUSxnQkFBZ0JmLFdBQVc7SUFFNUMsSUFBSW5QLGFBQWEsTUFBTTtRQUNyQkUsT0FBTzlELGlCQUFpQjRELFVBQVVuQjtJQUNwQztJQUVBLE9BQU9xQjtBQUNUO0FBRU8sU0FBUzdDLHdCQUF3QjZTLGVBQWUsRUFBRXJSLE9BQU87SUFDOUQsTUFBTUMsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTeEoseUJBQXlCOEwsUUFBUSxFQUFFdkMsT0FBTztJQUN4RCxNQUFNOEosbUJBQW1CdkgsU0FBUytPLG1CQUFtQixJQUMvQzdPLGVBQWU5TCxpQ0FBaUNtVCxrQkFBa0I5SjtJQUV4RSxPQUFPeUM7QUFDVDtBQUVPLFNBQVNyUSx5QkFBeUJ1UixTQUFTLEVBQUUzRCxPQUFPO0lBQ3pELE1BQU11UixrQkFBa0I1TixVQUFVNk4sa0JBQWtCLElBQzlDM04sY0FBYzFSLCtCQUErQm9mLGlCQUFpQnZSO0lBRXBFLE9BQU82RDtBQUNUO0FBRU8sU0FBUzVJLHlCQUF5Qm1LLFdBQVcsRUFBRXBGLE9BQU87SUFDM0QsSUFBSXdCLFlBQVk7SUFFaEIsTUFBTXVGLGdCQUFnQjNCLFlBQVlvTCxnQkFBZ0I7SUFFbEQsSUFBSXpKLGtCQUFrQixNQUFNO1FBQzFCdkYsWUFBWXRHLDJCQUEyQjZMLGVBQWUvRztJQUN4RDtJQUVBLE9BQU93QjtBQUNUO0FBRU8sU0FBU2xJLHlCQUF5QjhMLFdBQVcsRUFBRXBGLE9BQU87SUFDM0QsTUFBTTBCLHFCQUFxQjtJQUUzQixPQUFPQTtBQUNUO0FBRU8sU0FBUzdMLHlCQUF5QjBRLFlBQVksRUFBRXZHLE9BQU87SUFDNUQsTUFBTXlSLGVBQWVsTCxhQUFhbUwsZUFBZSxJQUMzQ2hMLFdBQVduSixpQkFBaUJrVSxjQUFjelI7SUFFaEQsT0FBTzBHO0FBQ1Q7QUFFTyxTQUFTNVAseUJBQXlCZ1QsZ0JBQWdCLEVBQUU5SixPQUFPO0lBQ2hFLE1BQU0yUix1QkFBdUI3SCxpQkFBaUI4SCxtQkFBbUIsSUFDM0RoUixPQUFPK1Esc0JBQXVCLEdBQUc7SUFFdkMsT0FBTy9RO0FBQ1Q7QUFFTyxTQUFTdkQseUJBQXlCeU0sZ0JBQWdCLEVBQUU5SixPQUFPO0lBQ2hFLElBQUlxQixPQUFPO0lBRVgsTUFBTUYsV0FBVzJJLGlCQUFpQndHLFdBQVc7SUFFN0MsSUFBSW5QLGFBQWEsTUFBTTtRQUNyQkUsT0FBTzlELGlCQUFpQjRELFVBQVVuQjtJQUNwQztJQUVBLE9BQU9xQjtBQUNUO0FBRU8sU0FBU3pDLHlCQUF5QmtMLGdCQUFnQixFQUFFOUosT0FBTztJQUNoRSxJQUFJQyxPQUFPO0lBRVgsTUFBTTRSLFlBQVkvSCxpQkFBaUI0RyxXQUFXO0lBRTlDLElBQUltQixjQUFjLE1BQU07UUFDdEI1UixPQUFPZCxpQkFBaUIwUyxXQUFXN1I7SUFDckM7SUFFQSxPQUFPQztBQUNUO0FBRU8sU0FBUzFKLDBCQUEwQm9OLFNBQVMsRUFBRTNELE9BQU87SUFDMUQsSUFBSXlDLGVBQWU7SUFFbkIsTUFBTXFILG1CQUFtQm5HLFVBQVUyTixtQkFBbUI7SUFFdEQsSUFBSXhILHFCQUFxQixNQUFNO1FBQzdCckgsZUFBZTlMLGlDQUFpQ21ULGtCQUFrQjlKO0lBQ3BFO0lBRUEsT0FBT3lDO0FBQ1Q7QUFFTyxTQUFTaEcsMEJBQTBCMEcsU0FBUyxFQUFFbkQsT0FBTztJQUMxRCxNQUFNOFIsbUJBQW1CM08sVUFBVTRPLG1CQUFtQixJQUNwRDFPLGVBQWV6RyxpQ0FBaUNrVixrQkFBa0I5UjtJQUVwRSxPQUFPcUQ7QUFDVDtBQUVPLFNBQVM3TSwwQkFBMEJtTSxTQUFTLEVBQUUzQyxPQUFPO0lBQzFELE1BQU04SixtQkFBbUJuSCxVQUFVMk8sbUJBQW1CLElBQ2hEN08sZUFBZTlMLGlDQUFpQ21ULGtCQUFrQjlKO0lBRXhFLE9BQU95QztBQUNUO0FBRU8sU0FBU3BQLDBCQUEwQmdSLFVBQVUsRUFBRXJFLE9BQU87SUFDM0QsTUFBTXVFLGNBQWMsRUFBRTtJQUV0QixPQUFPQTtBQUNUO0FBRU8sU0FBU3BSLDBCQUEwQndSLFdBQVcsRUFBRTNFLE9BQU87SUFDNUQsSUFBSXlJLGFBQWE7SUFFakIsTUFBTUYsaUJBQWlCNUQsWUFBWXFOLGlCQUFpQjtJQUVwRCxJQUFJekosbUJBQW1CLE1BQU07UUFDM0JFLGFBQWF2Viw2QkFBNkJxVixnQkFBZ0J2STtJQUM1RDtJQUVBLE9BQU95STtBQUNUO0FBRU8sU0FBUzdPLDBCQUEwQjJNLFlBQVksRUFBRXZHLE9BQU87SUFDN0QsTUFBTWlTLGdCQUFnQjFMLGFBQWEyTCxnQkFBZ0IsSUFDN0N2TCxZQUFZcEosaUJBQWlCMFUsZUFBZWpTO0lBRWxELE9BQU8yRztBQUNUO0FBRU8sU0FBU3JILDBCQUEwQnVJLGFBQWEsRUFBRTdILE9BQU87SUFDOUQsTUFBTStILFdBQVdGLGNBQWMrSCxXQUFXO0lBRTFDLE9BQU83SDtBQUNUO0FBRU8sU0FBU3pULDBCQUEwQnlTLGFBQWEsRUFBRS9HLE9BQU87SUFDOUQsSUFBSTRHLFdBQVc7SUFFZixNQUFNTCxlQUFlUSxjQUFjb0wsZUFBZTtJQUVsRCxJQUFJNUwsaUJBQWlCLE1BQU07UUFDekJLLFdBQVd2Uyx5QkFBeUJrUyxjQUFjdkc7SUFDcEQ7SUFFQSxPQUFPNEc7QUFDVDtBQUVPLFNBQVNwSiwwQkFBMEIyTSxpQkFBaUIsRUFBRW5LLE9BQU87SUFDbEUsTUFBTW1CLFdBQVdnSixrQkFBa0JtRyxXQUFXLElBQ3hDalAsT0FBTzlELGlCQUFpQjRELFVBQVVuQjtJQUV4QyxPQUFPcUI7QUFDVDtBQUVPLFNBQVNwQywwQkFBMEJrTCxpQkFBaUIsRUFBRW5LLE9BQU87SUFDbEUsTUFBTUQsV0FBV29LLGtCQUFrQnVHLFdBQVcsSUFDeEN6USxPQUFPZCxpQkFBaUJZLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTdkQsMkJBQTJCMkgsVUFBVSxFQUFFckUsT0FBTztJQUM1RCxNQUFNOFIsbUJBQW1Cek4sV0FBVzBOLG1CQUFtQixJQUNqRDFPLGVBQWV6RyxpQ0FBaUNrVixrQkFBa0I5UjtJQUV4RSxPQUFPcUQ7QUFDVDtBQUVPLFNBQVN4UCwyQkFBMkI4USxXQUFXLEVBQUUzRSxPQUFPO0lBQzdELE1BQU13UCx5QkFBeUJqYyxzQ0FBc0NvUixhQUFhM0UsVUFDNUVzTyx1QkFBdUIzWixvQ0FBb0NnUSxhQUFhM0UsVUFDeEUrRSxjQUFleUssMEJBQTBCbEI7SUFFL0MsT0FBT3ZKO0FBQ1Q7QUFFTyxTQUFTelAsMkJBQTJCdVEsWUFBWSxFQUFFN0YsT0FBTztJQUM5RCxNQUFNb1MscUJBQXFCdk0sYUFBYXdNLHFCQUFxQixJQUMzRHRNLGFBQWFxTSxvQkFBcUIsR0FBRztJQUV2QyxPQUFPck07QUFDVDtBQUVPLFNBQVMxUSwyQkFBMkJrUyxhQUFhLEVBQUV2SCxPQUFPO0lBQy9ELE1BQU0rRixhQUFhd0IsY0FBYytLLGFBQWE7SUFFOUMsT0FBT3ZNO0FBQ1Q7QUFFTyxTQUFTakwsMkJBQTJCK0wsYUFBYSxFQUFFN0csT0FBTztJQUMvRCxJQUFJd0IsWUFBWTtJQUVoQixNQUFNdUYsZ0JBQWdCRixjQUFjMkosZ0JBQWdCO0lBRXBELElBQUl6SixrQkFBa0IsTUFBTTtRQUMxQnZGLFlBQVl0RywyQkFBMkI2TCxlQUFlL0c7SUFDeEQ7SUFFQSxPQUFPd0I7QUFDVDtBQUVPLFNBQVMvRiwyQkFBMkI2TyxrQkFBa0IsRUFBRXRLLE9BQU87SUFDcEUsSUFBSTZCLE9BQU87SUFFWCxNQUFNMFEsNkJBQTZCakksbUJBQW1Ca0ksVUFBVTtJQUVoRSxJQUFJRCw0QkFBNEI7UUFDOUIsTUFBTWpSLFdBQVdnSixvQkFBcUIsR0FBRztRQUV6Q3pJLE9BQU9yRyxpQkFBaUI4RixVQUFVdEI7SUFDcEM7SUFFQSxPQUFPNkI7QUFDVDtBQUVPLFNBQVM5SCw0QkFBNEJ1SCxRQUFRLEVBQUV0QixPQUFPO0lBQzNELElBQUkyQixrQkFBa0I7SUFFdEIsTUFBTWdKLHNCQUFzQnJKLFNBQVNtUixzQkFBc0I7SUFFM0QsSUFBSTlILHdCQUF3QixNQUFNO1FBQ2hDaEosa0JBQWtCN0gsdUNBQXVDNlEscUJBQXFCM0s7SUFDaEY7SUFFQSxPQUFPMkI7QUFDVDtBQUVPLFNBQVN0SSw0QkFBNEJ3TSxZQUFZLEVBQUU3RixPQUFPO0lBQy9ELE1BQU1pQixjQUFjO0lBRXBCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTL0wsNEJBQTRCd1MsYUFBYSxFQUFFMUgsT0FBTztJQUNoRSxNQUFNdUQsYUFBYSxFQUFFO0lBRXJCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTL0ksNEJBQTRCNk8sY0FBYyxFQUFFckosT0FBTztJQUNqRSxNQUFNMFMsaUJBQWlCckosZUFBZW1ILGdCQUFnQixJQUNoRGhQLFlBQVl0RywyQkFBMkJ3WCxnQkFBZ0IxUztJQUU3RCxPQUFPd0I7QUFDVDtBQUVPLFNBQVM5Ryw0QkFBNEJnTyxjQUFjLEVBQUUxSSxPQUFPO0lBQ2pFLElBQUl3QjtJQUVKLE1BQU11RixnQkFBZ0IyQixlQUFlOEgsZ0JBQWdCO0lBRXJELElBQUl6SixrQkFBa0IsTUFBTTtRQUMxQnZGLFlBQVl0RywyQkFBMkI2TCxlQUFlL0c7SUFDeEQ7SUFFQSxPQUFPd0I7QUFDVDtBQUVPLFNBQVM3Ryw0QkFBNEJnWSxjQUFjLEVBQUUzUyxPQUFPO0lBQ2pFLElBQUl3QixZQUFZO0lBRWhCLE1BQU11RixnQkFBZ0I0TCxlQUFlbkMsZ0JBQWdCO0lBRXJELElBQUl6SixrQkFBa0IsTUFBTTtRQUMxQnZGLFlBQVl0RywyQkFBMkI2TCxlQUFlL0c7SUFDeEQ7SUFFQSxPQUFPd0I7QUFDVDtBQUVPLFNBQVN6Ryw0QkFBNEI2WCxjQUFjLEVBQUU1UyxPQUFPO0lBQ2pFLElBQUl3QixZQUFZO0lBRWhCLE1BQU11RixnQkFBZ0I2TCxlQUFlcEMsZ0JBQWdCO0lBRXJELElBQUl6SixrQkFBa0IsTUFBTTtRQUMxQnZGLFlBQVl0RywyQkFBMkI2TCxlQUFlL0c7SUFDeEQ7SUFFQSxPQUFPd0I7QUFDVDtBQUVPLFNBQVM1Ryw0QkFBNEJ3TixjQUFjLEVBQUVwSSxPQUFPO0lBQ2pFLE1BQU0rRyxnQkFBZ0JxQixlQUFlb0ksZ0JBQWdCLElBQy9DaFAsWUFBWXRHLDJCQUEyQjZMLGVBQWUvRztJQUU1RCxPQUFPd0I7QUFDVDtBQUVPLFNBQVN0Qyw0QkFBNEJzTCxtQkFBbUIsRUFBRXhLLE9BQU87SUFDdEUsTUFBTUQsV0FBV3lLLG9CQUFvQmtHLFdBQVcsSUFDMUN6USxPQUFPZCxpQkFBaUJZLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTL0osNEJBQTRCeVUsbUJBQW1CLEVBQUUzSyxPQUFPO0lBQ3RFLE1BQU11QyxXQUFXb0ksb0JBQW9Cd0csV0FBVyxJQUMxQ3pPLE9BQU96TSxpQkFBaUJzTSxVQUFVdkM7SUFFeEMsT0FBTzBDO0FBQ1Q7QUFFTyxTQUFTL0YsNkJBQTZCc0osWUFBWSxFQUFFakcsT0FBTztJQUNoRSxNQUFNOFIsbUJBQW1CN0wsYUFBYThMLG1CQUFtQixJQUNuRDFPLGVBQWV6RyxpQ0FBaUNrVixrQkFBa0I5UjtJQUV4RSxPQUFPcUQ7QUFDVDtBQUVPLFNBQVNqSSw2QkFBNkJ1TyxlQUFlLEVBQUUzSixPQUFPO0lBQ25FLElBQUl3QixZQUFZO0lBRWhCLE1BQU11RixnQkFBZ0I0QyxnQkFBZ0I2RyxnQkFBZ0I7SUFFdEQsSUFBSXpKLGtCQUFrQixNQUFNO1FBQzFCdkYsWUFBWXRHLDJCQUEyQjZMLGVBQWUvRztJQUN4RDtJQUVBLE9BQU93QixXQUFXLEdBQUc7QUFDdkI7QUFFTyxTQUFTL0gsNkJBQTZCa1EsZUFBZSxFQUFFM0osT0FBTztJQUNuRSxJQUFJNlMsYUFBYTtJQUVqQixPQUFPQTtBQUNUO0FBRU8sU0FBU3BlLDZCQUE2QmtXLG1CQUFtQixFQUFFM0ssT0FBTztJQUN2RSxNQUFNMkQsWUFBWWdILG9CQUFvQm1JLFlBQVksSUFDNUNoUCxRQUFRdFAsbUJBQW1CbVAsV0FBVzNEO0lBRTVDLE9BQU84RDtBQUNUO0FBRU8sU0FBUzNHLDZCQUE2QjBOLG9CQUFvQixFQUFFN0ssT0FBTztJQUN4RSxJQUFJcUIsT0FBTztJQUVYLE1BQU1GLFdBQVcwSixxQkFBcUJ5RixXQUFXO0lBRWpELElBQUluUCxhQUFhLE1BQU07UUFDckJFLE9BQU85RCxpQkFBaUI0RCxVQUFVbkI7SUFDcEM7SUFFQSxPQUFPcUI7QUFDVDtBQUVPLFNBQVN2Riw4QkFBOEJtSyxZQUFZLEVBQUVqRyxPQUFPO0lBQ2pFLE1BQU1pSyxvQkFBb0JoRSxhQUFhOE0sb0JBQW9CLElBQ3JEQyxnQkFBZ0JuWCxtQ0FBbUNvTyxtQkFBbUJqSztJQUU1RSxPQUFPZ1Q7QUFDVDtBQUVPLFNBQVNuYyw4QkFBOEJrUSxhQUFhLEVBQUUvRyxPQUFPO0lBQ2xFLElBQUl5QyxlQUFlO0lBRW5CLE1BQU1xSCxtQkFBbUIvQyxjQUFjdUssbUJBQW1CO0lBRTFELElBQUl4SCxxQkFBcUIsTUFBTTtRQUM3QnJILGVBQWU5TCxpQ0FBaUNtVCxrQkFBa0I5SjtJQUNwRTtJQUVBLE9BQU95QztBQUNUO0FBRU8sU0FBUzdMLDhCQUE4QnlRLGFBQWEsRUFBRXJILE9BQU87SUFDbEUsTUFBTThKLG1CQUFtQnpDLGNBQWNpSyxtQkFBbUIsSUFDcEQ3TyxlQUFlOUwsaUNBQWlDbVQsa0JBQWtCOUo7SUFFeEUsT0FBT3lDO0FBQ1Q7QUFFTyxTQUFTckcsOEJBQThCMkssYUFBYSxFQUFFL0csT0FBTztJQUNsRSxNQUFNLEVBQUVvTCxnQkFBZ0IsRUFBRSxHQUFHekssaUJBQVEsRUFDL0I2SyxtQkFBbUJKLGlCQUFpQjZILGlCQUFpQixDQUFDbE0sZUFBZS9HLFVBQ3JFaUgsZUFBZXVFLGtCQUFtQixHQUFHO0lBRTNDLE9BQU92RTtBQUNUO0FBRU8sU0FBU2hTLDhCQUE4QnVVLGVBQWUsRUFBRXhKLE9BQU87SUFDcEUsTUFBTXVELGFBQWEsRUFBRTtJQUVyQixPQUFPQTtBQUNUO0FBRU8sU0FBUzVRLDhCQUE4QjZYLG1CQUFtQixFQUFFeEssT0FBTztJQUN4RSxNQUFNYSxTQUFTMkosb0JBQW9CMEksUUFBUTtJQUUzQyxPQUFPclM7QUFDVDtBQUVPLFNBQVNwQyw4QkFBOEJ5TixxQkFBcUIsRUFBRWxNLE9BQU87SUFDMUUsTUFBTUQsV0FBV21NLHNCQUFzQndFLFdBQVcsSUFDNUN6USxPQUFPZCxpQkFBaUJZLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTN0YsK0JBQStCa0gsUUFBUSxFQUFFdEIsT0FBTztJQUM5RCxJQUFJNEIscUJBQXFCO0lBRXpCLE1BQU1vTCx5QkFBeUIxTCxTQUFTNlIseUJBQXlCO0lBRWpFLElBQUluRywyQkFBMkIsTUFBTTtRQUNuQ3BMLHFCQUFxQjFILDZDQUE2QzhTLHdCQUF3QmhOO0lBQzVGO0lBRUEsT0FBTzRCO0FBQ1Q7QUFFTyxTQUFTN0osK0JBQStCdUosUUFBUSxFQUFFdEIsT0FBTztJQUM5RCxNQUFNMEIscUJBQXFCO0lBRTNCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTeEQsK0JBQStCNkksYUFBYSxFQUFFL0csT0FBTztJQUNuRSxJQUFJcUssZ0JBQWdCO0lBRXBCLE1BQU1GLG9CQUFvQnBELGNBQWNxTSxvQkFBb0I7SUFFNUQsSUFBSWpKLHNCQUFzQixNQUFNO1FBQzlCRSxnQkFBZ0JsTSxtQ0FBbUNnTSxtQkFBbUJuSztJQUN4RTtJQUVBLE9BQU9xSztBQUNUO0FBRU8sU0FBUy9ULCtCQUErQjhSLGNBQWMsRUFBRXBJLE9BQU87SUFDcEUsTUFBTXFULGtCQUFrQmpMLGVBQWVrSixtQkFBbUIsSUFDcERnQyxjQUFjM2MsaUNBQWlDMGMsaUJBQWlCclQ7SUFFdEUsT0FBT3NUO0FBQ1Q7QUFFTyxTQUFTdFcsK0JBQStCcVEsc0JBQXNCLEVBQUVyTixPQUFPO0lBQzVFLE1BQU1tQixXQUFXa00sdUJBQXVCaUQsV0FBVyxJQUM3Q2pQLE9BQU85RCxpQkFBaUI0RCxVQUFVbkI7SUFFeEMsT0FBT3FCO0FBQ1Q7QUFFTyxTQUFTL0MsK0JBQStCK08sc0JBQXNCLEVBQUVyTixPQUFPO0lBQzVFLE1BQU1FLFdBQVdDLElBQUFBLHlCQUFtQixLQUM5QkYsT0FBT0MsVUFBVyxHQUFHO0lBRTNCLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTL0QsK0JBQStCcVgsc0JBQXNCLEVBQUV2VCxPQUFPO0lBQzVFLElBQUlzRyxXQUFXO0lBRWYsTUFBTWtOLHFDQUFxQ0QsdUJBQXVCRSxjQUFjO0lBRWhGLElBQUlELG9DQUFvQztRQUN0QyxNQUFNdk4sZUFBZXNOLHdCQUF5QixHQUFHO1FBRWpEak4sV0FBV25LLHlCQUF5QjhKLGNBQWNqRztJQUNwRDtJQUVBLE9BQU9zRztBQUNUO0FBRU8sU0FBU3BKLCtCQUErQjJQLHNCQUFzQixFQUFFN00sT0FBTztJQUM1RSxJQUFJcUIsT0FBTztJQUVYLE1BQU1GLFdBQVcwTCx1QkFBdUJ5RCxXQUFXO0lBRW5ELElBQUluUCxhQUFhLE1BQU07UUFDckJFLE9BQU85RCxpQkFBaUI0RCxVQUFVbkI7SUFDcEM7SUFFQSxPQUFPcUI7QUFDVDtBQUVPLFNBQVNsTCwrQkFBK0I2VyxzQkFBc0IsRUFBRWhOLE9BQU87SUFDNUUsTUFBTXVDLFdBQVd5Syx1QkFBdUJtRSxXQUFXLElBQzdDMVAsWUFBWXhMLGlCQUFpQnNNLFVBQVV2QztJQUU3QyxPQUFPeUI7QUFDVDtBQUVPLFNBQVN6SywrQkFBK0J3VixzQkFBc0IsRUFBRXhNLE9BQU87SUFDNUUsTUFBTVksT0FBTzRMLHVCQUF1QitELE9BQU87SUFFM0MsT0FBTzNQO0FBQ1Q7QUFFTyxTQUFTbEQsZ0NBQWdDc1Asc0JBQXNCLEVBQUVoTixPQUFPO0lBQzdFLE1BQU1pUixZQUFZakUsdUJBQXVCa0UsWUFBWSxJQUMvQzlKLFFBQVF4SixtQkFBbUJxVCxXQUFXalI7SUFFNUMsT0FBT29IO0FBQ1Q7QUFFTyxTQUFTdkksZ0NBQWdDMk8sdUJBQXVCLEVBQUV4TixPQUFPO0lBQzlFLE1BQU1ELFdBQVd5Tix3QkFBd0JrRCxXQUFXLElBQzlDelEsT0FBT2QsaUJBQWlCWSxVQUFVQztJQUV4QyxPQUFPQztBQUNUO0FBRU8sU0FBU2IsZ0NBQWdDdU8sdUJBQXVCLEVBQUUzTixPQUFPO0lBQzlFLE1BQU1ELFdBQVc0Tix3QkFBd0IrQyxXQUFXLElBQzlDelEsT0FBT2QsaUJBQWlCWSxVQUFVQztJQUV4QyxPQUFPQztBQUNUO0FBRU8sU0FBU2xELGlDQUFpQ2tSLHdCQUF3QixFQUFFak8sT0FBTztJQUNoRixNQUFNbUIsV0FBVzhNLHlCQUF5QnFDLFdBQVcsSUFDL0NqUCxPQUFPOUQsaUJBQWlCNEQsVUFBVW5CO0lBRXhDLE9BQU9xQjtBQUNUO0FBRU8sU0FBU2hELGlDQUFpQzRQLHdCQUF3QixFQUFFak8sT0FBTztJQUNoRixNQUFNRSxXQUFXQyxJQUFBQSx5QkFBbUIsS0FDOUJGLE9BQU9DLFVBQVcsR0FBRztJQUUzQixPQUFPRDtBQUNUO0FBRU8sU0FBU3ZCLGlDQUFpQzBQLHdCQUF3QixFQUFFcE8sT0FBTztJQUNoRixNQUFNRCxXQUFXcU8seUJBQXlCc0MsV0FBVyxJQUMvQ3pRLE9BQU9kLGlCQUFpQlksVUFBVUM7SUFFeEMsT0FBT0M7QUFDVDtBQUVPLFNBQVNwSSxrQ0FBa0N1TixXQUFXLEVBQUVwRixPQUFPO0lBQ3BFLElBQUkwQixxQkFBcUI7SUFFekIsTUFBTThLLHlCQUF5QnBILFlBQVlzTyx5QkFBeUI7SUFFcEUsSUFBSWxILDJCQUEyQixNQUFNO1FBQ25DOUsscUJBQXFCNUosNkNBQTZDMFUsd0JBQXdCeE07SUFDNUY7SUFFQSxPQUFPMEI7QUFDVDtBQUVPLFNBQVN4TixrQ0FBa0M2UyxhQUFhLEVBQUUvRyxPQUFPO0lBQ3RFLElBQUlnTCxtQkFBbUI7SUFFdkIsTUFBTUgsdUJBQXVCOUQsY0FBYzRNLHVCQUF1QjtJQUVsRSxJQUFJOUkseUJBQXlCLE1BQU07UUFDakNHLG1CQUFtQi9XLHlDQUF5QzRXLHNCQUFzQjdLO0lBQ3BGO0lBRUEsT0FBT2dMO0FBQ1Q7QUFFTyxTQUFTMU8sa0NBQWtDa08sbUJBQW1CLEVBQUV4SyxPQUFPO0lBQzVFLElBQUllLGFBQWEsRUFBRTtJQUVuQixNQUFNNlMsWUFBWXBKLG9CQUFvQnFKLFlBQVk7SUFFbEQsSUFBSUQsY0FBYyxNQUFNO1FBQ3RCLE1BQU1FLFFBQVFwVSxtQkFBbUJrVSxXQUFXNVQ7UUFFNUNlLGFBQWErUyxPQUFPLEdBQUc7SUFDekI7SUFFQSxPQUFPL1M7QUFDVDtBQUVPLFNBQVM1SixrQ0FBa0MwVixzQkFBc0IsRUFBRTdNLE9BQU87SUFDL0UsTUFBTXlHLFVBQVVvRyx1QkFBdUI5QixTQUFTO0lBRWhELE9BQU90RTtBQUNUO0FBRU8sU0FBUzNKLG1DQUFtQ21PLG9CQUFvQixFQUFFQyxjQUFjO0lBQ3JGLE1BQU1sTCxVQUFVa0wsZ0JBQ1Y2SSxpQkFBaUI5SSxxQkFBcUIrSSxpQkFBaUIsSUFDdkQxSSxhQUFhL04saUJBQWlCd1csZ0JBQWdCL1Q7SUFFcEQsT0FBT3NMO0FBQ1Q7QUFFTyxTQUFTL1MsbUNBQW1Dd08sYUFBYSxFQUFFL0csT0FBTztJQUN2RSxJQUFJNkwsb0JBQW9CO0lBRXhCLE1BQU1KLHdCQUF3QjFFLGNBQWNrTix3QkFBd0I7SUFFcEUsSUFBSXhJLDBCQUEwQixNQUFNO1FBQ2xDSSxvQkFBb0J2VCwyQ0FBMkNtVCx1QkFBdUJ6TDtJQUN4RjtJQUVBLE9BQU82TDtBQUNUO0FBRU8sU0FBUzdQLG1DQUFtQytLLGFBQWEsRUFBRS9HLE9BQU87SUFDdkUsSUFBSWlNLG9CQUFvQjtJQUV4QixNQUFNSCx3QkFBd0IvRSxjQUFjbU4sd0JBQXdCO0lBRXBFLElBQUlwSSwwQkFBMEIsTUFBTTtRQUNsQ0csb0JBQW9CaFEsMkNBQTJDNlAsdUJBQXVCOUw7SUFDeEY7SUFFQSxPQUFPaU07QUFDVDtBQUVPLFNBQVMvUyxtQ0FBbUNzUixtQkFBbUIsRUFBRXhLLE9BQU87SUFDN0UsTUFBTWlCLGNBQWN1SixvQkFBb0IySixhQUFhO0lBRXJELE9BQU9sVDtBQUNUO0FBRU8sU0FBUzFDLG1DQUFtQytRLDBCQUEwQixFQUFFdFAsT0FBTztJQUNwRixNQUFNRCxXQUFXdVAsMkJBQTJCb0IsV0FBVyxJQUNqRHpRLE9BQU9kLGlCQUFpQlksVUFBVUM7SUFFeEMsT0FBT0M7QUFDVDtBQUVPLFNBQVN0TSxvQ0FBb0NvVCxhQUFhLEVBQUUvRyxPQUFPO0lBQUc7SUFDM0UsSUFBSStNLHFCQUFxQjtJQUV6QixNQUFNRix5QkFBeUI5RixjQUFjcU4seUJBQXlCO0lBRXRFLElBQUl2SCwyQkFBMkIsTUFBTTtRQUNuQ0UscUJBQXFCclosNkNBQTZDbVosd0JBQXdCN007SUFDNUY7SUFFQSxPQUFPK007QUFDVDtBQUVPLFNBQVM1UyxvQ0FBb0M0TSxhQUFhLEVBQUUvRyxPQUFPO0lBQ3hFLElBQUk0QixxQkFBcUI7SUFFekIsTUFBTW9MLHlCQUF5QmpHLGNBQWNvTSx5QkFBeUI7SUFFdEUsSUFBSW5HLDJCQUEyQixNQUFNO1FBQ25DcEwscUJBQXFCMUgsNkNBQTZDOFMsd0JBQXdCaE47SUFDNUY7SUFFQSxPQUFPNEI7QUFDVDtBQUVPLFNBQVNqTixvQ0FBb0NnUSxXQUFXLEVBQUUzRSxPQUFPO0lBQ3RFLElBQUlzTyx1QkFBdUI7SUFFM0IsTUFBTUYsMkJBQTJCekosWUFBWTBQLDJCQUEyQjtJQUV4RSxJQUFJakcsNkJBQTZCLE1BQU07UUFDckNFLHVCQUF1QjVaLGlEQUFpRDBaLDBCQUEwQnBPO0lBQ3BHO0lBRUEsT0FBT3NPO0FBQ1Q7QUFFTyxTQUFTalMsb0NBQW9DNlAscUJBQXFCLEVBQUVsTSxPQUFPO0lBQ2hGLElBQUllLGFBQWEsRUFBRTtJQUVuQixNQUFNNlMsWUFBWTFILHNCQUFzQjJILFlBQVk7SUFFcEQsSUFBSUQsY0FBYyxNQUFNO1FBQ3RCLE1BQU1FLFFBQVFwVSxtQkFBbUJrVSxXQUFXNVQ7UUFFNUNlLGFBQWErUyxPQUFPLEdBQUc7SUFDekI7SUFFQSxPQUFPL1M7QUFDVDtBQUVPLFNBQVN4RixvQ0FBb0N1USxxQkFBcUIsRUFBRTlMLE9BQU87SUFDaEYsTUFBTXNVLGlCQUFpQnhJLHNCQUFzQnlJLGlCQUFpQixJQUN4RHZJLGFBQWExUSw2QkFBNkJnWixnQkFBZ0J0VTtJQUVoRSxPQUFPZ007QUFDVDtBQUVPLFNBQVNoUixvQ0FBb0NrUyxzQkFBc0IsRUFBRWxOLE9BQU87SUFDakYsTUFBTTBTLGlCQUFpQnhGLHVCQUF1QnNELGdCQUFnQixJQUN4RGhQLFlBQVl0RywyQkFBMkJ3WCxnQkFBZ0IxUztJQUU3RCxPQUFPd0I7QUFDVDtBQUVPLFNBQVMzRyxvQ0FBb0NnUyxzQkFBc0IsRUFBRTdNLE9BQU87SUFDakYsTUFBTStHLGdCQUFnQjhGLHVCQUF1QjJELGdCQUFnQixJQUN2RGhQLFlBQVl0RywyQkFBMkI2TCxlQUFlL0c7SUFFNUQsT0FBT3dCO0FBQ1Q7QUFFTyxTQUFTN0ksb0NBQW9DNlUsdUJBQXVCLEVBQUV4TixPQUFPO0lBQ2xGLElBQUkyRixXQUFXO0lBRWYsTUFBTUQsZUFBZThILHdCQUF3QmdILGVBQWU7SUFFNUQsSUFBSTlPLGlCQUFpQixNQUFNO1FBQ3pCQyxXQUFXL00seUJBQXlCOE0sY0FBYzFGO0lBQ3BEO0lBRUEsT0FBTzJGO0FBQ1Q7QUFFTyxTQUFTOUYsb0NBQW9DOE4sdUJBQXVCLEVBQUUzTixPQUFPO0lBQ2xGLE1BQU02RixlQUFlOEgsd0JBQXdCc0MsZUFBZSxJQUN0RGpLLFdBQVdsRyx5QkFBeUIrRixjQUFjN0Y7SUFFeEQsT0FBT2dHO0FBQ1Q7QUFFTyxTQUFTekwsb0NBQW9DeVUseUJBQXlCLEVBQUU5RCxjQUFjLEVBQUVDLGVBQWU7SUFDNUcsTUFBTStELFNBQVNGLDBCQUEwQnlGLFFBQVE7SUFFakQsT0FBT3ZGO0FBQ1Q7QUFFTyxTQUFTdFgscUNBQXFDZ2IsY0FBYyxFQUFFNVMsT0FBTztJQUMxRSxJQUFJMEIscUJBQXFCO0lBRXpCLE1BQU04Syx5QkFBeUJvRyxlQUFlYyx5QkFBeUI7SUFFdkUsSUFBSWxILDJCQUEyQixNQUFNO1FBQ25DOUsscUJBQXFCNUosNkNBQTZDMFUsd0JBQXdCeE07SUFDNUY7SUFFQSxPQUFPMEI7QUFDVDtBQUVPLFNBQVMzRixxQ0FBcUMwUCxxQkFBcUIsRUFBRXpMLE9BQU87SUFDakYsTUFBTTBVLGtCQUFrQmpKLHNCQUFzQmtKLGtCQUFrQixJQUMxRGhKLGNBQWNwTyxpQkFBaUJtWCxpQkFBaUIxVTtJQUV0RCxPQUFPMkw7QUFDVDtBQUVPLFNBQVM1UyxxQ0FBcUNtVCxxQkFBcUIsRUFBRWxNLE9BQU87SUFDakYsTUFBTWlCLGNBQWNpTCxzQkFBc0JpSSxhQUFhO0lBRXZELE9BQU9sVDtBQUNUO0FBRU8sU0FBU3hHLHFDQUFxQ3FULHVCQUF1QixFQUFFOU4sT0FBTztJQUNuRixNQUFNK0csZ0JBQWdCK0csd0JBQXdCMEMsZ0JBQWdCLElBQ3hEaFAsWUFBWXRHLDJCQUEyQjZMLGVBQWUvRztJQUU1RCxPQUFPd0I7QUFDVDtBQUVPLFNBQVNqSyxxQ0FBcUNpVixzQkFBc0IsRUFBRXhNLE9BQU87SUFDbEYsTUFBTTRVLGlCQUFpQnBJLHVCQUF1QnFJLGlCQUFpQixJQUN6RG5JLGFBQWFwViw2QkFBNkJzZCxnQkFBZ0I1VTtJQUVoRSxPQUFPME07QUFDVDtBQUVPLFNBQVMzWCxxQ0FBcUNzWSxzQkFBc0IsRUFBRXJOLE9BQU87SUFDbEYsTUFBTXVELGFBQWEsRUFBRTtJQUVyQixPQUFPQTtBQUNUO0FBRU8sU0FBU2hRLHNDQUFzQ29SLFdBQVcsRUFBRTNFLE9BQU87SUFDeEUsSUFBSXdQLHlCQUF5QjtJQUU3QixNQUFNRiw2QkFBNkIzSyxZQUFZbVEsNkJBQTZCO0lBRTVFLElBQUl4RiwrQkFBK0IsTUFBTTtRQUN2Q0UseUJBQXlCbGMscURBQXFEZ2MsNEJBQTRCdFA7SUFDNUc7SUFFQSxPQUFPd1A7QUFDVDtBQUVPLFNBQVN4WCxzQ0FBc0MyUixlQUFlLEVBQUUzSixPQUFPO0lBQzVFLElBQUkwQixxQkFBcUI7SUFFekIsTUFBTThLLHlCQUF5QjdDLGdCQUFnQitKLHlCQUF5QjtJQUV4RSxJQUFJbEgsMkJBQTJCLE1BQU07UUFDbkM5SyxxQkFBcUI1Siw2Q0FBNkMwVSx3QkFBd0J4TTtJQUM1RjtJQUVBLE9BQU8wQjtBQUNUO0FBRU8sU0FBUzdJLHNDQUFzQzRTLHFCQUFxQixFQUFFekwsT0FBTztJQUNsRixNQUFNK1UsbUJBQW1CdEosc0JBQXNCdUosbUJBQW1CLElBQzVEcEosZUFBZXJPLGlCQUFpQndYLGtCQUFrQi9VO0lBRXhELE9BQU80TDtBQUNUO0FBRU8sU0FBU2hYLHNDQUFzQ3daLHdCQUF3QixFQUFFcE8sT0FBTztJQUNyRixNQUFNMEgsZ0JBQWdCMEcseUJBQXlCNkcsZ0JBQWdCLElBQ3pEck4sWUFBWS9TLDJCQUEyQjZTLGVBQWUxSDtJQUU1RCxPQUFPNEg7QUFDVDtBQUVPLFNBQVM1SixzQ0FBc0N1USx3QkFBd0IsRUFBRXZPLE9BQU87SUFDckYsTUFBTTZILGdCQUFnQjBHLHlCQUF5QjJHLGdCQUFnQixJQUN6RGxOLFlBQVkvSiwyQkFBMkI0SixlQUFlN0g7SUFFNUQsT0FBT2dJO0FBQ1Q7QUFFTyxTQUFTNU8sdUNBQXVDdVUsdUJBQXVCLEVBQUUzTixPQUFPO0lBQ3JGLE1BQU1pQixjQUFjME0sd0JBQXdCd0csYUFBYTtJQUV6RCxPQUFPbFQ7QUFDVDtBQUVPLFNBQVNuTSx1Q0FBdUNtWix3QkFBd0IsRUFBRWpPLE9BQU87SUFDdEYsTUFBTXVELGFBQWEsRUFBRTtJQUVyQixPQUFPQTtBQUNUO0FBRU8sU0FBUzVKLHdDQUF3Q3NSLG9CQUFvQixFQUFFRSxlQUFlO0lBQzNGLE1BQU1uTCxVQUFVbUwsaUJBQ1ZnSyxzQkFBc0JsSyxxQkFBcUJtSyxzQkFBc0IsSUFDakU3SixrQkFBa0JoTyxpQkFBaUI0WCxxQkFBcUJuVjtJQUU5RCxPQUFPdUw7QUFDVDtBQUVPLFNBQVN2Uyx3Q0FBd0NvVix3QkFBd0IsRUFBRXBPLE9BQU87SUFDdkYsTUFBTWlCLGNBQWNtTix5QkFBeUIrRixhQUFhO0lBRTFELE9BQU9sVDtBQUNUO0FBRU8sU0FBU3pCLHdDQUF3Q2tQLHlCQUF5QixFQUFFMU8sT0FBTztJQUN4RixNQUFNa0osaUJBQWlCd0YsMEJBQTBCMkcsaUJBQWlCLElBQzVEak0sYUFBYTNKLDZCQUE2QnlKLGdCQUFnQmxKO0lBRWhFLE9BQU9vSjtBQUNUO0FBRU8sU0FBU3RXLHdDQUF3QytiLHlCQUF5QixFQUFFN08sT0FBTztJQUN4RixNQUFNMEksaUJBQWlCbUcsMEJBQTBCeUcsaUJBQWlCLElBQzVEMU0sYUFBYTdWLDZCQUE2QjJWLGdCQUFnQjFJO0lBRWhFLE9BQU80STtBQUNUO0FBRU8sU0FBU3hTLHdDQUF3Q3FaLDJCQUEyQixFQUFFelAsT0FBTztJQUMxRixNQUFNdVYsZUFBZTlGLDRCQUE0QitGLGVBQWUsSUFDMUR4TCxXQUFXaEssUUFBUXlWLDBCQUEwQixDQUFDRjtJQUVwRCxPQUFPdkw7QUFDVDtBQUVPLFNBQVN4VywwQ0FBMEM4YiwwQkFBMEIsRUFBRXRQLE9BQU87SUFDM0YsTUFBTXdKLGtCQUFrQjhGLDJCQUEyQm9HLGtCQUFrQixJQUMvRGhNLGNBQWNqVywrQkFBK0IrVixpQkFBaUJ4SjtJQUVwRSxPQUFPMEo7QUFDVDtBQUVPLFNBQVM1USwwQ0FBMEN3VywwQkFBMEIsRUFBRXRQLE9BQU87SUFDM0YsTUFBTWlCLGNBQWNxTywyQkFBMkI2RSxhQUFhO0lBRTVELE9BQU9sVDtBQUNUO0FBRU8sU0FBU3ZLLDRDQUE0QytZLDJCQUEyQixFQUFFelAsT0FBTztJQUM5RixNQUFNOEosbUJBQW1CMkYsNEJBQTRCNkIsbUJBQW1CLElBQ2xFN08sZUFBZTlMLGlDQUFpQ21ULGtCQUFrQjlKO0lBRXhFLE9BQU95QztBQUNUO0FBRU8sU0FBUzVGLDZDQUE2Q21TLHlCQUF5QixFQUFFOUQsY0FBYztJQUNwRyxNQUFNbEwsVUFBVWtMLGdCQUNWeUssc0JBQXNCM0csMEJBQTBCNEcsc0JBQXNCLElBQ3RFekcsa0JBQWtCalUsMkJBQTJCeWEscUJBQXFCM1Y7SUFFeEUsT0FBT21QO0FBQ1Q7QUFFTyxTQUFTMVcsOENBQThDeVQscUJBQXFCLEVBQUVsTSxPQUFPO0lBQzFGLE1BQU02Viw0QkFBNEIzSixzQkFBc0I0SiwyQkFBMkIsSUFDN0UxSix1QkFBdUIxVCxpREFBaURtZCwyQkFBMkI3VjtJQUV6RyxPQUFPb007QUFDVDtBQUVPLFNBQVMxUyxrREFBa0RzVix5QkFBeUIsRUFBRTdELGVBQWU7SUFDMUcsTUFBTW5MLFVBQVVtTCxpQkFDVjRLLDJCQUEyQi9HLDBCQUEwQmdILDJCQUEyQixJQUNoRjVHLHVCQUF1QmxVLDJCQUEyQjZhLDBCQUEwQi9WO0lBRWxGLE9BQU9vUDtBQUNUO0FBRU8sU0FBU3hSLG1CQUFtQnFULFNBQVMsRUFBRWpSLE9BQU87SUFDbkQsTUFBTW9ILFFBQVE2SixVQUFVZ0YsR0FBRyxDQUFDLENBQUM5VTtRQUMzQixNQUFNRSxPQUFPOUQsaUJBQWlCNEQsVUFBVW5CO1FBRXhDLE9BQU9xQjtJQUNUO0lBRUEsT0FBTytGO0FBQ1Q7QUFFTyxTQUFTMUgsbUJBQW1Ca1UsU0FBUyxFQUFFNVQsT0FBTztJQUNuRCxNQUFNa1csWUFBWXRDLFVBQVV1QyxZQUFZLElBQ2xDckMsUUFBUW9DLFVBQVVELEdBQUcsQ0FBQyxDQUFDbFc7UUFDckIsTUFBTUUsT0FBT2QsaUJBQWlCWSxVQUFVQztRQUV4QyxPQUFPQztJQUNUO0lBRU4sT0FBTzZUO0FBQ1Q7QUFFTyxTQUFTbmUscUJBQXFCbWEsVUFBVSxFQUFFOVAsT0FBTztJQUN0RCxNQUFNaUMsU0FBUzZOLFdBQVdtRyxHQUFHLENBQUMsQ0FBQ3RUO1FBQzdCLE1BQU1FLFFBQVFyTixtQkFBbUJtTixXQUFXM0M7UUFFNUMsT0FBTzZDO0lBQ1Q7SUFFQSxPQUFPWjtBQUNUO0FBRU8sU0FBU3ZLLHlCQUF5QndZLFlBQVksRUFBRWxRLE9BQU87SUFDNUQsTUFBTWtDLFdBQVdnTyxhQUFhK0YsR0FBRyxDQUFDLENBQUM3UTtRQUNqQyxNQUFNRSxVQUFVN04sdUJBQXVCMk4sYUFBYXBGO1FBRXBELE9BQU9zRjtJQUNUO0lBRUEsT0FBT3BEO0FBQ1Q7QUFFTyxTQUFTNUcsNkJBQTZCZ1osY0FBYyxFQUFFdFUsT0FBTztJQUNsRSxNQUFNZ00sYUFBYXNJLGVBQWUyQixHQUFHLENBQUMsQ0FBQ2xQO1FBQ3JDLE1BQU12RixZQUFZdEcsMkJBQTJCNkwsZUFBZS9HO1FBRTVELE9BQU93QjtJQUNUO0lBRUEsT0FBT3dLO0FBQ1Q7QUFFTyxTQUFTMVUsNkJBQTZCc2QsY0FBYyxFQUFFNVUsT0FBTztJQUNsRSxNQUFNME0sYUFBYWtJLGVBQWVxQixHQUFHLENBQUMsQ0FBQzFPO1FBQ3JDLE1BQU1FLFlBQVlwUSwyQkFBMkJrUSxlQUFldkg7UUFFNUQsT0FBT3lIO0lBQ1Q7SUFFQSxPQUFPaUY7QUFDVDtBQUVPLFNBQVN2WCw4QkFBOEIwUCxlQUFlLEVBQUU3RSxPQUFPO0lBQ3BFLE1BQU11RCxhQUFhc0IsZ0JBQWdCb1IsR0FBRyxDQUFDLENBQUNoTztRQUN0QyxNQUFNbU8sYUFBYWhoQiw2QkFBNkI2UyxlQUFlakk7UUFFL0QsT0FBT29XO0lBQ1Q7SUFFQSxPQUFPN1M7QUFDVDtBQUVPLFNBQVNwUiwrQkFBK0JvZixlQUFlLEVBQUV2UixPQUFPO0lBQ3JFLE1BQU02RCxjQUFjME4sZ0JBQWdCMEUsR0FBRyxDQUFDLENBQUM1TTtRQUN2QyxNQUFNRSxhQUFhclgsNkJBQTZCbVgsZ0JBQWdCcko7UUFFaEUsT0FBT3VKO0lBQ1Q7SUFFQSxPQUFPMUY7QUFDVDtBQUVPLFNBQVNqSCxpQ0FBaUNrVixnQkFBZ0IsRUFBRTlSLE9BQU87SUFDeEUsTUFBTXFELGVBQWV5TyxpQkFBaUJtRSxHQUFHLENBQUMsQ0FBQ3RNO1FBQ3pDLE1BQU1FLGNBQWNyTiwrQkFBK0JtTixpQkFBaUIzSjtRQUVwRSxPQUFPNko7SUFDVDtJQUVBLE9BQU94RztBQUNUO0FBRU8sU0FBUzFILG1DQUFtQ29OLGNBQWMsRUFBRS9JLE9BQU87SUFDeEUsTUFBTXFXLHNCQUFzQnROLGVBQWV1TixzQkFBc0IsSUFDM0RyTixtQkFBbUJvTixvQkFBb0JKLEdBQUcsQ0FBQyxDQUFDM0w7UUFDMUMsTUFBTUMsaUJBQWlCN08scUNBQXFDNE8sb0JBQW9CdEs7UUFFaEYsT0FBT3VLO0lBQ1Q7SUFFTixPQUFPdEI7QUFDVDtBQUVPLFNBQVNyTixzQ0FBc0NxTyxpQkFBaUIsRUFBRWpLLE9BQU87SUFDOUUsTUFBTXFXLHNCQUFzQnBNLGtCQUFrQnFNLHNCQUFzQixJQUM5RHJOLG1CQUFtQm9OLG9CQUFvQkosR0FBRyxDQUFDLENBQUMzTDtRQUMxQyxNQUFNQyxpQkFBaUI3TyxxQ0FBcUM0TyxvQkFBb0J0SztRQUVoRixPQUFPdUs7SUFDVDtJQUVOLE9BQU90QjtBQUNUO0FBRU8sU0FBU3ZRLGlEQUFpRG1kLHlCQUF5QixFQUFFN1YsT0FBTztJQUNqRyxNQUFNdVcsc0JBQXNCViwwQkFBMEJJLEdBQUcsQ0FBQyxDQUFDekk7UUFDekQsTUFBTWdKLHVCQUF1QmhlLCtDQUErQ2dWLHlCQUF5QnhOO1FBRXJHLE9BQU93VztJQUNUO0lBRUEsT0FBT0Q7QUFDVCJ9
1902
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbixcbiAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZ0Zyb21OYW1lQW5kUGFyYW1ldGVycyxcbiAgICAgICAgIHNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZENsYWltLFxuICAgICAgICAgY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uLFxuICAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlO1xuXG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gIGlmICh0eXBlTm9kZSA9PT0gbnVsbCkge1xuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG5vZGUgPSB0eXBlTm9kZSwgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IHR5cGVOb2RlLmdldFN0cmluZygpLFxuICAgICAgICAgIGJhc2VUeXBlU3RyaW5nID0gYmFzZVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nQmFzZVR5cGVTdHJpbmcgPSAoc3RyaW5nID09PSBiYXNlVHlwZVN0cmluZyk7XG5cbiAgICBpZiAoc3RyaW5nQmFzZVR5cGVTdHJpbmcpIHtcbiAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgY2xvc2VkID0gY2xvc2VkRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICB0eXBlID0gbmV3IFR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBjbG9zZWQsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGVwID0gbmV3IFN0ZXAoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlLCBzY2hlbWFBc3NlcnRpb24sIHNpZ25hdHVyZUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgcHJvb2YgPSBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgbGFiZWxzID0gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgcnVsZVN0cmluZyA9IHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pLFxuICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgIHN0cmluZyA9IHJ1bGVTdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGluayB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsaW5rTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGluayA9IG5ldyBMaW5rKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY2xhaW1TdHJpbmcgPSBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mID0gbmV3IFByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY2xhaW1Ob2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBheGlvbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGF4aW9tID0gbmV3IEF4aW9tKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNjaGVtYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBzY2hlbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc2NoZW1hU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHNjaGVtYSA9IG5ldyBTY2hlbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBjb25zdHJhaW50cyk7XG5cbiAgcmV0dXJuIHNjaGVtYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTZWN0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaHlwb3RoZXNpc05vZGVzID0gc2VjdGlvbk5vZGUuZ2V0SHlwb3RoZXNpc05vZGVzKCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBkZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY2xhaW0gPSBjbGFpbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZENsYWltKGh5cG90aGVzZXMsIGRlY2xhcmF0aW9uLCBjbGFpbSksXG4gICAgICAgIG5vZGUgPSBzZWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNlY3Rpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBoeXBvdGhlc2VzLCBkZWNsYXJhdGlvbiwgY2xhaW0pO1xuXG4gIHJldHVybiBzZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByZW1pc2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gIHJldHVybiBwcmVtaXNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSB0aGVvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbSA9IG5ldyBUaGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPSBudWxsKSB7XG4gICAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHByb3BlcnR5ID0gbmV3IFByb3BlcnR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgaWRlbnRpZmllciwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3ViRGVyaXZhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbihzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24sIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBzdWJwcm9vZlN0cmluZzsgIC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mID0gbmV3IFN1YnByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgaWRlbnRpZmllcik7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBHZW5lcmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgR2VuZXJhdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBbGlhc0Zyb21UeXBlQWxpYXNOb2RlKHR5cGVBbGlhc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlQWxpYXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFsaWFzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFsaWFzTm9kZSh0eXBlQWxpYXNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlQWxpYXNOb2RlKHR5cGVBbGlhc05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBbGlhcyA9IG5ldyBUeXBlQWxpYXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0eXBlTmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVBbGlhcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgaHlwb2h0ZXNpcyA9IG5ldyBIeXBvdGhlc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cmFpbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RyYWludE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJhaW50ID0gbmV3IENvbnN0cmFpbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IGNvbmplY3R1cmVOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBjb25qZWN0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZSA9IG5ldyBDb25qZWN0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uY2x1c2lvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZXJpdmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlcml2YXRpb24gPSBuZXcgRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbGluayA9IGxpbmtGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCwgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFUeXBlID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgdGVybSwgdHlwZSwgbWV0YVR5cGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRGVjbGFyYXRpb25Gcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsb3NlZCA9IGNsb3NlZEZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZURlY2xhcmF0aW9uID0gbmV3IFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGNsb3NlZCwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0eXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2NoZW1hQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsaW5rID0gbGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2NoZW1hQXNzZXJ0aW9uID0gbmV3IFNjaGVtYUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIGZyYW1lKTtcblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0VGVybSwgcmVwbGFjZW1lbnRUZXJtKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJqZWN0VGVybSwgcHJvcGVydHlUZXJtKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb3R5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmcgPSBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsKHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSxcbiAgICAgICAgc3RyaW5nID0gY290eXBlRGVjbGFyYXRpb25TdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb3R5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb3R5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eURlY2xhcmF0aW9ucyk7XG5cbiAgcmV0dXJuIGNvdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZVJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZyA9IHByb2NlZHVyZVJlZmVyZW5jZVN0cmluZ0Zyb21OYW1lQW5kUGFyYW1ldGVycyhuYW1lLCBwYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVSZWZlcmVuY2VTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcGFyYW1ldGVycyk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb250YWluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsaW5rID0gbGlua0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbmV3IFNpZ25hdHVyZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEltcGxpY2l0QXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IG5ldyBJbXBsaWNpdEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRHZW5lcmF0b3JGcm9tQnJhY2tldGVkR2VuZXJhdG9yTm9kZShicmFja2V0ZWRHZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkR2VuZXJhdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZEdlbmVyYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUoYnJhY2tldGVkR2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUoYnJhY2tldGVkR2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUoYnJhY2tldGVkR2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZEdlbmVyYXRvciA9IG5ldyBCcmFja2V0ZWRHZW5lcmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYnJhY2tldGVkR2VuZXJhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb24gPSBuZXcgUHJvcGVydHlEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3BlcnR5KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVEZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdmFyaWFibGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yID0gbmV3IEJyYWNrZXRlZENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBicmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBuZXcgQnJhY2tldGVkQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGdlbmVyYXRvckRlY2xhcmF0aW9uID0gbmV3IEdlbmVyYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGdlbmVyYXRvcik7XG5cbiAgcmV0dXJuIGdlbmVyYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFsaWFzRGVjbGFyYXRpb25Gcm9tVHlwZUFsaWFzRGVjbGFyYXRpb25Ob2RlKHR5cGVBbGlhc0RlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBbGlhc0RlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVBbGlhc0RlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZUFsaWFzID0gdHlwZUFsaWFzRnJvbVR5cGVBbGlhc0RlY2xhcmF0aW9uTm9kZSh0eXBlQWxpYXNEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBbGlhc0RlY2xhcmF0aW9uID0gbmV3IFR5cGVBbGlhc0RlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZUFsaWFzKTtcblxuICByZXR1cm4gdHlwZUFsaWFzRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeERlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGVQcmVmaXgpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzb2x2ZWQgPSBzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzb2x2ZWQsIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlZEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjbG9zZWQgPSBudWxsO1xuXG4gIHJldHVybiBjbG9zZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gY2xhaW1Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBydWxlTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gY2xhaW1Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBzY2hlbWFOb2RlLmdldFByb29mTm9kZSgpLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBzY2hlbWFOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlTm9kZXMgPSBydWxlTm9kZS5nZXRQcmVtaXNlTm9kZXMoKSxcbiAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFpbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBheGlvbSA9IGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVtbWEgPSBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbSA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpO1xuXG4gIHJldHVybiBjbGFpbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5Tm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXBOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc3RlcE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZ2VuZXJhdG9yTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBbGlhc05vZGUodHlwZUFsaWFzTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlQWxpYXNOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBudWxsO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBydWxlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gY2xhaW1Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IGNsYWltTm9kZS5nZXRTaWduYXR1cmVOb2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0aGVvcmVtID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtTm9kZSA9IHNlY3Rpb25Ob2RlLmdldFRoZW9yZW1Ob2RlKCk7XG5cbiAgaWYgKHRoZW9yZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeE5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbmtOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgbGluayA9IGxpbmtGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IHNjaGVtYU5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBlcXVhbGl0eU5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gb2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxpbmtOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGVzID0gZnJhbWVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YW1ldGF2YXJpYWJsZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IGNsYWltTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVOYW1lRnJvbVR5cGVBbGlhc05vZGUodHlwZUFsaWFzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVBbGlhc05vZGUuZ2V0VHlwZU5hbWUoKTtcblxuICByZXR1cm4gdHlwZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVxdWFsaXR5ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEVxdWFsaXR5Tm9kZSgpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzY2hlbWFOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yRGVjbGFyYXRpb24gPSBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlY2xhcmF0aW9uID0gKGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gfHwgZ2VuZXJhdG9yRGVjbGFyYXRpb24pO1xuXG4gIHJldHVybiBkZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyTm9kZS5nZXRJZGVudGlmaWVyKCk7XG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBkZWR1Y3Rpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2NoZW1hQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzY2hlbWFBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2NoZW1hQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzY2hlbWFBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50O1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBzY2hlbWFBc3NlcnRpb25Ob2RlLmdldExpbmtOb2RlKCksXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZWwgPSBudWxsO1xuXG4gIHJldHVybiByZWZlcmVuY2VsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZWRGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNsb3NlZCA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuaXNDbG9zZWQoKTtcblxuICByZXR1cm4gY2xvc2VkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWJsZU5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUoYnJhY2tldGVkR2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZEdlbmVyYXRvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21CcmFja2V0ZWRHZW5lcmF0b3JOb2RlKGJyYWNrZXRlZEdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN1YnByb29mT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZS5pc1N1YnByb29mTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbmtOb2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZS5nZXRMaW5rTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0R2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3Qgc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1NvbHZlZCgpO1xuXG4gIHJldHVybiBzb2x2ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViamVjdFRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFN1YmplY3RUZXJtTm9kZSgpLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUoc3ViamVjdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViamVjdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUoYnJhY2tldGVkR2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlUmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5VGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0UHJvcGVydHlUZXJtTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHByb3BlcnR5VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmF0b3JOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldEdlbmVyYXRvck5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBbGlhc0Zyb21UeXBlQWxpYXNEZWNsYXJhdGlvbk5vZGUodHlwZUFsaWFzRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVBbGlhc05vZGUgPSB0eXBlQWxpYXNEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZUFsaWFzTm9kZSgpLFxuICAgICAgICB0eXBlQWxpYXMgPSB0eXBlQWxpYXNGcm9tVHlwZUFsaWFzTm9kZSh0eXBlQWxpYXNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZUFsaWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vLy8vL1xuICAgICAgICByZXBsYWNlbWVudFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJlcGxhY2VtZW50VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4Tm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZVByZWZpeE5vZGUoKSxcbiAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29tYmluYXRvck5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbWJpbmF0b3JOb2RlKCksXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YVR5cGVOYW1lID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRDb25zdHJ1Y3Rvck5vZGUoKSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgIHRhcmdldFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUodGFyZ2V0U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMoKSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZXMgPSB0eXBlc05vZGUuZ2V0VHlwZU5vZGVzKCksXG4gICAgICAgIHR5cGVzID0gdHlwZU5vZGVzLm1hcCgodHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZXMgPSBwcmVtaXNlTm9kZXMubWFwKChwcmVtaXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2UgPSBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gaHlwb3RoZXNpc05vZGVzLm1hcCgoaHlwb3RoZXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25Ob2Rlcy5tYXAoKGFzc3VtcHRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25Ob2Rlcy5tYXAoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2Rlcy5tYXAoKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlEZWNsY2FyYXRpb24gPSBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eURlY2xjYXJhdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbHJhdGlvbnM7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tRnJvbVNlY3Rpb25Ob2RlIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsImJyYWNrZXRlZEdlbmVyYXRvckZyb21CcmFja2V0ZWRHZW5lcmF0b3JOb2RlIiwiY2xhaW1Gcm9tU2VjdGlvbk5vZGUiLCJjbG9zZWRGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsImNsb3NlZEZyb21UeXBlTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVJ1bGVOb2RlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJhaW50RnJvbUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiY290eXBlRGVjbGFyYXRpb25Gcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwiZGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlIiwiZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlIiwiZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUiLCJlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZnJhbWVGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUNsYWltTm9kZSIsImh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSIsImltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tU2NoZW1hTm9kZSIsImxhYmVsc0Zyb21DbGFpbU5vZGUiLCJsYWJlbHNGcm9tTGFiZWxOb2RlcyIsImxhYmVsc0Zyb21SdWxlTm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hRnJvbVNlY3Rpb25Ob2RlIiwibGlua0Zyb21Bc3N1bXB0aW9uTm9kZSIsImxpbmtGcm9tTGlua05vZGUiLCJsaW5rRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJsaW5rRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tQ29uc3RyYWludE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJuYW1lRnJvbVBhcmFtdGVyTm9kZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21FcXVhbGl0eU5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcmVmaXhOYW1lRnJvbVR5cGVOb2RlIiwicHJlbWlzZUZyb21QcmVtaXNlTm9kZSIsInByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyIsInByZW1pc2VzRnJvbVJ1bGVOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbUh5cG90aGVzaXNOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3RlcE5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvb2ZGcm9tQ2xhaW1Ob2RlIiwicHJvb2ZGcm9tUHJvb2ZOb2RlIiwicHJvb2ZGcm9tUnVsZU5vZGUiLCJwcm9vZkZyb21TY2hlbWFOb2RlIiwicHJvcGVydGllc0Zyb21UeXBlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UZXJtTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVByZW1pc2VOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU3RlcE5vZGUiLCJyZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJydWxlRnJvbVJ1bGVOb2RlIiwic2NoZW1hQXNzZXJ0aW9uRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJzY2hlbWFBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzY2hlbWFGcm9tU2NoZW1hTm9kZSIsInNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2lnbmF0dXJlRnJvbUNsYWltTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlIiwic3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlIiwic3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3ViamVjdFRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVR5cGVOb2RlIiwic3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzIiwidGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZEdlbmVyYXRvck5vZGUiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbUdlbmVyYXRvck5vZGUiLCJ0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5Tm9kZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJ0ZXJtc0Zyb21TaWduYXR1cmVOb2RlIiwidGVybXNGcm9tVGVybU5vZGVzIiwidGhlb3JlbUZyb21TZWN0aW9uTm9kZSIsInRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUiLCJ0eXBlQWxpYXNEZWNsYXJhdGlvbkZyb21UeXBlQWxpYXNEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlQWxpYXNGcm9tVHlwZUFsaWFzRGVjbGFyYXRpb25Ob2RlIiwidHlwZUFsaWFzRnJvbVR5cGVBbGlhc05vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZURlY2xhcmF0aW9uRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tQnJhY2tldGVkR2VuZXJhdG9yTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUdlbmVyYXRvck5vZGUiLCJ0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Qcm9wZXJ0eU5vZGUiLCJ0eXBlRnJvbVRlcm1Ob2RlIiwidHlwZUZyb21UeXBlQWxpYXNOb2RlIiwidHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVHlwZU5vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTmFtZUZyb21UeXBlQWxpYXNOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwibm9kZSIsInN0cmluZyIsImdldFN0cmluZyIsImJhc2VUeXBlU3RyaW5nIiwic3RyaW5nQmFzZVR5cGVTdHJpbmciLCJUeXBlIiwiZWxlbWVudHMiLCJuYW1lIiwiY2xvc2VkIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJicmVha1BvaW50IiwidGVybU5vZGUiLCJUZXJtIiwibm9kZUFzU3RyaW5nIiwidGVybSIsInN0ZXBOb2RlIiwiU3RlcCIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZSIsInNjaGVtYUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXAiLCJydWxlTm9kZSIsIlJ1bGUiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInJ1bGUiLCJsaW5rTm9kZSIsIkxpbmsiLCJtZXRhdmFyaWFibGUiLCJsaW5rIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsImNsYWltTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJjbGFpbVN0cmluZyIsImNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNjaGVtYU5vZGUiLCJTY2hlbWEiLCJjb25zdHJhaW50cyIsInNjaGVtYVN0cmluZyIsInNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInNjaGVtYSIsInNlY3Rpb25Ob2RlIiwiU2VjdGlvbiIsImh5cG90aGVzaXNOb2RlcyIsImdldEh5cG90aGVzaXNOb2RlcyIsImRlY2xhcmF0aW9uIiwiY2xhaW0iLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbSIsInNlY3Rpb24iLCJwcmVtaXNlTm9kZSIsIlByZW1pc2UiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwidGhlb3JlbSIsInByb3BlcnR5Tm9kZSIsInByb3BlcnR5IiwiUHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsInN1YnByb29mTm9kZSIsIlN1YnByb29mIiwic3ViRGVyaXZhdGlvbiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1YnByb29mIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJuZWdhdGVkIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic3Vic3RpdHV0aW9uIiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJnZW5lcmF0b3JOb2RlIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwidHlwZUFsaWFzTm9kZSIsIlR5cGVBbGlhcyIsInR5cGVOYW1lIiwidHlwZUFsaWFzIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aGVzaXMiLCJoeXBvaHRlc2lzIiwiY29uc3RyYWludE5vZGUiLCJDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiY29uc3RydWN0b3JOb2RlIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJtZXRhdmFyaWFibGVOb2RlIiwiTWV0YXZhcmlhYmxlIiwibWV0YVR5cGUiLCJzdWJEZXJpdmF0aW9uTm9kZSIsIlN1YkRlcml2YXRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwic3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2YiLCJ0eXBlRGVjbGFyYXRpb25Ob2RlIiwiVHlwZURlY2xhcmF0aW9uIiwidHlwZURlY2xhcmF0aW9uIiwic2NoZW1hQXNzZXJ0aW9uTm9kZSIsIlNjaGVtYUFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiRGVmaW5lZEFzc2VydGlvbiIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiVGVybVN1YnN0aXR1dGlvbiIsImNvbnRleHRzIiwidGFyZ2V0VGVybSIsInJlcGxhY2VtZW50VGVybSIsInRlcm1TdWJzdGl0dXRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJQcm9wZXJ0eUFzc2VydGlvbiIsInN1YmplY3RUZXJtIiwicHJvcGVydHlUZXJtIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvdHlwZURlY2xhcmF0aW9uTm9kZSIsIkNvdHlwZURlY2xhcmF0aW9uIiwicHJvcGVydHlEZWNsYXJhdGlvbnMiLCJjb3R5cGVEZWNsYXJhdGlvblN0cmluZyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwiLCJjb3R5cGVEZWNsYXJhdGlvbiIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nIiwicHJvY2VkdXJlUmVmZXJlbmNlU3RyaW5nRnJvbU5hbWVBbmRQYXJhbWV0ZXJzIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJTaWduYXR1cmVBc3NlcnRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiSW1wbGljaXRBc3N1bXB0aW9uIiwiaW1wbGljaXRBc3N1bXB0aW9uIiwiYnJhY2tldGVkR2VuZXJhdG9yTm9kZSIsIkJyYWNrZXRlZEdlbmVyYXRvciIsImJyYWNrZXRlZEdlbmVyYXRvciIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwiUHJvcGVydHlEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIlZhcmlhYmxlRGVjbGFyYXRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwiYnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsIkJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJHZW5lcmF0b3JEZWNsYXJhdGlvbiIsImdlbmVyYXRvckRlY2xhcmF0aW9uIiwidHlwZUFsaWFzRGVjbGFyYXRpb25Ob2RlIiwiVHlwZUFsaWFzRGVjbGFyYXRpb24iLCJ0eXBlQWxpYXNEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInNvbHZlZCIsInRhcmdldFN0YXRlbWVudCIsInJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIk1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJnZXRUeXBlTmFtZSIsImdldFByb29mTm9kZSIsImxhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwicHJlbWlzZU5vZGVzIiwiZ2V0UHJlbWlzZU5vZGVzIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwiZ2V0VGVybU5vZGUiLCJnZXROYW1lIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJnZXRUeXBlTm9kZSIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldERlZHVjdGlvbk5vZGUiLCJnZXRTaWduYXR1cmVOb2RlIiwiZ2V0VGhlb3JlbU5vZGUiLCJ0ZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJnZXRMaW5rTm9kZSIsImdldERlcml2YXRpb25Ob2RlIiwib2Nuc3RydWN0b3JOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsIm1ldGFtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImdldElkZW50aWZpZXIiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXRTY2hlbWFBc3NlcnRpb25Ob2RlIiwic3RhdGVzbWVudE5vZGUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwicmVmZXJlbmNlbCIsImdldEZyYW1lTm9kZSIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsImZyb21TdGF0ZW1lbnROb2RlIiwiaXNDbG9zZWQiLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJtZXRhdmFyaWJsZU5vZGUiLCJtZXRhdmFyaWJsZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0eXBlc05vZGUiLCJnZXRUeXBlc05vZGUiLCJ0eXBlcyIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldEdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJnZXRQcm9wZXJ0eU5vZGUiLCJpc1NvbHZlZCIsInN1YmplY3RUZXJtTm9kZSIsImdldFN1YmplY3RUZXJtTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJnZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5VGVybU5vZGUiLCJnZXRQcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0R2VuZXJhdG9yTm9kZSIsImdldFR5cGVBbGlhc05vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFR5cGVQcmVmaXhOb2RlIiwiZ2V0Q29tYmluYXRvck5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsImdldENvbnN0cnVjdG9yTm9kZSIsInRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUYXJnZXRTdGF0ZW1lbnROb2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyIsImdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsInJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsIm1hcCIsInR5cGVOb2RlcyIsImdldFR5cGVOb2RlcyIsImh5cG90aGVzaXMiLCJzdGVwT3JTdWJwcm9vZk5vZGVzIiwiZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcyIsInByb3BlcnR5RGVjbHJhdGlvbnMiLCJwcm9wZXJ0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