@sapui5/sap.fe.core 1.120.21 → 1.120.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +2 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +1 -4
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +3 -2
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +7 -5
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +9 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +5 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +6 -3
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +19 -10
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +38 -14
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_ar.properties +2 -2
- package/src/sap/fe/core/messagebundle_bg.properties +3 -3
- package/src/sap/fe/core/messagebundle_cs.properties +1 -1
- package/src/sap/fe/core/messagebundle_cy.properties +2 -2
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_de.properties +7 -7
- package/src/sap/fe/core/messagebundle_es.properties +3 -3
- package/src/sap/fe/core/messagebundle_fr.properties +2 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +18 -18
- package/src/sap/fe/core/messagebundle_hi.properties +1 -1
- package/src/sap/fe/core/messagebundle_hr.properties +4 -4
- package/src/sap/fe/core/messagebundle_hu.properties +2 -2
- package/src/sap/fe/core/messagebundle_id.properties +4 -4
- package/src/sap/fe/core/messagebundle_iw.properties +2 -2
- package/src/sap/fe/core/messagebundle_ko.properties +1 -1
- package/src/sap/fe/core/messagebundle_mk.properties +1 -1
- package/src/sap/fe/core/messagebundle_nl.properties +12 -12
- package/src/sap/fe/core/messagebundle_no.properties +1 -1
- package/src/sap/fe/core/messagebundle_sl.properties +6 -6
- package/src/sap/fe/core/messagebundle_th.properties +8 -8
- package/src/sap/fe/core/messagebundle_tr.properties +1 -1
- package/src/sap/fe/core/messagebundle_uk.properties +3 -3
- package/src/sap/fe/core/messagebundle_vi.properties +1 -1
- package/src/sap/fe/core/operationsHelper.js +5 -3
- package/src/sap/fe/core/operationsHelper.ts +4 -2
|
@@ -256,10 +256,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
256
256
|
// to add it at a later point of time we have to take care it's part of the $select of the POST, therefore moving it.
|
|
257
257
|
mParameters.mBindingParameters = mParameters.mBindingParameters || {};
|
|
258
258
|
if (oAction.getObject(`$ReturnType/$Type/${sMessagesPath}`) && (!mParameters.mBindingParameters.$select || mParameters.mBindingParameters.$select.split(",").indexOf(sMessagesPath) === -1)) {
|
|
259
|
-
// We need the return context to be fetched with all the existing properties of the bound action's source context.
|
|
260
|
-
// Message Path might not exist in the UI as part of a binding but it is expected to be a part of the bound action's source context's $select.
|
|
261
|
-
// Hence, it shall be passed on to the return context's $select via the action request(POST call).
|
|
262
259
|
if (bIsSameEntity) {
|
|
260
|
+
// We request messages from the return context as it might not exist as a part of the bound action's source context's $select.
|
|
261
|
+
// Example: Create on a List. Messages path might not be part of the list.
|
|
262
|
+
mParameters.mBindingParameters.$select = mParameters.mBindingParameters.$select ? `${mParameters.mBindingParameters.$select},${sMessagesPath}` : sMessagesPath;
|
|
263
|
+
// We need the return context to be fetched with all the existing properties of the bound action's source context.
|
|
263
264
|
mParameters.mBindingParameters.$$inheritExpandSelect = true;
|
|
264
265
|
}
|
|
265
266
|
if (mParameters.additionalSideEffect.triggerActions.length === 0 && iMessageSideEffect > -1) {
|
|
@@ -1598,4 +1599,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
1598
1599
|
};
|
|
1599
1600
|
return operations;
|
|
1600
1601
|
}, false);
|
|
1601
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zdGFudHMiLCJGRUxpYnJhcnkiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJBY3Rpb24iLCJNZXNzYWdlQm94IiwiY2FsbEJvdW5kQWN0aW9uIiwic0FjdGlvbk5hbWUiLCJjb250ZXh0cyIsIm9Nb2RlbCIsIm9BcHBDb21wb25lbnQiLCJtUGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIiwiaXM0MTJFeGVjdXRlZCIsInN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzIiwic3RyaWN0SGFuZGxpbmdQcm9taXNlcyIsInN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzIiwiZGVsYXlTdWNjZXNzTWVzc2FnZXMiLCJwcm9jZXNzZWRNZXNzYWdlSWRzIiwibGVuZ3RoIiwiUHJvbWlzZSIsInJlamVjdCIsImlzQ2FsbGVkV2l0aEFycmF5IiwiQXJyYXkiLCJpc0FycmF5IiwiYUNvbnRleHRzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNBY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwib0JvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NyaXRpY2FsQWN0aW9uIiwiQWN0aW9uUnVudGltZSIsImdldElzQWN0aW9uQ3JpdGljYWwiLCJleHRyYWN0U2luZ2xlUmVzdWx0IiwicmVzdWx0Iiwic3RhdHVzIiwidmFsdWUiLCJyZWFzb24iLCJjYWxsQWN0aW9uIiwidGhlbiIsImNhbGxBY3Rpb25JbXBvcnQiLCJiaW5kQ29udGV4dCIsIm9BY3Rpb25JbXBvcnQiLCJnZXRPYmplY3QiLCJjYWxsQm91bmRGdW5jdGlvbiIsInNGdW5jdGlvbk5hbWUiLCJjb250ZXh0Iiwic0Z1bmN0aW9uUGF0aCIsIm9Cb3VuZEZ1bmN0aW9uIiwiX2V4ZWN1dGVGdW5jdGlvbiIsImNhbGxGdW5jdGlvbkltcG9ydCIsInJlc29sdmUiLCJvRnVuY3Rpb25JbXBvcnQiLCJvRnVuY3Rpb24iLCJzR3JvdXBJZCIsIkVycm9yIiwib0Z1bmN0aW9uUHJvbWlzZSIsImV4ZWN1dGUiLCJzdWJtaXRCYXRjaCIsImdldEJvdW5kQ29udGV4dCIsIm9BY3Rpb24iLCJiR3JvdXBlZCIsImludm9jYXRpb25Hcm91cGluZyIsIkNoYW5nZVNldCIsIm1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzIiwiZm5EaWFsb2ciLCJvQWN0aW9uUHJvbWlzZSIsInNBY3Rpb25MYWJlbCIsImxhYmVsIiwiYlNraXBQYXJhbWV0ZXJEaWFsb2ciLCJza2lwUGFyYW1ldGVyRGlhbG9nIiwiYklzQ3JlYXRlQWN0aW9uIiwiYklzQ3JpdGljYWxBY3Rpb24iLCJzTWV0YVBhdGgiLCJzTWVzc2FnZXNQYXRoIiwiaU1lc3NhZ2VTaWRlRWZmZWN0IiwiYklzU2FtZUVudGl0eSIsIm9SZXR1cm5UeXBlIiwiYlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsImFjdGlvbkRlZmluaXRpb24iLCJhQWN0aW9uUGFyYW1ldGVycyIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2ciLCIkTmFtZSIsImFQYXJhbWV0ZXJWYWx1ZXMiLCJwYXJhbWV0ZXJWYWx1ZXMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1ldGVycyIsIl92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMiLCJzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nIiwiY29uZmlybUNyaXRpY2FsQWN0aW9uIiwiZm5PblN1Ym1pdHRlZCIsIm9uU3VibWl0dGVkIiwiZm5PblJlc3BvbnNlIiwib25SZXNwb25zZSIsImFjdGlvbk5hbWUiLCJtb2RlbCIsImJHZXRCb3VuZENvbnRleHQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJzZWxlY3RlZEl0ZW1zIiwiYWRkaXRpb25hbFNpZGVFZmZlY3QiLCJwYXRoRXhwcmVzc2lvbnMiLCJmaW5kSW5kZXgiLCJleHAiLCIkaXNDb2xsZWN0aW9uIiwiZ2V0TW9kZWwiLCIkVHlwZSIsIm1CaW5kaW5nUGFyYW1ldGVycyIsIiRzZWxlY3QiLCJzcGxpdCIsImluZGV4T2YiLCIkJGluaGVyaXRFeHBhbmRTZWxlY3QiLCJ0cmlnZ2VyQWN0aW9ucyIsInNwbGljZSIsImludGVybmFsTW9kZWxDb250ZXh0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiaXNDcmVhdGVBY3Rpb24iLCJiT2JqZWN0UGFnZSIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsImdyb3VwSWQiLCJjb250cm9sSWQiLCJjb250cm9sIiwicGFyZW50Q29udHJvbCIsImJ5SWQiLCJpc1N0YXRpYyIsIiRQYXJhbWV0ZXIiLCJzb21lIiwiYVBhcmFtZXRlciIsIiRFbnRpdHlTZXRQYXRoIiwiJElzQm91bmQiLCJlbnRpdHlTZXROYW1lIiwibWVzc2FnZUhhbmRsZXIiLCJvT3BlcmF0aW9uUmVzdWx0IiwiYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uIiwiY2F0Y2giLCJpIiwiZmluZCIsImVsZW1lbnQiLCJuYW1lIiwiX2V4ZWN1dGVBY3Rpb24iLCJtZXNzYWdlcyIsIkNvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJjb25jYXQiLCJzdHJpY3RIYW5kbGluZ0ZhaWxzIiwiYUZhaWxlZENvbnRleHRzIiwiZm9yRWFjaCIsImZhaWwiLCJwdXNoIiwiZ2V0Q29udGV4dCIsIm9GYWlsZWRPcGVyYXRpb25SZXN1bHQiLCJhZGRNZXNzYWdlcyIsInNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0IiwiaXNDaGFuZ2VTZXRBbmRIYXNFcnJvcnNPcldhcm5pbmdzIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwiYU1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4iLCJhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrIiwidW5kZWZpbmVkIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uQ29udGV4dCIsIm9QYXJlbnRDb250cm9sIiwiYm91bmRBY3Rpb25OYW1lIiwic3VmZml4UmVzb3VyY2VLZXkiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInNDb25maXJtYXRpb25UZXh0IiwiZ2V0VGV4dCIsImNvbmZpcm0iLCJvbkNsb3NlIiwic0FjdGlvbiIsIk9LIiwib09wZXJhdGlvbiIsIm9FcnJvciIsImUiLCJDYW5jZWxBY3Rpb25EaWFsb2ciLCJleGVjdXRlQVBNQWN0aW9uIiwib0RpYWxvZyIsImFmdGVyNDEyIiwiYVJlc3VsdCIsIm9TaW5nbGVSZXN1bHQiLCJhdHRhY2hFdmVudE9uY2UiLCJpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW4iLCJpc09wZW4iLCJzZWxlY3RlZENvbnRleHRzIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIkpTT04iLCJwYXJzZSIsIm9Db250cm9sIiwiaXNBIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkRlbGV0ZUhlbHBlciIsInVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIiwic2hvd01lc3NhZ2VCb3giLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJ1bmJvdW5kTWVzc2FnZXMiLCJmaWx0ZXIiLCJtZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsIkFQRG1lc3NhZ2VzIiwiYWN0aW9uUGFyYW0iLCJBUERNZXNzYWdlIiwiaXNBUERUYXJnZXQiLCJlcnJvclRhcmdldHNJbkFQRCIsImhhc0NoYW5nZVNldE1vZGlmaWVkTWVzc2FnZSIsInNNZXNzYWdlIiwic0Rlc2NyaXB0aW9uVGV4dCIsIm1lc3NhZ2VNb2RlbCIsIm1lc3NhZ2VzSW5Nb2RlbCIsImFCb3VuZE1lc3NhZ2VzIiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0TWVzc2FnZXMiLCJnZW5lcmljTWVzc2FnZSIsImlzRWRpdGFibGUiLCJnZXRQcm9wZXJ0eSIsIm5vbkVycm9yTWVzc2FnZUV4aXN0c0luRGlhbG9nIiwiZ2V0VHlwZSIsIm5vbkVycm9yTWVzc2FnZUV4aXN0c0luTW9kZWwiLCJzZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZSIsIk1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJ0YXJnZXQiLCJwZXJzaXN0ZW50IiwiZGVzY3JpcHRpb24iLCJjb2RlIiwidW5zaGlmdCIsImNsb3NlIiwiZGVzdHJveSIsImZpbHRlcmVkTWVzc2FnZXMiLCJiSXNBUERPcGVuIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJiaW5kIiwic2hvd0NoYW5nZVNldEVycm9yRGlhbG9nIiwic1BhdGgiLCJfZ2V0UGF0aCIsIm1ldGFNb2RlbCIsImVudGl0eVNldENvbnRleHQiLCJzQWN0aW9uTmFtZVBhdGgiLCJhY3Rpb25OYW1lQ29udGV4dCIsInNGcmFnbWVudE5hbWUiLCJhY3Rpb25QYXJhbWV0ZXJJbmZvcyIsIm1lc3NhZ2VNYW5hZ2VyIiwiX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIiLCJwYXJhbWV0ZXIiLCJhbGxNZXNzYWdlcyIsImdlbmVyYXRlIiwicmVsZXZhbnRNZXNzYWdlcyIsIm1zZyIsImdldENvbnRyb2xJZHMiLCJpZCIsImluY2x1ZGVzIiwicmVtb3ZlTWVzc2FnZXMiLCJvQ29udHJvbGxlciIsImhhbmRsZUNoYW5nZSIsIm9FdmVudCIsImZpZWxkIiwiZ2V0U291cmNlIiwiYWN0aW9uUGFyYW1ldGVySW5mbyIsInZhbGlkYXRpb25Qcm9taXNlIiwiZ2V0UGFyYW1ldGVyIiwiaGFzRXJyb3IiLCJlcnJvciIsIl9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyIiwib0ZyYWdtZW50IiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGUiLCJvUGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJjcmVhdGVkRnJhZ21lbnQiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiYmluZGluZ0NvbnRleHRzIiwiYWN0aW9uIiwiZW50aXR5U2V0IiwibW9kZWxzIiwiYUZ1bmN0aW9uUGFyYW1zIiwib09wZXJhdGlvbkJpbmRpbmciLCJDb21tb25VdGlscyIsInNldFVzZXJEZWZhdWx0cyIsIm9EaWFsb2dDb250ZW50IiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsImNvbnRyb2xsZXIiLCJtYXAiLCJhY3Rpb25QYXJhbWV0ZXIiLCJpc011bHRpVmFsdWUiLCJhY3Rpb25SZXN1bHQiLCJkaWFsb2dDYW5jZWxsZWQiLCJidXR0b25Mb2NrIiwiRGlhbG9nIiwidGl0bGUiLCJjb250ZW50IiwiZXNjYXBlSGFuZGxlciIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwidGV4dCIsIl9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lIiwicHJlc3MiLCJfdmFsaWRhdGVQcm9wZXJ0aWVzIiwiQnVzeUxvY2tlciIsImxvY2siLCJmYWlsZWRDb250ZXh0cyIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInZQYXJhbWV0ZXJWYWx1ZSIsIm9QYXJhbWV0ZXJDb250ZXh0IiwiZ2V0UGFyYW1ldGVyQ29udGV4dCIsImFNVkZDb250ZW50IiwiYUtleVZhbHVlcyIsImoiLCJLZXkiLCJpbm5lclBhcmFtZXRlcnMiLCJPYmplY3QiLCJhc3NpZ24iLCJzYXAiLCJ1aSIsImdldENvcmUiLCJpc0xvY2tlZCIsInVubG9jayIsInNob3dNZXNzYWdlcyIsIm1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwiZW5kQnV0dG9uIiwiYmVmb3JlT3BlbiIsIm9DbG9uZUV2ZW50IiwiZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwic0RlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nIiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzQm91bmRGdW5jdGlvbk5hbWUiLCJwcmVmaWxsUGFyYW1ldGVyIiwic1BhcmFtTmFtZSIsInZQYXJhbURlZmF1bHRWYWx1ZSIsIiRQYXRoIiwidlBhcmFtVmFsdWUiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJyZXF1ZXN0UHJvcGVydHkiLCJzUGF0aEZvckNvbnRleHQiLCJyZXBsYWNlIiwicGFyYW1OYW1lIiwiYk5vUG9zc2libGVWYWx1ZSIsIkxvZyIsImJMYXRlUHJvcGVydHlFcnJvciIsIm9EYXRhIiwiZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwic0FjdGlvblBhcmFtZXRlckFubm90YXRpb25QYXRoIiwiZ2V0UGFyYW1ldGVyUGF0aCIsIm9QYXJhbWV0ZXJBbm5vdGF0aW9ucyIsIm9QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlIiwidlBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFQcmVmaWxsUGFyYW1Qcm9taXNlcyIsImFsbCIsImFFeGVjRnVuY3Rpb25Qcm9taXNlcyIsIm9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlIiwic01vZHVsZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiRlBNSGVscGVyIiwiYWN0aW9uV3JhcHBlciIsImFQcm9taXNlcyIsImN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSIsImZ1bmN0aW9uUGFyYW1zIiwib0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Iiwic0RpYWxvZ1BhcmFtTmFtZSIsInZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwic2V0UGFyYW1ldGVyIiwiaGFzT3duUHJvcGVydHkiLCJiRXJyb3JGb3VuZCIsIm9WYWx1ZSIsInNUZXh0Iiwid2FybmluZyIsImNvbnRlbnRXaWR0aCIsImZuQXN5bmNCZWZvcmVPcGVuIiwiYVBhcmFtZXRlcnMiLCJvQ29udGV4dE9iamVjdCIsInJlcXVlc3RPYmplY3QiLCJnZXRJdGVtcyIsImdldFZhbHVlIiwiYWZ0ZXJDbG9zZSIsInNldE1vZGVsIiwiYmluZEVsZW1lbnQiLCJwYXRoIiwib01WRk1vZGVsIiwiZ2V0QmluZGluZyIsImF0dGFjaENoYW5nZSIsImFkZERlcGVuZGVudCIsInNldEJpbmRpbmdDb250ZXh0IiwiZ2V0T2JqZWN0QmluZGluZyIsIm9wZW4iLCJzbGljZSIsInNFbnRpdHlTZXROYW1lIiwiYUFjdGlvbk5hbWUiLCJzS2V5IiwiYlJlc291cmNlS2V5RXhpc3RzIiwiY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzIiwiZW5oYW5jZVNpZGVFZmZlY3RzIiwiYXBwQ29tcG9uZW50Iiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmciLCJyZXR1cm5lZENvbnRleHQiLCJvcmlnaW4iLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRJbnN0YW5jZWRWaWV3cyIsInBhZ2VWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzIiwiaUNvbnRleHRMZW5ndGgiLCJjdXJyZW50X2NvbnRleHRfaW5kZXgiLCJpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSIsImludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QiLCJiRW5hYmxlU3RyaWN0SGFuZGxpbmciLCJvUHJvcGVydHkiLCIka2luZCIsIm9wZXJhdGlvbnNIZWxwZXIiLCJmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQiLCJvcGVyYXRpb25zIiwidXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyIsIkFjdGlvbkV4ZWN1dGlvbkZhaWxlZCIsIm9ubHlTdWNjZXNzTWVzc2FnZXMiLCJ0cmFuc2l0aW9uTWVzc2FnZXMiLCJpc0R1cGxpY2F0ZSIsIlN1Y2Nlc3MiLCJjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uIiwib0xvY2FsQWN0aW9uUHJvbWlzZSIsImlzQ2hhbmdlU2V0IiwidW5Cb3VuZE1zZ3MiLCJib3VuZE1zZ3MiLCJzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJhQWN0aW9uUHJvbWlzZXMiLCJvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdCIsImZuRXhlY3V0ZUFjdGlvbiIsImFjdGlvbkNvbnRleHQiLCJvU2lkZUVmZmVjdCIsImluZGl2aWR1YWxBY3Rpb25Qcm9taXNlIiwiZ2V0VXBkYXRlR3JvdXBJZCIsImZuUmVxdWVzdFNpZGVFZmZlY3RzIiwiYWxsU2V0dGxlZCIsImZuRXhlY3V0ZVNpbmdsZUFjdGlvbiIsImZuRXhlY3V0ZUNoYW5nZXNldCIsImFDaGFuZ2VTZXRMb2NhbFByb21pc2VzIiwibm9vcCIsInJlbmRlck1lc3NhZ2VWaWV3Iiwic2hQcm9taXNlIiwic2V0RGF0YSIsImZuSGFuZGxlUmVzdWx0cyIsImZuRXhlY3V0ZVNlcXVlbnRpYWxseSIsImNvbnRleHRzVG9FeGVjdXRlIiwicHJvY2Vzc09uZUFjdGlvbiIsImFjdGlvbkluZGV4IiwiaW5pdGlhbFRhYmxlQ29udGV4dCIsImdldFJvd0JpbmRpbmciLCJnZXRIZWFkZXJDb250ZXh0IiwicmVkdWNlIiwicHJvbWlzZSIsImZpbmFsbHkiLCJjdXJyZW50UHJvbWlzZVZhbHVlIiwiYWN0aW9uUGFyYW1ldGVycyIsImFMb2NhbFByb21pc2UiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwib0xvY2FsUHJvbWlzZSIsInNUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsInZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsImdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImZhY2FkZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgRGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uLy4uLy4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IG9wZXJhdGlvbnNIZWxwZXIsIHsgdHlwZSBTdHJpY3RIYW5kbGluZ1BhcmFtZXRlcnMsIHR5cGUgU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgfSBmcm9tIFwiLi4vLi4vLi4vb3BlcmF0aW9uc0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4uLy4uL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblBhcmFtZXRlciwgQWN0aW9uUGFyYW1ldGVySW5mbyB9IGZyb20gXCIuL19pbnRlcm5hbFwiO1xuaW1wb3J0IHsgX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIsIF92YWxpZGF0ZVByb3BlcnRpZXMgfSBmcm9tIFwiLi9faW50ZXJuYWxcIjtcblxuY29uc3QgQ29uc3RhbnRzID0gRkVMaWJyYXJ5LkNvbnN0YW50cyxcblx0SW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcbmNvbnN0IEFjdGlvbiA9IChNZXNzYWdlQm94IGFzIGFueSkuQWN0aW9uO1xuXG4vKipcbiAqIENhbGxzIGEgYm91bmQgYWN0aW9uIGZvciBvbmUgb3IgbXVsdGlwbGUgY29udGV4dHMuXG4gKlxuICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0gY29udGV4dHMgRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgdG8gYmUgYmUgY2FsbGVkXG4gKiBAcGFyYW0gb01vZGVsIE9EYXRhIE1vZGVsXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXNdIEEgbWFwIG9mIGFjdGlvbiBwYXJhbWV0ZXIgbmFtZXMgYW5kIHByb3ZpZGVkIHZhbHVlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnNdIEEgbWFwIG9mIGJpbmRpbmcgcGFyYW1ldGVycyB0aGF0IHdvdWxkIGJlIHBhcnQgb2YgJHNlbGVjdCBhbmQgJGV4cGFuZCBjb21pbmcgZnJvbSBzaWRlIGVmZmVjdHMgZm9yIGJvdW5kIGFjdGlvbnNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3RdIEFycmF5IG9mIHByb3BlcnR5IHBhdGhzIHRvIGJlIHJlcXVlc3RlZCBpbiBhZGRpdGlvbiB0byBhY3R1YWwgdGFyZ2V0IHByb3BlcnRpZXMgb2YgdGhlIHNpZGUgZWZmZWN0XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ddIElmIHNldCBhbmQgaWYgcGFyYW1ldGVycyBleGlzdCB0aGUgdXNlciByZXRyaWV2ZXMgYSBkaWFsb2cgdG8gZmlsbCBpbiBwYXJhbWV0ZXJzLCBpZiBhY3Rpb25QYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhleSBhcmUgc2hvd24gdG8gdGhlIHVzZXJcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubGFiZWxdIEEgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nXSBNb2RlIGhvdyBhY3Rpb25zIGFyZSB0byBiZSBjYWxsZWQ6IENoYW5nZXNldCB0byBwdXQgYWxsIGFjdGlvbiBjYWxscyBpbnRvIG9uZSBjaGFuZ2VzZXQsIElzb2xhdGVkIHRvIHB1dCB0aGVtIGludG8gc2VwYXJhdGUgY2hhbmdlc2V0cywgZGVmYXVsdHMgdG8gSXNvbGF0ZWRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMub25TdWJtaXR0ZWRdIEZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBvbmNlIHRoZSBhY3Rpb25zIGFyZSBzdWJtaXR0ZWQgd2l0aCBhbiBhcnJheSBvZiBwcm9taXNlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5kZWZhdWx0UGFyYW1ldGVyc10gQ2FuIGNvbnRhaW4gZGVmYXVsdCBwYXJhbWV0ZXJzIGZyb20gRkxQIHVzZXIgZGVmYXVsdHNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbF0gSWYgc3BlY2lmaWVkLCB0aGUgZGlhbG9ncyBhcmUgYWRkZWQgYXMgZGVwZW5kZW50IG9mIHRoZSBwYXJlbnQgY29udHJvbFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0XSBJZiBzcGVjaWZpZWQsIHRoZSBhY3Rpb24gcHJvbWlzZSByZXR1cm5zIHRoZSBib3VuZCBjb250ZXh0XG4gKiBAcGFyYW0gW3N0cmljdEhhbmRsaW5nVXRpbGl0aWVzXSBPcHRpb25hbCwgdXRpbGl0eSBmbGFncyBhbmQgbWVzc2FnZXMgZm9yIHN0cmljdEhhbmRsaW5nXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgcmVzcG9uc2Ugb2JqZWN0cyAoVE9ETzogdG8gYmUgY2hhbmdlZClcbiAqL1xuZnVuY3Rpb24gY2FsbEJvdW5kQWN0aW9uKFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRjb250ZXh0czogYW55LFxuXHRvTW9kZWw6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pIHtcblx0aWYgKCFzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0aXM0MTJFeGVjdXRlZDogZmFsc2UsXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBbXSxcblx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IFtdXG5cdFx0fTtcblx0fVxuXHRpZiAoIWNvbnRleHRzIHx8IGNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vSW4gRnJlZXN0eWxlIGFwcHMgYm91bmQgYWN0aW9ucyBjYW4gaGF2ZSBubyBjb250ZXh0XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQm91bmQgYWN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGNvbnRleHRcIik7XG5cdH1cblx0Ly8gdGhpcyBtZXRob2QgZWl0aGVyIGFjY2VwdHMgc2luZ2xlIGNvbnRleHQgb3IgYW4gYXJyYXkgb2YgY29udGV4dHNcblx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gYW4gdW5hbWJpZ3VvcyBBUElcblx0Y29uc3QgaXNDYWxsZWRXaXRoQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbnRleHRzKTtcblxuXHQvLyBpbiBjYXNlIG9mIHNpbmdsZSBjb250ZXh0IHdyYXAgaW50byBhbiBhcnJheSBmb3IgY2FsbGVkIG1ldGhvZHMgKGVzcC4gY2FsbEFjdGlvbilcblx0bVBhcmFtZXRlcnMuYUNvbnRleHRzID0gaXNDYWxsZWRXaXRoQXJyYXkgPyBjb250ZXh0cyA6IFtjb250ZXh0c107XG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHQvLyBBbmFseXppbmcgbWV0YU1vZGVsUGF0aCBmb3IgYWN0aW9uIG9ubHkgZnJvbSBmaXJzdCBjb250ZXh0IHNlZW1zIHdlaXJkLCBidXQgcHJvYmFibHkgd29ya3MgaW4gYWxsIGV4aXN0aW5nIHN6ZW5hcmlvcyAtIGlmIHNldmVyYWwgY29udGV4dHMgYXJlIHBhc3NlZCwgdGhleSBwcm9iYWJseVxuXHRcdC8vIGJlbG9uZyB0byB0aGUgc2FtZSBtZXRhbW9kZWxwYXRoLiBUT0RPOiBDaGVjaywgd2hldGhlciB0aGlzIGNhbiBiZSBpbXByb3ZlZCAvIHN6ZW5hcmlvcyB3aXRoIGRpZmZlcmVudCBtZXRhTW9kZWxQYXRocyBtaWdodCBleGlzdFxuXHRcdHNBY3Rpb25QYXRoID0gYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChtUGFyYW1ldGVycy5hQ29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtzQWN0aW9uTmFtZX1gLFxuXHRcdG9Cb3VuZEFjdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c0FjdGlvblBhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgKTtcblx0bVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbiA9IEFjdGlvblJ1bnRpbWUuZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsLCBzQWN0aW9uUGF0aCwgbVBhcmFtZXRlcnMuYUNvbnRleHRzKTtcblxuXHQvLyBQcm9taXNlIHJldHVybmVkIGJ5IGNhbGxBY3Rpb24gY3VycmVudGx5IGlzIHJlamVjdGVkIGluIGNhc2Ugb2YgZXhlY3V0aW9uIGZvciBtdWx0aXBsZSBjb250ZXh0cyBwYXJ0bHkgZmFpbGluZy4gVGhpcyBzaG91bGQgYmUgY2hhbmdlZCAoc29tZSBmYWlsaW5nIGNvbnRleHRzIGRvIG5vdCBtZWFuXG5cdC8vIHRoYXQgZnVuY3Rpb24gZGlkIG5vdCBmdWxmaWxsIGl0cyB0YXNrKSwgYnV0IGFzIHRoaXMgaXMgYSBiaWdnZXIgcmVmYWN0b3JpbmcsIGZvciB0aGUgdGltZSBiZWluZyB3ZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGF0IGF0IHRoZSBjYWxsaW5nIHBsYWNlIChpLmUuIGhlcmUpXG5cdC8vID0+IHByb3ZpZGUgdGhlIHNhbWUgaGFuZGxlciAobWFwcGluZyBiYWNrIGZyb20gYXJyYXkgdG8gc2luZ2xlIHJlc3VsdC9lcnJvciBpZiBuZWVkZWQpIGZvciByZXNvbHZlZC9yZWplY3RlZCBjYXNlXG5cdGNvbnN0IGV4dHJhY3RTaW5nbGVSZXN1bHQgPSBmdW5jdGlvbiAocmVzdWx0OiBhbnkpIHtcblx0XHQvLyBzaW5nbGUgYWN0aW9uIGNvdWxkIGJlIHJlc29sdmVkIG9yIHJlamVjdGVkXG5cdFx0aWYgKHJlc3VsdFswXS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIpIHtcblx0XHRcdHJldHVybiByZXN1bHRbMF0udmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgZGlhbG9nIGNhbmNlbGxhdGlvbiwgbm8gYXJyYXkgaXMgcmV0dXJuZWQgPT4gdGhyb3cgdGhlIHJlc3VsdC5cblx0XHRcdC8vIElkZWFsbHksIGRpZmZlcmVudGlhdGluZyBzaG91bGQgbm90IGJlIG5lZWRlZCBoZXJlID0+IFRPRE86IEZpbmQgYmV0dGVyIHNvbHV0aW9uIHdoZW4gc2VwYXJhdGluZyBkaWFsb2cgaGFuZGxpbmcgKHNpbmdsZSBvYmplY3Qgd2l0aCBzaW5nbGUgcmVzdWx0KSBmcm9tIGJhY2tlbmRcblx0XHRcdC8vIGV4ZWN1dGlvbiAocG90ZW50aWFsbHkgbXVsdGlwbGUgb2JqZWN0cylcblx0XHRcdHRocm93IHJlc3VsdFswXS5yZWFzb24gfHwgcmVzdWx0O1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gY2FsbEFjdGlvbihzQWN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRBY3Rpb24sIG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykudGhlbihcblx0XHQocmVzdWx0OiBhbnkpID0+IHtcblx0XHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGV4dHJhY3RTaW5nbGVSZXN1bHQocmVzdWx0KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdChyZXN1bHQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKGlzQ2FsbGVkV2l0aEFycmF5KSB7XG5cdFx0XHRcdHRocm93IHJlc3VsdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBleHRyYWN0U2luZ2xlUmVzdWx0KHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufVxuLyoqXG4gKiBDYWxscyBhbiBhY3Rpb24gaW1wb3J0LlxuICpcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIGltcG9ydCB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgQW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmxhYmVsXSBBIGh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ddIElmIHNldCBhbmQgaWYgcGFyYW1ldGVycyBleGlzdCB0aGUgdXNlciByZXRyaWV2ZXMgYSBkaWFsb2cgdG8gZmlsbCBpbiBwYXJhbWV0ZXJzLCBpZiBhY3Rpb25QYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhleSBhcmUgc2hvd24gdG8gdGhlIHVzZXJcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMub25TdWJtaXR0ZWRdIEZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBvbmNlIHRoZSBhY3Rpb25zIGFyZSBzdWJtaXR0ZWQgd2l0aCBhbiBhcnJheSBvZiBwcm9taXNlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5kZWZhdWx0UGFyYW1ldGVyc10gQ2FuIGNvbnRhaW4gZGVmYXVsdCBwYXJhbWV0ZXJzIGZyb20gRkxQIHVzZXIgZGVmYXVsdHNcbiAqIEBwYXJhbSBbc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNdIE9wdGlvbmFsLCB1dGlsaXR5IGZsYWdzIGFuZCBtZXNzYWdlcyBmb3Igc3RyaWN0SGFuZGxpbmdcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICovXG5mdW5jdGlvbiBjYWxsQWN0aW9uSW1wb3J0KFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRvTW9kZWw6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pIHtcblx0aWYgKCFvTW9kZWwpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJBY3Rpb24gZXhwZWN0cyBhIG1vZGVsL2NvbnRleHQgZm9yIGV4ZWN1dGlvblwiKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNBY3Rpb25QYXRoID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzQWN0aW9uTmFtZX1gKS5nZXRQYXRoKCksXG5cdFx0b0FjdGlvbkltcG9ydCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke29NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0FjdGlvblBhdGgpLmdldE9iamVjdChcIiRBY3Rpb25cIil9LzBgKTtcblx0bVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbiA9IEFjdGlvblJ1bnRpbWUuZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsLCBgJHtzQWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWRgKTtcblx0cmV0dXJuIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWUsIG9Nb2RlbCwgb0FjdGlvbkltcG9ydCwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKTtcbn1cbmZ1bmN0aW9uIGNhbGxCb3VuZEZ1bmN0aW9uKHNGdW5jdGlvbk5hbWU6IHN0cmluZywgY29udGV4dDogYW55LCBvTW9kZWw6IGFueSkge1xuXHRpZiAoIWNvbnRleHQpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJCb3VuZCBmdW5jdGlvbnMgYWx3YXlzIHJlcXVpcmVzIGEgY29udGV4dFwiKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNGdW5jdGlvblBhdGggPSBgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHQuZ2V0UGF0aCgpKX0vJHtzRnVuY3Rpb25OYW1lfWAsXG5cdFx0b0JvdW5kRnVuY3Rpb24gPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpO1xuXHRyZXR1cm4gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lLCBvTW9kZWwsIG9Cb3VuZEZ1bmN0aW9uLCBjb250ZXh0KTtcbn1cbi8qKlxuICogQ2FsbHMgYSBmdW5jdGlvbiBpbXBvcnQuXG4gKlxuICogQHBhcmFtIHNGdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSB2NCBtb2RlbFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlc1xuICovXG5mdW5jdGlvbiBjYWxsRnVuY3Rpb25JbXBvcnQoc0Z1bmN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IGFueSkge1xuXHRpZiAoIXNGdW5jdGlvbk5hbWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzRnVuY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRvRnVuY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpLmdldE9iamVjdChcIiRGdW5jdGlvblwiKX0vMGApO1xuXHRyZXR1cm4gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lLCBvTW9kZWwsIG9GdW5jdGlvbkltcG9ydCk7XG59XG5mdW5jdGlvbiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWU6IGFueSwgb01vZGVsOiBhbnksIG9GdW5jdGlvbjogYW55LCBjb250ZXh0PzogYW55KSB7XG5cdGxldCBzR3JvdXBJZDtcblx0aWYgKCFvRnVuY3Rpb24gfHwgIW9GdW5jdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEZ1bmN0aW9uICR7c0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCkpO1xuXHR9XG5cdGlmIChjb250ZXh0KSB7XG5cdFx0b0Z1bmN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAke2NvbnRleHQuZ2V0UGF0aCgpfS8ke3NGdW5jdGlvbk5hbWV9KC4uLilgKTtcblx0XHRzR3JvdXBJZCA9IFwiZnVuY3Rpb25Hcm91cFwiO1xuXHR9IGVsc2Uge1xuXHRcdG9GdW5jdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0Z1bmN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHNHcm91cElkID0gXCJmdW5jdGlvbkltcG9ydFwiO1xuXHR9XG5cdGNvbnN0IG9GdW5jdGlvblByb21pc2UgPSBvRnVuY3Rpb24uZXhlY3V0ZShzR3JvdXBJZCk7XG5cdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdHJldHVybiBvRnVuY3Rpb25Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBvRnVuY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdH0pO1xufVxuZnVuY3Rpb24gY2FsbEFjdGlvbihcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b01vZGVsOiBhbnksXG5cdG9BY3Rpb246IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pIHtcblx0aWYgKCFzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0aXM0MTJFeGVjdXRlZDogZmFsc2UsXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBbXSxcblx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IFtdXG5cdFx0fTtcblx0fVxuXHRtUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSB7XG5cdFx0bGV0IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBhbnkgPSB7fTtcblx0XHRsZXQgZm5EaWFsb2c7XG5cdFx0bGV0IG9BY3Rpb25Qcm9taXNlO1xuXHRcdC8vbGV0IGZhaWxlZEFjdGlvblByb21pc2U6IGFueTtcblx0XHRjb25zdCBzQWN0aW9uTGFiZWwgPSBtUGFyYW1ldGVycy5sYWJlbDtcblx0XHRjb25zdCBiU2tpcFBhcmFtZXRlckRpYWxvZyA9IG1QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2c7XG5cdFx0Y29uc3QgYUNvbnRleHRzID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzO1xuXHRcdGNvbnN0IGJJc0NyZWF0ZUFjdGlvbiA9IG1QYXJhbWV0ZXJzLmJJc0NyZWF0ZUFjdGlvbjtcblx0XHRjb25zdCBiSXNDcml0aWNhbEFjdGlvbiA9IG1QYXJhbWV0ZXJzLmlzQ3JpdGljYWxBY3Rpb247XG5cdFx0bGV0IG9NZXRhTW9kZWw7XG5cdFx0bGV0IHNNZXRhUGF0aDtcblx0XHRsZXQgc01lc3NhZ2VzUGF0aDogYW55O1xuXHRcdGxldCBpTWVzc2FnZVNpZGVFZmZlY3Q7XG5cdFx0bGV0IGJJc1NhbWVFbnRpdHk7XG5cdFx0bGV0IG9SZXR1cm5UeXBlO1xuXHRcdGxldCBiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzO1xuXHRcdGNvbnN0IGFjdGlvbkRlZmluaXRpb24gPSBvQWN0aW9uLmdldE9iamVjdCgpO1xuXHRcdGlmICghb0FjdGlvbiB8fCAhb0FjdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEFjdGlvbiAke3NBY3Rpb25OYW1lfSBub3QgZm91bmRgKSk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBhY3Rpb25cblx0XHRjb25zdCBhQWN0aW9uUGFyYW1ldGVycyA9IGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbik7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgYWN0aW9uIGhhcyBwYXJhbWV0ZXJzIGFuZCB3b3VsZCBuZWVkIGEgcGFyYW1ldGVyIGRpYWxvZ1xuXHRcdC8vIFRoZSBwYXJhbWV0ZXIgUmVzdWx0SXNBY3RpdmVFbnRpdHkgaXMgYWx3YXlzIGhpZGRlbiBpbiB0aGUgZGlhbG9nISBIZW5jZSBpZlxuXHRcdC8vIHRoaXMgaXMgdGhlIG9ubHkgcGFyYW1ldGVyLCB0aGlzIGlzIHRyZWF0ZWQgYXMgbm8gcGFyYW1ldGVyIGhlcmUgYmVjYXVzZSB0aGVcblx0XHQvLyBkaWFsb2cgd291bGQgYmUgZW1wdHkhXG5cdFx0Ly8gRklYTUU6IFNob3VsZCBvbmx5IGlnbm9yZSB0aGlzIGlmIHRoaXMgaXMgYSAnY3JlYXRlJyBhY3Rpb24sIG90aGVyd2lzZSBpdCBpcyBqdXN0IHNvbWUgbm9ybWFsIHBhcmFtZXRlciB0aGF0IGhhcHBlbnMgdG8gaGF2ZSB0aGlzIG5hbWVcblx0XHRjb25zdCBiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2cgPVxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiAhKGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSAmJiBhQWN0aW9uUGFyYW1ldGVyc1swXS4kTmFtZSA9PT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKTtcblxuXHRcdC8vIFByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzIGZyb20gaW52b2tlQWN0aW9uIGNhbGxcblx0XHRjb25zdCBhUGFyYW1ldGVyVmFsdWVzID0gbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHN0YXJ0dXAgcGFyYW1ldGVycyBpZiBwcm92aWRlZFxuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblxuXHRcdC8vIEluIGNhc2UgYW4gYWN0aW9uIHBhcmFtZXRlciBpcyBuZWVkZWQsIGFuZCB3ZSBzaGFsbCBza2lwIHRoZSBkaWFsb2csIGNoZWNrIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCBwYXJhbWV0ZXJzXG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyAmJiBiU2tpcFBhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0YlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyA9IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMoXG5cdFx0XHRcdGJJc0NyZWF0ZUFjdGlvbixcblx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdGFQYXJhbWV0ZXJWYWx1ZXMsXG5cdFx0XHRcdG9TdGFydHVwUGFyYW1ldGVyc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBEZXBlbmRpbmcgb24gdGhlIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBkYXRhLCBlaXRoZXIgc2V0IGEgZGlhbG9nIG9yIGxlYXZlIGl0IGVtcHR5IHdoaWNoXG5cdFx0Ly8gd2lsbCBsZWFkIHRvIGRpcmVjdCBleGVjdXRpb24gb2YgdGhlIGFjdGlvbiB3aXRob3V0IGEgZGlhbG9nXG5cdFx0Zm5EaWFsb2cgPSBudWxsO1xuXHRcdGlmIChiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2cpIHtcblx0XHRcdGlmICghKGJTa2lwUGFyYW1ldGVyRGlhbG9nICYmIGJWYWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMpKSB7XG5cdFx0XHRcdGZuRGlhbG9nID0gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGJJc0NyaXRpY2FsQWN0aW9uKSB7XG5cdFx0XHRmbkRpYWxvZyA9IGNvbmZpcm1Dcml0aWNhbEFjdGlvbjtcblx0XHR9XG5cblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdGZuT25TdWJtaXR0ZWQ6IG1QYXJhbWV0ZXJzLm9uU3VibWl0dGVkLFxuXHRcdFx0Zm5PblJlc3BvbnNlOiBtUGFyYW1ldGVycy5vblJlc3BvbnNlLFxuXHRcdFx0YWN0aW9uTmFtZTogc0FjdGlvbk5hbWUsXG5cdFx0XHRtb2RlbDogb01vZGVsLFxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnM6IGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0YkdldEJvdW5kQ29udGV4dDogbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dCxcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0bGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLFxuXHRcdFx0c2VsZWN0ZWRJdGVtczogbVBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtc1xuXHRcdH07XG5cdFx0aWYgKG9BY3Rpb24uZ2V0T2JqZWN0KFwiJElzQm91bmRcIikpIHtcblx0XHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChhQ29udGV4dHNbMF0uZ2V0UGF0aCgpKTtcblx0XHRcdFx0c01lc3NhZ2VzUGF0aCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlcy8kUGF0aGApO1xuXG5cdFx0XHRcdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0XHRcdFx0aU1lc3NhZ2VTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLmZpbmRJbmRleChmdW5jdGlvbiAoZXhwOiBhbnkpIHtcblx0XHRcdFx0XHRcdC8vICcqJyBlZmZlY3RpdmVseSBpbmNsdWRlcyB0aGUgbWVzc2FnZXMgcGF0aCBpZiB0aGVyZSBpcyBvbmVcblx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIChleHAgPT09IHNNZXNzYWdlc1BhdGggfHwgZXhwID09PSBcIipcIik7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBBZGQgU0FQX01lc3NhZ2VzIGJ5IGRlZmF1bHQgaWYgbm90IGFubm90YXRlZCBieSBzaWRlIGVmZmVjdHMsIGFjdGlvbiBkb2VzIG5vdCByZXR1cm4gYSBjb2xsZWN0aW9uIGFuZFxuXHRcdFx0XHRcdC8vIHRoZSByZXR1cm4gdHlwZSBpcyB0aGUgc2FtZSBhcyB0aGUgYm91bmQgdHlwZVxuXHRcdFx0XHRcdG9SZXR1cm5UeXBlID0gb0FjdGlvbi5nZXRPYmplY3QoXCIkUmV0dXJuVHlwZVwiKTtcblx0XHRcdFx0XHRiSXNTYW1lRW50aXR5ID1cblx0XHRcdFx0XHRcdG9SZXR1cm5UeXBlICYmICFvUmV0dXJuVHlwZS4kaXNDb2xsZWN0aW9uICYmIG9BY3Rpb24uZ2V0TW9kZWwoKS5nZXRPYmplY3Qoc01ldGFQYXRoKS4kVHlwZSA9PT0gb1JldHVyblR5cGUuJFR5cGU7XG5cblx0XHRcdFx0XHRpZiAoaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEgfHwgYklzU2FtZUVudGl0eSkge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIG1lc3NhZ2UgcGF0aCBpcyBhbm5vdGF0ZWQgYXMgc2lkZSBlZmZlY3QuIEFzIHRoZXJlJ3Mgbm8gYmluZGluZyBmb3IgaXQgYW5kIHRoZSBtb2RlbCBkb2VzIGN1cnJlbnRseSBub3QgYWxsb3dcblx0XHRcdFx0XHRcdC8vIHRvIGFkZCBpdCBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUgd2UgaGF2ZSB0byB0YWtlIGNhcmUgaXQncyBwYXJ0IG9mIHRoZSAkc2VsZWN0IG9mIHRoZSBQT1NULCB0aGVyZWZvcmUgbW92aW5nIGl0LlxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24uZ2V0T2JqZWN0KGAkUmV0dXJuVHlwZS8kVHlwZS8ke3NNZXNzYWdlc1BhdGh9YCkgJiZcblx0XHRcdFx0XHRcdFx0KCFtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCB8fFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0LnNwbGl0KFwiLFwiKS5pbmRleE9mKHNNZXNzYWdlc1BhdGgpID09PSAtMSlcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHQvLyBXZSBuZWVkIHRoZSByZXR1cm4gY29udGV4dCB0byBiZSBmZXRjaGVkIHdpdGggYWxsIHRoZSBleGlzdGluZyBwcm9wZXJ0aWVzIG9mIHRoZSBib3VuZCBhY3Rpb24ncyBzb3VyY2UgY29udGV4dC5cblx0XHRcdFx0XHRcdFx0Ly8gTWVzc2FnZSBQYXRoIG1pZ2h0IG5vdCBleGlzdCBpbiB0aGUgVUkgYXMgcGFydCBvZiBhIGJpbmRpbmcgYnV0IGl0IGlzIGV4cGVjdGVkIHRvIGJlIGEgcGFydCBvZiB0aGUgYm91bmQgYWN0aW9uJ3Mgc291cmNlIGNvbnRleHQncyAkc2VsZWN0LlxuXHRcdFx0XHRcdFx0XHQvLyBIZW5jZSwgaXQgc2hhbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSByZXR1cm4gY29udGV4dCdzICRzZWxlY3QgdmlhIHRoZSBhY3Rpb24gcmVxdWVzdChQT1NUIGNhbGwpLlxuXHRcdFx0XHRcdFx0XHRpZiAoYklzU2FtZUVudGl0eSkge1xuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kJGluaGVyaXRFeHBhbmRTZWxlY3QgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucy5sZW5ndGggPT09IDAgJiYgaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBubyB0cmlnZ2VyIGFjdGlvbiB0aGVyZWZvcmUgbm8gbmVlZCB0byByZXF1ZXN0IG1lc3NhZ2VzIGFnYWluXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLnNwbGljZShpTWVzc2FnZVNpZGVFZmZlY3QsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFDb250ZXh0cztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ID0gbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgPSBtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXA7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbiA9IGJJc0NyZWF0ZUFjdGlvbjtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJPYmplY3RQYWdlID0gbVBhcmFtZXRlcnMuYk9iamVjdFBhZ2U7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5kaXNhYmxlU3RyaWN0SGFuZGxpbmcgPSBtUGFyYW1ldGVycy5kaXNhYmxlU3RyaWN0SGFuZGxpbmc7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5ncm91cElkID0gbVBhcmFtZXRlcnMuZ3JvdXBJZDtcblx0XHRcdGlmIChtUGFyYW1ldGVycy5jb250cm9sSWQpIHtcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wuYnlJZChtUGFyYW1ldGVycy5jb250cm9sSWQpO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5jb250cm9sID0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5jb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbDtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGJJc0NyZWF0ZUFjdGlvbikge1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uID0gYklzQ3JlYXRlQWN0aW9uO1xuXHRcdH1cblx0XHQvL2NoZWNrIGZvciBza2lwcGluZyBzdGF0aWMgYWN0aW9uc1xuXHRcdGNvbnN0IGlzU3RhdGljID0gKGFjdGlvbkRlZmluaXRpb24uJFBhcmFtZXRlciB8fCBbXSkuc29tZSgoYVBhcmFtZXRlcjogYW55KSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQoKGFjdGlvbkRlZmluaXRpb24uJEVudGl0eVNldFBhdGggJiYgYWN0aW9uRGVmaW5pdGlvbi4kRW50aXR5U2V0UGF0aCA9PT0gYVBhcmFtZXRlci4kTmFtZSkgfHwgYWN0aW9uRGVmaW5pdGlvbi4kSXNCb3VuZCkgJiZcblx0XHRcdFx0YVBhcmFtZXRlci4kaXNDb2xsZWN0aW9uXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmlzU3RhdGljID0gaXNTdGF0aWM7XG5cdFx0aWYgKGZuRGlhbG9nKSB7XG5cdFx0XHRvQWN0aW9uUHJvbWlzZSA9IGZuRGlhbG9nKFxuXHRcdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0c0FjdGlvbkxhYmVsLFxuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdGFQYXJhbWV0ZXJWYWx1ZXMsXG5cdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUsXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0KTtcblx0XHRcdHJldHVybiBvQWN0aW9uUHJvbWlzZVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob09wZXJhdGlvblJlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvT3BlcmF0aW9uUmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRyZWplY3Qob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUYWtlIG92ZXIgYWxsIHByb3ZpZGVkIHBhcmFtZXRlciB2YWx1ZXMgYW5kIGNhbGwgdGhlIGFjdGlvbi5cblx0XHRcdC8vIFRoaXMgc2hhbGwgb25seSBoYXBwZW4gaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIHRoZSBwYXJhbWV0ZXJzLCBvdGhlcndpc2UgdGhlIHBhcmFtZXRlciBkaWFsb2cgc2hhbGwgYmUgc2hvd24gd2hpY2ggaXMgZW5zdXJlZCBlYXJsaWVyXG5cdFx0XHRpZiAoYVBhcmFtZXRlclZhbHVlcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9IGFQYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHQoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lXG5cdFx0XHRcdFx0KT8udmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaSBpbiBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzW2ldLnZhbHVlID1cblx0XHRcdFx0XHRcdG9TdGFydHVwUGFyYW1ldGVyc1ttQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZV0/LlswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IG9PcGVyYXRpb25SZXN1bHQ6IGFueTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9PcGVyYXRpb25SZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBtZXNzYWdlcyA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJlxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiZcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMgPSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcy5jb25jYXQobWVzc2FnZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdHJlamVjdChvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJlxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiZcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGggJiZcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5hQ29udGV4dHMubGVuZ3RoID4gMVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdGYWlscyA9IHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUZhaWxlZENvbnRleHRzID0gW10gYXMgYW55O1xuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5mb3JFYWNoKGZ1bmN0aW9uIChmYWlsOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0YUZhaWxlZENvbnRleHRzLnB1c2goZmFpbC5vQWN0aW9uLmdldENvbnRleHQoKSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFGYWlsZWRDb250ZXh0cztcblx0XHRcdFx0XHRcdGNvbnN0IG9GYWlsZWRPcGVyYXRpb25SZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzID0gW107XG5cdFx0XHRcdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMpO1xuXHRcdFx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpIHtcblx0XHRcdFx0XHRcdHJlamVjdChvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRcdFx0aXNDaGFuZ2VTZXRBbmRIYXNFcnJvcnNPcldhcm5pbmdzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0bVBhcmFtZXRlcnM/Lm1lc3NhZ2VIYW5kbGVyPy5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0Y29udHJvbDogbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnM/LmNvbnRyb2wsXG5cdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLFxuXHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiBtUGFyYW1ldGVycy5hQ29udGV4dHMsXG5cdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgPSB7XG5cdFx0XHRcdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nUHJvbWlzZXM6IFtdLFxuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkczogW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1Dcml0aWNhbEFjdGlvbihcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IGFueSxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUFjdGlvblBhcmFtZXRlcnM6IGFueSxcblx0YVBhcmFtZXRlclZhbHVlczogYW55LFxuXHRvQWN0aW9uQ29udGV4dDogYW55LFxuXHRvUGFyZW50Q29udHJvbDogYW55LFxuXHRlbnRpdHlTZXROYW1lOiBhbnksXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHNBY3Rpb25OYW1lID8gc0FjdGlvbk5hbWUgOiBudWxsO1xuXHRcdGJvdW5kQWN0aW9uTmFtZSA9XG5cdFx0XHRib3VuZEFjdGlvbk5hbWUuaW5kZXhPZihcIi5cIikgPj0gMCA/IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIilbYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKS5sZW5ndGggLSAxXSA6IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiBlbnRpdHlTZXROYW1lID8gYCR7ZW50aXR5U2V0TmFtZX18JHtib3VuZEFjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1BhcmVudENvbnRyb2wpO1xuXHRcdGNvbnN0IHNDb25maXJtYXRpb25UZXh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9DT05GSVJNX01FU1NBR0VcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cblx0XHRNZXNzYWdlQm94LmNvbmZpcm0oc0NvbmZpcm1hdGlvblRleHQsIHtcblx0XHRcdG9uQ2xvc2U6IGFzeW5jIGZ1bmN0aW9uIChzQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0aWYgKHNBY3Rpb24gPT09IEFjdGlvbi5PSykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvT3BlcmF0aW9uID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uKTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNvbHZlKENvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlQVBNQWN0aW9uKFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdG9QYXJlbnRDb250cm9sOiBhbnksXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0YUNvbnRleHRzOiBhbnksXG5cdG9EaWFsb2c6IGFueSxcblx0YWZ0ZXI0MTI6IGJvb2xlYW4sXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24ob0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIG9QYXJlbnRDb250cm9sLCBtZXNzYWdlSGFuZGxlciwgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMpO1xuXHQvLyBJZiBzb21lIGVudHJpZXMgd2VyZSBzdWNjZXNzZnVsLCBhbmQgb3RoZXJzIGhhdmUgZmFpbGVkLCB0aGUgb3ZlcmFsbCBwcm9jZXNzIGlzIHN0aWxsIHN1Y2Nlc3NmdWwuIEhvd2V2ZXIsIHRoaXMgd2FzIHRyZWF0ZWQgYXMgcmVqZWN0aW9uXG5cdC8vIGJlZm9yZSwgYW5kIHRoaXMgY3VycmVudGx5IGlzIHN0aWxsIGtlcHQsIGFzIGxvbmcgYXMgZGlhbG9nIGhhbmRsaW5nIGlzIG1peGVkIHdpdGggYmFja2VuZCBwcm9jZXNzIGhhbmRsaW5nLlxuXHQvLyBUT0RPOiBSZWZhY3RvciB0byBvbmx5IHJlamVjdCBpbiBjYXNlIG9mIG92ZXJhbGwgcHJvY2VzcyBlcnJvci5cblx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nOiBtYXAgdG8gb2xkIGxvZ2ljIHRvIHJlamVjdCBpZiBhdCBsZWFzdCBvbmUgZW50cnkgaGFzIGZhaWxlZFxuXHQvLyBUaGlzIGNoZWNrIGlzIG9ubHkgZG9uZSBmb3IgYm91bmQgYWN0aW9ucyA9PiBhQ29udGV4dHMgbm90IGVtcHR5XG5cdGlmIChtUGFyYW1ldGVycy5hQ29udGV4dHM/Lmxlbmd0aCkge1xuXHRcdGlmIChhUmVzdWx0Py5zb21lKChvU2luZ2xlUmVzdWx0OiBhbnkpID0+IG9TaW5nbGVSZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpKSB7XG5cdFx0XHR0aHJvdyBhUmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG1lc3NhZ2VzID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoKSB7XG5cdFx0aWYgKCFhZnRlcjQxMikge1xuXHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMgPSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcy5jb25jYXQobWVzc2FnZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMpO1xuXHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkgfHxcblx0XHRcdFx0aXNDaGFuZ2VTZXRBbmRIYXNFcnJvcnNPcldhcm5pbmdzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gQk9VTkQgVFJBTlNJVElPTiBBUyBQQVJUIE9GIFNBUF9NRVNTQUdFXG5cdFx0XHRcdG9EaWFsb2cuYXR0YWNoRXZlbnRPbmNlKFwiYWZ0ZXJDbG9zZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdGFNZXNzYWdlcyxcblx0XHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbnRyb2w6IG1QYXJhbWV0ZXJzLmNvbnRyb2wsXG5cdFx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0czogbVBhcmFtZXRlcnMuYUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IG1QYXJhbWV0ZXJzLmxhYmVsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHQvLyBCT1VORCBUUkFOU0lUSU9OIEFTIFBBUlQgT0YgU0FQX01FU1NBR0Vcblx0XHRsZXQgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSBmYWxzZTtcblx0XHRpZiAoXG5cdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRpc0NoYW5nZVNldEFuZEhhc0Vycm9yc09yV2FybmluZ3MobVBhcmFtZXRlcnMuYkdyb3VwZWQpXG5cdFx0KSB7XG5cdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IHRydWU7XG5cdFx0fVxuXHRcdG9EaWFsb2cuYXR0YWNoRXZlbnRPbmNlKFwiYWZ0ZXJDbG9zZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbjogbVBhcmFtZXRlcnM/Lm9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbnRyb2w6IG1QYXJhbWV0ZXJzLmNvbnRyb2wsXG5cdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiBtUGFyYW1ldGVycy5hQ29udGV4dHMsXG5cdFx0XHRcdHNBY3Rpb25OYW1lOiBtUGFyYW1ldGVycy5sYWJlbFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gYVJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzOiBhbnksIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBhbnksIGFjdGlvbkRlZmluaXRpb246IGFueSkge1xuXHRpZiAoXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgJiZcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgJiZcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMubGVuZ3RoICYmXG5cdFx0YWN0aW9uRGVmaW5pdGlvbi4kSXNCb3VuZFxuXHQpIHtcblx0XHRsZXQgc2VsZWN0ZWRDb250ZXh0cyA9IFtdO1xuXHRcdC8vY2hlY2sgZm9yIHNraXBwaW5nIHN0YXRpYyBhY3Rpb25zXG5cdFx0Y29uc3QgaXNTdGF0aWMgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc1N0YXRpYztcblx0XHRpZiAoIWlzU3RhdGljKSB7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzID0gbVBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtcyB8fCBbXTtcblx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0bVBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtcyxcblx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sO1xuXHRcdFx0aWYgKG9Db250cm9sLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IG9Db250cm9sLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvL3VwZGF0ZSBkZWxldGUgYnV0dG9uXG5cdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LCBzZWxlY3RlZENvbnRleHRzKTtcblx0fVxufVxuXG5mdW5jdGlvbiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRhQ29udGV4dHM6IGFueSxcblx0b0RpYWxvZzogYW55LFxuXHRtZXNzYWdlczogYW55LFxuXHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogeyBzaG93TWVzc2FnZUJveDogYm9vbGVhbjsgc2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW4gfSxcblx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQ6IGJvb2xlYW5cbik6IHtcblx0Zm5HZXRNZXNzYWdlU3VidGl0bGU6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXHRzaG93TWVzc2FnZUJveDogYm9vbGVhbjtcblx0c2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW47XG5cdGZpbHRlcmVkTWVzc2FnZXM6IGFueVtdO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c6IGJvb2xlYW47XG59IHtcblx0bGV0IHNob3dNZXNzYWdlQm94ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4uc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbi5zaG93TWVzc2FnZURpYWxvZztcblx0Y29uc3Qgb0NvbnRyb2wgPSBtUGFyYW1ldGVycy5jb250cm9sO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRjb25zdCB1bmJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKT8uWzBdID09PSBcIlwiO1xuXHR9KTtcblx0Y29uc3QgQVBEbWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRtZXNzYWdlLmdldFRhcmdldHMgJiZcblx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpPy5bMF0uaW5kZXhPZihtUGFyYW1ldGVycy5hY3Rpb25OYW1lKSAhPT0gLTEgJiZcblx0XHRcdG1QYXJhbWV0ZXJzPy5hQWN0aW9uUGFyYW1ldGVycz8uc29tZShmdW5jdGlvbiAoYWN0aW9uUGFyYW06IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXS5pbmRleE9mKGFjdGlvblBhcmFtLiROYW1lKSAhPT0gLTE7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0pO1xuXHRBUERtZXNzYWdlcz8uZm9yRWFjaChmdW5jdGlvbiAoQVBETWVzc2FnZTogYW55KSB7XG5cdFx0QVBETWVzc2FnZS5pc0FQRFRhcmdldCA9IHRydWU7XG5cdH0pO1xuXG5cdGNvbnN0IGVycm9yVGFyZ2V0c0luQVBEID0gQVBEbWVzc2FnZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuXHRsZXQgaGFzQ2hhbmdlU2V0TW9kaWZpZWRNZXNzYWdlID0gZmFsc2U7XG5cdGlmIChzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCAmJiAhZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRoYXNDaGFuZ2VTZXRNb2RpZmllZE1lc3NhZ2UgPSB0cnVlO1xuXHRcdGxldCBzTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9FUlJPUl9NRVNTQUdFU19URVhUXCIpO1xuXHRcdGxldCBzRGVzY3JpcHRpb25UZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX0VSUk9SX01FU1NBR0VTX0RFVEFJTF9URVhUXCIpO1xuXHRcdGNvbnN0IG1lc3NhZ2VNb2RlbCA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKTtcblx0XHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBtZXNzYWdlTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGFCb3VuZE1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUpO1xuXHRcdGxldCBnZW5lcmljTWVzc2FnZTtcblx0XHRjb25zdCBpc0VkaXRhYmxlID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXG5cdFx0Y29uc3Qgbm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5EaWFsb2cgPSBtZXNzYWdlcy5maW5kSW5kZXgoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiIHx8IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIldhcm5pbmdcIjtcblx0XHR9KTtcblx0XHRjb25zdCBub25FcnJvck1lc3NhZ2VFeGlzdHNJbk1vZGVsID0gbWVzc2FnZXNJbk1vZGVsLmZpbmRJbmRleChmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgfHwgbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiV2FybmluZ1wiO1xuXHRcdH0pO1xuXG5cdFx0aWYgKG5vbkVycm9yTWVzc2FnZUV4aXN0c0luRGlhbG9nICE9PSAxICYmIG5vbkVycm9yTWVzc2FnZUV4aXN0c0luTW9kZWwgIT09IC0xICYmIG1QYXJhbWV0ZXJzPy5hQ29udGV4dHM/Lmxlbmd0aCA+IDEpIHtcblx0XHRcdGlmIChtZXNzYWdlc0luTW9kZWwubGVuZ3RoID09PSAxICYmIGFCb3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRpZiAoaXNFZGl0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRtZXNzYWdlc0luTW9kZWxbMF0uc2V0TWVzc2FnZShcblx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9TSU5HTEVfRVJST1JfTUVTU0FHRV9URVhUXCIpICtcblx0XHRcdFx0XHRcdFx0XCJcXG5cXG5cIiArXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VzSW5Nb2RlbFswXS5nZXRNZXNzYWdlKClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNNZXNzYWdlID0gaXNFZGl0YWJsZVxuXHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfU0lOR0xFX0VSUk9SX01FU1NBR0VfVEVYVF9FRElUXCIpXG5cdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9TSU5HTEVfRVJST1JfTUVTU0FHRV9URVhUXCIpO1xuXHRcdFx0XHRcdHNEZXNjcmlwdGlvblRleHQgPSBcIlwiO1xuXHRcdFx0XHRcdGdlbmVyaWNNZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdFx0bWVzc2FnZTogc01lc3NhZ2UsXG5cdFx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogc0Rlc2NyaXB0aW9uVGV4dCxcblx0XHRcdFx0XHRcdGNvZGU6IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG1lc3NhZ2VzLnVuc2hpZnQoZ2VuZXJpY01lc3NhZ2UpO1xuXHRcdFx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnZW5lcmljTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBzTWVzc2FnZSxcblx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogc0Rlc2NyaXB0aW9uVGV4dCxcblx0XHRcdFx0XHRjb2RlOiBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdG1lc3NhZ2VzLnVuc2hpZnQoZ2VuZXJpY01lc3NhZ2UpO1xuXHRcdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSB0cnVlO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpICYmIGFDb250ZXh0cy5sZW5ndGggIT09IDAgJiYgIW1QYXJhbWV0ZXJzLmlzU3RhdGljKSB7XG5cdFx0aWYgKCFtUGFyYW1ldGVycy5iR3JvdXBlZCkge1xuXHRcdFx0Ly9pc29sYXRlZFxuXHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxIHx8ICFlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHQvLyBkb2VzIG5vdCBtYXR0ZXIgaWYgZXJyb3IgaXMgaW4gQVBEIG9yIG5vdCwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRleHRzIHNlbGVjdGVkIG9yIGlmIHRoZSBlcnJvciBpcyBub3QgdGhlIEFQRCwgd2UgY2xvc2UgaXQuXG5cdFx0XHRcdC8vIFRPRE86IERpbGFvZyBoYW5kbGluZyBzaG91bGQgbm90IGJlIHBhcnQgb2YgbWVzc2FnZSBoYW5kbGluZy4gUmVmYWN0b3IgYWNjb3JkaW5nbHkgLSBkaWFsb2cgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaW5zaWRlIHRoaXMgbWV0aG9kIC0gbmVpdGhlclxuXHRcdFx0XHQvLyB0byBhc2sgd2hldGhlciBpdCdzIG9wZW4sIG5vciB0byBjbG9zZS9kZXN0cm95IGl0IVxuXHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIWVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHQvL2NoYW5nZXNldFxuXHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cdGxldCBmaWx0ZXJlZE1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBiSXNBUERPcGVuID0gb0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpO1xuXHRpZiAoIWhhc0NoYW5nZVNldE1vZGlmaWVkTWVzc2FnZSkge1xuXHRcdGlmIChcblx0XHRcdG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0bWVzc2FnZXNbMF0uZ2V0VGFyZ2V0cyAmJlxuXHRcdFx0bWVzc2FnZXNbMF0uZ2V0VGFyZ2V0cygpPy5bMF0gIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0bWVzc2FnZXNbMF0uZ2V0VGFyZ2V0cygpPy5bMF0gIT09IFwiXCJcblx0XHQpIHtcblx0XHRcdGlmICgob0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSBmYWxzZSkgfHwgIW9Db250cm9sKSB7XG5cdFx0XHRcdC8vIE9QIGVkaXQgb3IgTFJcblx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSAhZXJyb3JUYXJnZXRzSW5BUEQ7XG5cdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2wpIHtcblx0XHRcdGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGlmIChiSXNBUERPcGVuICYmIGVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKCFiSXNBUERPcGVuICYmIGVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdGZpbHRlcmVkTWVzc2FnZXMgPSB1bmJvdW5kTWVzc2FnZXMuY29uY2F0KEFQRG1lc3NhZ2VzKTtcblx0XHRcdFx0fSBlbHNlIGlmICghYklzQVBET3BlbiAmJiB1bmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Ly8gZXJyb3IgdGFyZ2V0cyBpbiBBUEQgPT4gdGhlcmUgaXMgYXRsZWFzdCBvbmUgYm91bmQgbWVzc2FnZS4gSWYgdGhlcmUgYXJlIHVuYm91bmQgbWVzc2FnZXMsIGRpYWxvZyBtdXN0IGJlIHNob3duLlxuXHRcdFx0XHRcdC8vIGZvciBkcmFmdCBlbnRpdHksIHdlIGFscmVhZHkgY2xvc2VkIHRoZSBBUERcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzaG93TWVzc2FnZUJveDogc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2c6IHNob3dNZXNzYWdlRGlhbG9nLFxuXHRcdGZpbHRlcmVkTWVzc2FnZXM6IGZpbHRlcmVkTWVzc2FnZXMubGVuZ3RoID8gZmlsdGVyZWRNZXNzYWdlcyA6IG1lc3NhZ2VzLFxuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlOlxuXHRcdFx0b0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiBtZXNzYWdlSGFuZGxpbmcuc2V0TWVzc2FnZVN1YnRpdGxlLmJpbmQoe30sIG9Db250cm9sLCBhQ29udGV4dHMpLFxuXHRcdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZzogbVBhcmFtZXRlcnMuYkdyb3VwZWRcblx0fTtcbn1cblxuLypcbiAqIEN1cnJlbnRseSwgdGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHNob3dpbmcgdGhlIGRpYWxvZyBhbmQgZXhlY3V0aW5nIHRoZSBhY3Rpb24uIFRoZSBwcm9taXNlIHJldHVybmVkIGlzIHBlbmRpbmcgd2hpbGUgd2FpdGluZyBmb3IgdXNlciBpbnB1dCwgYXMgd2VsbCBhcyB3aGlsZSB0aGVcbiAqIGJhY2stZW5kIHJlcXVlc3QgaXMgcnVubmluZy4gVGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIHRoZSBkaWFsb2cgYW5kIGFsc28gd2hlbiB0aGUgYmFjay1lbmQgcmVxdWVzdCBmYWlscy5cbiAqIFRPRE86IFJlZmFjdG9yaW5nOiBTZXBhcmF0ZSBkaWFsb2cgaGFuZGxpbmcgZnJvbSBiYWNrZW5kIHByb2Nlc3NpbmcuIERpYWxvZyBoYW5kbGluZyBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZSByZXNvbHZpbmcgdG8gcGFyYW1ldGVycyB0byBiZSBwcm92aWRlZCB0byBiYWNrZW5kLiBJZiBkaWFsb2cgaXNcbiAqIGNhbmNlbGxlZCwgdGhhdCBwcm9taXNlIGNhbiBiZSByZWplY3RlZC4gTWV0aG9kIHJlc3BvbnNpYmxlIGZvciBiYWNrZW5kIHByb2Nlc3NpbmcgbmVlZCB0byBkZWFsIHdpdGggbXVsdGlwbGUgY29udGV4dHMgLSBpLmUuIGl0IHNob3VsZCBlaXRoZXIgcmV0dXJuIGFuIGFycmF5IG9mIFByb21pc2VzIG9yXG4gKiBhIFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5LiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoYXQgUHJvbWlzZSBzaG91bGQgYmUgcmVzb2x2ZWQgYWxzbyB3aGVuIHNvbWUgb3IgZXZlbiBhbGwgY29udGV4dHMgZmFpbGVkIGluIGJhY2tlbmQgLSB0aGUgb3ZlcmFsbCBwcm9jZXNzIHN0aWxsIHdhc1xuICogc3VjY2Vzc2Z1bC5cbiAqXG4gKi9cblxuZnVuY3Rpb24gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyhcblx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IHN0cmluZyxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcltdLFxuXHRhUGFyYW1ldGVyVmFsdWVzOiBhbnksXG5cdG9BY3Rpb25Db250ZXh0OiBhbnksXG5cdG9QYXJlbnRDb250cm9sOiBhbnksXG5cdGVudGl0eVNldE5hbWU6IGFueSxcblx0bWVzc2FnZUhhbmRsZXI6IGFueSxcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKSB7XG5cdGNvbnN0IHNQYXRoID0gX2dldFBhdGgob0FjdGlvbkNvbnRleHQsIHNBY3Rpb25OYW1lKSxcblx0XHRtZXRhTW9kZWwgPSBvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRlbnRpdHlTZXRDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoKSxcblx0XHRzQWN0aW9uTmFtZVBhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKVxuXHRcdFx0PyBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvQCR1aTUub3ZlcmxvYWQvMFwiKVswXVxuXHRcdFx0OiBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvMFwiKVswXSxcblx0XHRhY3Rpb25OYW1lQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWN0aW9uTmFtZVBhdGgpLFxuXHRcdGJJc0NyZWF0ZUFjdGlvbiA9IG1QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uLFxuXHRcdHNGcmFnbWVudE5hbWUgPSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FjdGlvblBhcmFtZXRlckRpYWxvZ1wiO1xuXHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdGxldCBhY3Rpb25QYXJhbWV0ZXJJbmZvczogQWN0aW9uUGFyYW1ldGVySW5mb1tdOyAvLyB0byBiZSBmaWxsZWQgYWZ0ZXIgZnJhZ21lbnQgKGZvciBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZykgaXMgbG9hZGVkLiBBY3R1YWxseSBvbmx5IG5lZWRlZCBkdXJpbmcgZGlhbG9nIHByb2Nlc3NpbmcsIGkuZS4gY291bGQgYmUgbW92ZWQgaW50byB0aGUgY29udHJvbGxlciBhbmQgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgdGhlcmUsIGJ1dCBvbmx5IGFmdGVyIG1vdmluZyBhbGwgaGFuZGxlcnMgKGVzcC4gcHJlc3MgaGFuZGxlciBmb3IgYWN0aW9uIGJ1dHRvbikgdG8gY29udHJvbGxlci5cblxuXHRcdGNvbnN0IG1lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXG5cdFx0Y29uc3QgX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIgPSAocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpID0+IHtcblx0XHRcdGNvbnN0IGFsbE1lc3NhZ2VzID0gbWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0Y29uc3QgY29udHJvbElkID0gZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIuJE5hbWVdKTtcblx0XHRcdC8vIGFsc28gcmVtb3ZlIG1lc3NhZ2VzIGFzc2lnbmVkIHRvIGlubmVyIGNvbnRyb2xzLCBidXQgYXZvaWQgcmVtb3ZpbmcgbWVzc2FnZXMgZm9yIGRpZmZlcmVudCBwYXJhbXRlcnMgKHdpdGggbmFtZSBiZWluZyBzdWJzdHJpbmcgb2YgYW5vdGhlciBwYXJhbWV0ZXIgbmFtZSlcblx0XHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChpZDogc3RyaW5nKSA9PiBjb250cm9sSWQuc3BsaXQoXCItXCIpLmluY2x1ZGVzKGlkKSlcblx0XHRcdCk7XG5cdFx0XHRtZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhyZWxldmFudE1lc3NhZ2VzKTtcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSB7XG5cdFx0XHRoYW5kbGVDaGFuZ2U6IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IEV2ZW50PHsgcHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+IH0+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZChcblx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmllbGRcblx0XHRcdFx0KSBhcyBBY3Rpb25QYXJhbWV0ZXJJbmZvO1xuXHRcdFx0XHQvLyBmaWVsZCB2YWx1ZSBpcyBiZWluZyBjaGFuZ2VkLCB0aHVzIGV4aXN0aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhhdCBmaWVsZCBhcmUgbm90IHZhbGlkIGFueW1vcmVcblx0XHRcdFx0X3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIpO1xuXHRcdFx0XHQvLyBhZGFwdCBpbmZvLiBQcm9taXNlIGlzIHJlc29sdmVkIHRvIHZhbHVlIG9yIHJlamVjdGVkIHdpdGggZXhjZXB0aW9uIGNvbnRhaW5pbmcgbWVzc2FnZVxuXHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIik7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZSA9IGF3YWl0IGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2U7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby5oYXNFcnJvciA9IGZhbHNlO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdGRlbGV0ZSBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyKG1lc3NhZ2VNYW5hZ2VyLCBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IChlcnJvciBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KS5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cdFx0Y29uc3Qgb1BhcmFtZXRlck1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHQkZGlzcGxheU1vZGU6IHt9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY3JlYXRlZEZyYWdtZW50ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdG9GcmFnbWVudCxcblx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogb0FjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dCxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRhY3Rpb246IG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBlbnRpdHlTZXRDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWw6IGVudGl0eVNldENvbnRleHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdC8vIFRPRE86IG1vdmUgdGhlIGRpYWxvZyBpbnRvIHRoZSBmcmFnbWVudCBhbmQgbW92ZSB0aGUgaGFuZGxlcnMgdG8gdGhlIG9Db250cm9sbGVyXG5cdFx0XHRjb25zdCBhQ29udGV4dHM6IGFueVtdID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRcdFx0Y29uc3QgYUZ1bmN0aW9uUGFyYW1zOiBhbnlbXSA9IFtdO1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXHRcdFx0bGV0IG9PcGVyYXRpb25CaW5kaW5nOiBhbnk7XG5cdFx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMob0FwcENvbXBvbmVudCwgYUFjdGlvblBhcmFtZXRlcnMsIG9QYXJhbWV0ZXJNb2RlbCwgdHJ1ZSk7XG5cdFx0XHRjb25zdCBvRGlhbG9nQ29udGVudCA9IChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0ZGVmaW5pdGlvbjogY3JlYXRlZEZyYWdtZW50LFxuXHRcdFx0XHRjb250cm9sbGVyOiBvQ29udHJvbGxlclxuXHRcdFx0fSkpIGFzIENvbnRyb2w7XG5cblx0XHRcdGFjdGlvblBhcmFtZXRlckluZm9zID0gYUFjdGlvblBhcmFtZXRlcnMubWFwKChhY3Rpb25QYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgZmllbGQgPSBDb3JlLmJ5SWQoZ2VuZXJhdGUoW1wiQVBEX1wiLCBhY3Rpb25QYXJhbWV0ZXIuJE5hbWVdKSkgYXMgRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0XHRcdGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZpZWxkLmlzQShcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHBhcmFtZXRlcjogYWN0aW9uUGFyYW1ldGVyLFxuXHRcdFx0XHRcdGZpZWxkOiBmaWVsZCxcblx0XHRcdFx0XHRpc011bHRpVmFsdWU6IGlzTXVsdGlWYWx1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9QYXJlbnRDb250cm9sKTtcblx0XHRcdGxldCBhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogdHJ1ZSwgLy8gdG8gYmUgc2V0IHRvIGZhbHNlIGluIGNhc2Ugb2Ygc3VjY2Vzc2Z1bCBhY3Rpb24gZXhlY3Rpb25cblx0XHRcdFx0cmVzdWx0OiB1bmRlZmluZWRcblx0XHRcdH07XG5cblx0XHRcdGxldCBidXR0b25Mb2NrID0gZmFsc2U7XG5cblx0XHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKGdlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCBzQWN0aW9uTmFtZV0pLCB7XG5cdFx0XHRcdHRpdGxlOiBzQWN0aW9uTGFiZWwgfHwgcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX1RJVExFXCIpLFxuXHRcdFx0XHRjb250ZW50OiBbb0RpYWxvZ0NvbnRlbnRdLFxuXHRcdFx0XHRlc2NhcGVIYW5kbGVyOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gZXNjYXBlIGhhbmRsZXIgaXMgbWVhbnQgdG8gcG9zc2libHkgc3VwcHJlc3Mgb3IgcG9zdHBvbmUgY2xvc2luZyB0aGUgZGlhbG9nIG9uIGVzY2FwZSAoYnkgY2FsbGluZyBcInJlamVjdFwiIG9uIHRoZSBwcm92aWRlZCBvYmplY3QsIG9yIFwicmVzb2x2ZVwiIG9ubHkgd2hlblxuXHRcdFx0XHRcdC8vIGRvbmUgd2l0aCBhbGwgdGFza3MgdG8gaGFwcGVuIGJlZm9yZSBkaWFsb2cgY2FuIGJlIGNsb3NlZCkuIEl0J3Mgbm90IGludGVuZGVkIHRvIGV4cGxpY2V0bHkgY2xvc2UgdGhlIGRpYWxvZyBoZXJlICh0aGF0IGhhcHBlbnMgYXV0b21hdGljYWxseSB3aGVuIG5vXG5cdFx0XHRcdFx0Ly8gZXNjYXBlSGFuZGxlciBpcyBwcm92aWRlZCBvciB0aGUgcmVzb2x2ZS1jYWxsYmFjayBpcyBjYWxsZWQpIG9yIGZvciBvd24gd3JhcCB1cCB0YXNrcyAobGlrZSByZW1vdmluZyB2YWxpZGl0aW9uIG1lc3NhZ2VzIC0gdGhpcyBzaG91bGQgaGFwcGVuIGluIHRoZVxuXHRcdFx0XHRcdC8vIGFmdGVyQ2xvc2UpLlxuXHRcdFx0XHRcdC8vIFRPRE86IE1vdmUgd3JhcCB1cCB0YXNrcyB0byBhZnRlckNsb3NlLCBhbmQgcmVtb3ZlIHRoaXMgbWV0aG9kIGNvbXBsZXRlbHkuIFRha2UgY2FyZSB0byBhbHNvIGFkYXB0IGVuZCBidXR0b24gcHJlc3MgaGFuZGxlciBhY2NvcmRpbmdseS5cblx0XHRcdFx0XHQvLyBDdXJyZW50bHkgb25seSBzdGlsbCBuZWVkZWQgdG8gZGlmZmVyZW50aWF0ZSBjbG9zaW5nIGRpYWxvZyBhZnRlciBzdWNjZXNzZnVsIGV4ZWN1dGlvbiAodXNlcyByZXNvbHZlKSBmcm9tIHVzZXIgY2FuY2VsbGF0aW9uICh1c2luZyByZWplY3QpXG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdC8vXHRcdHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIk9rXCJdKSwge1xuXHRcdFx0XHRcdHRleHQ6IGJJc0NyZWF0ZUFjdGlvblxuXHRcdFx0XHRcdFx0PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFX0JVVFRPTlwiKVxuXHRcdFx0XHRcdFx0OiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZShyZXNvdXJjZU1vZGVsLCBzQWN0aW9uTGFiZWwsIHNBY3Rpb25OYW1lLCBlbnRpdHlTZXROYW1lKSxcblx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRwcmVzczogYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Ly8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHMuIFRoZSBCdXN5TG9ja2VyIGlzIG5vdCBmYXN0IGVub3VnaC4gKEJDUDogMjM3MDEzMDIxMClcblx0XHRcdFx0XHRcdFx0Ly8gYnV0dG9uTG9jayBpcyBzZXQgb25jZSBhbmQgcmVzZXQgaW4gY2FzZSBvZlxuXHRcdFx0XHRcdFx0XHQvLyAtIHZhbGlkYXRpb24gZXJyb3Jcblx0XHRcdFx0XHRcdFx0Ly8gLSBtZXNzYWdlIHBvcHVwXG5cdFx0XHRcdFx0XHRcdC8vIC0gZGlhbG9nIGNsb3NlIChhZnRlckNsb3NlIGhhbmRsZXIpXG5cblx0XHRcdFx0XHRcdFx0aWYgKGJ1dHRvbkxvY2sgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnV0dG9uTG9jayA9IHRydWU7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCEoYXdhaXQgX3ZhbGlkYXRlUHJvcGVydGllcyhtZXNzYWdlTWFuYWdlciwgYWN0aW9uUGFyYW1ldGVySW5mb3MsIHJlc291cmNlTW9kZWwpKSkge1xuXHRcdFx0XHRcdFx0XHRcdGJ1dHRvbkxvY2sgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sob0RpYWxvZyk7XG5cblx0XHRcdFx0XHRcdFx0bGV0IGZhaWxlZENvbnRleHRzOiBDb250ZXh0W10gPSBbXTtcblxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFRPRE86IGR1ZSB0byB1c2luZyB0aGUgc2VhcmNoIGFuZCB2YWx1ZSBoZWxwcyBvbiB0aGUgYWN0aW9uIGRpYWxvZyB0cmFuc2llbnQgbWVzc2FnZXMgY291bGQgYXBwZWFyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2UgbmVlZCBhbiBVWCBkZXNpZ24gZm9yIHRob3NlIHRvIHNob3cgdGhlbSB0byB0aGUgdXNlciAtIGZvciBub3cgcmVtb3ZlIHRoZW0gYmVmb3JlIGNvbnRpbnVpbmdcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdFx0XHQvLyBtb3ZlIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSBEaWFsb2cgKFNpbXBsZUZvcm0pIHRvIG1QYXJhbWV0ZXJzLmFjdGlvblBhcmFtZXRlcnMgc28gdGhhdCB0aGV5IGFyZSBhdmFpbGFibGUgaW4gdGhlIG9wZXJhdGlvbiBiaW5kaW5ncyBmb3IgYWxsIGNvbnRleHRzXG5cdFx0XHRcdFx0XHRcdFx0bGV0IHZQYXJhbWV0ZXJWYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvUGFyYW1ldGVyQ29udGV4dCA9IG9PcGVyYXRpb25CaW5kaW5nICYmIG9PcGVyYXRpb25CaW5kaW5nLmdldFBhcmFtZXRlckNvbnRleHQoKTtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQWN0aW9uUGFyYW1ldGVyc1tpXS4kaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFNVkZDb250ZW50ID0gKG9EaWFsb2cuZ2V0TW9kZWwoXCJtdmZ2aWV3XCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgLyR7YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWV9YFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUtleVZhbHVlcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGogaW4gYU1WRkNvbnRlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhS2V5VmFsdWVzLnB1c2goYU1WRkNvbnRlbnRbal0uS2V5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSBhS2V5VmFsdWVzO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlclZhbHVlID0gb1BhcmFtZXRlckNvbnRleHQuZ2V0UHJvcGVydHkoYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSB2UGFyYW1ldGVyVmFsdWU7IC8vIHdyaXRpbmcgdGhlIGN1cnJlbnQgdmFsdWUgKHVzZXIgaW5wdXQhKSBpbnRvIHRoZSBtZXRhbW9kZWwgPT4gc2hvdWxkIGJlIHJlZmFjdG9yZWQgdG8gdXNlIEFjdGlvblBhcmFtZXRlckluZm9zIGluc3RlYWQuIFVzZWQgaW4gc2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIGF2b2lkIG92ZXJyaWRpbmcgaW5jb21pbmcgcGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlubmVyUGFyYW1ldGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRcdFx0XHRpbm5lclBhcmFtZXRlcnMubGFiZWwgPSBzQWN0aW9uTGFiZWw7XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN1bHQgPSBhd2FpdCBleGVjdXRlQVBNQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbm5lclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogYVJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlc29sdmUoYVJlc3VsdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gc2FwLnVpLmdldENvcmUoKS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG9FcnJvcjtcblx0XHRcdFx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmFpbGVkQ29udGV4dHMgPSAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscyBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9BY3Rpb246IHsgZ2V0Q29udGV4dDogKCkgPT4gQ29udGV4dCB9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVtdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KS5tYXAoKGZhaWwpID0+IGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlubmVyUGFyYW1ldGVycy5hQ29udGV4dHMgPSBmYWlsZWRDb250ZXh0cztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUFQTUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbm5lclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvblJlc3VsdCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IGFSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlc29sdmUoYVJlc3VsdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmFkZE1lc3NhZ2VzKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNDaGFuZ2VTZXRBbmRIYXNFcnJvcnNPcldhcm5pbmdzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5uZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNZXNzYWdlcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiB1bmRlZmluZWQsIC8vIG5vdCB1c2VkIGF0IGFsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvRGlhbG9nKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvRGlhbG9nKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRsZXQgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0NoYW5nZVNldEFuZEhhc0Vycm9yc09yV2FybmluZ3MobVBhcmFtZXRlcnMuYkdyb3VwZWQpXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0OiBmYWlsZWRDb250ZXh0c1swXSwgLy8gb25seSB1c2VkIGluIGNhc2Ugb2YgZmFpbGVkIGNvbnRleHQgdG8gcmVzZXQgaW4gbWVzc2FnZUhhbmRsaW5nIHNob3dVbmJvdW5kTWVzc2FnZXNcblx0XHRcdFx0XHRcdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3Blbjogb0RpYWxvZy5pc09wZW4oKSxcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gV2h5IGlzIHRoaXMgaW1wbGVtZW50ZWQgYXMgY2FsbGJhY2s/IEFwcGFyZW50bHksIGFsbCBuZWVkZWQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGJlZm9yZWhhbmRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogcmVmYWN0b3IgYWNjb3JkaW5nbHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VEaWFsb2c7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaG93TWVzc2FnZVBhcmFtZXRlcnM7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IHVuZGVmaW5lZCwgLy8gbm90IHVzZWQgYXQgYWxsIVxuXHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbCxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2w6IG1QYXJhbWV0ZXJzLmNvbnRyb2xcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRidXR0b25Mb2NrID0gZmFsc2U7IC8vbmVlZGVkIGlmIHRoZSBhY3Rpb24gZmFpbHMgd2l0aCBhbiBlcnJvciBwb3B1cCBhbmQgdGhpcyBvbmUgaXMgY2FuY2VsZCAoSm91cm5leTogNDEyV2FybmluZ0hhbmRsaW5nKVxuXHRcdFx0XHRcdFx0XHRcdC8vIEluIGNhc2Ugb2YgYmFja2VuZCB2YWxpZGF0aW9uIGVycm9yKHM/KSwgbWVzc2FnZSBzaGFsbCBub3QgYmUgc2hvd24gaW4gbWVzc2FnZSBkaWFsb2cgYnV0IG5leHQgdG8gdGhlIGZpZWxkIG9uIHBhcmFtZXRlciBkaWFsb2csIHdoaWNoIHNob3VsZFxuXHRcdFx0XHRcdFx0XHRcdC8vIHN0YXkgb3BlbiBpbiB0aGlzIGNhc2UgPT4gaW4gdGhpcyBjYXNlLCB3ZSBtdXN0IG5vdCByZXNvbHZlIG9yIHJlamVjdCB0aGUgcHJvbWlzZSBjb250cm9sbGluZyB0aGUgcGFyYW1ldGVyIGRpYWxvZy5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbiBhbGwgb3RoZXIgY2FzZXMgKGUuZy4gb3RoZXIgYmFja2VuZCBlcnJvcnMgb3IgdXNlciBjYW5jZWxsYXRpb24pLCB0aGUgcHJvbWlzZSBjb250cm9sbGluZyB0aGUgcGFyYW1ldGVyIGRpYWxvZyBuZWVkcyB0byBiZSByZWplY3RlZCB0byBhbGxvd1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNhbGxlcnMgdG8gcmVhY3QuIChFeGFtcGxlOiBJZiBjcmVhdGlvbiBpbiBiYWNrZW5kIGFmdGVyIG5hdmlnYXRpb24gdG8gdHJhbnNpZW50IGNvbnRleHQgZmFpbHMsIGJhY2sgbmF2aWdhdGlvbiBuZWVkcyB0byBiZSB0cmlnZ2VyZWQpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gc2VwYXJhdGUgZGlhbG9nIGhhbmRsaW5nIGZyb20gYmFja2VuZCByZXF1ZXN0IGluc3RlYWQgb2YgdGFraW5nIGRlY2lzaW9uIGJhc2VkIG9uIG1lc3NhZ2UgaGFuZGxpbmdcblx0XHRcdFx0XHRcdFx0XHRpZiAoc2hvd01lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nLmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGRvIG5vdGhpbmcsIGRvIG5vdCByZWplY3QgcHJvbWlzZSBoZXJlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFdlIGRvIG5vdCBjbG9zZSB0aGUgQVBNIGRpYWxvZyBpZiB1c2VyIGVudGVycyBhIHdyb25nIHZhbHVlIGluIG9mIHRoZSBmaWVsZHMgdGhhdCByZXN1bHRzIGluIGFuIGVycm9yIGZyb20gdGhlIGJhY2tlbmQuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZSB1c2VyIGNhbiBjbG9zZSB0aGUgbWVzc2FnZSBkaWFsb2cgYW5kIHRoZSBBUE0gZGlhbG9nIHdvdWxkIHN0aWxsIGJlIG9wZW4gb24gd2hpY2ggaGUgY291bGQgZW50ZXIgYSBuZXcgdmFsdWUgYW5kIHRyaWdnZXIgdGhlIGFjdGlvbiBhZ2Fpbi5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRWFybGllciB3ZSB3ZXJlIHJlamVjdGluZyB0aGUgcHJvbWlzZSBvbiBlcnJvciBoZXJlLCBhbmQgdGhlIGNhbGwgc3RhY2sgd2FzIGRlc3Ryb3llZCBhcyB0aGUgcHJvbWlzZSB3YXMgcmVqZWN0ZWQgYW5kIHJldHVybmVkIHRvIEVkaXRGbG93IGludm9rZSBhY3Rpb24uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEJ1dCBzaW5jZSB0aGUgQVBNIGRpYWxvZyB3YXMgc3RpbGwgb3BlbiwgYSBuZXcgcHJvbWlzZSB3YXMgcmVzb2x2ZWQgaW4gY2FzZSB0aGUgdXNlciByZXRyaWVkIHRoZSBhY3Rpb24gYW5kIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQsIGJ1dCB0aGUgbmF2aWdhdGlvbiB0byBvYmplY3QgcGFnZSB3YXMgbm90IHRha2luZyBwbGFjZS5cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nUHJvbWlzZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkczogW11cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9EaWFsb2cpKSB7XG5cdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSksIHtcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19DQU5DRUxcIiksXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdC8vIFRPRE86IGNhbmNlbCBidXR0b24gc2hvdWxkIGp1c3QgY2xvc2UgdGhlIGRpYWxvZyAoc2ltaWxhciB0byB1c2luZyBlc2NhcGUpLiBBbGwgd3JhcCB1cCB0YXNrcyBzaG91bGQgYmUgbW92ZWQgdG8gYWZ0ZXJDbG9zZS5cblx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdC8vIHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHQvLyBUT0RPOiBiZWZvcmVPcGVuIGlzIGp1c3QgYW4gZXZlbnQsIGkuZS4gbm90IHdhaXRpbmcgZm9yIHRoZSBQcm9taXNlIHRvIGJlIHJlc29sdmVkLiBDaGVjayBpZiB0YXNrcyBvZiB0aGlzIGZ1bmN0aW9uIG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUgb3BlbmluZyB0aGUgZGlhbG9nXG5cdFx0XHRcdC8vIC0gaWYgeWVzLCB0aGV5IG5lZWQgdG8gYmUgbW92ZWQgb3V0c2lkZS5cblx0XHRcdFx0Ly8gQXNzdW1wdGlvbjogU29tZXRpbWVzIGRpYWxvZyBjYW4gYmUgc2VlbiB3aXRob3V0IGFueSBmaWVsZHMgZm9yIGEgc2hvcnQgdGltZSAtIG1heWJlIHRoaXMgaXMgY2F1c2VkIGJ5IHRoaXMgYXN5bmNocm9uaXR5XG5cdFx0XHRcdGJlZm9yZU9wZW46IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0XHRcdC8vIGNsb25lIGV2ZW50IGZvciBhY3Rpb25XcmFwcGVyIGFzIG9FdmVudC5vU291cmNlIGdldHMgbG9zdCBkdXJpbmcgcHJvY2Vzc2luZyBvZiBiZWZvcmVPcGVuIGV2ZW50IGhhbmRsZXJcblx0XHRcdFx0XHRjb25zdCBvQ2xvbmVFdmVudCA9IE9iamVjdC5hc3NpZ24oe30sIG9FdmVudCk7XG5cblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRjb25zdCBnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gKG9EaWFsb2cuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggPSBvQWN0aW9uQ29udGV4dC5zUGF0aCAmJiBvQWN0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIi9AXCIpWzBdLFxuXHRcdFx0XHRcdFx0XHRzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0XHRcdFx0YCR7c0FjdGlvblBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZWZhdWx0VmFsdWVzRnVuY3Rpb25gXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc0RlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nID0gYXN5bmMgZnVuY3Rpb24gKHNCaW5kaW5nUGFyYW1ldGVyPzogYW55KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzQm91bmRGdW5jdGlvbk5hbWUgPSBnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24oKTtcblx0XHRcdFx0XHRcdGNvbnN0IHByZWZpbGxQYXJhbWV0ZXIgPSBhc3luYyBmdW5jdGlvbiAoc1BhcmFtTmFtZTogYW55LCB2UGFyYW1EZWZhdWx0VmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHQvLyBDYXNlIDE6IFRoZXJlIGlzIGEgUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb25cblx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbURlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAwICYmIHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHZQYXJhbVZhbHVlID0gYXdhaXQgQ29tbW9uVXRpbHMucmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2UGFyYW1WYWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbVZhbHVlID0gYXdhaXQgb09wZXJhdGlvbkJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5nZXRQYXJhbWV0ZXJDb250ZXh0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXF1ZXN0UHJvcGVydHkodlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgbXVsdGkgc2VsZWN0LCBuZWVkIHRvIGxvb3Agb3ZlciBhQ29udGV4dHMgKGFzIGNvbnRleHRzIGNhbm5vdCBiZSByZXRyaWV2ZWQgdmlhIGJpbmRpbmcgcGFyYW1ldGVyIG9mIHRoZSBvcGVyYXRpb24gYmluZGluZylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgc1BhdGhGb3JDb250ZXh0ID0gdlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzUGF0aEZvckNvbnRleHQuaW5kZXhPZihgJHtzQmluZGluZ1BhcmFtZXRlcn0vYCkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNQYXRoRm9yQ29udGV4dCA9IHNQYXRoRm9yQ29udGV4dC5yZXBsYWNlKGAke3NCaW5kaW5nUGFyYW1ldGVyfS9gLCBcIlwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBhQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHNbaV0uZ2V0UHJvcGVydHkoc1BhdGhGb3JDb250ZXh0KSAhPT0gdlBhcmFtVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIHZhbHVlcyBmcm9tIHRoZSBjb250ZXh0cyBhcmUgbm90IGFsbCB0aGUgc2FtZSwgZG8gbm90IHByZWZpbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWU6IHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiTm9Qb3NzaWJsZVZhbHVlOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHZQYXJhbVZhbHVlIH07XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVhZGluZyBkZWZhdWx0IGFjdGlvbiBwYXJhbWV0ZXJcIiwgc1BhcmFtTmFtZSwgbVBhcmFtZXRlcnMuYWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YkxhdGVQcm9wZXJ0eUVycm9yOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgMS4yOiBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgZGVmaW5lcyBhIGZpeGVkIHN0cmluZyB2YWx1ZSAoaS5lLiB2UGFyYW1EZWZhdWx0VmFsdWUgPSAnc29tZVN0cmluZycpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWU6IHNQYXJhbU5hbWUsIHZhbHVlOiB2UGFyYW1EZWZhdWx0VmFsdWUgfTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob1BhcmFtZXRlck1vZGVsICYmIChvUGFyYW1ldGVyTW9kZWwgYXMgYW55KS5vRGF0YVtzUGFyYW1OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgMjogVGhlcmUgaXMgbm8gUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb24gKD0+IGxvb2sgaW50byB0aGUgRkxQIFVzZXIgRGVmYXVsdHMpXG5cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IChvUGFyYW1ldGVyTW9kZWwgYXMgYW55KS5vRGF0YVtzUGFyYW1OYW1lXVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdW5kZWZpbmVkIH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uIChzUGFyYW1OYW1lOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IChvRGlhbG9nLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdFx0c0FjdGlvblBhcmFtZXRlckFubm90YXRpb25QYXRoID0gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVyUGF0aChvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCksIHNQYXJhbU5hbWUpICsgXCJAXCIsXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0FjdGlvblBhcmFtZXRlckFubm90YXRpb25QYXRoKSxcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyRGVmYXVsdFZhbHVlID1cblx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJBbm5vdGF0aW9ucyAmJiBvUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUGFyYW1ldGVyRGVmYXVsdFZhbHVlXCJdOyAvLyBlaXRoZXIgeyAkUGF0aDogJ3NvbWVQYXRoJyB9IG9yICdzb21lU3RyaW5nJ1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUgPSBbXTtcblx0XHRcdFx0XHRcdGxldCBzUGFyYW1OYW1lLCB2UGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdHNQYXJhbU5hbWUgPSBhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZTtcblx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShzUGFyYW1OYW1lKTtcblx0XHRcdFx0XHRcdFx0YUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZS5wdXNoKHByZWZpbGxQYXJhbWV0ZXIoc1BhcmFtTmFtZSwgdlBhcmFtZXRlckRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAob0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJElzQm91bmRcIikgJiYgYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0aWYgKHNCb3VuZEZ1bmN0aW9uTmFtZSAmJiBzQm91bmRGdW5jdGlvbk5hbWUubGVuZ3RoID4gMCAmJiB0eXBlb2Ygc0JvdW5kRnVuY3Rpb25OYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFDb250ZXh0cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YUZ1bmN0aW9uUGFyYW1zLnB1c2goY2FsbEJvdW5kRnVuY3Rpb24oc0JvdW5kRnVuY3Rpb25OYW1lLCBhQ29udGV4dHNbaV0sIG1QYXJhbWV0ZXJzLm1vZGVsKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGFQcmVmaWxsUGFyYW1Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRcdFx0bGV0IGFFeGVjRnVuY3Rpb25Qcm9taXNlczogUHJvbWlzZTxhbnlbXT4gPSBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdFx0XHRcdFx0bGV0IG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlO1xuXHRcdFx0XHRcdFx0aWYgKGFGdW5jdGlvblBhcmFtcyAmJiBhRnVuY3Rpb25QYXJhbXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRhRXhlY0Z1bmN0aW9uUHJvbWlzZXMgPSBQcm9taXNlLmFsbChhRnVuY3Rpb25QYXJhbXMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbikge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzTW9kdWxlID0gbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHQuc3Vic3RyaW5nKDAsIG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTEpXG5cdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvXFwuL2dpLCBcIi9cIiksXG5cdFx0XHRcdFx0XHRcdFx0c0Z1bmN0aW9uTmFtZSA9IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5zdWJzdHJpbmcoXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSxcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZSA9IEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKG9DbG9uZUV2ZW50LCBzTW9kdWxlLCBzRnVuY3Rpb25OYW1lLCB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IGFDb250ZXh0c1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYVByb21pc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRcdFx0XHRcdGFQcmVmaWxsUGFyYW1Qcm9taXNlcyxcblx0XHRcdFx0XHRcdFx0XHRhRXhlY0Z1bmN0aW9uUHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdFx0b0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2Vcblx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZTogYW55ID0gYVByb21pc2VzWzBdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmdW5jdGlvblBhcmFtcyA9IGFQcm9taXNlc1sxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ID0gYVByb21pc2VzWzJdO1xuXHRcdFx0XHRcdFx0XHRsZXQgc0RpYWxvZ1BhcmFtTmFtZTogc3RyaW5nO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEZpbGwgdGhlIGRpYWxvZyB3aXRoIHRoZSBlYXJsaWVyIGRldGVybWluZWQgcGFyYW1ldGVyIHZhbHVlcyBmcm9tIHRoZSBkaWZmZXJlbnQgc291cmNlc1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRzRGlhbG9nUGFyYW1OYW1lID0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUGFyYW1ldGVyIHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgY2FsbCBvZiBpbnZva2VBY3Rpb24gb3ZlcnJ1bGUgb3RoZXIgc291cmNlc1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gYVBhcmFtZXRlclZhbHVlcz8uZmluZChcblx0XHRcdFx0XHRcdFx0XHRcdChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQubmFtZSA9PT0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVcblx0XHRcdFx0XHRcdFx0XHQpPy52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtZXRlclByb3ZpZGVkVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSwgdlBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ICYmIG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdC5oYXNPd25Qcm9wZXJ0eShzRGlhbG9nUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0W3NEaWFsb2dQYXJhbU5hbWVdXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldICYmIGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsIGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBoYWQgbm90IGJlZW4gcHJldmlvdXNseSBkZXRlcm1pbmVkIGR1ZSB0byBkaWZmZXJlbnQgY29udGV4dHMsIHdlIGRvIG5vdGhpbmcgZWxzZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc0JvdW5kRnVuY3Rpb25OYW1lICYmICFjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0uYk5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHdlIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHNhbWUgcGFyYW0gdmFsdWUgZm9yIGFsbCB0aGUgY29udGV4dHM6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2hpbGUgKGogPCBhQ29udGV4dHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqICsgMV0gJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKSA9PT1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbaiArIDFdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aisrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGogPT09IGFDb250ZXh0cy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGZ1bmN0aW9uUGFyYW1zWzBdICYmIGZ1bmN0aW9uUGFyYW1zWzBdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL09ubHkgb25lIGNvbnRleHQsIHRoZW4gdGhlIGRlZmF1bHQgcGFyYW0gdmFsdWVzIGFyZSB0byBiZSB2ZXJpZmllZCBmcm9tIHRoZSBmdW5jdGlvbjpcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbMF0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJFcnJvckZvdW5kID0gY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlLnNvbWUoZnVuY3Rpb24gKG9WYWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9WYWx1ZS5iTGF0ZVByb3BlcnR5RXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvVmFsdWUuYkxhdGVQcm9wZXJ0eUVycm9yO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdC8vIElmIGF0IGxlYXN0IG9uZSBEZWZhdWx0IFByb3BlcnR5IGlzIGEgTGF0ZSBQcm9wZXJ0eSBhbmQgYW4gZVRhZyBlcnJvciB3YXMgcmFpc2VkLlxuXHRcdFx0XHRcdFx0XHRpZiAoYkVycm9yRm91bmQpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVGV4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX0xBVEVfUFJPUEVSVFlcIik7XG5cdFx0XHRcdFx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKHNUZXh0LCB7IGNvbnRlbnRXaWR0aDogXCIyNWVtXCIgfSBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBwYXJhbWV0ZXJcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuQXN5bmNCZWZvcmVPcGVuID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpICYmIGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJFBhcmFtZXRlclwiKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0JpbmRpbmdQYXJhbWV0ZXIgPSBhUGFyYW1ldGVyc1swXSAmJiBhUGFyYW1ldGVyc1swXS4kTmFtZTtcblxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0T2JqZWN0ID0gYXdhaXQgYUNvbnRleHRzWzBdLnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHRPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihzQmluZGluZ1BhcmFtZXRlciwgb0NvbnRleHRPYmplY3QpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyhzQmluZGluZ1BhcmFtZXRlcik7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IGZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGF3YWl0IGZuQXN5bmNCZWZvcmVPcGVuKCk7XG5cblx0XHRcdFx0XHQvLyBhZGRpbmcgZGVmYXVsdGVkIHZhbHVlcyBvbmx5IGhlcmUgYWZ0ZXIgdGhleSBhcmUgbm90IHNldCB0byB0aGUgZmllbGRzXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvIG9mIGFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFjdGlvblBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlXG5cdFx0XHRcdFx0XHRcdD8gKGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgYXMgTXVsdGlWYWx1ZUZpZWxkKS5nZXRJdGVtcygpXG5cdFx0XHRcdFx0XHRcdDogKGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCk7XG5cdFx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQvLyB3aGVuIHRoZSBkaWFsb2cgaXMgY2FuY2VsbGVkLCBtZXNzYWdlcyBuZWVkIHRvIGJlIHJlbW92ZWQgaW4gY2FzZSB0aGUgc2FtZSBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkIGFnYWluXG5cdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnMuZm9yRWFjaChfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcik7XG5cdFx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0YnV0dG9uTG9jayA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25SZXN1bHQuZGlhbG9nQ2FuY2VsbGVkKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoYWN0aW9uUmVzdWx0LnJlc3VsdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG1QYXJhbWV0ZXJzLm9EaWFsb2cgPSBvRGlhbG9nO1xuXHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbCk7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9QYXJhbWV0ZXJNb2RlbCwgXCJwYXJhbXNNb2RlbFwiKTtcblx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIGVtcHR5IG1vZGVsIHRvIGFkZCBlbGVtZW50cyBkeW5hbWljYWxseSBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIE1WRiBmaWVsZHMgZGVmaW5lZCBvbiB0aGUgZGlhbG9nXG5cdFx0XHRjb25zdCBvTVZGTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KTtcblx0XHRcdG9EaWFsb2cuc2V0TW9kZWwob01WRk1vZGVsLCBcIm12ZnZpZXdcIik7XG5cblx0XHRcdC8qIEV2ZW50IG5lZWRlZCBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgb2YgdmFsaWQgY2hhbmdlZCBmaWVsZCAqL1xuXHRcdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvIG9mIGFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRcdGlmIChhY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8/LmZpZWxkPy5nZXRCaW5kaW5nKFwiaXRlbXNcIik/LmF0dGFjaENoYW5nZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcihhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbz8uZmllbGQ/LmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKCgpID0+IHtcblx0XHRcdFx0XHRcdF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgc0FjdGlvblBhdGggPSBgJHtzQWN0aW9uTmFtZX0oLi4uKWA7XG5cdFx0XHRpZiAoIWFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0c0FjdGlvblBhdGggPSBgLyR7c0FjdGlvblBhdGh9YDtcblx0XHRcdH1cblx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBzQWN0aW9uUGF0aFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1BhcmVudENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgYSBwYXJlbnQgY29udHJvbCBzcGVjaWZpZWQgYWRkIHRoZSBkaWFsb2cgYXMgZGVwZW5kZW50XG5cdFx0XHRcdG9QYXJlbnRDb250cm9sLmFkZERlcGVuZGVudChvRGlhbG9nKTtcblx0XHRcdH1cblx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRGlhbG9nLnNldEJpbmRpbmdDb250ZXh0KGFDb250ZXh0c1swXSk7IC8vIHVzZSBjb250ZXh0IG9mIGZpcnN0IHNlbGVjdGVkIGxpbmUgaXRlbVxuXHRcdFx0fVxuXHRcdFx0b09wZXJhdGlvbkJpbmRpbmcgPSBvRGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKTtcblx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHR9XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0QWN0aW9uUGFyYW1ldGVycyhvQWN0aW9uOiBhbnkpIHtcblx0Y29uc3QgYVBhcmFtZXRlcnMgPSBvQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIikgfHwgW107XG5cdGlmIChhUGFyYW1ldGVycyAmJiBhUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0Ly9pbiBjYXNlIG9mIGJvdW5kIGFjdGlvbnMsIGlnbm9yZSB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCBjb25zaWRlciB0aGUgcmVzdFxuXHRcdFx0cmV0dXJuIGFQYXJhbWV0ZXJzLnNsaWNlKDEsIGFQYXJhbWV0ZXJzLmxlbmd0aCkgfHwgW107XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhUGFyYW1ldGVycztcbn1cblxuZnVuY3Rpb24gX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUocmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCwgc0FjdGlvbkxhYmVsOiBzdHJpbmcsIHNBY3Rpb25OYW1lOiBzdHJpbmcsIHNFbnRpdHlTZXROYW1lOiBzdHJpbmcpIHtcblx0bGV0IGJvdW5kQWN0aW9uTmFtZTogYW55ID0gc0FjdGlvbk5hbWUgPyBzQWN0aW9uTmFtZSA6IG51bGw7XG5cdGNvbnN0IGFBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKTtcblx0Ym91bmRBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLmluZGV4T2YoXCIuXCIpID49IDAgPyBhQWN0aW9uTmFtZVthQWN0aW9uTmFtZS5sZW5ndGggLSAxXSA6IGJvdW5kQWN0aW9uTmFtZTtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgc0VudGl0eVNldE5hbWUgPyBgJHtzRW50aXR5U2V0TmFtZX18JHtib3VuZEFjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdGNvbnN0IHNLZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX0FDVElPTl9OQU1FXCI7XG5cdGNvbnN0IGJSZXNvdXJjZUtleUV4aXN0cyA9IHJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke3NLZXl9fCR7c3VmZml4UmVzb3VyY2VLZXl9YCk7XG5cdGlmIChzQWN0aW9uTGFiZWwpIHtcblx0XHRpZiAoYlJlc291cmNlS2V5RXhpc3RzKSB7XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KHNLZXksIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRcdH0gZWxzZSBpZiAocmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7c0tleX18JHtzRW50aXR5U2V0TmFtZX1gKSkge1xuXHRcdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChzS2V5LCB1bmRlZmluZWQsIGAke3NFbnRpdHlTZXROYW1lfWApO1xuXHRcdH0gZWxzZSBpZiAocmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7c0tleX1gKSkge1xuXHRcdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChzS2V5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNBY3Rpb25MYWJlbDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19PS1wiKTtcblx0fVxufVxuXG4vKipcbiAqIEVuaGFuY2VzIHRoZSBzaWRlIGVmZmVjdHMgb2YgdGhlIG9wZXJhdGlvblxuICpcbiAqIFdoZW4gYSBuZXcgZW50aXR5IGlzIGNyZWF0ZWQgdXNpbmcgYSBEYXRhRmllbGRGb3JBY3Rpb24sIGEgbmV3XG4gKiBvRGF0YUNvbnRleHRCaW5kaW5nIGlzIGNyZWF0ZWQgdG8gZXhlY3V0ZSB0aGUgYWN0aW9uLiBCeSBkZWZhdWx0LCB0aGlzXG4gKiBvRGF0YUNvbnRleHRCaW5kaW5nIGlzIHJlbGF0aXZlIHRvIHRoZSBPZGF0YUxpc3RCaW5kaW5nIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiBCZWNhdXNlIG9mIHRoaXMgZGVwZW5kZW5jeSwgd2hlbiBhIFNpZGVFZmZlY3RzIGlzIGV4ZWN1dGVkIG9uIHRoZVxuICogY29udGV4dCBpbnRvIHRoZSBPZGF0YUxpc3RCaW5kaW5nIHdoZXJlIHRoZSBvRGF0YUNvbnRleHRCaW5kaW5nIHdhcyBib3VuZCwgdGhpcyBTaWRlRWZmZWN0cyBpcyBhbHNvIHRyaWdnZXJlZCBvbiB0aGlzXG4gKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBXZSBkb24ndCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGVcbiAqIG9EYXRhQ29udGV4dEJpbmRpbmcuIEl0IG1lYW5zIGV2ZW4gaWYgdGhlIGRyYWZ0IHJlbGF0ZWQgdG8gdGhlIGFjdGlvblxuICogaXMgcmVtb3ZlZCwgdGhlIG9kYXRhQ29udGV4dEJpbmRpbmcgaXMgc3RpbGwgdGhlcmUsIHNvIGlmIGEgU2lkZUVmZmVjdHNcbiAqIGlzIGV4ZWN1dGVkIG9uIHRoZSBzb3VyY2UgdGFyZ2V0IGludG8gb0RhdGFDb250ZXh0QmluZGluZywgYW4gZXJyb3IgZnJvbSB0aGUgYmFjayBlbmQgd2lsbCBiZVxuICogcmVjZWl2ZWQgYmVjYXVzZSB3ZSBhc2sgdG8gcmVmcmVzaCBhIHByb3BlcnR5IG9uIGFuIHVua25vd24gZW50aXR5LlxuICpcbiAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmVxdWVzdGVkIG9ubHkgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgb3Blbi5cbiAqIFRoaXMgYXZvaWRzIGdlbmVyYXRpbmcgaXNzdWVzIHdpdGggZ2hvc3Qgb0RhdGFDb250ZXh0QmluZGluZyBsaW5rZWQgdG8gZGVzdHJveWVkIGNvbnRleHQuXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHBsaWNhdGlvbiBjb21wb25lbnRcbiAqIEBwYXJhbSBvcGVyYXRpb25Db250ZXh0QmluZGluZyBUaGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gcmV0dXJuZWRDb250ZXh0IFRoZSByZXR1cm5lZCBjb250ZXh0IG9mIHRoaXMgb3BlcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGVuaGFuY2VTaWRlRWZmZWN0cyhcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfCB1bmRlZmluZWQsXG5cdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nOiBPRGF0YUNvbnRleHRCaW5kaW5nLFxuXHRyZXR1cm5lZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkXG4pOiB2b2lkIHtcblx0aWYgKHJldHVybmVkQ29udGV4dCkge1xuXHRcdGNvbnN0IG9yaWdpbiA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nKTtcblx0XHRvcGVyYXRpb25Db250ZXh0QmluZGluZy5yZXF1ZXN0U2lkZUVmZmVjdHMgPSBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdD8uZ2V0Um9vdFZpZXdDb250cm9sbGVyKClcblx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdC5maW5kKChwYWdlVmlldzogVmlldykgPT4gcGFnZVZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBvcmlnaW4oLi4uYXJncyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRvQWN0aW9uOiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGJHZXRCb3VuZENvbnRleHQ6IGJvb2xlYW4sXG5cdHNHcm91cElkOiBzdHJpbmcsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlciB8IHVuZGVmaW5lZCxcblx0aUNvbnRleHRMZW5ndGg6IG51bWJlciB8IG51bGwsXG5cdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbCxcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU6IEZ1bmN0aW9uLFxuXHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0OiBGdW5jdGlvbixcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKSB7XG5cdGxldCBvQWN0aW9uUHJvbWlzZSxcblx0XHRiRW5hYmxlU3RyaWN0SGFuZGxpbmcgPSB0cnVlO1xuXHRpZiAobVBhcmFtZXRlcnMpIHtcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSA9IGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlO1xuXHR9XG5cdGlmIChiR2V0Qm91bmRDb250ZXh0KSB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQWN0aW9uLmdldEJvdW5kQ29udGV4dCgpLmdldFBhdGgoKTtcblx0XHRjb25zdCBzTWV0YVBhdGggPSBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IG9BY3Rpb24uZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3Qoc01ldGFQYXRoKTtcblx0XHRpZiAob1Byb3BlcnR5ICYmIG9Qcm9wZXJ0eVswXT8uJGtpbmQgIT09IFwiQWN0aW9uXCIpIHtcblx0XHRcdC8vZG8gbm90IGVuYWJsZSB0aGUgc3RyaWN0IGhhbmRsaW5nIGlmIGl0cyBub3QgYW4gYWN0aW9uXG5cdFx0XHRiRW5hYmxlU3RyaWN0SGFuZGxpbmcgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZykge1xuXHRcdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFiRW5hYmxlU3RyaWN0SGFuZGxpbmcpIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IG9BY3Rpb24uZXhlY3V0ZShzR3JvdXBJZCkudGhlbihmdW5jdGlvbiAocmVzdWx0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5oYW5jZVNpZGVFZmZlY3RzKG1QYXJhbWV0ZXJzLmFwcENvbXBvbmVudCwgb0FjdGlvbiwgcmVzdWx0KTtcblx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlKG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCkpO1xuXHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0FjdGlvblByb21pc2UgPSBiR2V0Qm91bmRDb250ZXh0XG5cdFx0XHQ/IG9BY3Rpb25cblx0XHRcdFx0XHQuZXhlY3V0ZShcblx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24uZ2V0Q29udGV4dCgpLFxuXHRcdFx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChyZXN1bHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRlbmhhbmNlU2lkZUVmZmVjdHMobVBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LCBvQWN0aW9uLCByZXN1bHQpO1xuXHRcdFx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmICFtUGFyYW1ldGVycy5iR3JvdXBlZCkge1xuXHRcdFx0XHRcdFx0XHR1cGRhdGU0MTJUcmFuc2lzdGlvbk1lc3NhZ2VzKG9BY3Rpb24sIHNHcm91cElkLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcywgbVBhcmFtZXRlcnMsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUob0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRpZiAoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZTQxMlRyYW5zaXN0aW9uTWVzc2FnZXMob0FjdGlvbiwgc0dyb3VwSWQsIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0KCk7XG5cdFx0XHRcdFx0XHR0aHJvdyBDb25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHQ6IG9BY3Rpb25cblx0XHRcdFx0XHQuZXhlY3V0ZShcblx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24uZ2V0Q29udGV4dCgpLFxuXHRcdFx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChyZXN1bHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRlbmhhbmNlU2lkZUVmZmVjdHMobVBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LCBvQWN0aW9uLCByZXN1bHQpO1xuXHRcdFx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmICFtUGFyYW1ldGVycy5iR3JvdXBlZCkge1xuXHRcdFx0XHRcdFx0XHR1cGRhdGU0MTJUcmFuc2lzdGlvbk1lc3NhZ2VzKG9BY3Rpb24sIHNHcm91cElkLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcywgbVBhcmFtZXRlcnMsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmICFtUGFyYW1ldGVycy5iR3JvdXBlZCkge1xuXHRcdFx0XHRcdFx0XHR1cGRhdGU0MTJUcmFuc2lzdGlvbk1lc3NhZ2VzKG9BY3Rpb24sIHNHcm91cElkLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcywgbVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCgpO1xuXHRcdFx0XHRcdFx0dGhyb3cgQ29uc3RhbnRzLkFjdGlvbkV4ZWN1dGlvbkZhaWxlZDtcblx0XHRcdFx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBvQWN0aW9uUHJvbWlzZS5jYXRjaCgoKSA9PiB7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCgpO1xuXHRcdHRocm93IENvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQ7XG5cdH0pO1xufVxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdHJpY3RIYW5kbGluZ1V0aWxpdGVzIHdpdGggdGhlIGZhaWxlZCBhbmQgc3VjY2Vzc2Z1bCB0cmFuc2lzaXRpb24gbWVzc2FnZXMuXG4gKlxuICogQHBhcmFtIG9BY3Rpb24gQWN0aW9uIGV4ZWN1dGVkXG4gKiBAcGFyYW0gc0dyb3VwSWQgR3JvdXBJZCBvZiB0aGUgYmF0Y2hcbiAqIEBwYXJhbSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyBVdGlsaXR5IGZsYWdzIGFuZCBtZXNzYWdlcyBmb3Igc3RyaWN0SGFuZGxpbmdcbiAqIEBwYXJhbSBtUGFyYW1ldGVycyBTdHJpY3QgSGFuZGxpbmcgcGFyYW1ldGVyc1xuICogQHBhcmFtIG9ubHlTdWNjZXNzTWVzc2FnZXMgVG8gdXBkYXRlIG9ubHkgc3VjY2Vzc2Z1bCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY29udGFpbnMgYXR0cmlidXRlcyByZWxhdGVkIHRvIHN0cmlja0hhbmRsaW5nXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZTQxMlRyYW5zaXN0aW9uTWVzc2FnZXMoXG5cdG9BY3Rpb246IENvbnRyb2wsXG5cdHNHcm91cElkOiBzdHJpbmcsXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzOiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0bVBhcmFtZXRlcnM/OiBTdHJpY3RIYW5kbGluZ1BhcmFtZXRlcnMsXG5cdG9ubHlTdWNjZXNzTWVzc2FnZXMgPSBmYWxzZVxuKSB7XG5cdGNvbnN0IG1lc3NhZ2VzOiBBcnJheTxNZXNzYWdlPiA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGNvbnN0IHsgcHJvY2Vzc2VkTWVzc2FnZUlkcywgZGVsYXlTdWNjZXNzTWVzc2FnZXMsIHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzIH0gPSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcztcblx0Y29uc3QgdHJhbnNpdGlvbk1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKGZ1bmN0aW9uIChtZXNzYWdlOiBhbnkpIHtcblx0XHQvL2NoZWNrIGlmIHRoZSB0cmFuc2lzdGlvbiBtZXNzYWdlcyBpcyBhbHJlYWR5IHByb2Nlc3NlZFxuXHRcdGNvbnN0IGlzRHVwbGljYXRlID0gcHJvY2Vzc2VkTWVzc2FnZUlkcy5maW5kKGZ1bmN0aW9uIChpZDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5pZCA9PT0gaWQ7XG5cdFx0fSk7XG5cdFx0Ly8gdXBkYXRlIHRoZSBzdHJpY3RIYW5kbGluZyB3aXRoIHRoZSBzdWNjZXNzIG1lc3NhZ2VzIHdoaWNoIG5lZWRzIHRvIGJlIHNob3duIGxhdGVyXG5cdFx0aWYgKCFpc0R1cGxpY2F0ZSkge1xuXHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkcy5wdXNoKG1lc3NhZ2UuaWQpO1xuXHRcdFx0aWYgKG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuU3VjY2Vzcykge1xuXHRcdFx0XHRkZWxheVN1Y2Nlc3NNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbWVzc2FnZS5wZXJzaXN0ZW50ID09PSB0cnVlICYmIG1lc3NhZ2UudHlwZSAhPT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhaXNEdXBsaWNhdGU7XG5cdH0pO1xuXHQvL3VwZGF0ZSB0aGUgc3RyaWN0SGFuZGxpbmdVdGlsaXRlcyB3aXRoIHRoZSBmYWlsZWQgdHJhbnNpc3Rpb24gbWVzc2FnZXMgd2hpY2ggbmVlZHMgdG8gYmUgcmV0cmlnZ2VyZWRcblx0aWYgKCFvbmx5U3VjY2Vzc01lc3NhZ2VzICYmIHRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRpZiAobVBhcmFtZXRlcnM/LmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5wdXNoKHtcblx0XHRcdFx0b0FjdGlvbjogb0FjdGlvbixcblx0XHRcdFx0Z3JvdXBJZDogc0dyb3VwSWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uKCkge1xuXHRsZXQgaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU6IGFueSA9IG51bGwsXG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdDogYW55ID0gbnVsbDtcblx0Y29uc3Qgb0xvY2FsQWN0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCA9IHJlamVjdDtcblx0fSkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBhY3Rpb24gXCIsIG9FcnJvcik7XG5cdH0pO1xuXG5cdHJldHVybiB7IG9Mb2NhbEFjdGlvblByb21pc2UsIGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlLCBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0IH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGFyZSBhbnkgd2FybmluZyBvciBlcnJvciBtZXNzYWdlcyhib3VuZCBhbmQgdW5ib3VuZCkuIFByZXNlbnRseSBvbmx5IHByb3ZpZGVzIHRoZW0gZm9yIGNoYW5nZXNldCBiYXRjaCBjb25maWcuXG4gKlxuICogQHBhcmFtIGlzQ2hhbmdlU2V0IFRoZSByZXF1ZXN0IGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyBleGlzdGFuY2Ugb2YgbWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gaXNDaGFuZ2VTZXRBbmRIYXNFcnJvcnNPcldhcm5pbmdzKGlzQ2hhbmdlU2V0OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdGxldCBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cblx0aWYgKGlzQ2hhbmdlU2V0KSB7XG5cdFx0Y29uc3QgdW5Cb3VuZE1zZ3M6IE1lc3NhZ2VbXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcygpO1xuXHRcdGNvbnN0IGJvdW5kTXNnczogTWVzc2FnZVtdID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUpO1xuXHRcdG1lc3NhZ2VzID0gWy4uLnVuQm91bmRNc2dzLCAuLi5ib3VuZE1zZ3NdO1xuXHR9XG5cblx0cmV0dXJuIG1lc3NhZ2VzLnNvbWUoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBfZXhlY3V0ZUFjdGlvbihcblx0b0FwcENvbXBvbmVudDogYW55LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRvUGFyZW50Q29udHJvbD86IGFueSxcblx0bWVzc2FnZUhhbmRsZXI/OiBNZXNzYWdlSGFuZGxlcixcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKSB7XG5cdGNvbnN0IGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyB8fCBbXTtcblx0Y29uc3Qgb01vZGVsID0gbVBhcmFtZXRlcnMubW9kZWw7XG5cdGNvbnN0IGFBY3Rpb25QYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMgfHwgW107XG5cdGNvbnN0IHNBY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuYWN0aW9uTmFtZTtcblx0Y29uc3QgZm5PblN1Ym1pdHRlZCA9IG1QYXJhbWV0ZXJzLmZuT25TdWJtaXR0ZWQ7XG5cdGNvbnN0IGZuT25SZXNwb25zZSA9IG1QYXJhbWV0ZXJzLmZuT25SZXNwb25zZTtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1BhcmVudENvbnRyb2wpO1xuXHRsZXQgb0FjdGlvbjogYW55O1xuXG5cdGZ1bmN0aW9uIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpIHtcblx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnMgJiYgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmICghYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGFBY3Rpb25QYXJhbWV0ZXJzW2pdLiRUeXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDE2XCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyB0YmNcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvQWN0aW9uLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tqXS4kTmFtZSwgYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIFRPRE86IHJlZmFjdG9yIHRvIGRpcmVjdCB1c2Ugb2YgUHJvbWlzZS5hbGxTZXR0bGVkXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0bVBhcmFtZXRlcnMuYXBwQ29tcG9uZW50ID0gb0FwcENvbXBvbmVudDtcblx0XHRcdGNvbnN0IG1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycztcblx0XHRcdGNvbnN0IGJHcm91cGVkID0gbVBhcmFtZXRlcnMuYkdyb3VwZWQ7XG5cdFx0XHRjb25zdCBiR2V0Qm91bmRDb250ZXh0ID0gbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dDtcblx0XHRcdGNvbnN0IGFBY3Rpb25Qcm9taXNlczogYW55W10gPSBbXTtcblx0XHRcdGxldCBvQWN0aW9uUHJvbWlzZTtcblx0XHRcdGxldCBpO1xuXHRcdFx0bGV0IHNHcm91cElkOiBzdHJpbmc7XG5cdFx0XHRjb25zdCBvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdCA9IGNyZWF0ZWludGVybmFsT3BlcmF0aW9uc1Byb21pc2VGb3JBY3Rpb25FeGVjdXRpb24oKTtcblx0XHRcdGNvbnN0IGZuRXhlY3V0ZUFjdGlvbiA9IGZ1bmN0aW9uIChhY3Rpb25Db250ZXh0OiBhbnksIGN1cnJlbnRfY29udGV4dF9pbmRleDogYW55LCBvU2lkZUVmZmVjdDogYW55LCBpQ29udGV4dExlbmd0aDogYW55KSB7XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHRjb25zdCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZTogYW55ID0gW107XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBuZWVkIGJhdGNoIGdyb3VwIHBlciBhY3Rpb24gY2FsbFxuXHRcdFx0XHRzR3JvdXBJZCA9ICFiR3JvdXBlZCA/IGAkYXV0by4ke2N1cnJlbnRfY29udGV4dF9pbmRleH1gIDogYWN0aW9uQ29udGV4dC5nZXRVcGRhdGVHcm91cElkKCk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQWN0aW9uUHJvbWlzZXMucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlLnB1c2gob2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3Qub0xvY2FsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQsIG9TaWRlRWZmZWN0LCBtUGFyYW1ldGVycywgc0dyb3VwSWQsIGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZm5FeGVjdXRlU2luZ2xlQWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbkNvbnRleHQ6IGFueSwgY3VycmVudF9jb250ZXh0X2luZGV4OiBhbnksIG9TaWRlRWZmZWN0OiBhbnksIGlDb250ZXh0TGVuZ3RoOiBhbnkpIHtcblx0XHRcdFx0Y29uc3QgaW5kaXZpZHVhbEFjdGlvblByb21pc2U6IGFueSA9IFtdO1xuXHRcdFx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiIG5lZWQgYmF0Y2ggZ3JvdXAgcGVyIGFjdGlvbiBjYWxsXG5cdFx0XHRcdHNHcm91cElkID0gbVBhcmFtZXRlcnMuZ3JvdXBJZCB8fCBgYXBpTW9kZSR7Y3VycmVudF9jb250ZXh0X2luZGV4fWA7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQWN0aW9uUHJvbWlzZXMucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlLnB1c2gob2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3Qub0xvY2FsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQsIG9TaWRlRWZmZWN0LCBtUGFyYW1ldGVycywgc0dyb3VwSWQsIGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHRhc3luYyBmdW5jdGlvbiBmbkV4ZWN1dGVDaGFuZ2VzZXQoKSB7XG5cdFx0XHRcdGNvbnN0IGFDaGFuZ2VTZXRMb2NhbFByb21pc2VzID0gW10gYXMgYW55O1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGFDb250ZXh0c1tpXSwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0Zm5FeGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoIDw9IDEgPyBudWxsIDogaSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHQ6IGFDb250ZXh0c1tpXSxcblx0XHRcdFx0XHRcdFx0XHRwYXRoRXhwcmVzc2lvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyxcblx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnNcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KShhQWN0aW9uUHJvbWlzZXMpO1xuXG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcyk7XG5cdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRpZiAoIWlzQ2hhbmdlU2V0QW5kSGFzRXJyb3JzT3JXYXJuaW5ncyh0cnVlKSkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBvcGVyYXRpb25zSGVscGVyLnJlbmRlck1lc3NhZ2VWaWV3KFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA+IDFcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMuZm9yRWFjaChmdW5jdGlvbiAoc2hQcm9taXNlKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2hQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZU1vZGVsID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBtZXNzYWdlTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlTW9kZWwuc2V0RGF0YShtZXNzYWdlc0luTW9kZWwuY29uY2F0KHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJSZXRyaWdnZXJpbmcgb2Ygc3RyaWN0IGhhbmRsaW5nIGFjdGlvbnMgZmFpbGVkXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmbkhhbmRsZVJlc3VsdHMoKTtcblx0XHRcdH1cblxuXHRcdFx0YXN5bmMgZnVuY3Rpb24gZm5FeGVjdXRlU2VxdWVudGlhbGx5KGNvbnRleHRzVG9FeGVjdXRlOiBDb250ZXh0W10pIHtcblx0XHRcdFx0Ly8gT25lIGFjdGlvbiBhbmQgaXRzIHNpZGUgZWZmZWN0cyBhcmUgY29tcGxldGVkIGJlZm9yZSB0aGUgbmV4dCBhY3Rpb24gaXMgZXhlY3V0ZWRcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KShhQWN0aW9uUHJvbWlzZXMpO1xuXHRcdFx0XHRmdW5jdGlvbiBwcm9jZXNzT25lQWN0aW9uKGNvbnRleHQ6IGFueSwgYWN0aW9uSW5kZXg6IGFueSwgaUNvbnRleHRMZW5ndGg6IGFueSkge1xuXHRcdFx0XHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7c0FjdGlvbk5hbWV9KC4uLilgLCBjb250ZXh0LCBtQmluZGluZ1BhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdC8vIEFjdGlvbiBvbiB0aGUgdGFibGUgbGV2ZWwgaXMgYm91bmQgb24gYSBjb3B5IG9mIHRoZSBvRGF0YUxpc3RCaW5kaW5nLCB0byBleGVjdXRlIHRoZSBTaWRlRWZmZWN0cyB3ZSBuZWVkXG5cdFx0XHRcdFx0Ly8gdG8gZG8gaXQgb24gdGhlIG9yaWdpbmFsIG9EYXRhTGlzdEJpbmRpbmdcblx0XHRcdFx0XHRjb25zdCBpbml0aWFsVGFibGVDb250ZXh0ID0gbVBhcmFtZXRlcnMuY29udHJvbD8uZ2V0Um93QmluZGluZz8uKCk/LmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRcdFx0XHRyZXR1cm4gZm5FeGVjdXRlU2luZ2xlQWN0aW9uKFxuXHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdGFjdGlvbkluZGV4LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0OlxuXHRcdFx0XHRcdFx0XHRcdGluaXRpYWxUYWJsZUNvbnRleHQgJiYgaW5pdGlhbFRhYmxlQ29udGV4dC5nZXRQYXRoKCkgPT09IGNvbnRleHQuZ2V0UGF0aCgpID8gaW5pdGlhbFRhYmxlQ29udGV4dCA6IGNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHBhdGhFeHByZXNzaW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLFxuXHRcdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRpQ29udGV4dExlbmd0aFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBzZXJpYWxpemF0aW9uOiBwcm9jZXNzT25lQWN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbnRyeSBpbiBjb250ZXh0c1RvRXhlY3V0ZSBvbmx5IGFmdGVyIHRoZSBwcm9taXNlIHJldHVybmVkIGZyb20gdGhlIG9uZSBiZWZvcmUgaGFzIGJlZW4gcmVzb2x2ZWRcblx0XHRcdFx0YXdhaXQgY29udGV4dHNUb0V4ZWN1dGUucmVkdWNlKGFzeW5jIChwcm9taXNlOiBQcm9taXNlPHZvaWQ+LCBjb250ZXh0OiBDb250ZXh0LCBpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdFx0YXdhaXQgcHJvbWlzZTtcblx0XHRcdFx0XHRhd2FpdCBwcm9jZXNzT25lQWN0aW9uKGNvbnRleHQsIGlkICsgMSwgYUNvbnRleHRzLmxlbmd0aCk7XG5cdFx0XHRcdH0sIFByb21pc2UucmVzb2x2ZSgpKTtcblxuXHRcdFx0XHRpZiAoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRhd2FpdCBvcGVyYXRpb25zSGVscGVyLnJlbmRlck1lc3NhZ2VWaWV3KFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA+IDFcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZuSGFuZGxlUmVzdWx0cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJHcm91cGVkKSB7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiwgZW5zdXJlIHRoYXQgZWFjaCBhY3Rpb24gYW5kIG1hdGNoaW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQvLyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbmV4dCBzZXQgaXMgc3VibWl0dGVkLiBXb3JrYXJvdW5kIHVudGlsIEpTT04gYmF0Y2ggaXMgYXZhaWxhYmxlLlxuXHRcdFx0XHQvLyBBbGxvdyBhbHNvIGZvciBMaXN0IFJlcG9ydC5cblx0XHRcdFx0Zm5FeGVjdXRlU2VxdWVudGlhbGx5KGFDb250ZXh0cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmbkV4ZWN1dGVDaGFuZ2VzZXQoKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZm5IYW5kbGVSZXN1bHRzKCkge1xuXHRcdFx0XHQvLyBQcm9taXNlLmFsbFNldHRsZWQgd2lsbCBuZXZlciBiZSByZWplY3RlZC4gSG93ZXZlciwgZXNsaW50IHJlcXVpcmVzIGVpdGhlciBjYXRjaCBvciByZXR1cm4gLSB0aHVzIHdlIHJldHVybiB0aGUgcmVzdWx0aW5nIFByb21pc2UgYWx0aG91Z2ggbm8gb25lIHdpbGwgdXNlIGl0LlxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGFBY3Rpb25Qcm9taXNlcykudGhlbihyZXNvbHZlKTtcblx0XHRcdH1cblx0XHR9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdChcblx0XHRcdFx0Zm5PblJlc3BvbnNlIHx8XG5cdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHR9XG5cdFx0XHQpKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0FjdGlvbk5hbWV9KC4uLilgKTtcblx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRjb25zdCBzR3JvdXBJZCA9IFwiYWN0aW9uSW1wb3J0XCI7XG5cdFx0Y29uc3Qgb0FjdGlvblByb21pc2UgPSBvQWN0aW9uLmV4ZWN1dGUoXG5cdFx0XHRzR3JvdXBJZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdChvcGVyYXRpb25zSGVscGVyIGFzIGFueSkuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHR7IGxhYmVsOiBtUGFyYW1ldGVycy5sYWJlbCwgbW9kZWw6IG9Nb2RlbCB9LFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdClcblx0XHQpO1xuXHRcdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0Ly8gdHJpZ2dlciBvblN1Ym1pdHRlZCBcImV2ZW50XCJcblx0XHQoXG5cdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHQvKiovXG5cdFx0XHR9XG5cdFx0KShvQWN0aW9uUHJvbWlzZSk7XG5cdFx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoY3VycmVudFByb21pc2VWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0XHQvLyBIZXJlIHdlIGVuc3VyZSB0aGF0IHdlIHJldHVybiB0aGUgcmVzcG9uc2Ugd2UgZ290IGZyb20gYW4gdW5ib3VuZCBhY3Rpb24gdG8gdGhlXG5cdFx0XHRcdC8vIGNhbGxlciBCQ1AgOiAyMjcwMTM5Mjc5XG5cdFx0XHRcdGlmIChjdXJyZW50UHJvbWlzZVZhbHVlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGN1cnJlbnRQcm9taXNlVmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0Py4oKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBhY3Rpb24gXCIgKyBzQWN0aW9uTmFtZSwgb0Vycm9yKTtcblx0XHRcdFx0dGhyb3cgb0Vycm9yO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25SZXNwb25zZSB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKCk7XG5cdFx0XHR9KTtcblx0fVxufVxuZnVuY3Rpb24gX2dldFBhdGgob0FjdGlvbkNvbnRleHQ6IGFueSwgc0FjdGlvbk5hbWU6IGFueSkge1xuXHRsZXQgc1BhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCk7XG5cdHNQYXRoID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJElzQm91bmRcIikgPyBzUGF0aC5zcGxpdChcIkAkdWk1Lm92ZXJsb2FkXCIpWzBdIDogc1BhdGguc3BsaXQoXCIvMFwiKVswXTtcblx0cmV0dXJuIHNQYXRoLnNwbGl0KGAvJHtzQWN0aW9uTmFtZX1gKVswXTtcbn1cblxuZnVuY3Rpb24gX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyhcblx0aXNDcmVhdGVBY3Rpb246IGJvb2xlYW4sXG5cdGFjdGlvblBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcblx0cGFyYW1ldGVyVmFsdWVzPzogUmVjb3JkPHN0cmluZywgYW55PltdLFxuXHRzdGFydHVwUGFyYW1ldGVycz86IGFueVxuKTogYm9vbGVhbiB7XG5cdGlmIChwYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHQvLyBJZiBzaG93RGlhbG9nIGlzIGZhbHNlIGJ1dCB0aGVyZSBhcmUgcGFyYW1ldGVycyBmcm9tIHRoZSBpbnZva2VBY3Rpb24gY2FsbCwgd2UgbmVlZCB0byBjaGVjayB0aGF0IHZhbHVlcyBoYXZlIGJlZW5cblx0XHQvLyBwcm92aWRlZCBmb3IgYWxsIG9mIHRoZW1cblx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlciBvZiBhY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFjdGlvblBhcmFtZXRlci4kTmFtZSAhPT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiICYmXG5cdFx0XHRcdCFwYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBhY3Rpb25QYXJhbWV0ZXIuJE5hbWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gQXQgbGVhc3QgZm9yIG9uZSBwYXJhbWV0ZXIgbm8gdmFsdWUgaGFzIGJlZW4gcHJvdmlkZWQsIHNvIHdlIGNhbid0IHNraXAgdGhlIGRpYWxvZ1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzQ3JlYXRlQWN0aW9uICYmIHN0YXJ0dXBQYXJhbWV0ZXJzKSB7XG5cdFx0Ly8gSWYgcGFyYW1ldGVycyBoYXZlIGJlZW4gcHJvdmlkZWQgZHVyaW5nIGFwcGxpY2F0aW9uIGxhdW5jaCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgc2V0IGlzIGNvbXBsZXRlXG5cdFx0Ly8gSWYgbm90LCB0aGUgcGFyYW1ldGVyIGRpYWxvZyBzdGlsbCBuZWVkcyB0byBiZSBzaG93bi5cblx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlciBvZiBhY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAoIXN0YXJ0dXBQYXJhbWV0ZXJzW2FjdGlvblBhcmFtZXRlci4kTmFtZV0pIHtcblx0XHRcdFx0Ly8gQXQgbGVhc3QgZm9yIG9uZSBwYXJhbWV0ZXIgbm8gdmFsdWUgaGFzIGJlZW4gcHJvdmlkZWQsIHNvIHdlIGNhbid0IHNraXAgdGhlIGRpYWxvZ1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmblJlcXVlc3RTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50OiBhbnksIG9TaWRlRWZmZWN0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnksIHNHcm91cElkOiBhbnksIGFMb2NhbFByb21pc2U/OiBhbnkpIHtcblx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdGxldCBvTG9jYWxQcm9taXNlO1xuXHQvLyB0cmlnZ2VyIGFjdGlvbnMgZnJvbSBzaWRlIGVmZmVjdHNcblx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmxlbmd0aCkge1xuXHRcdG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNUcmlnZ2VyQWN0aW9uOiBhbnkpIHtcblx0XHRcdGlmIChzVHJpZ2dlckFjdGlvbikge1xuXHRcdFx0XHRvTG9jYWxQcm9taXNlID0gb1NpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKHNUcmlnZ2VyQWN0aW9uLCBvU2lkZUVmZmVjdC5jb250ZXh0LCBzR3JvdXBJZCk7XG5cdFx0XHRcdGlmIChhTG9jYWxQcm9taXNlKSB7XG5cdFx0XHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9Mb2NhbFByb21pc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gcmVxdWVzdCBzaWRlIGVmZmVjdHMgZm9yIHRoaXMgYWN0aW9uXG5cdC8vIGFzIHdlIG1vdmUgdGhlIG1lc3NhZ2VzIHJlcXVlc3QgdG8gUE9TVCAkc2VsZWN0IHdlIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIGFuIGVtcHR5IGFycmF5XG5cdGlmIChvU2lkZUVmZmVjdCAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMgJiYgb1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcblx0XHRvTG9jYWxQcm9taXNlID0gb1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMob1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLCBvU2lkZUVmZmVjdC5jb250ZXh0LCBzR3JvdXBJZCk7XG5cdFx0aWYgKGFMb2NhbFByb21pc2UpIHtcblx0XHRcdGFMb2NhbFByb21pc2UucHVzaChvTG9jYWxQcm9taXNlKTtcblx0XHR9XG5cdFx0b0xvY2FsUHJvbWlzZVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmIG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRKU09OLnBhcnNlKG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zLFxuXHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogU3RhdGljIGZ1bmN0aW9ucyB0byBjYWxsIE9EYXRhIGFjdGlvbnMgKGJvdW5kL2ltcG9ydCkgYW5kIGZ1bmN0aW9ucyAoYm91bmQvaW1wb3J0KVxuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG9wZXJhdGlvbnMgPSB7XG5cdGNhbGxCb3VuZEFjdGlvbjogY2FsbEJvdW5kQWN0aW9uLFxuXHRjYWxsQWN0aW9uSW1wb3J0OiBjYWxsQWN0aW9uSW1wb3J0LFxuXHRjYWxsQm91bmRGdW5jdGlvbjogY2FsbEJvdW5kRnVuY3Rpb24sXG5cdGNhbGxGdW5jdGlvbkltcG9ydDogY2FsbEZ1bmN0aW9uSW1wb3J0LFxuXHRleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzOiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzLFxuXHRjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uOiBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uLFxuXHR2YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM6IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMsXG5cdGdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWU6IF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lLFxuXHRhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrOiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrLFxuXHRhZnRlckFjdGlvblJlc29sdXRpb246IGFmdGVyQWN0aW9uUmVzb2x1dGlvbixcblx0aXNDaGFuZ2VTZXRBbmRIYXNFcnJvcnNPcldhcm5pbmdzOiBpc0NoYW5nZVNldEFuZEhhc0Vycm9yc09yV2FybmluZ3Ncbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9wZXJhdGlvbnM7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7OztFQW9DQSxNQUFNQSxTQUFTLEdBQUdDLFNBQVMsQ0FBQ0QsU0FBUztJQUNwQ0Usa0JBQWtCLEdBQUdELFNBQVMsQ0FBQ0Msa0JBQWtCO0VBQ2xELE1BQU1DLE1BQU0sR0FBSUMsVUFBVSxDQUFTRCxN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
|
|
1602
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zdGFudHMiLCJGRUxpYnJhcnkiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJBY3Rpb24iLCJNZXNzYWdlQm94IiwiY2FsbEJvdW5kQWN0aW9uIiwic0FjdGlvbk5hbWUiLCJjb250ZXh0cyIsIm9Nb2RlbCIsIm9BcHBDb21wb25lbnQiLCJtUGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIiwiaXM0MTJFeGVjdXRlZCIsInN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzIiwic3RyaWN0SGFuZGxpbmdQcm9taXNlcyIsInN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzIiwiZGVsYXlTdWNjZXNzTWVzc2FnZXMiLCJwcm9jZXNzZWRNZXNzYWdlSWRzIiwibGVuZ3RoIiwiUHJvbWlzZSIsInJlamVjdCIsImlzQ2FsbGVkV2l0aEFycmF5IiwiQXJyYXkiLCJpc0FycmF5IiwiYUNvbnRleHRzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNBY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwib0JvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NyaXRpY2FsQWN0aW9uIiwiQWN0aW9uUnVudGltZSIsImdldElzQWN0aW9uQ3JpdGljYWwiLCJleHRyYWN0U2luZ2xlUmVzdWx0IiwicmVzdWx0Iiwic3RhdHVzIiwidmFsdWUiLCJyZWFzb24iLCJjYWxsQWN0aW9uIiwidGhlbiIsImNhbGxBY3Rpb25JbXBvcnQiLCJiaW5kQ29udGV4dCIsIm9BY3Rpb25JbXBvcnQiLCJnZXRPYmplY3QiLCJjYWxsQm91bmRGdW5jdGlvbiIsInNGdW5jdGlvbk5hbWUiLCJjb250ZXh0Iiwic0Z1bmN0aW9uUGF0aCIsIm9Cb3VuZEZ1bmN0aW9uIiwiX2V4ZWN1dGVGdW5jdGlvbiIsImNhbGxGdW5jdGlvbkltcG9ydCIsInJlc29sdmUiLCJvRnVuY3Rpb25JbXBvcnQiLCJvRnVuY3Rpb24iLCJzR3JvdXBJZCIsIkVycm9yIiwib0Z1bmN0aW9uUHJvbWlzZSIsImV4ZWN1dGUiLCJzdWJtaXRCYXRjaCIsImdldEJvdW5kQ29udGV4dCIsIm9BY3Rpb24iLCJiR3JvdXBlZCIsImludm9jYXRpb25Hcm91cGluZyIsIkNoYW5nZVNldCIsIm1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzIiwiZm5EaWFsb2ciLCJvQWN0aW9uUHJvbWlzZSIsInNBY3Rpb25MYWJlbCIsImxhYmVsIiwiYlNraXBQYXJhbWV0ZXJEaWFsb2ciLCJza2lwUGFyYW1ldGVyRGlhbG9nIiwiYklzQ3JlYXRlQWN0aW9uIiwiYklzQ3JpdGljYWxBY3Rpb24iLCJzTWV0YVBhdGgiLCJzTWVzc2FnZXNQYXRoIiwiaU1lc3NhZ2VTaWRlRWZmZWN0IiwiYklzU2FtZUVudGl0eSIsIm9SZXR1cm5UeXBlIiwiYlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsImFjdGlvbkRlZmluaXRpb24iLCJhQWN0aW9uUGFyYW1ldGVycyIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2ciLCIkTmFtZSIsImFQYXJhbWV0ZXJWYWx1ZXMiLCJwYXJhbWV0ZXJWYWx1ZXMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1ldGVycyIsIl92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMiLCJzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nIiwiY29uZmlybUNyaXRpY2FsQWN0aW9uIiwiZm5PblN1Ym1pdHRlZCIsIm9uU3VibWl0dGVkIiwiZm5PblJlc3BvbnNlIiwib25SZXNwb25zZSIsImFjdGlvbk5hbWUiLCJtb2RlbCIsImJHZXRCb3VuZENvbnRleHQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJzZWxlY3RlZEl0ZW1zIiwiYWRkaXRpb25hbFNpZGVFZmZlY3QiLCJwYXRoRXhwcmVzc2lvbnMiLCJmaW5kSW5kZXgiLCJleHAiLCIkaXNDb2xsZWN0aW9uIiwiZ2V0TW9kZWwiLCIkVHlwZSIsIm1CaW5kaW5nUGFyYW1ldGVycyIsIiRzZWxlY3QiLCJzcGxpdCIsImluZGV4T2YiLCIkJGluaGVyaXRFeHBhbmRTZWxlY3QiLCJ0cmlnZ2VyQWN0aW9ucyIsInNwbGljZSIsImludGVybmFsTW9kZWxDb250ZXh0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiaXNDcmVhdGVBY3Rpb24iLCJiT2JqZWN0UGFnZSIsImRpc2FibGVTdHJpY3RIYW5kbGluZyIsImdyb3VwSWQiLCJjb250cm9sSWQiLCJjb250cm9sIiwicGFyZW50Q29udHJvbCIsImJ5SWQiLCJpc1N0YXRpYyIsIiRQYXJhbWV0ZXIiLCJzb21lIiwiYVBhcmFtZXRlciIsIiRFbnRpdHlTZXRQYXRoIiwiJElzQm91bmQiLCJlbnRpdHlTZXROYW1lIiwibWVzc2FnZUhhbmRsZXIiLCJvT3BlcmF0aW9uUmVzdWx0IiwiYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uIiwiY2F0Y2giLCJpIiwiZmluZCIsImVsZW1lbnQiLCJuYW1lIiwiX2V4ZWN1dGVBY3Rpb24iLCJtZXNzYWdlcyIsIkNvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJjb25jYXQiLCJzdHJpY3RIYW5kbGluZ0ZhaWxzIiwiYUZhaWxlZENvbnRleHRzIiwiZm9yRWFjaCIsImZhaWwiLCJwdXNoIiwiZ2V0Q29udGV4dCIsIm9GYWlsZWRPcGVyYXRpb25SZXN1bHQiLCJhZGRNZXNzYWdlcyIsInNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0IiwiaXNDaGFuZ2VTZXRBbmRIYXNFcnJvcnNPcldhcm5pbmdzIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwiYU1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4iLCJhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrIiwidW5kZWZpbmVkIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uQ29udGV4dCIsIm9QYXJlbnRDb250cm9sIiwiYm91bmRBY3Rpb25OYW1lIiwic3VmZml4UmVzb3VyY2VLZXkiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInNDb25maXJtYXRpb25UZXh0IiwiZ2V0VGV4dCIsImNvbmZpcm0iLCJvbkNsb3NlIiwic0FjdGlvbiIsIk9LIiwib09wZXJhdGlvbiIsIm9FcnJvciIsImUiLCJDYW5jZWxBY3Rpb25EaWFsb2ciLCJleGVjdXRlQVBNQWN0aW9uIiwib0RpYWxvZyIsImFmdGVyNDEyIiwiYVJlc3VsdCIsIm9TaW5nbGVSZXN1bHQiLCJhdHRhY2hFdmVudE9uY2UiLCJpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW4iLCJpc09wZW4iLCJzZWxlY3RlZENvbnRleHRzIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIkpTT04iLCJwYXJzZSIsIm9Db250cm9sIiwiaXNBIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkRlbGV0ZUhlbHBlciIsInVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIiwic2hvd01lc3NhZ2VCb3giLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJ1bmJvdW5kTWVzc2FnZXMiLCJmaWx0ZXIiLCJtZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsIkFQRG1lc3NhZ2VzIiwiYWN0aW9uUGFyYW0iLCJBUERNZXNzYWdlIiwiaXNBUERUYXJnZXQiLCJlcnJvclRhcmdldHNJbkFQRCIsImhhc0NoYW5nZVNldE1vZGlmaWVkTWVzc2FnZSIsInNNZXNzYWdlIiwic0Rlc2NyaXB0aW9uVGV4dCIsIm1lc3NhZ2VNb2RlbCIsIm1lc3NhZ2VzSW5Nb2RlbCIsImFCb3VuZE1lc3NhZ2VzIiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0TWVzc2FnZXMiLCJnZW5lcmljTWVzc2FnZSIsImlzRWRpdGFibGUiLCJnZXRQcm9wZXJ0eSIsIm5vbkVycm9yTWVzc2FnZUV4aXN0c0luRGlhbG9nIiwiZ2V0VHlwZSIsIm5vbkVycm9yTWVzc2FnZUV4aXN0c0luTW9kZWwiLCJzZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZSIsIk1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJ0YXJnZXQiLCJwZXJzaXN0ZW50IiwiZGVzY3JpcHRpb24iLCJjb2RlIiwidW5zaGlmdCIsImNsb3NlIiwiZGVzdHJveSIsImZpbHRlcmVkTWVzc2FnZXMiLCJiSXNBUERPcGVuIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJiaW5kIiwic2hvd0NoYW5nZVNldEVycm9yRGlhbG9nIiwic1BhdGgiLCJfZ2V0UGF0aCIsIm1ldGFNb2RlbCIsImVudGl0eVNldENvbnRleHQiLCJzQWN0aW9uTmFtZVBhdGgiLCJhY3Rpb25OYW1lQ29udGV4dCIsInNGcmFnbWVudE5hbWUiLCJhY3Rpb25QYXJhbWV0ZXJJbmZvcyIsIm1lc3NhZ2VNYW5hZ2VyIiwiX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIiLCJwYXJhbWV0ZXIiLCJhbGxNZXNzYWdlcyIsImdlbmVyYXRlIiwicmVsZXZhbnRNZXNzYWdlcyIsIm1zZyIsImdldENvbnRyb2xJZHMiLCJpZCIsImluY2x1ZGVzIiwicmVtb3ZlTWVzc2FnZXMiLCJvQ29udHJvbGxlciIsImhhbmRsZUNoYW5nZSIsIm9FdmVudCIsImZpZWxkIiwiZ2V0U291cmNlIiwiYWN0aW9uUGFyYW1ldGVySW5mbyIsInZhbGlkYXRpb25Qcm9taXNlIiwiZ2V0UGFyYW1ldGVyIiwiaGFzRXJyb3IiLCJlcnJvciIsIl9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyIiwib0ZyYWdtZW50IiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGUiLCJvUGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJjcmVhdGVkRnJhZ21lbnQiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiYmluZGluZ0NvbnRleHRzIiwiYWN0aW9uIiwiZW50aXR5U2V0IiwibW9kZWxzIiwiYUZ1bmN0aW9uUGFyYW1zIiwib09wZXJhdGlvbkJpbmRpbmciLCJDb21tb25VdGlscyIsInNldFVzZXJEZWZhdWx0cyIsIm9EaWFsb2dDb250ZW50IiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsImNvbnRyb2xsZXIiLCJtYXAiLCJhY3Rpb25QYXJhbWV0ZXIiLCJpc011bHRpVmFsdWUiLCJhY3Rpb25SZXN1bHQiLCJkaWFsb2dDYW5jZWxsZWQiLCJidXR0b25Mb2NrIiwiRGlhbG9nIiwidGl0bGUiLCJjb250ZW50IiwiZXNjYXBlSGFuZGxlciIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwidGV4dCIsIl9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lIiwicHJlc3MiLCJfdmFsaWRhdGVQcm9wZXJ0aWVzIiwiQnVzeUxvY2tlciIsImxvY2siLCJmYWlsZWRDb250ZXh0cyIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInZQYXJhbWV0ZXJWYWx1ZSIsIm9QYXJhbWV0ZXJDb250ZXh0IiwiZ2V0UGFyYW1ldGVyQ29udGV4dCIsImFNVkZDb250ZW50IiwiYUtleVZhbHVlcyIsImoiLCJLZXkiLCJpbm5lclBhcmFtZXRlcnMiLCJPYmplY3QiLCJhc3NpZ24iLCJzYXAiLCJ1aSIsImdldENvcmUiLCJpc0xvY2tlZCIsInVubG9jayIsInNob3dNZXNzYWdlcyIsIm1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwiZW5kQnV0dG9uIiwiYmVmb3JlT3BlbiIsIm9DbG9uZUV2ZW50IiwiZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwic0RlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nIiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzQm91bmRGdW5jdGlvbk5hbWUiLCJwcmVmaWxsUGFyYW1ldGVyIiwic1BhcmFtTmFtZSIsInZQYXJhbURlZmF1bHRWYWx1ZSIsIiRQYXRoIiwidlBhcmFtVmFsdWUiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJyZXF1ZXN0UHJvcGVydHkiLCJzUGF0aEZvckNvbnRleHQiLCJyZXBsYWNlIiwicGFyYW1OYW1lIiwiYk5vUG9zc2libGVWYWx1ZSIsIkxvZyIsImJMYXRlUHJvcGVydHlFcnJvciIsIm9EYXRhIiwiZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwic0FjdGlvblBhcmFtZXRlckFubm90YXRpb25QYXRoIiwiZ2V0UGFyYW1ldGVyUGF0aCIsIm9QYXJhbWV0ZXJBbm5vdGF0aW9ucyIsIm9QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlIiwidlBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFQcmVmaWxsUGFyYW1Qcm9taXNlcyIsImFsbCIsImFFeGVjRnVuY3Rpb25Qcm9taXNlcyIsIm9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlIiwic01vZHVsZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiRlBNSGVscGVyIiwiYWN0aW9uV3JhcHBlciIsImFQcm9taXNlcyIsImN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSIsImZ1bmN0aW9uUGFyYW1zIiwib0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Iiwic0RpYWxvZ1BhcmFtTmFtZSIsInZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwic2V0UGFyYW1ldGVyIiwiaGFzT3duUHJvcGVydHkiLCJiRXJyb3JGb3VuZCIsIm9WYWx1ZSIsInNUZXh0Iiwid2FybmluZyIsImNvbnRlbnRXaWR0aCIsImZuQXN5bmNCZWZvcmVPcGVuIiwiYVBhcmFtZXRlcnMiLCJvQ29udGV4dE9iamVjdCIsInJlcXVlc3RPYmplY3QiLCJnZXRJdGVtcyIsImdldFZhbHVlIiwiYWZ0ZXJDbG9zZSIsInNldE1vZGVsIiwiYmluZEVsZW1lbnQiLCJwYXRoIiwib01WRk1vZGVsIiwiZ2V0QmluZGluZyIsImF0dGFjaENoYW5nZSIsImFkZERlcGVuZGVudCIsInNldEJpbmRpbmdDb250ZXh0IiwiZ2V0T2JqZWN0QmluZGluZyIsIm9wZW4iLCJzbGljZSIsInNFbnRpdHlTZXROYW1lIiwiYUFjdGlvbk5hbWUiLCJzS2V5IiwiYlJlc291cmNlS2V5RXhpc3RzIiwiY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzIiwiZW5oYW5jZVNpZGVFZmZlY3RzIiwiYXBwQ29tcG9uZW50Iiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmciLCJyZXR1cm5lZENvbnRleHQiLCJvcmlnaW4iLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRJbnN0YW5jZWRWaWV3cyIsInBhZ2VWaWV3IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzIiwiaUNvbnRleHRMZW5ndGgiLCJjdXJyZW50X2NvbnRleHRfaW5kZXgiLCJpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSIsImludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QiLCJiRW5hYmxlU3RyaWN0SGFuZGxpbmciLCJvUHJvcGVydHkiLCIka2luZCIsIm9wZXJhdGlvbnNIZWxwZXIiLCJmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQiLCJvcGVyYXRpb25zIiwidXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyIsIkFjdGlvbkV4ZWN1dGlvbkZhaWxlZCIsIm9ubHlTdWNjZXNzTWVzc2FnZXMiLCJ0cmFuc2l0aW9uTWVzc2FnZXMiLCJpc0R1cGxpY2F0ZSIsIlN1Y2Nlc3MiLCJjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uIiwib0xvY2FsQWN0aW9uUHJvbWlzZSIsImlzQ2hhbmdlU2V0IiwidW5Cb3VuZE1zZ3MiLCJib3VuZE1zZ3MiLCJzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJhQWN0aW9uUHJvbWlzZXMiLCJvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdCIsImZuRXhlY3V0ZUFjdGlvbiIsImFjdGlvbkNvbnRleHQiLCJvU2lkZUVmZmVjdCIsImluZGl2aWR1YWxBY3Rpb25Qcm9taXNlIiwiZ2V0VXBkYXRlR3JvdXBJZCIsImZuUmVxdWVzdFNpZGVFZmZlY3RzIiwiYWxsU2V0dGxlZCIsImZuRXhlY3V0ZVNpbmdsZUFjdGlvbiIsImZuRXhlY3V0ZUNoYW5nZXNldCIsImFDaGFuZ2VTZXRMb2NhbFByb21pc2VzIiwibm9vcCIsInJlbmRlck1lc3NhZ2VWaWV3Iiwic2hQcm9taXNlIiwic2V0RGF0YSIsImZuSGFuZGxlUmVzdWx0cyIsImZuRXhlY3V0ZVNlcXVlbnRpYWxseSIsImNvbnRleHRzVG9FeGVjdXRlIiwicHJvY2Vzc09uZUFjdGlvbiIsImFjdGlvbkluZGV4IiwiaW5pdGlhbFRhYmxlQ29udGV4dCIsImdldFJvd0JpbmRpbmciLCJnZXRIZWFkZXJDb250ZXh0IiwicmVkdWNlIiwicHJvbWlzZSIsImZpbmFsbHkiLCJjdXJyZW50UHJvbWlzZVZhbHVlIiwiYWN0aW9uUGFyYW1ldGVycyIsImFMb2NhbFByb21pc2UiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwib0xvY2FsUHJvbWlzZSIsInNUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsInZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsImdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImZhY2FkZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgRGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uLy4uLy4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IG9wZXJhdGlvbnNIZWxwZXIsIHsgdHlwZSBTdHJpY3RIYW5kbGluZ1BhcmFtZXRlcnMsIHR5cGUgU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgfSBmcm9tIFwiLi4vLi4vLi4vb3BlcmF0aW9uc0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4uLy4uL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblBhcmFtZXRlciwgQWN0aW9uUGFyYW1ldGVySW5mbyB9IGZyb20gXCIuL19pbnRlcm5hbFwiO1xuaW1wb3J0IHsgX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIsIF92YWxpZGF0ZVByb3BlcnRpZXMgfSBmcm9tIFwiLi9faW50ZXJuYWxcIjtcblxuY29uc3QgQ29uc3RhbnRzID0gRkVMaWJyYXJ5LkNvbnN0YW50cyxcblx0SW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcbmNvbnN0IEFjdGlvbiA9IChNZXNzYWdlQm94IGFzIGFueSkuQWN0aW9uO1xuXG4vKipcbiAqIENhbGxzIGEgYm91bmQgYWN0aW9uIGZvciBvbmUgb3IgbXVsdGlwbGUgY29udGV4dHMuXG4gKlxuICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0gY29udGV4dHMgRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgdG8gYmUgYmUgY2FsbGVkXG4gKiBAcGFyYW0gb01vZGVsIE9EYXRhIE1vZGVsXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXNdIEEgbWFwIG9mIGFjdGlvbiBwYXJhbWV0ZXIgbmFtZXMgYW5kIHByb3ZpZGVkIHZhbHVlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnNdIEEgbWFwIG9mIGJpbmRpbmcgcGFyYW1ldGVycyB0aGF0IHdvdWxkIGJlIHBhcnQgb2YgJHNlbGVjdCBhbmQgJGV4cGFuZCBjb21pbmcgZnJvbSBzaWRlIGVmZmVjdHMgZm9yIGJvdW5kIGFjdGlvbnNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3RdIEFycmF5IG9mIHByb3BlcnR5IHBhdGhzIHRvIGJlIHJlcXVlc3RlZCBpbiBhZGRpdGlvbiB0byBhY3R1YWwgdGFyZ2V0IHByb3BlcnRpZXMgb2YgdGhlIHNpZGUgZWZmZWN0XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ddIElmIHNldCBhbmQgaWYgcGFyYW1ldGVycyBleGlzdCB0aGUgdXNlciByZXRyaWV2ZXMgYSBkaWFsb2cgdG8gZmlsbCBpbiBwYXJhbWV0ZXJzLCBpZiBhY3Rpb25QYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhleSBhcmUgc2hvd24gdG8gdGhlIHVzZXJcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubGFiZWxdIEEgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nXSBNb2RlIGhvdyBhY3Rpb25zIGFyZSB0byBiZSBjYWxsZWQ6IENoYW5nZXNldCB0byBwdXQgYWxsIGFjdGlvbiBjYWxscyBpbnRvIG9uZSBjaGFuZ2VzZXQsIElzb2xhdGVkIHRvIHB1dCB0aGVtIGludG8gc2VwYXJhdGUgY2hhbmdlc2V0cywgZGVmYXVsdHMgdG8gSXNvbGF0ZWRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMub25TdWJtaXR0ZWRdIEZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBvbmNlIHRoZSBhY3Rpb25zIGFyZSBzdWJtaXR0ZWQgd2l0aCBhbiBhcnJheSBvZiBwcm9taXNlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5kZWZhdWx0UGFyYW1ldGVyc10gQ2FuIGNvbnRhaW4gZGVmYXVsdCBwYXJhbWV0ZXJzIGZyb20gRkxQIHVzZXIgZGVmYXVsdHNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbF0gSWYgc3BlY2lmaWVkLCB0aGUgZGlhbG9ncyBhcmUgYWRkZWQgYXMgZGVwZW5kZW50IG9mIHRoZSBwYXJlbnQgY29udHJvbFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0XSBJZiBzcGVjaWZpZWQsIHRoZSBhY3Rpb24gcHJvbWlzZSByZXR1cm5zIHRoZSBib3VuZCBjb250ZXh0XG4gKiBAcGFyYW0gW3N0cmljdEhhbmRsaW5nVXRpbGl0aWVzXSBPcHRpb25hbCwgdXRpbGl0eSBmbGFncyBhbmQgbWVzc2FnZXMgZm9yIHN0cmljdEhhbmRsaW5nXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgcmVzcG9uc2Ugb2JqZWN0cyAoVE9ETzogdG8gYmUgY2hhbmdlZClcbiAqL1xuZnVuY3Rpb24gY2FsbEJvdW5kQWN0aW9uKFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRjb250ZXh0czogYW55LFxuXHRvTW9kZWw6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pIHtcblx0aWYgKCFzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0aXM0MTJFeGVjdXRlZDogZmFsc2UsXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBbXSxcblx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IFtdXG5cdFx0fTtcblx0fVxuXHRpZiAoIWNvbnRleHRzIHx8IGNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vSW4gRnJlZXN0eWxlIGFwcHMgYm91bmQgYWN0aW9ucyBjYW4gaGF2ZSBubyBjb250ZXh0XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQm91bmQgYWN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGNvbnRleHRcIik7XG5cdH1cblx0Ly8gdGhpcyBtZXRob2QgZWl0aGVyIGFjY2VwdHMgc2luZ2xlIGNvbnRleHQgb3IgYW4gYXJyYXkgb2YgY29udGV4dHNcblx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gYW4gdW5hbWJpZ3VvcyBBUElcblx0Y29uc3QgaXNDYWxsZWRXaXRoQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbnRleHRzKTtcblxuXHQvLyBpbiBjYXNlIG9mIHNpbmdsZSBjb250ZXh0IHdyYXAgaW50byBhbiBhcnJheSBmb3IgY2FsbGVkIG1ldGhvZHMgKGVzcC4gY2FsbEFjdGlvbilcblx0bVBhcmFtZXRlcnMuYUNvbnRleHRzID0gaXNDYWxsZWRXaXRoQXJyYXkgPyBjb250ZXh0cyA6IFtjb250ZXh0c107XG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHQvLyBBbmFseXppbmcgbWV0YU1vZGVsUGF0aCBmb3IgYWN0aW9uIG9ubHkgZnJvbSBmaXJzdCBjb250ZXh0IHNlZW1zIHdlaXJkLCBidXQgcHJvYmFibHkgd29ya3MgaW4gYWxsIGV4aXN0aW5nIHN6ZW5hcmlvcyAtIGlmIHNldmVyYWwgY29udGV4dHMgYXJlIHBhc3NlZCwgdGhleSBwcm9iYWJseVxuXHRcdC8vIGJlbG9uZyB0byB0aGUgc2FtZSBtZXRhbW9kZWxwYXRoLiBUT0RPOiBDaGVjaywgd2hldGhlciB0aGlzIGNhbiBiZSBpbXByb3ZlZCAvIHN6ZW5hcmlvcyB3aXRoIGRpZmZlcmVudCBtZXRhTW9kZWxQYXRocyBtaWdodCBleGlzdFxuXHRcdHNBY3Rpb25QYXRoID0gYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChtUGFyYW1ldGVycy5hQ29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtzQWN0aW9uTmFtZX1gLFxuXHRcdG9Cb3VuZEFjdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c0FjdGlvblBhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgKTtcblx0bVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbiA9IEFjdGlvblJ1bnRpbWUuZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsLCBzQWN0aW9uUGF0aCwgbVBhcmFtZXRlcnMuYUNvbnRleHRzKTtcblxuXHQvLyBQcm9taXNlIHJldHVybmVkIGJ5IGNhbGxBY3Rpb24gY3VycmVudGx5IGlzIHJlamVjdGVkIGluIGNhc2Ugb2YgZXhlY3V0aW9uIGZvciBtdWx0aXBsZSBjb250ZXh0cyBwYXJ0bHkgZmFpbGluZy4gVGhpcyBzaG91bGQgYmUgY2hhbmdlZCAoc29tZSBmYWlsaW5nIGNvbnRleHRzIGRvIG5vdCBtZWFuXG5cdC8vIHRoYXQgZnVuY3Rpb24gZGlkIG5vdCBmdWxmaWxsIGl0cyB0YXNrKSwgYnV0IGFzIHRoaXMgaXMgYSBiaWdnZXIgcmVmYWN0b3JpbmcsIGZvciB0aGUgdGltZSBiZWluZyB3ZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGF0IGF0IHRoZSBjYWxsaW5nIHBsYWNlIChpLmUuIGhlcmUpXG5cdC8vID0+IHByb3ZpZGUgdGhlIHNhbWUgaGFuZGxlciAobWFwcGluZyBiYWNrIGZyb20gYXJyYXkgdG8gc2luZ2xlIHJlc3VsdC9lcnJvciBpZiBuZWVkZWQpIGZvciByZXNvbHZlZC9yZWplY3RlZCBjYXNlXG5cdGNvbnN0IGV4dHJhY3RTaW5nbGVSZXN1bHQgPSBmdW5jdGlvbiAocmVzdWx0OiBhbnkpIHtcblx0XHQvLyBzaW5nbGUgYWN0aW9uIGNvdWxkIGJlIHJlc29sdmVkIG9yIHJlamVjdGVkXG5cdFx0aWYgKHJlc3VsdFswXS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIpIHtcblx0XHRcdHJldHVybiByZXN1bHRbMF0udmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgZGlhbG9nIGNhbmNlbGxhdGlvbiwgbm8gYXJyYXkgaXMgcmV0dXJuZWQgPT4gdGhyb3cgdGhlIHJlc3VsdC5cblx0XHRcdC8vIElkZWFsbHksIGRpZmZlcmVudGlhdGluZyBzaG91bGQgbm90IGJlIG5lZWRlZCBoZXJlID0+IFRPRE86IEZpbmQgYmV0dGVyIHNvbHV0aW9uIHdoZW4gc2VwYXJhdGluZyBkaWFsb2cgaGFuZGxpbmcgKHNpbmdsZSBvYmplY3Qgd2l0aCBzaW5nbGUgcmVzdWx0KSBmcm9tIGJhY2tlbmRcblx0XHRcdC8vIGV4ZWN1dGlvbiAocG90ZW50aWFsbHkgbXVsdGlwbGUgb2JqZWN0cylcblx0XHRcdHRocm93IHJlc3VsdFswXS5yZWFzb24gfHwgcmVzdWx0O1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gY2FsbEFjdGlvbihzQWN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRBY3Rpb24sIG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykudGhlbihcblx0XHQocmVzdWx0OiBhbnkpID0+IHtcblx0XHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGV4dHJhY3RTaW5nbGVSZXN1bHQocmVzdWx0KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdChyZXN1bHQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKGlzQ2FsbGVkV2l0aEFycmF5KSB7XG5cdFx0XHRcdHRocm93IHJlc3VsdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBleHRyYWN0U2luZ2xlUmVzdWx0KHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufVxuLyoqXG4gKiBDYWxscyBhbiBhY3Rpb24gaW1wb3J0LlxuICpcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIGltcG9ydCB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgQW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmxhYmVsXSBBIGh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ddIElmIHNldCBhbmQgaWYgcGFyYW1ldGVycyBleGlzdCB0aGUgdXNlciByZXRyaWV2ZXMgYSBkaWFsb2cgdG8gZmlsbCBpbiBwYXJhbWV0ZXJzLCBpZiBhY3Rpb25QYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhleSBhcmUgc2hvd24gdG8gdGhlIHVzZXJcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMub25TdWJtaXR0ZWRdIEZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBvbmNlIHRoZSBhY3Rpb25zIGFyZSBzdWJtaXR0ZWQgd2l0aCBhbiBhcnJheSBvZiBwcm9taXNlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5kZWZhdWx0UGFyYW1ldGVyc10gQ2FuIGNvbnRhaW4gZGVmYXVsdCBwYXJhbWV0ZXJzIGZyb20gRkxQIHVzZXIgZGVmYXVsdHNcbiAqIEBwYXJhbSBbc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNdIE9wdGlvbmFsLCB1dGlsaXR5IGZsYWdzIGFuZCBtZXNzYWdlcyBmb3Igc3RyaWN0SGFuZGxpbmdcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICovXG5mdW5jdGlvbiBjYWxsQWN0aW9uSW1wb3J0KFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRvTW9kZWw6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pIHtcblx0aWYgKCFvTW9kZWwpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJBY3Rpb24gZXhwZWN0cyBhIG1vZGVsL2NvbnRleHQgZm9yIGV4ZWN1dGlvblwiKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNBY3Rpb25QYXRoID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzQWN0aW9uTmFtZX1gKS5nZXRQYXRoKCksXG5cdFx0b0FjdGlvbkltcG9ydCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke29NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0FjdGlvblBhdGgpLmdldE9iamVjdChcIiRBY3Rpb25cIil9LzBgKTtcblx0bVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbiA9IEFjdGlvblJ1bnRpbWUuZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsLCBgJHtzQWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWRgKTtcblx0cmV0dXJuIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWUsIG9Nb2RlbCwgb0FjdGlvbkltcG9ydCwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKTtcbn1cbmZ1bmN0aW9uIGNhbGxCb3VuZEZ1bmN0aW9uKHNGdW5jdGlvbk5hbWU6IHN0cmluZywgY29udGV4dDogYW55LCBvTW9kZWw6IGFueSkge1xuXHRpZiAoIWNvbnRleHQpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJCb3VuZCBmdW5jdGlvbnMgYWx3YXlzIHJlcXVpcmVzIGEgY29udGV4dFwiKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNGdW5jdGlvblBhdGggPSBgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHQuZ2V0UGF0aCgpKX0vJHtzRnVuY3Rpb25OYW1lfWAsXG5cdFx0b0JvdW5kRnVuY3Rpb24gPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpO1xuXHRyZXR1cm4gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lLCBvTW9kZWwsIG9Cb3VuZEZ1bmN0aW9uLCBjb250ZXh0KTtcbn1cbi8qKlxuICogQ2FsbHMgYSBmdW5jdGlvbiBpbXBvcnQuXG4gKlxuICogQHBhcmFtIHNGdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSB2NCBtb2RlbFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlc1xuICovXG5mdW5jdGlvbiBjYWxsRnVuY3Rpb25JbXBvcnQoc0Z1bmN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IGFueSkge1xuXHRpZiAoIXNGdW5jdGlvbk5hbWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzRnVuY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRvRnVuY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpLmdldE9iamVjdChcIiRGdW5jdGlvblwiKX0vMGApO1xuXHRyZXR1cm4gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lLCBvTW9kZWwsIG9GdW5jdGlvbkltcG9ydCk7XG59XG5mdW5jdGlvbiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWU6IGFueSwgb01vZGVsOiBhbnksIG9GdW5jdGlvbjogYW55LCBjb250ZXh0PzogYW55KSB7XG5cdGxldCBzR3JvdXBJZDtcblx0aWYgKCFvRnVuY3Rpb24gfHwgIW9GdW5jdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEZ1bmN0aW9uICR7c0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCkpO1xuXHR9XG5cdGlmIChjb250ZXh0KSB7XG5cdFx0b0Z1bmN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAke2NvbnRleHQuZ2V0UGF0aCgpfS8ke3NGdW5jdGlvbk5hbWV9KC4uLilgKTtcblx0XHRzR3JvdXBJZCA9IFwiZnVuY3Rpb25Hcm91cFwiO1xuXHR9IGVsc2Uge1xuXHRcdG9GdW5jdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0Z1bmN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHNHcm91cElkID0gXCJmdW5jdGlvbkltcG9ydFwiO1xuXHR9XG5cdGNvbnN0IG9GdW5jdGlvblByb21pc2UgPSBvRnVuY3Rpb24uZXhlY3V0ZShzR3JvdXBJZCk7XG5cdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdHJldHVybiBvRnVuY3Rpb25Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBvRnVuY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdH0pO1xufVxuZnVuY3Rpb24gY2FsbEFjdGlvbihcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b01vZGVsOiBhbnksXG5cdG9BY3Rpb246IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pIHtcblx0aWYgKCFzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0aXM0MTJFeGVjdXRlZDogZmFsc2UsXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBbXSxcblx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IFtdXG5cdFx0fTtcblx0fVxuXHRtUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSB7XG5cdFx0bGV0IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBhbnkgPSB7fTtcblx0XHRsZXQgZm5EaWFsb2c7XG5cdFx0bGV0IG9BY3Rpb25Qcm9taXNlO1xuXHRcdC8vbGV0IGZhaWxlZEFjdGlvblByb21pc2U6IGFueTtcblx0XHRjb25zdCBzQWN0aW9uTGFiZWwgPSBtUGFyYW1ldGVycy5sYWJlbDtcblx0XHRjb25zdCBiU2tpcFBhcmFtZXRlckRpYWxvZyA9IG1QYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2c7XG5cdFx0Y29uc3QgYUNvbnRleHRzID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzO1xuXHRcdGNvbnN0IGJJc0NyZWF0ZUFjdGlvbiA9IG1QYXJhbWV0ZXJzLmJJc0NyZWF0ZUFjdGlvbjtcblx0XHRjb25zdCBiSXNDcml0aWNhbEFjdGlvbiA9IG1QYXJhbWV0ZXJzLmlzQ3JpdGljYWxBY3Rpb247XG5cdFx0bGV0IG9NZXRhTW9kZWw7XG5cdFx0bGV0IHNNZXRhUGF0aDtcblx0XHRsZXQgc01lc3NhZ2VzUGF0aDogYW55O1xuXHRcdGxldCBpTWVzc2FnZVNpZGVFZmZlY3Q7XG5cdFx0bGV0IGJJc1NhbWVFbnRpdHk7XG5cdFx0bGV0IG9SZXR1cm5UeXBlO1xuXHRcdGxldCBiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzO1xuXHRcdGNvbnN0IGFjdGlvbkRlZmluaXRpb24gPSBvQWN0aW9uLmdldE9iamVjdCgpO1xuXHRcdGlmICghb0FjdGlvbiB8fCAhb0FjdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEFjdGlvbiAke3NBY3Rpb25OYW1lfSBub3QgZm91bmRgKSk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBhY3Rpb25cblx0XHRjb25zdCBhQWN0aW9uUGFyYW1ldGVycyA9IGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbik7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgYWN0aW9uIGhhcyBwYXJhbWV0ZXJzIGFuZCB3b3VsZCBuZWVkIGEgcGFyYW1ldGVyIGRpYWxvZ1xuXHRcdC8vIFRoZSBwYXJhbWV0ZXIgUmVzdWx0SXNBY3RpdmVFbnRpdHkgaXMgYWx3YXlzIGhpZGRlbiBpbiB0aGUgZGlhbG9nISBIZW5jZSBpZlxuXHRcdC8vIHRoaXMgaXMgdGhlIG9ubHkgcGFyYW1ldGVyLCB0aGlzIGlzIHRyZWF0ZWQgYXMgbm8gcGFyYW1ldGVyIGhlcmUgYmVjYXVzZSB0aGVcblx0XHQvLyBkaWFsb2cgd291bGQgYmUgZW1wdHkhXG5cdFx0Ly8gRklYTUU6IFNob3VsZCBvbmx5IGlnbm9yZSB0aGlzIGlmIHRoaXMgaXMgYSAnY3JlYXRlJyBhY3Rpb24sIG90aGVyd2lzZSBpdCBpcyBqdXN0IHNvbWUgbm9ybWFsIHBhcmFtZXRlciB0aGF0IGhhcHBlbnMgdG8gaGF2ZSB0aGlzIG5hbWVcblx0XHRjb25zdCBiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2cgPVxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiAhKGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSAmJiBhQWN0aW9uUGFyYW1ldGVyc1swXS4kTmFtZSA9PT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKTtcblxuXHRcdC8vIFByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzIGZyb20gaW52b2tlQWN0aW9uIGNhbGxcblx0XHRjb25zdCBhUGFyYW1ldGVyVmFsdWVzID0gbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHN0YXJ0dXAgcGFyYW1ldGVycyBpZiBwcm92aWRlZFxuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblxuXHRcdC8vIEluIGNhc2UgYW4gYWN0aW9uIHBhcmFtZXRlciBpcyBuZWVkZWQsIGFuZCB3ZSBzaGFsbCBza2lwIHRoZSBkaWFsb2csIGNoZWNrIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCBwYXJhbWV0ZXJzXG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyAmJiBiU2tpcFBhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0YlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyA9IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMoXG5cdFx0XHRcdGJJc0NyZWF0ZUFjdGlvbixcblx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdGFQYXJhbWV0ZXJWYWx1ZXMsXG5cdFx0XHRcdG9TdGFydHVwUGFyYW1ldGVyc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBEZXBlbmRpbmcgb24gdGhlIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBkYXRhLCBlaXRoZXIgc2V0IGEgZGlhbG9nIG9yIGxlYXZlIGl0IGVtcHR5IHdoaWNoXG5cdFx0Ly8gd2lsbCBsZWFkIHRvIGRpcmVjdCBleGVjdXRpb24gb2YgdGhlIGFjdGlvbiB3aXRob3V0IGEgZGlhbG9nXG5cdFx0Zm5EaWFsb2cgPSBudWxsO1xuXHRcdGlmIChiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2cpIHtcblx0XHRcdGlmICghKGJTa2lwUGFyYW1ldGVyRGlhbG9nICYmIGJWYWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMpKSB7XG5cdFx0XHRcdGZuRGlhbG9nID0gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGJJc0NyaXRpY2FsQWN0aW9uKSB7XG5cdFx0XHRmbkRpYWxvZyA9IGNvbmZpcm1Dcml0aWNhbEFjdGlvbjtcblx0XHR9XG5cblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdGZuT25TdWJtaXR0ZWQ6IG1QYXJhbWV0ZXJzLm9uU3VibWl0dGVkLFxuXHRcdFx0Zm5PblJlc3BvbnNlOiBtUGFyYW1ldGVycy5vblJlc3BvbnNlLFxuXHRcdFx0YWN0aW9uTmFtZTogc0FjdGlvbk5hbWUsXG5cdFx0XHRtb2RlbDogb01vZGVsLFxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnM6IGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0YkdldEJvdW5kQ29udGV4dDogbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dCxcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0bGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLFxuXHRcdFx0c2VsZWN0ZWRJdGVtczogbVBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtc1xuXHRcdH07XG5cdFx0aWYgKG9BY3Rpb24uZ2V0T2JqZWN0KFwiJElzQm91bmRcIikpIHtcblx0XHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChhQ29udGV4dHNbMF0uZ2V0UGF0aCgpKTtcblx0XHRcdFx0c01lc3NhZ2VzUGF0aCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlcy8kUGF0aGApO1xuXG5cdFx0XHRcdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0XHRcdFx0aU1lc3NhZ2VTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLmZpbmRJbmRleChmdW5jdGlvbiAoZXhwOiBhbnkpIHtcblx0XHRcdFx0XHRcdC8vICcqJyBlZmZlY3RpdmVseSBpbmNsdWRlcyB0aGUgbWVzc2FnZXMgcGF0aCBpZiB0aGVyZSBpcyBvbmVcblx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIChleHAgPT09IHNNZXNzYWdlc1BhdGggfHwgZXhwID09PSBcIipcIik7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBBZGQgU0FQX01lc3NhZ2VzIGJ5IGRlZmF1bHQgaWYgbm90IGFubm90YXRlZCBieSBzaWRlIGVmZmVjdHMsIGFjdGlvbiBkb2VzIG5vdCByZXR1cm4gYSBjb2xsZWN0aW9uIGFuZFxuXHRcdFx0XHRcdC8vIHRoZSByZXR1cm4gdHlwZSBpcyB0aGUgc2FtZSBhcyB0aGUgYm91bmQgdHlwZVxuXHRcdFx0XHRcdG9SZXR1cm5UeXBlID0gb0FjdGlvbi5nZXRPYmplY3QoXCIkUmV0dXJuVHlwZVwiKTtcblx0XHRcdFx0XHRiSXNTYW1lRW50aXR5ID1cblx0XHRcdFx0XHRcdG9SZXR1cm5UeXBlICYmICFvUmV0dXJuVHlwZS4kaXNDb2xsZWN0aW9uICYmIG9BY3Rpb24uZ2V0TW9kZWwoKS5nZXRPYmplY3Qoc01ldGFQYXRoKS4kVHlwZSA9PT0gb1JldHVyblR5cGUuJFR5cGU7XG5cblx0XHRcdFx0XHRpZiAoaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEgfHwgYklzU2FtZUVudGl0eSkge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIG1lc3NhZ2UgcGF0aCBpcyBhbm5vdGF0ZWQgYXMgc2lkZSBlZmZlY3QuIEFzIHRoZXJlJ3Mgbm8gYmluZGluZyBmb3IgaXQgYW5kIHRoZSBtb2RlbCBkb2VzIGN1cnJlbnRseSBub3QgYWxsb3dcblx0XHRcdFx0XHRcdC8vIHRvIGFkZCBpdCBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUgd2UgaGF2ZSB0byB0YWtlIGNhcmUgaXQncyBwYXJ0IG9mIHRoZSAkc2VsZWN0IG9mIHRoZSBQT1NULCB0aGVyZWZvcmUgbW92aW5nIGl0LlxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24uZ2V0T2JqZWN0KGAkUmV0dXJuVHlwZS8kVHlwZS8ke3NNZXNzYWdlc1BhdGh9YCkgJiZcblx0XHRcdFx0XHRcdFx0KCFtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCB8fFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0LnNwbGl0KFwiLFwiKS5pbmRleE9mKHNNZXNzYWdlc1BhdGgpID09PSAtMSlcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYklzU2FtZUVudGl0eSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFdlIHJlcXVlc3QgbWVzc2FnZXMgZnJvbSB0aGUgcmV0dXJuIGNvbnRleHQgYXMgaXQgbWlnaHQgbm90IGV4aXN0IGFzIGEgcGFydCBvZiB0aGUgYm91bmQgYWN0aW9uJ3Mgc291cmNlIGNvbnRleHQncyAkc2VsZWN0LlxuXHRcdFx0XHRcdFx0XHRcdC8vIEV4YW1wbGU6IENyZWF0ZSBvbiBhIExpc3QuIE1lc3NhZ2VzIHBhdGggbWlnaHQgbm90IGJlIHBhcnQgb2YgdGhlIGxpc3QuXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0PyBgJHttUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHtzTWVzc2FnZXNQYXRofWBcblx0XHRcdFx0XHRcdFx0XHRcdDogc01lc3NhZ2VzUGF0aDtcblx0XHRcdFx0XHRcdFx0XHQvLyBXZSBuZWVkIHRoZSByZXR1cm4gY29udGV4dCB0byBiZSBmZXRjaGVkIHdpdGggYWxsIHRoZSBleGlzdGluZyBwcm9wZXJ0aWVzIG9mIHRoZSBib3VuZCBhY3Rpb24ncyBzb3VyY2UgY29udGV4dC5cblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJCRpbmhlcml0RXhwYW5kU2VsZWN0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMubGVuZ3RoID09PSAwICYmIGlNZXNzYWdlU2lkZUVmZmVjdCA+IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbm8gdHJpZ2dlciBhY3Rpb24gdGhlcmVmb3JlIG5vIG5lZWQgdG8gcmVxdWVzdCBtZXNzYWdlcyBhZ2FpblxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5zcGxpY2UoaU1lc3NhZ2VTaWRlRWZmZWN0LCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgPSBhQ29udGV4dHM7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCA9IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYkdyb3VwZWQgPSBtUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXQ7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gbVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb24gPSBiSXNDcmVhdGVBY3Rpb247XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iT2JqZWN0UGFnZSA9IG1QYXJhbWV0ZXJzLmJPYmplY3RQYWdlO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuZGlzYWJsZVN0cmljdEhhbmRsaW5nID0gbVBhcmFtZXRlcnMuZGlzYWJsZVN0cmljdEhhbmRsaW5nO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuZ3JvdXBJZCA9IG1QYXJhbWV0ZXJzLmdyb3VwSWQ7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuY29udHJvbElkKSB7XG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLmJ5SWQobVBhcmFtZXRlcnMuY29udHJvbElkKTtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udHJvbCA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbDtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChiSXNDcmVhdGVBY3Rpb24pIHtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJJc0NyZWF0ZUFjdGlvbiA9IGJJc0NyZWF0ZUFjdGlvbjtcblx0XHR9XG5cdFx0Ly9jaGVjayBmb3Igc2tpcHBpbmcgc3RhdGljIGFjdGlvbnNcblx0XHRjb25zdCBpc1N0YXRpYyA9IChhY3Rpb25EZWZpbml0aW9uLiRQYXJhbWV0ZXIgfHwgW10pLnNvbWUoKGFQYXJhbWV0ZXI6IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0KChhY3Rpb25EZWZpbml0aW9uLiRFbnRpdHlTZXRQYXRoICYmIGFjdGlvbkRlZmluaXRpb24uJEVudGl0eVNldFBhdGggPT09IGFQYXJhbWV0ZXIuJE5hbWUpIHx8IGFjdGlvbkRlZmluaXRpb24uJElzQm91bmQpICYmXG5cdFx0XHRcdGFQYXJhbWV0ZXIuJGlzQ29sbGVjdGlvblxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc1N0YXRpYyA9IGlzU3RhdGljO1xuXHRcdGlmIChmbkRpYWxvZykge1xuXHRcdFx0b0FjdGlvblByb21pc2UgPSBmbkRpYWxvZyhcblx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdHNBY3Rpb25MYWJlbCxcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhUGFyYW1ldGVyVmFsdWVzLFxuXHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gb0FjdGlvblByb21pc2Vcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9PcGVyYXRpb25SZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0XHRcdHJlc29sdmUob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob09wZXJhdGlvblJlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0cmVqZWN0KG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVGFrZSBvdmVyIGFsbCBwcm92aWRlZCBwYXJhbWV0ZXIgdmFsdWVzIGFuZCBjYWxsIHRoZSBhY3Rpb24uXG5cdFx0XHQvLyBUaGlzIHNoYWxsIG9ubHkgaGFwcGVuIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCB0aGUgcGFyYW1ldGVycywgb3RoZXJ3aXNlIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHNoYWxsIGJlIHNob3duIHdoaWNoIGlzIGVuc3VyZWQgZWFybGllclxuXHRcdFx0aWYgKGFQYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpIGluIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSBhUGFyYW1ldGVyVmFsdWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0KGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZVxuXHRcdFx0XHRcdCk/LnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9XG5cdFx0XHRcdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnNbbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVdPy5bMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGxldCBvT3BlcmF0aW9uUmVzdWx0OiBhbnk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvT3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Y29uc3QgbWVzc2FnZXMgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnMsIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLCBhY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRyZWplY3Qob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoICYmXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuYUNvbnRleHRzLmxlbmd0aCA+IDFcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IHN0cmljdEhhbmRsaW5nRmFpbHMgPSBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscztcblx0XHRcdFx0XHRcdGNvbnN0IGFGYWlsZWRDb250ZXh0cyA9IFtdIGFzIGFueTtcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nRmFpbHMuZm9yRWFjaChmdW5jdGlvbiAoZmFpbDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGFGYWlsZWRDb250ZXh0cy5wdXNoKGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgPSBhRmFpbGVkQ29udGV4dHM7XG5cdFx0XHRcdFx0XHRjb25zdCBvRmFpbGVkT3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscyA9IFtdO1xuXHRcdFx0XHRcdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmFkZE1lc3NhZ2VzKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzKTtcblx0XHRcdFx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRyZWplY3Qob0ZhaWxlZE9wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCBzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IGZhbHNlO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB8fFxuXHRcdFx0XHRcdGlzQ2hhbmdlU2V0QW5kSGFzRXJyb3JzT3JXYXJuaW5ncyhtUGFyYW1ldGVycy5iR3JvdXBlZClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1QYXJhbWV0ZXJzPy5tZXNzYWdlSGFuZGxlcj8uc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRcdGNvbnRyb2w6IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzPy5jb250cm9sLFxuXHRcdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0czogbVBhcmFtZXRlcnMuYUNvbnRleHRzLFxuXHRcdFx0XHRcdHNBY3Rpb25OYW1lOiBzQWN0aW9uTGFiZWxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0XHRcdFx0aXM0MTJFeGVjdXRlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBbXSxcblx0XHRcdFx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdFx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IFtdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5mdW5jdGlvbiBjb25maXJtQ3JpdGljYWxBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBhbnksXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0c0FjdGlvbkxhYmVsOiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBhbnksXG5cdGFQYXJhbWV0ZXJWYWx1ZXM6IGFueSxcblx0b0FjdGlvbkNvbnRleHQ6IGFueSxcblx0b1BhcmVudENvbnRyb2w6IGFueSxcblx0ZW50aXR5U2V0TmFtZTogYW55LFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSBzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogbnVsbDtcblx0XHRib3VuZEFjdGlvbk5hbWUgPVxuXHRcdFx0Ym91bmRBY3Rpb25OYW1lLmluZGV4T2YoXCIuXCIpID49IDAgPyBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpW2JvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV0gOiBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgZW50aXR5U2V0TmFtZSA/IGAke2VudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9QYXJlbnRDb250cm9sKTtcblx0XHRjb25zdCBzQ29uZmlybWF0aW9uVGV4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fQ09ORklSTV9NRVNTQUdFXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXG5cdFx0TWVzc2FnZUJveC5jb25maXJtKHNDb25maXJtYXRpb25UZXh0LCB7XG5cdFx0XHRvbkNsb3NlOiBhc3luYyBmdW5jdGlvbiAoc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdGlmIChzQWN0aW9uID09PSBBY3Rpb24uT0spIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJlc29sdmUob09wZXJhdGlvbik7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKCk7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUFQTUFjdGlvbihcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRvUGFyZW50Q29udHJvbDogYW55LFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdGFDb250ZXh0czogYW55LFxuXHRvRGlhbG9nOiBhbnksXG5cdGFmdGVyNDEyOiBib29sZWFuLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pIHtcblx0Y29uc3QgYVJlc3VsdCA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzLCBvUGFyZW50Q29udHJvbCwgbWVzc2FnZUhhbmRsZXIsIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKTtcblx0Ly8gSWYgc29tZSBlbnRyaWVzIHdlcmUgc3VjY2Vzc2Z1bCwgYW5kIG90aGVycyBoYXZlIGZhaWxlZCwgdGhlIG92ZXJhbGwgcHJvY2VzcyBpcyBzdGlsbCBzdWNjZXNzZnVsLiBIb3dldmVyLCB0aGlzIHdhcyB0cmVhdGVkIGFzIHJlamVjdGlvblxuXHQvLyBiZWZvcmUsIGFuZCB0aGlzIGN1cnJlbnRseSBpcyBzdGlsbCBrZXB0LCBhcyBsb25nIGFzIGRpYWxvZyBoYW5kbGluZyBpcyBtaXhlZCB3aXRoIGJhY2tlbmQgcHJvY2VzcyBoYW5kbGluZy5cblx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gb25seSByZWplY3QgaW4gY2FzZSBvZiBvdmVyYWxsIHByb2Nlc3MgZXJyb3IuXG5cdC8vIEZvciB0aGUgdGltZSBiZWluZzogbWFwIHRvIG9sZCBsb2dpYyB0byByZWplY3QgaWYgYXQgbGVhc3Qgb25lIGVudHJ5IGhhcyBmYWlsZWRcblx0Ly8gVGhpcyBjaGVjayBpcyBvbmx5IGRvbmUgZm9yIGJvdW5kIGFjdGlvbnMgPT4gYUNvbnRleHRzIG5vdCBlbXB0eVxuXHRpZiAobVBhcmFtZXRlcnMuYUNvbnRleHRzPy5sZW5ndGgpIHtcblx0XHRpZiAoYVJlc3VsdD8uc29tZSgob1NpbmdsZVJlc3VsdDogYW55KSA9PiBvU2luZ2xlUmVzdWx0LnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSkge1xuXHRcdFx0dGhyb3cgYVJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBtZXNzYWdlcyA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aCkge1xuXHRcdGlmICghYWZ0ZXI0MTIpIHtcblx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmFkZE1lc3NhZ2VzKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzKTtcblx0XHRcdGxldCBzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IGZhbHNlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRcdGlzQ2hhbmdlU2V0QW5kSGFzRXJyb3JzT3JXYXJuaW5ncyhtUGFyYW1ldGVycy5iR3JvdXBlZClcblx0XHRcdCkge1xuXHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIEJPVU5EIFRSQU5TSVRJT04gQVMgUEFSVCBPRiBTQVBfTUVTU0FHRVxuXHRcdFx0XHRvRGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRjb250cm9sOiBtUGFyYW1ldGVycy5jb250cm9sLFxuXHRcdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyxcblx0XHRcdFx0XHRcdHNBY3Rpb25OYW1lOiBtUGFyYW1ldGVycy5sYWJlbFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0Ly8gQk9VTkQgVFJBTlNJVElPTiBBUyBQQVJUIE9GIFNBUF9NRVNTQUdFXG5cdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0aWYgKFxuXHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB8fFxuXHRcdFx0aXNDaGFuZ2VTZXRBbmRIYXNFcnJvcnNPcldhcm5pbmdzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKVxuXHRcdCkge1xuXHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSB0cnVlO1xuXHRcdH1cblx0XHRvRGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0bWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG1QYXJhbWV0ZXJzPy5vRGlhbG9nLmlzT3BlbigpLFxuXHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdGFNZXNzYWdlcyxcblx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLFxuXHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250cm9sOiBtUGFyYW1ldGVycy5jb250cm9sLFxuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0czogbVBhcmFtZXRlcnMuYUNvbnRleHRzLFxuXHRcdFx0XHRzQWN0aW9uTmFtZTogbVBhcmFtZXRlcnMubGFiZWxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIGFSZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVyczogYW55LCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVyczogYW55LCBhY3Rpb25EZWZpbml0aW9uOiBhbnkpIHtcblx0aWYgKFxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzLmxlbmd0aCAmJlxuXHRcdGFjdGlvbkRlZmluaXRpb24uJElzQm91bmRcblx0KSB7XG5cdFx0bGV0IHNlbGVjdGVkQ29udGV4dHMgPSBbXTtcblx0XHQvL2NoZWNrIGZvciBza2lwcGluZyBzdGF0aWMgYWN0aW9uc1xuXHRcdGNvbnN0IGlzU3RhdGljID0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWM7XG5cdFx0aWYgKCFpc1N0YXRpYykge1xuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMgfHwgW107XG5cdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRKU09OLnBhcnNlKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMsXG5cdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbDtcblx0XHRcdGlmIChvQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdHNlbGVjdGVkQ29udGV4dHMgPSBvQ29udHJvbC5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRKU09OLnBhcnNlKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly91cGRhdGUgZGVsZXRlIGJ1dHRvblxuXHRcdERlbGV0ZUhlbHBlci51cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCwgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUNvbnRleHRzOiBhbnksXG5cdG9EaWFsb2c6IGFueSxcblx0bWVzc2FnZXM6IGFueSxcblx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IHsgc2hvd01lc3NhZ2VCb3g6IGJvb2xlYW47IHNob3dNZXNzYWdlRGlhbG9nOiBib29sZWFuIH0sXG5cdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0OiBib29sZWFuXG4pOiB7XG5cdGZuR2V0TWVzc2FnZVN1YnRpdGxlOiBGdW5jdGlvbiB8IHVuZGVmaW5lZDtcblx0c2hvd01lc3NhZ2VCb3g6IGJvb2xlYW47XG5cdHNob3dNZXNzYWdlRGlhbG9nOiBib29sZWFuO1xuXHRmaWx0ZXJlZE1lc3NhZ2VzOiBhbnlbXTtcblx0c2hvd0NoYW5nZVNldEVycm9yRGlhbG9nOiBib29sZWFuO1xufSB7XG5cdGxldCBzaG93TWVzc2FnZUJveCA9IHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLnNob3dNZXNzYWdlQm94LFxuXHRcdHNob3dNZXNzYWdlRGlhbG9nID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4uc2hvd01lc3NhZ2VEaWFsb2c7XG5cdGNvbnN0IG9Db250cm9sID0gbVBhcmFtZXRlcnMuY29udHJvbDtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0Y29uc3QgdW5ib3VuZE1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKGZ1bmN0aW9uIChtZXNzYWdlOiBhbnkpIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXSA9PT0gXCJcIjtcblx0fSk7XG5cdGNvbnN0IEFQRG1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKGZ1bmN0aW9uIChtZXNzYWdlOiBhbnkpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzICYmXG5cdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKT8uWzBdLmluZGV4T2YobVBhcmFtZXRlcnMuYWN0aW9uTmFtZSkgIT09IC0xICYmXG5cdFx0XHRtUGFyYW1ldGVycz8uYUFjdGlvblBhcmFtZXRlcnM/LnNvbWUoZnVuY3Rpb24gKGFjdGlvblBhcmFtOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpPy5bMF0uaW5kZXhPZihhY3Rpb25QYXJhbS4kTmFtZSkgIT09IC0xO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9KTtcblx0QVBEbWVzc2FnZXM/LmZvckVhY2goZnVuY3Rpb24gKEFQRE1lc3NhZ2U6IGFueSkge1xuXHRcdEFQRE1lc3NhZ2UuaXNBUERUYXJnZXQgPSB0cnVlO1xuXHR9KTtcblxuXHRjb25zdCBlcnJvclRhcmdldHNJbkFQRCA9IEFQRG1lc3NhZ2VzLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcblx0bGV0IGhhc0NoYW5nZVNldE1vZGlmaWVkTWVzc2FnZSA9IGZhbHNlO1xuXHRpZiAoc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgJiYgIWVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0aGFzQ2hhbmdlU2V0TW9kaWZpZWRNZXNzYWdlID0gdHJ1ZTtcblx0XHRsZXQgc01lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfRVJST1JfTUVTU0FHRVNfVEVYVFwiKTtcblx0XHRsZXQgc0Rlc2NyaXB0aW9uVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9FUlJPUl9NRVNTQUdFU19ERVRBSUxfVEVYVFwiKTtcblx0XHRjb25zdCBtZXNzYWdlTW9kZWwgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCk7XG5cdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gbWVzc2FnZU1vZGVsLmdldERhdGEoKTtcblx0XHRjb25zdCBhQm91bmRNZXNzYWdlcyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlKTtcblx0XHRsZXQgZ2VuZXJpY01lc3NhZ2U7XG5cdFx0Y29uc3QgaXNFZGl0YWJsZSA9IG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblxuXHRcdGNvbnN0IG5vbkVycm9yTWVzc2FnZUV4aXN0c0luRGlhbG9nID0gbWVzc2FnZXMuZmluZEluZGV4KGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgbm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5Nb2RlbCA9IG1lc3NhZ2VzSW5Nb2RlbC5maW5kSW5kZXgoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiIHx8IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIldhcm5pbmdcIjtcblx0XHR9KTtcblxuXHRcdGlmIChub25FcnJvck1lc3NhZ2VFeGlzdHNJbkRpYWxvZyAhPT0gMSAmJiBub25FcnJvck1lc3NhZ2VFeGlzdHNJbk1vZGVsICE9PSAtMSAmJiBtUGFyYW1ldGVycz8uYUNvbnRleHRzPy5sZW5ndGggPiAxKSB7XG5cdFx0XHRpZiAobWVzc2FnZXNJbk1vZGVsLmxlbmd0aCA9PT0gMSAmJiBhQm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0aWYgKGlzRWRpdGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0bWVzc2FnZXNJbk1vZGVsWzBdLnNldE1lc3NhZ2UoXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfU0lOR0xFX0VSUk9SX01FU1NBR0VfVEVYVFwiKSArXG5cdFx0XHRcdFx0XHRcdFwiXFxuXFxuXCIgK1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlc0luTW9kZWxbMF0uZ2V0TWVzc2FnZSgpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzTWVzc2FnZSA9IGlzRWRpdGFibGVcblx0XHRcdFx0XHRcdD8gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX1NJTkdMRV9FUlJPUl9NRVNTQUdFX1RFWFRfRURJVFwiKVxuXHRcdFx0XHRcdFx0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxfU0lOR0xFX0VSUk9SX01FU1NBR0VfVEVYVFwiKTtcblx0XHRcdFx0XHRzRGVzY3JpcHRpb25UZXh0ID0gXCJcIjtcblx0XHRcdFx0XHRnZW5lcmljTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6IHNNZXNzYWdlLFxuXHRcdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHNEZXNjcmlwdGlvblRleHQsXG5cdFx0XHRcdFx0XHRjb2RlOiBcIkZFX0NVU1RPTV9NRVNTQUdFX0NIQU5HRVNFVF9BTExfRkFJTEVEXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRtZXNzYWdlcy51bnNoaWZ0KGdlbmVyaWNNZXNzYWdlKTtcblx0XHRcdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IHRydWU7XG5cdFx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Z2VuZXJpY01lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogc01lc3NhZ2UsXG5cdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHNEZXNjcmlwdGlvblRleHQsXG5cdFx0XHRcdFx0Y29kZTogXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRtZXNzYWdlcy51bnNoaWZ0KGdlbmVyaWNNZXNzYWdlKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gdHJ1ZTtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9EaWFsb2cgJiYgb0RpYWxvZy5pc09wZW4oKSAmJiBhQ29udGV4dHMubGVuZ3RoICE9PSAwICYmICFtUGFyYW1ldGVycy5pc1N0YXRpYykge1xuXHRcdGlmICghbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdC8vaXNvbGF0ZWRcblx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMSB8fCAhZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdFx0Ly8gZG9lcyBub3QgbWF0dGVyIGlmIGVycm9yIGlzIGluIEFQRCBvciBub3QsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb250ZXh0cyBzZWxlY3RlZCBvciBpZiB0aGUgZXJyb3IgaXMgbm90IHRoZSBBUEQsIHdlIGNsb3NlIGl0LlxuXHRcdFx0XHQvLyBUT0RPOiBEaWxhb2cgaGFuZGxpbmcgc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIG1lc3NhZ2UgaGFuZGxpbmcuIFJlZmFjdG9yIGFjY29yZGluZ2x5IC0gZGlhbG9nIHNob3VsZCBub3QgYmUgbmVlZGVkIGluc2lkZSB0aGlzIG1ldGhvZCAtIG5laXRoZXJcblx0XHRcdFx0Ly8gdG8gYXNrIHdoZXRoZXIgaXQncyBvcGVuLCBub3IgdG8gY2xvc2UvZGVzdHJveSBpdCFcblx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCFlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0Ly9jaGFuZ2VzZXRcblx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXHRsZXQgZmlsdGVyZWRNZXNzYWdlczogYW55W10gPSBbXTtcblx0Y29uc3QgYklzQVBET3BlbiA9IG9EaWFsb2cgJiYgb0RpYWxvZy5pc09wZW4oKTtcblx0aWYgKCFoYXNDaGFuZ2VTZXRNb2RpZmllZE1lc3NhZ2UpIHtcblx0XHRpZiAoXG5cdFx0XHRtZXNzYWdlcy5sZW5ndGggPT09IDEgJiZcblx0XHRcdG1lc3NhZ2VzWzBdLmdldFRhcmdldHMgJiZcblx0XHRcdG1lc3NhZ2VzWzBdLmdldFRhcmdldHMoKT8uWzBdICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdG1lc3NhZ2VzWzBdLmdldFRhcmdldHMoKT8uWzBdICE9PSBcIlwiXG5cdFx0KSB7XG5cdFx0XHRpZiAoKG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gZmFsc2UpIHx8ICFvQ29udHJvbCkge1xuXHRcdFx0XHQvLyBPUCBlZGl0IG9yIExSXG5cdFx0XHRcdHNob3dNZXNzYWdlQm94ID0gIWVycm9yVGFyZ2V0c0luQVBEO1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSBmYWxzZTtcblx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG9Db250cm9sKSB7XG5cdFx0XHRpZiAob0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSBmYWxzZSkge1xuXHRcdFx0XHRpZiAoYklzQVBET3BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmICghYklzQVBET3BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gdHJ1ZTtcblx0XHRcdFx0XHRmaWx0ZXJlZE1lc3NhZ2VzID0gdW5ib3VuZE1lc3NhZ2VzLmNvbmNhdChBUERtZXNzYWdlcyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWJJc0FQRE9wZW4gJiYgdW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdC8vIGVycm9yIHRhcmdldHMgaW4gQVBEID0+IHRoZXJlIGlzIGF0bGVhc3Qgb25lIGJvdW5kIG1lc3NhZ2UuIElmIHRoZXJlIGFyZSB1bmJvdW5kIG1lc3NhZ2VzLCBkaWFsb2cgbXVzdCBiZSBzaG93bi5cblx0XHRcdFx0XHQvLyBmb3IgZHJhZnQgZW50aXR5LCB3ZSBhbHJlYWR5IGNsb3NlZCB0aGUgQVBEXG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c2hvd01lc3NhZ2VCb3g6IHNob3dNZXNzYWdlQm94LFxuXHRcdHNob3dNZXNzYWdlRGlhbG9nOiBzaG93TWVzc2FnZURpYWxvZyxcblx0XHRmaWx0ZXJlZE1lc3NhZ2VzOiBmaWx0ZXJlZE1lc3NhZ2VzLmxlbmd0aCA/IGZpbHRlcmVkTWVzc2FnZXMgOiBtZXNzYWdlcyxcblx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZTpcblx0XHRcdG9Db250cm9sICYmIG9Db250cm9sLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiYgbWVzc2FnZUhhbmRsaW5nLnNldE1lc3NhZ2VTdWJ0aXRsZS5iaW5kKHt9LCBvQ29udHJvbCwgYUNvbnRleHRzKSxcblx0XHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c6IG1QYXJhbWV0ZXJzLmJHcm91cGVkXG5cdH07XG59XG5cbi8qXG4gKiBDdXJyZW50bHksIHRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciBzaG93aW5nIHRoZSBkaWFsb2cgYW5kIGV4ZWN1dGluZyB0aGUgYWN0aW9uLiBUaGUgcHJvbWlzZSByZXR1cm5lZCBpcyBwZW5kaW5nIHdoaWxlIHdhaXRpbmcgZm9yIHVzZXIgaW5wdXQsIGFzIHdlbGwgYXMgd2hpbGUgdGhlXG4gKiBiYWNrLWVuZCByZXF1ZXN0IGlzIHJ1bm5pbmcuIFRoZSBwcm9taXNlIGlzIHJlamVjdGVkIHdoZW4gdGhlIHVzZXIgY2FuY2VscyB0aGUgZGlhbG9nIGFuZCBhbHNvIHdoZW4gdGhlIGJhY2stZW5kIHJlcXVlc3QgZmFpbHMuXG4gKiBUT0RPOiBSZWZhY3RvcmluZzogU2VwYXJhdGUgZGlhbG9nIGhhbmRsaW5nIGZyb20gYmFja2VuZCBwcm9jZXNzaW5nLiBEaWFsb2cgaGFuZGxpbmcgc2hvdWxkIHJldHVybiBhIFByb21pc2UgcmVzb2x2aW5nIHRvIHBhcmFtZXRlcnMgdG8gYmUgcHJvdmlkZWQgdG8gYmFja2VuZC4gSWYgZGlhbG9nIGlzXG4gKiBjYW5jZWxsZWQsIHRoYXQgcHJvbWlzZSBjYW4gYmUgcmVqZWN0ZWQuIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgYmFja2VuZCBwcm9jZXNzaW5nIG5lZWQgdG8gZGVhbCB3aXRoIG11bHRpcGxlIGNvbnRleHRzIC0gaS5lLiBpdCBzaG91bGQgZWl0aGVyIHJldHVybiBhbiBhcnJheSBvZiBQcm9taXNlcyBvclxuICogYSBQcm9taXNlIHJlc29sdmluZyB0byBhbiBhcnJheS4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGF0IFByb21pc2Ugc2hvdWxkIGJlIHJlc29sdmVkIGFsc28gd2hlbiBzb21lIG9yIGV2ZW4gYWxsIGNvbnRleHRzIGZhaWxlZCBpbiBiYWNrZW5kIC0gdGhlIG92ZXJhbGwgcHJvY2VzcyBzdGlsbCB3YXNcbiAqIHN1Y2Nlc3NmdWwuXG4gKlxuICovXG5cbmZ1bmN0aW9uIHNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2coXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0c0FjdGlvbkxhYmVsOiBzdHJpbmcsXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSxcblx0YVBhcmFtZXRlclZhbHVlczogYW55LFxuXHRvQWN0aW9uQ29udGV4dDogYW55LFxuXHRvUGFyZW50Q29udHJvbDogYW55LFxuXHRlbnRpdHlTZXROYW1lOiBhbnksXG5cdG1lc3NhZ2VIYW5kbGVyOiBhbnksXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRjb25zdCBzUGF0aCA9IF9nZXRQYXRoKG9BY3Rpb25Db250ZXh0LCBzQWN0aW9uTmFtZSksXG5cdFx0bWV0YU1vZGVsID0gb0FjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKS5vTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0ZW50aXR5U2V0Q29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCksXG5cdFx0c0FjdGlvbk5hbWVQYXRoID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJElzQm91bmRcIilcblx0XHRcdD8gb0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiL0AkdWk1Lm92ZXJsb2FkLzBcIilbMF1cblx0XHRcdDogb0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiLzBcIilbMF0sXG5cdFx0YWN0aW9uTmFtZUNvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0FjdGlvbk5hbWVQYXRoKSxcblx0XHRiSXNDcmVhdGVBY3Rpb24gPSBtUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbixcblx0XHRzRnJhZ21lbnROYW1lID0gXCJzYXAvZmUvY29yZS9jb250cm9scy9BY3Rpb25QYXJhbWV0ZXJEaWFsb2dcIjtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRsZXQgYWN0aW9uUGFyYW1ldGVySW5mb3M6IEFjdGlvblBhcmFtZXRlckluZm9bXTsgLy8gdG8gYmUgZmlsbGVkIGFmdGVyIGZyYWdtZW50IChmb3IgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cpIGlzIGxvYWRlZC4gQWN0dWFsbHkgb25seSBuZWVkZWQgZHVyaW5nIGRpYWxvZyBwcm9jZXNzaW5nLCBpLmUuIGNvdWxkIGJlIG1vdmVkIGludG8gdGhlIGNvbnRyb2xsZXIgYW5kIGRpcmVjdGx5IGluaXRpYWxpemVkIHRoZXJlLCBidXQgb25seSBhZnRlciBtb3ZpbmcgYWxsIGhhbmRsZXJzIChlc3AuIHByZXNzIGhhbmRsZXIgZm9yIGFjdGlvbiBidXR0b24pIHRvIGNvbnRyb2xsZXIuXG5cblx0XHRjb25zdCBtZXNzYWdlTWFuYWdlciA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblxuXHRcdGNvbnN0IF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyID0gKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRjb25zdCBhbGxNZXNzYWdlcyA9IG1lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdGNvbnN0IGNvbnRyb2xJZCA9IGdlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLiROYW1lXSk7XG5cdFx0XHQvLyBhbHNvIHJlbW92ZSBtZXNzYWdlcyBhc3NpZ25lZCB0byBpbm5lciBjb250cm9scywgYnV0IGF2b2lkIHJlbW92aW5nIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgcGFyYW10ZXJzICh3aXRoIG5hbWUgYmVpbmcgc3Vic3RyaW5nIG9mIGFub3RoZXIgcGFyYW1ldGVyIG5hbWUpXG5cdFx0XHRjb25zdCByZWxldmFudE1lc3NhZ2VzID0gYWxsTWVzc2FnZXMuZmlsdGVyKChtc2c6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdG1zZy5nZXRDb250cm9sSWRzKCkuc29tZSgoaWQ6IHN0cmluZykgPT4gY29udHJvbElkLnNwbGl0KFwiLVwiKS5pbmNsdWRlcyhpZCkpXG5cdFx0XHQpO1xuXHRcdFx0bWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMocmVsZXZhbnRNZXNzYWdlcyk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IG9Db250cm9sbGVyID0ge1xuXHRcdFx0aGFuZGxlQ2hhbmdlOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBFdmVudDx7IHByb21pc2U6IFByb21pc2U8c3RyaW5nPiB9Pik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoXG5cdFx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgPT09IGZpZWxkXG5cdFx0XHRcdCkgYXMgQWN0aW9uUGFyYW1ldGVySW5mbztcblx0XHRcdFx0Ly8gZmllbGQgdmFsdWUgaXMgYmVpbmcgY2hhbmdlZCwgdGh1cyBleGlzdGluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoYXQgZmllbGQgYXJlIG5vdCB2YWxpZCBhbnltb3JlXG5cdFx0XHRcdF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKTtcblx0XHRcdFx0Ly8gYWRhcHQgaW5mby4gUHJvbWlzZSBpcyByZXNvbHZlZCB0byB2YWx1ZSBvciByZWplY3RlZCB3aXRoIGV4Y2VwdGlvbiBjb250YWluaW5nIG1lc3NhZ2Vcblx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsdWUgPSBhd2FpdCBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlO1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRkZWxldGUgYWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihtZXNzYWdlTWFuYWdlciwgW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvOiBhY3Rpb25QYXJhbWV0ZXJJbmZvLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAoZXJyb3IgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfSkubWVzc2FnZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IG9GcmFnbWVudCA9IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpO1xuXHRcdGNvbnN0IG9QYXJhbWV0ZXJNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0JGRpc3BsYXlNb2RlOiB7fVxuXHRcdH0pO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNyZWF0ZWRGcmFnbWVudCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0XHRvRnJhZ21lbnQsXG5cdFx0XHRcdHsgbmFtZTogc0ZyYWdtZW50TmFtZSB9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRhY3Rpb246IG9BY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0YWN0aW9uTmFtZTogYWN0aW9uTmFtZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGVudGl0eVNldENvbnRleHRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiBvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0YWN0aW9uTmFtZTogYWN0aW9uTmFtZUNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBlbnRpdHlTZXRDb250ZXh0LmdldE1vZGVsKClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0XHQvLyBUT0RPOiBtb3ZlIHRoZSBkaWFsb2cgaW50byB0aGUgZnJhZ21lbnQgYW5kIG1vdmUgdGhlIGhhbmRsZXJzIHRvIHRoZSBvQ29udHJvbGxlclxuXHRcdFx0Y29uc3QgYUNvbnRleHRzOiBhbnlbXSA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyB8fCBbXTtcblx0XHRcdGNvbnN0IGFGdW5jdGlvblBhcmFtczogYW55W10gPSBbXTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3Rcblx0XHRcdGxldCBvT3BlcmF0aW9uQmluZGluZzogYW55O1xuXHRcdFx0YXdhaXQgQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKG9BcHBDb21wb25lbnQsIGFBY3Rpb25QYXJhbWV0ZXJzLCBvUGFyYW1ldGVyTW9kZWwsIHRydWUpO1xuXHRcdFx0Y29uc3Qgb0RpYWxvZ0NvbnRlbnQgPSAoYXdhaXQgRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGRlZmluaXRpb246IGNyZWF0ZWRGcmFnbWVudCxcblx0XHRcdFx0Y29udHJvbGxlcjogb0NvbnRyb2xsZXJcblx0XHRcdH0pKSBhcyBDb250cm9sO1xuXG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvcyA9IGFBY3Rpb25QYXJhbWV0ZXJzLm1hcCgoYWN0aW9uUGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gQ29yZS5ieUlkKGdlbmVyYXRlKFtcIkFQRF9cIiwgYWN0aW9uUGFyYW1ldGVyLiROYW1lXSkpIGFzIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdFx0XHRjb25zdCBpc011bHRpVmFsdWUgPSBmaWVsZC5pc0EoXCJzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZFwiKTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRwYXJhbWV0ZXI6IGFjdGlvblBhcmFtZXRlcixcblx0XHRcdFx0XHRmaWVsZDogZmllbGQsXG5cdFx0XHRcdFx0aXNNdWx0aVZhbHVlOiBpc011bHRpVmFsdWVcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvUGFyZW50Q29udHJvbCk7XG5cdFx0XHRsZXQgYWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IHRydWUsIC8vIHRvIGJlIHNldCB0byBmYWxzZSBpbiBjYXNlIG9mIHN1Y2Nlc3NmdWwgYWN0aW9uIGV4ZWN0aW9uXG5cdFx0XHRcdHJlc3VsdDogdW5kZWZpbmVkXG5cdFx0XHR9O1xuXG5cdFx0XHRsZXQgYnV0dG9uTG9jayA9IGZhbHNlO1xuXG5cdFx0XHRjb25zdCBvRGlhbG9nID0gbmV3IERpYWxvZyhnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgc0FjdGlvbk5hbWVdKSwge1xuXHRcdFx0XHR0aXRsZTogc0FjdGlvbkxhYmVsIHx8IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19USVRMRVwiKSxcblx0XHRcdFx0Y29udGVudDogW29EaWFsb2dDb250ZW50XSxcblx0XHRcdFx0ZXNjYXBlSGFuZGxlcjogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIGVzY2FwZSBoYW5kbGVyIGlzIG1lYW50IHRvIHBvc3NpYmx5IHN1cHByZXNzIG9yIHBvc3Rwb25lIGNsb3NpbmcgdGhlIGRpYWxvZyBvbiBlc2NhcGUgKGJ5IGNhbGxpbmcgXCJyZWplY3RcIiBvbiB0aGUgcHJvdmlkZWQgb2JqZWN0LCBvciBcInJlc29sdmVcIiBvbmx5IHdoZW5cblx0XHRcdFx0XHQvLyBkb25lIHdpdGggYWxsIHRhc2tzIHRvIGhhcHBlbiBiZWZvcmUgZGlhbG9nIGNhbiBiZSBjbG9zZWQpLiBJdCdzIG5vdCBpbnRlbmRlZCB0byBleHBsaWNldGx5IGNsb3NlIHRoZSBkaWFsb2cgaGVyZSAodGhhdCBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgd2hlbiBub1xuXHRcdFx0XHRcdC8vIGVzY2FwZUhhbmRsZXIgaXMgcHJvdmlkZWQgb3IgdGhlIHJlc29sdmUtY2FsbGJhY2sgaXMgY2FsbGVkKSBvciBmb3Igb3duIHdyYXAgdXAgdGFza3MgKGxpa2UgcmVtb3ZpbmcgdmFsaWRpdGlvbiBtZXNzYWdlcyAtIHRoaXMgc2hvdWxkIGhhcHBlbiBpbiB0aGVcblx0XHRcdFx0XHQvLyBhZnRlckNsb3NlKS5cblx0XHRcdFx0XHQvLyBUT0RPOiBNb3ZlIHdyYXAgdXAgdGFza3MgdG8gYWZ0ZXJDbG9zZSwgYW5kIHJlbW92ZSB0aGlzIG1ldGhvZCBjb21wbGV0ZWx5LiBUYWtlIGNhcmUgdG8gYWxzbyBhZGFwdCBlbmQgYnV0dG9uIHByZXNzIGhhbmRsZXIgYWNjb3JkaW5nbHkuXG5cdFx0XHRcdFx0Ly8gQ3VycmVudGx5IG9ubHkgc3RpbGwgbmVlZGVkIHRvIGRpZmZlcmVudGlhdGUgY2xvc2luZyBkaWFsb2cgYWZ0ZXIgc3VjY2Vzc2Z1bCBleGVjdXRpb24gKHVzZXMgcmVzb2x2ZSkgZnJvbSB1c2VyIGNhbmNlbGxhdGlvbiAodXNpbmcgcmVqZWN0KVxuXHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHQvL1x0XHRyZWplY3QoQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKGdlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCBzQWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJPa1wiXSksIHtcblx0XHRcdFx0XHR0ZXh0OiBiSXNDcmVhdGVBY3Rpb25cblx0XHRcdFx0XHRcdD8gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfU0FQRkVfQUNUSU9OX0NSRUFURV9CVVRUT05cIilcblx0XHRcdFx0XHRcdDogX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUocmVzb3VyY2VNb2RlbCwgc0FjdGlvbkxhYmVsLCBzQWN0aW9uTmFtZSwgZW50aXR5U2V0TmFtZSksXG5cdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0cHJlc3M6IGFzeW5jIGZ1bmN0aW9uICgpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdC8vIHByZXZlbnQgbXVsdGlwbGUgcHJlc3MgZXZlbnRzLiBUaGUgQnVzeUxvY2tlciBpcyBub3QgZmFzdCBlbm91Z2guIChCQ1A6IDIzNzAxMzAyMTApXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dHRvbkxvY2sgaXMgc2V0IG9uY2UgYW5kIHJlc2V0IGluIGNhc2Ugb2Zcblx0XHRcdFx0XHRcdFx0Ly8gLSB2YWxpZGF0aW9uIGVycm9yXG5cdFx0XHRcdFx0XHRcdC8vIC0gbWVzc2FnZSBwb3B1cFxuXHRcdFx0XHRcdFx0XHQvLyAtIGRpYWxvZyBjbG9zZSAoYWZ0ZXJDbG9zZSBoYW5kbGVyKVxuXG5cdFx0XHRcdFx0XHRcdGlmIChidXR0b25Mb2NrID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJ1dHRvbkxvY2sgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHRcdGlmICghKGF3YWl0IF92YWxpZGF0ZVByb3BlcnRpZXMobWVzc2FnZU1hbmFnZXIsIGFjdGlvblBhcmFtZXRlckluZm9zLCByZXNvdXJjZU1vZGVsKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRidXR0b25Mb2NrID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci5sb2NrKG9EaWFsb2cpO1xuXG5cdFx0XHRcdFx0XHRcdGxldCBmYWlsZWRDb250ZXh0czogQ29udGV4dFtdID0gW107XG5cblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBkdWUgdG8gdXNpbmcgdGhlIHNlYXJjaCBhbmQgdmFsdWUgaGVscHMgb24gdGhlIGFjdGlvbiBkaWFsb2cgdHJhbnNpZW50IG1lc3NhZ2VzIGNvdWxkIGFwcGVhclxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIG5lZWQgYW4gVVggZGVzaWduIGZvciB0aG9zZSB0byBzaG93IHRoZW0gdG8gdGhlIHVzZXIgLSBmb3Igbm93IHJlbW92ZSB0aGVtIGJlZm9yZSBjb250aW51aW5nXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbW92ZSBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gRGlhbG9nIChTaW1wbGVGb3JtKSB0byBtUGFyYW1ldGVycy5hY3Rpb25QYXJhbWV0ZXJzIHNvIHRoYXQgdGhleSBhcmUgYXZhaWxhYmxlIGluIHRoZSBvcGVyYXRpb24gYmluZGluZ3MgZm9yIGFsbCBjb250ZXh0c1xuXHRcdFx0XHRcdFx0XHRcdGxldCB2UGFyYW1ldGVyVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlckNvbnRleHQgPSBvT3BlcmF0aW9uQmluZGluZyAmJiBvT3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnNbaV0uJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhTVZGQ29udGVudCA9IChvRGlhbG9nLmdldE1vZGVsKFwibXZmdmlld1wiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YC8ke2FBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lfWBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFLZXlWYWx1ZXMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBqIGluIGFNVkZDb250ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUtleVZhbHVlcy5wdXNoKGFNVkZDb250ZW50W2pdLktleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlclZhbHVlID0gYUtleVZhbHVlcztcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IG9QYXJhbWV0ZXJDb250ZXh0LmdldFByb3BlcnR5KGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLnZhbHVlID0gdlBhcmFtZXRlclZhbHVlOyAvLyB3cml0aW5nIHRoZSBjdXJyZW50IHZhbHVlICh1c2VyIGlucHV0ISkgaW50byB0aGUgbWV0YW1vZGVsID0+IHNob3VsZCBiZSByZWZhY3RvcmVkIHRvIHVzZSBBY3Rpb25QYXJhbWV0ZXJJbmZvcyBpbnN0ZWFkLiBVc2VkIGluIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlclZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBhdm9pZCBvdmVycmlkaW5nIGluY29taW5nIHBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpbm5lclBhcmFtZXRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0XHRcdFx0aW5uZXJQYXJhbWV0ZXJzLmxhYmVsID0gc0FjdGlvbkxhYmVsO1xuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUFQTUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5uZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IGFSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyByZXNvbHZlKGFSZXN1bHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlcyA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzLmNvbmNhdChtZXNzYWdlcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZhaWxlZENvbnRleHRzID0gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMgYXMge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQWN0aW9uOiB7IGdldENvbnRleHQ6ICgpID0+IENvbnRleHQgfTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1bXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkubWFwKChmYWlsKSA9PiBmYWlsLm9BY3Rpb24uZ2V0Q29udGV4dCgpKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbm5lclBhcmFtZXRlcnMuYUNvbnRleHRzID0gZmFpbGVkQ29udGV4dHM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYVJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVBUE1BY3Rpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5uZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiBhUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyByZXNvbHZlKGFSZXN1bHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5hZGRNZXNzYWdlcyhzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzQ2hhbmdlU2V0QW5kSGFzRXJyb3JzT3JXYXJuaW5ncyhtUGFyYW1ldGVycy5iR3JvdXBlZClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2dPcGVuOiBvRGlhbG9nLmlzT3BlbigpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlubmVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0czogdW5kZWZpbmVkLCAvLyBub3QgdXNlZCBhdCBhbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25OYW1lOiBzQWN0aW9uTGFiZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob0RpYWxvZykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdGxldCBzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNDaGFuZ2VTZXRBbmRIYXNFcnJvcnNPcldhcm5pbmdzKG1QYXJhbWV0ZXJzLmJHcm91cGVkKVxuXHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dDogZmFpbGVkQ29udGV4dHNbMF0sIC8vIG9ubHkgdXNlZCBpbiBjYXNlIG9mIGZhaWxlZCBjb250ZXh0IHRvIHJlc2V0IGluIG1lc3NhZ2VIYW5kbGluZyBzaG93VW5ib3VuZE1lc3NhZ2VzXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjazogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFdoeSBpcyB0aGlzIGltcGxlbWVudGVkIGFzIGNhbGxiYWNrPyBBcHBhcmVudGx5LCBhbGwgbmVlZGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBiZWZvcmVoYW5kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRPRE86IHJlZmFjdG9yIGFjY29yZGluZ2x5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNob3dNZXNzYWdlUGFyYW1ldGVycyA9IGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlRGlhbG9nO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiB1bmRlZmluZWQsIC8vIG5vdCB1c2VkIGF0IGFsbCFcblx0XHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25OYW1lOiBzQWN0aW9uTGFiZWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sOiBtUGFyYW1ldGVycy5jb250cm9sXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0YnV0dG9uTG9jayA9IGZhbHNlOyAvL25lZWRlZCBpZiB0aGUgYWN0aW9uIGZhaWxzIHdpdGggYW4gZXJyb3IgcG9wdXAgYW5kIHRoaXMgb25lIGlzIGNhbmNlbGQgKEpvdXJuZXk6IDQxMldhcm5pbmdIYW5kbGluZylcblx0XHRcdFx0XHRcdFx0XHQvLyBJbiBjYXNlIG9mIGJhY2tlbmQgdmFsaWRhdGlvbiBlcnJvcihzPyksIG1lc3NhZ2Ugc2hhbGwgbm90IGJlIHNob3duIGluIG1lc3NhZ2UgZGlhbG9nIGJ1dCBuZXh0IHRvIHRoZSBmaWVsZCBvbiBwYXJhbWV0ZXIgZGlhbG9nLCB3aGljaCBzaG91bGRcblx0XHRcdFx0XHRcdFx0XHQvLyBzdGF5IG9wZW4gaW4gdGhpcyBjYXNlID0+IGluIHRoaXMgY2FzZSwgd2UgbXVzdCBub3QgcmVzb2x2ZSBvciByZWplY3QgdGhlIHByb21pc2UgY29udHJvbGxpbmcgdGhlIHBhcmFtZXRlciBkaWFsb2cuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW4gYWxsIG90aGVyIGNhc2VzIChlLmcuIG90aGVyIGJhY2tlbmQgZXJyb3JzIG9yIHVzZXIgY2FuY2VsbGF0aW9uKSwgdGhlIHByb21pc2UgY29udHJvbGxpbmcgdGhlIHBhcmFtZXRlciBkaWFsb2cgbmVlZHMgdG8gYmUgcmVqZWN0ZWQgdG8gYWxsb3dcblx0XHRcdFx0XHRcdFx0XHQvLyBjYWxsZXJzIHRvIHJlYWN0LiAoRXhhbXBsZTogSWYgY3JlYXRpb24gaW4gYmFja2VuZCBhZnRlciBuYXZpZ2F0aW9uIHRvIHRyYW5zaWVudCBjb250ZXh0IGZhaWxzLCBiYWNrIG5hdmlnYXRpb24gbmVlZHMgdG8gYmUgdHJpZ2dlcmVkKVxuXHRcdFx0XHRcdFx0XHRcdC8vIFRPRE86IFJlZmFjdG9yIHRvIHNlcGFyYXRlIGRpYWxvZyBoYW5kbGluZyBmcm9tIGJhY2tlbmQgcmVxdWVzdCBpbnN0ZWFkIG9mIHRha2luZyBkZWNpc2lvbiBiYXNlZCBvbiBtZXNzYWdlIGhhbmRsaW5nXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNob3dNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob0RpYWxvZy5pc09wZW4oKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBkbyBub3RoaW5nLCBkbyBub3QgcmVqZWN0IHByb21pc2UgaGVyZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBXZSBkbyBub3QgY2xvc2UgdGhlIEFQTSBkaWFsb2cgaWYgdXNlciBlbnRlcnMgYSB3cm9uZyB2YWx1ZSBpbiBvZiB0aGUgZmllbGRzIHRoYXQgcmVzdWx0cyBpbiBhbiBlcnJvciBmcm9tIHRoZSBiYWNrZW5kLlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgdXNlciBjYW4gY2xvc2UgdGhlIG1lc3NhZ2UgZGlhbG9nIGFuZCB0aGUgQVBNIGRpYWxvZyB3b3VsZCBzdGlsbCBiZSBvcGVuIG9uIHdoaWNoIGhlIGNvdWxkIGVudGVyIGEgbmV3IHZhbHVlIGFuZCB0cmlnZ2VyIHRoZSBhY3Rpb24gYWdhaW4uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEVhcmxpZXIgd2Ugd2VyZSByZWplY3RpbmcgdGhlIHByb21pc2Ugb24gZXJyb3IgaGVyZSwgYW5kIHRoZSBjYWxsIHN0YWNrIHdhcyBkZXN0cm95ZWQgYXMgdGhlIHByb21pc2Ugd2FzIHJlamVjdGVkIGFuZCByZXR1cm5lZCB0byBFZGl0RmxvdyBpbnZva2UgYWN0aW9uLlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBCdXQgc2luY2UgdGhlIEFQTSBkaWFsb2cgd2FzIHN0aWxsIG9wZW4sIGEgbmV3IHByb21pc2Ugd2FzIHJlc29sdmVkIGluIGNhc2UgdGhlIHVzZXIgcmV0cmllZCB0aGUgYWN0aW9uIGFuZCB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkLCBidXQgdGhlIG5hdmlnYXRpb24gdG8gb2JqZWN0IHBhZ2Ugd2FzIG5vdCB0YWtpbmcgcGxhY2UuXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aXM0MTJFeGVjdXRlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IFtdXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvRGlhbG9nKSkge1xuXHRcdFx0XHRcdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9EaWFsb2cpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKGdlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCBzQWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJDYW5jZWxcIl0pLCB7XG5cdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQ0FOQ0VMXCIpLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBjYW5jZWwgYnV0dG9uIHNob3VsZCBqdXN0IGNsb3NlIHRoZSBkaWFsb2cgKHNpbWlsYXIgdG8gdXNpbmcgZXNjYXBlKS4gQWxsIHdyYXAgdXAgdGFza3Mgc2hvdWxkIGJlIG1vdmVkIHRvIGFmdGVyQ2xvc2UuXG5cdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHQvLyByZWplY3QoQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0Ly8gVE9ETzogYmVmb3JlT3BlbiBpcyBqdXN0IGFuIGV2ZW50LCBpLmUuIG5vdCB3YWl0aW5nIGZvciB0aGUgUHJvbWlzZSB0byBiZSByZXNvbHZlZC4gQ2hlY2sgaWYgdGFza3Mgb2YgdGhpcyBmdW5jdGlvbiBuZWVkIHRvIGJlIGRvbmUgYmVmb3JlIG9wZW5pbmcgdGhlIGRpYWxvZ1xuXHRcdFx0XHQvLyAtIGlmIHllcywgdGhleSBuZWVkIHRvIGJlIG1vdmVkIG91dHNpZGUuXG5cdFx0XHRcdC8vIEFzc3VtcHRpb246IFNvbWV0aW1lcyBkaWFsb2cgY2FuIGJlIHNlZW4gd2l0aG91dCBhbnkgZmllbGRzIGZvciBhIHNob3J0IHRpbWUgLSBtYXliZSB0aGlzIGlzIGNhdXNlZCBieSB0aGlzIGFzeW5jaHJvbml0eVxuXHRcdFx0XHRiZWZvcmVPcGVuOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRcdFx0XHQvLyBjbG9uZSBldmVudCBmb3IgYWN0aW9uV3JhcHBlciBhcyBvRXZlbnQub1NvdXJjZSBnZXRzIGxvc3QgZHVyaW5nIHByb2Nlc3Npbmcgb2YgYmVmb3JlT3BlbiBldmVudCBoYW5kbGVyXG5cdFx0XHRcdFx0Y29uc3Qgb0Nsb25lRXZlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBvRXZlbnQpO1xuXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0Y29uc3QgZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IChvRGlhbG9nLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdHNBY3Rpb25QYXRoID0gb0FjdGlvbkNvbnRleHQuc1BhdGggJiYgb0FjdGlvbkNvbnRleHQuc1BhdGguc3BsaXQoXCIvQFwiKVswXSxcblx0XHRcdFx0XHRcdFx0c0RlZmF1bHRWYWx1ZXNGdW5jdGlvbiA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdFx0XHRcdGAke3NBY3Rpb25QYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uYFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNEZWZhdWx0VmFsdWVzRnVuY3Rpb247XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyA9IGFzeW5jIGZ1bmN0aW9uIChzQmluZGluZ1BhcmFtZXRlcj86IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0JvdW5kRnVuY3Rpb25OYW1lID0gZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKCk7XG5cdFx0XHRcdFx0XHRjb25zdCBwcmVmaWxsUGFyYW1ldGVyID0gYXN5bmMgZnVuY3Rpb24gKHNQYXJhbU5hbWU6IGFueSwgdlBhcmFtRGVmYXVsdFZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAxOiBUaGVyZSBpcyBhIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBhbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdGlmICh2UGFyYW1EZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMCAmJiB2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCB2UGFyYW1WYWx1ZSA9IGF3YWl0IENvbW1vblV0aWxzLnJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1WYWx1ZSA9IGF3YWl0IG9PcGVyYXRpb25CaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0UGFyYW1ldGVyQ29udGV4dCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVxdWVzdFByb3BlcnR5KHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIG11bHRpIHNlbGVjdCwgbmVlZCB0byBsb29wIG92ZXIgYUNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNQYXRoRm9yQ29udGV4dCA9IHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc1BhdGhGb3JDb250ZXh0LmluZGV4T2YoYCR7c0JpbmRpbmdQYXJhbWV0ZXJ9L2ApID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzUGF0aEZvckNvbnRleHQgPSBzUGF0aEZvckNvbnRleHQucmVwbGFjZShgJHtzQmluZGluZ1BhcmFtZXRlcn0vYCwgXCJcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzW2ldLmdldFByb3BlcnR5KHNQYXRoRm9yQ29udGV4dCkgIT09IHZQYXJhbVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgY29udGV4dHMgYXJlIG5vdCBhbGwgdGhlIHNhbWUsIGRvIG5vdCBwcmVmaWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Yk5vUG9zc2libGVWYWx1ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWU6IHNQYXJhbU5hbWUsIHZhbHVlOiB2UGFyYW1WYWx1ZSB9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlYWRpbmcgZGVmYXVsdCBhY3Rpb24gcGFyYW1ldGVyXCIsIHNQYXJhbU5hbWUsIG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJMYXRlUHJvcGVydHlFcnJvcjogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBDYXNlIDEuMjogUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGRlZmluZXMgYSBmaXhlZCBzdHJpbmcgdmFsdWUgKGkuZS4gdlBhcmFtRGVmYXVsdFZhbHVlID0gJ3NvbWVTdHJpbmcnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdlBhcmFtRGVmYXVsdFZhbHVlIH07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9QYXJhbWV0ZXJNb2RlbCAmJiAob1BhcmFtZXRlck1vZGVsIGFzIGFueSkub0RhdGFbc1BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBDYXNlIDI6IFRoZXJlIGlzIG5vIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBhbm5vdGF0aW9uICg9PiBsb29rIGludG8gdGhlIEZMUCBVc2VyIERlZmF1bHRzKVxuXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAob1BhcmFtZXRlck1vZGVsIGFzIGFueSkub0RhdGFbc1BhcmFtTmFtZV1cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAoc1BhcmFtTmFtZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAob0RpYWxvZy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgob0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLCBzUGFyYW1OYW1lKSArIFwiQFwiLFxuXHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckRlZmF1bHRWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgJiYgb1BhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiXTsgLy8gZWl0aGVyIHsgJFBhdGg6ICdzb21lUGF0aCcgfSBvciAnc29tZVN0cmluZydcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlID0gW107XG5cdFx0XHRcdFx0XHRsZXQgc1BhcmFtTmFtZSwgdlBhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRzUGFyYW1OYW1lID0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWU7XG5cdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoc1BhcmFtTmFtZSk7XG5cdFx0XHRcdFx0XHRcdGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUucHVzaChwcmVmaWxsUGFyYW1ldGVyKHNQYXJhbU5hbWUsIHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUpKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpICYmIGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzQm91bmRGdW5jdGlvbk5hbWUgJiYgc0JvdW5kRnVuY3Rpb25OYW1lLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHNCb3VuZEZ1bmN0aW9uTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQ29udGV4dHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtcy5wdXNoKGNhbGxCb3VuZEZ1bmN0aW9uKHNCb3VuZEZ1bmN0aW9uTmFtZSwgYUNvbnRleHRzW2ldLCBtUGFyYW1ldGVycy5tb2RlbCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBhUHJlZmlsbFBhcmFtUHJvbWlzZXMgPSBQcm9taXNlLmFsbChhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlKTtcblx0XHRcdFx0XHRcdGxldCBhRXhlY0Z1bmN0aW9uUHJvbWlzZXM6IFByb21pc2U8YW55W10+ID0gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHRcdFx0XHRcdGxldCBvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZTtcblx0XHRcdFx0XHRcdGlmIChhRnVuY3Rpb25QYXJhbXMgJiYgYUZ1bmN0aW9uUGFyYW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0YUV4ZWNGdW5jdGlvblByb21pc2VzID0gUHJvbWlzZS5hbGwoYUZ1bmN0aW9uUGFyYW1zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc01vZHVsZSA9IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0LnN1YnN0cmluZygwLCBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xKVxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0XHRcdFx0XHRcdHNGdW5jdGlvbk5hbWUgPSBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24uc3Vic3RyaW5nKFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEsXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0b0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2UgPSBGUE1IZWxwZXIuYWN0aW9uV3JhcHBlcihvQ2xvbmVFdmVudCwgc01vZHVsZSwgc0Z1bmN0aW9uTmFtZSwge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRzOiBhQ29udGV4dHNcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFQcm9taXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0XHRcdFx0XHRhUHJlZmlsbFBhcmFtUHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdFx0YUV4ZWNGdW5jdGlvblByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRcdG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlXG5cdFx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWU6IGFueSA9IGFQcm9taXNlc1swXTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZnVuY3Rpb25QYXJhbXMgPSBhUHJvbWlzZXNbMV07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdCA9IGFQcm9taXNlc1syXTtcblx0XHRcdFx0XHRcdFx0bGV0IHNEaWFsb2dQYXJhbU5hbWU6IHN0cmluZztcblxuXHRcdFx0XHRcdFx0XHQvLyBGaWxsIHRoZSBkaWFsb2cgd2l0aCB0aGUgZWFybGllciBkZXRlcm1pbmVkIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSB0aGUgZGlmZmVyZW50IHNvdXJjZXNcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0c0RpYWxvZ1BhcmFtTmFtZSA9IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lO1xuXHRcdFx0XHRcdFx0XHRcdC8vIFBhcmFtZXRlciB2YWx1ZXMgcHJvdmlkZWQgaW4gdGhlIGNhbGwgb2YgaW52b2tlQWN0aW9uIG92ZXJydWxlIG90aGVyIHNvdXJjZXNcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB2UGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSA9IGFQYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0XHQoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lXG5cdFx0XHRcdFx0XHRcdFx0KT8udmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsIHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdCAmJiBvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3QuaGFzT3duUHJvcGVydHkoc0RpYWxvZ1BhcmFtTmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdFtzRGlhbG9nUGFyYW1OYW1lXVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXSAmJiBjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLCBjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0udmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIGRlZmF1bHQgdmFsdWUgaGFkIG5vdCBiZWVuIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBkdWUgdG8gZGlmZmVyZW50IGNvbnRleHRzLCB3ZSBkbyBub3RoaW5nIGVsc2Vcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHNCb3VuZEZ1bmN0aW9uTmFtZSAmJiAhY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldLmJOb1Bvc3NpYmxlVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBjaGVjayBpZiB0aGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBzYW1lIHBhcmFtIHZhbHVlIGZvciBhbGwgdGhlIGNvbnRleHRzOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgaiA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdoaWxlIChqIDwgYUNvbnRleHRzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbaiArIDFdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgPT09XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2ogKyAxXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGorKztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vcGFyYW0gdmFsdWVzIGFyZSBhbGwgdGhlIHNhbWU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChqID09PSBhQ29udGV4dHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbal0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChmdW5jdGlvblBhcmFtc1swXSAmJiBmdW5jdGlvblBhcmFtc1swXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9Pbmx5IG9uZSBjb250ZXh0LCB0aGVuIHRoZSBkZWZhdWx0IHBhcmFtIHZhbHVlcyBhcmUgdG8gYmUgdmVyaWZpZWQgZnJvbSB0aGUgZnVuY3Rpb246XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zWzBdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBiRXJyb3JGb3VuZCA9IGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZS5zb21lKGZ1bmN0aW9uIChvVmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvVmFsdWUuYkxhdGVQcm9wZXJ0eUVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1ZhbHVlLmJMYXRlUHJvcGVydHlFcnJvcjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHQvLyBJZiBhdCBsZWFzdCBvbmUgRGVmYXVsdCBQcm9wZXJ0eSBpcyBhIExhdGUgUHJvcGVydHkgYW5kIGFuIGVUYWcgZXJyb3Igd2FzIHJhaXNlZC5cblx0XHRcdFx0XHRcdFx0aWYgKGJFcnJvckZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc1RleHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19MQVRFX1BST1BFUlRZXCIpO1xuXHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzVGV4dCwgeyBjb250ZW50V2lkdGg6IFwiMjVlbVwiIH0gYXMgYW55KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBmbkFzeW5jQmVmb3JlT3BlbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUGFyYW1ldGVycyA9IG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIik7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNCaW5kaW5nUGFyYW1ldGVyID0gYVBhcmFtZXRlcnNbMF0gJiYgYVBhcmFtZXRlcnNbMF0uJE5hbWU7XG5cblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvQ29udGV4dE9iamVjdCA9IGF3YWl0IGFDb250ZXh0c1swXS5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0T2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoc0JpbmRpbmdQYXJhbWV0ZXIsIG9Db250ZXh0T2JqZWN0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2coc0JpbmRpbmdQYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRhd2FpdCBmbkFzeW5jQmVmb3JlT3BlbigpO1xuXG5cdFx0XHRcdFx0Ly8gYWRkaW5nIGRlZmF1bHRlZCB2YWx1ZXMgb25seSBoZXJlIGFmdGVyIHRoZXkgYXJlIG5vdCBzZXQgdG8gdGhlIGZpZWxkc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyBvZiBhY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZVxuXHRcdFx0XHRcdFx0XHQ/IChhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIE11bHRpVmFsdWVGaWVsZCkuZ2V0SXRlbXMoKVxuXHRcdFx0XHRcdFx0XHQ6IChhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiB0aGUgZGlhbG9nIGlzIGNhbmNlbGxlZCwgbWVzc2FnZXMgbmVlZCB0byBiZSByZW1vdmVkIGluIGNhc2UgdGhlIHNhbWUgYWN0aW9uIHNob3VsZCBiZSBleGVjdXRlZCBhZ2FpblxuXHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLmZvckVhY2goX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIpO1xuXHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdGJ1dHRvbkxvY2sgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzdWx0LmRpYWxvZ0NhbmNlbGxlZCkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KENvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGFjdGlvblJlc3VsdC5yZXN1bHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRtUGFyYW1ldGVycy5vRGlhbG9nID0gb0RpYWxvZztcblx0XHRcdG9EaWFsb2cuc2V0TW9kZWwob0FjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKS5vTW9kZWwpO1xuXHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvUGFyYW1ldGVyTW9kZWwsIFwicGFyYW1zTW9kZWxcIik7XG5cdFx0XHRvRGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0cGF0aDogXCIvXCIsXG5cdFx0XHRcdG1vZGVsOiBcInBhcmFtc01vZGVsXCJcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBlbXB0eSBtb2RlbCB0byBhZGQgZWxlbWVudHMgZHluYW1pY2FsbHkgZGVwZW5kaW5nIG9uIG51bWJlciBvZiBNVkYgZmllbGRzIGRlZmluZWQgb24gdGhlIGRpYWxvZ1xuXHRcdFx0Y29uc3Qgb01WRk1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9NVkZNb2RlbCwgXCJtdmZ2aWV3XCIpO1xuXG5cdFx0XHQvKiBFdmVudCBuZWVkZWQgZm9yIHJlbW92aW5nIG1lc3NhZ2VzIG9mIHZhbGlkIGNoYW5nZWQgZmllbGQgKi9cblx0XHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyBvZiBhY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHRpZiAoYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUpIHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvPy5maWVsZD8uZ2V0QmluZGluZyhcIml0ZW1zXCIpPy5hdHRhY2hDaGFuZ2UoKCkgPT4ge1xuXHRcdFx0XHRcdFx0X3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8/LmZpZWxkPy5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcihhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bGV0IHNBY3Rpb25QYXRoID0gYCR7c0FjdGlvbk5hbWV9KC4uLilgO1xuXHRcdFx0aWYgKCFhQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdHNBY3Rpb25QYXRoID0gYC8ke3NBY3Rpb25QYXRofWA7XG5cdFx0XHR9XG5cdFx0XHRvRGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0cGF0aDogc0FjdGlvblBhdGhcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9QYXJlbnRDb250cm9sKSB7XG5cdFx0XHRcdC8vIGlmIHRoZXJlIGlzIGEgcGFyZW50IGNvbnRyb2wgc3BlY2lmaWVkIGFkZCB0aGUgZGlhbG9nIGFzIGRlcGVuZGVudFxuXHRcdFx0XHRvUGFyZW50Q29udHJvbC5hZGREZXBlbmRlbnQob0RpYWxvZyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0RpYWxvZy5zZXRCaW5kaW5nQ29udGV4dChhQ29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHRcdH1cblx0XHRcdG9PcGVyYXRpb25CaW5kaW5nID0gb0RpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCk7XG5cdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbjogYW55KSB7XG5cdGNvbnN0IGFQYXJhbWV0ZXJzID0gb0FjdGlvbi5nZXRPYmplY3QoXCIkUGFyYW1ldGVyXCIpIHx8IFtdO1xuXHRpZiAoYVBhcmFtZXRlcnMgJiYgYVBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0aWYgKG9BY3Rpb24uZ2V0T2JqZWN0KFwiJElzQm91bmRcIikpIHtcblx0XHRcdC8vaW4gY2FzZSBvZiBib3VuZCBhY3Rpb25zLCBpZ25vcmUgdGhlIGZpcnN0IHBhcmFtZXRlciBhbmQgY29uc2lkZXIgdGhlIHJlc3Rcblx0XHRcdHJldHVybiBhUGFyYW1ldGVycy5zbGljZSgxLCBhUGFyYW1ldGVycy5sZW5ndGgpIHx8IFtdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVBhcmFtZXRlcnM7XG59XG5cbmZ1bmN0aW9uIF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lKHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIHNBY3Rpb25MYWJlbDogc3RyaW5nLCBzQWN0aW9uTmFtZTogc3RyaW5nLCBzRW50aXR5U2V0TmFtZTogc3RyaW5nKSB7XG5cdGxldCBib3VuZEFjdGlvbk5hbWU6IGFueSA9IHNBY3Rpb25OYW1lID8gc0FjdGlvbk5hbWUgOiBudWxsO1xuXHRjb25zdCBhQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIik7XG5cdGJvdW5kQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5pbmRleE9mKFwiLlwiKSA+PSAwID8gYUFjdGlvbk5hbWVbYUFjdGlvbk5hbWUubGVuZ3RoIC0gMV0gOiBib3VuZEFjdGlvbk5hbWU7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIHNFbnRpdHlTZXROYW1lID8gYCR7c0VudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRjb25zdCBzS2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fTkFNRVwiO1xuXHRjb25zdCBiUmVzb3VyY2VLZXlFeGlzdHMgPSByZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtzS2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApO1xuXHRpZiAoc0FjdGlvbkxhYmVsKSB7XG5cdFx0aWYgKGJSZXNvdXJjZUtleUV4aXN0cykge1xuXHRcdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChzS2V5LCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHR9IGVsc2UgaWYgKHJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke3NLZXl9fCR7c0VudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoc0tleSwgdW5kZWZpbmVkLCBgJHtzRW50aXR5U2V0TmFtZX1gKTtcblx0XHR9IGVsc2UgaWYgKHJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke3NLZXl9YCkpIHtcblx0XHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoc0tleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQWN0aW9uTGFiZWw7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBFbmhhbmNlcyB0aGUgc2lkZSBlZmZlY3RzIG9mIHRoZSBvcGVyYXRpb25cbiAqXG4gKiBXaGVuIGEgbmV3IGVudGl0eSBpcyBjcmVhdGVkIHVzaW5nIGEgRGF0YUZpZWxkRm9yQWN0aW9uLCBhIG5ld1xuICogb0RhdGFDb250ZXh0QmluZGluZyBpcyBjcmVhdGVkIHRvIGV4ZWN1dGUgdGhlIGFjdGlvbi4gQnkgZGVmYXVsdCwgdGhpc1xuICogb0RhdGFDb250ZXh0QmluZGluZyBpcyByZWxhdGl2ZSB0byB0aGUgT2RhdGFMaXN0QmluZGluZyBvZiB0aGUgdGFibGUuXG4gKlxuICogQmVjYXVzZSBvZiB0aGlzIGRlcGVuZGVuY3ksIHdoZW4gYSBTaWRlRWZmZWN0cyBpcyBleGVjdXRlZCBvbiB0aGVcbiAqIGNvbnRleHQgaW50byB0aGUgT2RhdGFMaXN0QmluZGluZyB3aGVyZSB0aGUgb0RhdGFDb250ZXh0QmluZGluZyB3YXMgYm91bmQsIHRoaXMgU2lkZUVmZmVjdHMgaXMgYWxzbyB0cmlnZ2VyZWQgb24gdGhpc1xuICogb0RhdGFDb250ZXh0QmluZGluZy4gV2UgZG9uJ3QgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlXG4gKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBJdCBtZWFucyBldmVuIGlmIHRoZSBkcmFmdCByZWxhdGVkIHRvIHRoZSBhY3Rpb25cbiAqIGlzIHJlbW92ZWQsIHRoZSBvZGF0YUNvbnRleHRCaW5kaW5nIGlzIHN0aWxsIHRoZXJlLCBzbyBpZiBhIFNpZGVFZmZlY3RzXG4gKiBpcyBleGVjdXRlZCBvbiB0aGUgc291cmNlIHRhcmdldCBpbnRvIG9EYXRhQ29udGV4dEJpbmRpbmcsIGFuIGVycm9yIGZyb20gdGhlIGJhY2sgZW5kIHdpbGwgYmVcbiAqIHJlY2VpdmVkIGJlY2F1c2Ugd2UgYXNrIHRvIHJlZnJlc2ggYSBwcm9wZXJ0eSBvbiBhbiB1bmtub3duIGVudGl0eS5cbiAqXG4gKiBUaGUgU2lkZUVmZmVjdHMgYXJlIHJlcXVlc3RlZCBvbmx5IGlmIHRoZSBwYWdlIGlzIHN0aWxsIG9wZW4uXG4gKiBUaGlzIGF2b2lkcyBnZW5lcmF0aW5nIGlzc3VlcyB3aXRoIGdob3N0IG9EYXRhQ29udGV4dEJpbmRpbmcgbGlua2VkIHRvIGRlc3Ryb3llZCBjb250ZXh0LlxuICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwbGljYXRpb24gY29tcG9uZW50XG4gKiBAcGFyYW0gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcgVGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHJldHVybmVkQ29udGV4dCBUaGUgcmV0dXJuZWQgY29udGV4dCBvZiB0aGlzIG9wZXJhdGlvblxuICovXG5mdW5jdGlvbiBlbmhhbmNlU2lkZUVmZmVjdHMoXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IHwgdW5kZWZpbmVkLFxuXHRvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyxcblx0cmV0dXJuZWRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZFxuKTogdm9pZCB7XG5cdGlmIChyZXR1cm5lZENvbnRleHQpIHtcblx0XHRjb25zdCBvcmlnaW4gPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5yZXF1ZXN0U2lkZUVmZmVjdHMuYmluZChvcGVyYXRpb25Db250ZXh0QmluZGluZyk7XG5cdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcucmVxdWVzdFNpZGVFZmZlY3RzID0gYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0XHQ/LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0LmdldEluc3RhbmNlZFZpZXdzKClcblx0XHRcdFx0XHQuZmluZCgocGFnZVZpZXc6IFZpZXcpID0+IHBhZ2VWaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IHJldHVybmVkQ29udGV4dClcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0b0FjdGlvbjogYW55LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRiR2V0Qm91bmRDb250ZXh0OiBib29sZWFuLFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIgfCB1bmRlZmluZWQsXG5cdGlDb250ZXh0TGVuZ3RoOiBudW1iZXIgfCBudWxsLFxuXHRjdXJyZW50X2NvbnRleHRfaW5kZXg6IG51bWJlciB8IG51bGwsXG5cdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBGdW5jdGlvbixcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdDogRnVuY3Rpb24sXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRsZXQgb0FjdGlvblByb21pc2UsXG5cdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gdHJ1ZTtcblx0aWYgKG1QYXJhbWV0ZXJzKSB7XG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUgPSBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZTtcblx0fVxuXHRpZiAoYkdldEJvdW5kQ29udGV4dCkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb0FjdGlvbi5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRjb25zdCBvUHJvcGVydHkgPSBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCk7XG5cdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHlbMF0/LiRraW5kICE9PSBcIkFjdGlvblwiKSB7XG5cdFx0XHQvL2RvIG5vdCBlbmFibGUgdGhlIHN0cmljdCBoYW5kbGluZyBpZiBpdHMgbm90IGFuIGFjdGlvblxuXHRcdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChtUGFyYW1ldGVycy5kaXNhYmxlU3RyaWN0SGFuZGxpbmcpIHtcblx0XHRcdGJFbmFibGVTdHJpY3RIYW5kbGluZyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmICghYkVuYWJsZVN0cmljdEhhbmRsaW5nKSB7XG5cdFx0b0FjdGlvblByb21pc2UgPSBvQWN0aW9uLmV4ZWN1dGUoc0dyb3VwSWQpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpIHtcblx0XHRcdGVuaGFuY2VTaWRlRWZmZWN0cyhtUGFyYW1ldGVycy5hcHBDb21wb25lbnQsIG9BY3Rpb24sIHJlc3VsdCk7XG5cdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZShvQWN0aW9uLmdldEJvdW5kQ29udGV4dCgpKTtcblx0XHRcdHJldHVybiBvQWN0aW9uLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9BY3Rpb25Qcm9taXNlID0gYkdldEJvdW5kQ29udGV4dFxuXHRcdFx0PyBvQWN0aW9uXG5cdFx0XHRcdFx0LmV4ZWN1dGUoXG5cdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdG9wZXJhdGlvbnNIZWxwZXIuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAocmVzdWx0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0ZW5oYW5jZVNpZGVFZmZlY3RzKG1QYXJhbWV0ZXJzLmFwcENvbXBvbmVudCwgb0FjdGlvbiwgcmVzdWx0KTtcblx0XHRcdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiAhbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyhvQWN0aW9uLCBzR3JvdXBJZCwgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsIG1QYXJhbWV0ZXJzLCB0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlKG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmICFtUGFyYW1ldGVycy5iR3JvdXBlZCkge1xuXHRcdFx0XHRcdFx0XHR1cGRhdGU0MTJUcmFuc2lzdGlvbk1lc3NhZ2VzKG9BY3Rpb24sIHNHcm91cElkLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcywgbVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCgpO1xuXHRcdFx0XHRcdFx0dGhyb3cgQ29uc3RhbnRzLkFjdGlvbkV4ZWN1dGlvbkZhaWxlZDtcblx0XHRcdFx0XHR9KVxuXHRcdFx0OiBvQWN0aW9uXG5cdFx0XHRcdFx0LmV4ZWN1dGUoXG5cdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdG9wZXJhdGlvbnNIZWxwZXIuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAocmVzdWx0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0ZW5oYW5jZVNpZGVFZmZlY3RzKG1QYXJhbWV0ZXJzLmFwcENvbXBvbmVudCwgb0FjdGlvbiwgcmVzdWx0KTtcblx0XHRcdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiAhbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyhvQWN0aW9uLCBzR3JvdXBJZCwgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsIG1QYXJhbWV0ZXJzLCB0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiAhbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyhvQWN0aW9uLCBzR3JvdXBJZCwgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QoKTtcblx0XHRcdFx0XHRcdHRocm93IENvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQ7XG5cdFx0XHRcdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gb0FjdGlvblByb21pc2UuY2F0Y2goKCkgPT4ge1xuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QoKTtcblx0XHR0aHJvdyBDb25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkO1xuXHR9KTtcbn1cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RyaWN0SGFuZGxpbmdVdGlsaXRlcyB3aXRoIHRoZSBmYWlsZWQgYW5kIHN1Y2Nlc3NmdWwgdHJhbnNpc2l0aW9uIG1lc3NhZ2VzLlxuICpcbiAqIEBwYXJhbSBvQWN0aW9uIEFjdGlvbiBleGVjdXRlZFxuICogQHBhcmFtIHNHcm91cElkIEdyb3VwSWQgb2YgdGhlIGJhdGNoXG4gKiBAcGFyYW0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgVXRpbGl0eSBmbGFncyBhbmQgbWVzc2FnZXMgZm9yIHN0cmljdEhhbmRsaW5nXG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgU3RyaWN0IEhhbmRsaW5nIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBvbmx5U3VjY2Vzc01lc3NhZ2VzIFRvIHVwZGF0ZSBvbmx5IHN1Y2Nlc3NmdWwgdHJhbnNpdGlvbiBtZXNzYWdlc1xuICogQHBhcmFtIFttUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNvbnRhaW5zIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byBzdHJpY2tIYW5kbGluZ1xuICovXG5mdW5jdGlvbiB1cGRhdGU0MTJUcmFuc2lzdGlvbk1lc3NhZ2VzKFxuXHRvQWN0aW9uOiBDb250cm9sLFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllczogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdG1QYXJhbWV0ZXJzPzogU3RyaWN0SGFuZGxpbmdQYXJhbWV0ZXJzLFxuXHRvbmx5U3VjY2Vzc01lc3NhZ2VzID0gZmFsc2Vcbikge1xuXHRjb25zdCBtZXNzYWdlczogQXJyYXk8TWVzc2FnZT4gPSBzYXAudWkuZ2V0Q29yZSgpLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRjb25zdCB7IHByb2Nlc3NlZE1lc3NhZ2VJZHMsIGRlbGF5U3VjY2Vzc01lc3NhZ2VzLCBzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscyB9ID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM7XG5cdGNvbnN0IHRyYW5zaXRpb25NZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbiAobWVzc2FnZTogYW55KSB7XG5cdFx0Ly9jaGVjayBpZiB0aGUgdHJhbnNpc3Rpb24gbWVzc2FnZXMgaXMgYWxyZWFkeSBwcm9jZXNzZWRcblx0XHRjb25zdCBpc0R1cGxpY2F0ZSA9IHByb2Nlc3NlZE1lc3NhZ2VJZHMuZmluZChmdW5jdGlvbiAoaWQ6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2UuaWQgPT09IGlkO1xuXHRcdH0pO1xuXHRcdC8vIHVwZGF0ZSB0aGUgc3RyaWN0SGFuZGxpbmcgd2l0aCB0aGUgc3VjY2VzcyBtZXNzYWdlcyB3aGljaCBuZWVkcyB0byBiZSBzaG93biBsYXRlclxuXHRcdGlmICghaXNEdXBsaWNhdGUpIHtcblx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHMucHVzaChtZXNzYWdlLmlkKTtcblx0XHRcdGlmIChtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpIHtcblx0XHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG1lc3NhZ2UucGVyc2lzdGVudCA9PT0gdHJ1ZSAmJiBtZXNzYWdlLnR5cGUgIT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MgJiYgIWlzRHVwbGljYXRlO1xuXHR9KTtcblx0Ly91cGRhdGUgdGhlIHN0cmljdEhhbmRsaW5nVXRpbGl0ZXMgd2l0aCB0aGUgZmFpbGVkIHRyYW5zaXN0aW9uIG1lc3NhZ2VzIHdoaWNoIG5lZWRzIHRvIGJlIHJldHJpZ2dlcmVkXG5cdGlmICghb25seVN1Y2Nlc3NNZXNzYWdlcyAmJiB0cmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy5pbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0c3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMucHVzaCh7XG5cdFx0XHRcdG9BY3Rpb246IG9BY3Rpb24sXG5cdFx0XHRcdGdyb3VwSWQ6IHNHcm91cElkXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbigpIHtcblx0bGV0IGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBhbnkgPSBudWxsLFxuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3Q6IGFueSA9IG51bGw7XG5cdGNvbnN0IG9Mb2NhbEFjdGlvblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QgPSByZWplY3Q7XG5cdH0pLmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgYWN0aW9uIFwiLCBvRXJyb3IpO1xuXHR9KTtcblxuXHRyZXR1cm4geyBvTG9jYWxBY3Rpb25Qcm9taXNlLCBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSwgaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCB9O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBhcmUgYW55IHdhcm5pbmcgb3IgZXJyb3IgbWVzc2FnZXMoYm91bmQgYW5kIHVuYm91bmQpLiBQcmVzZW50bHkgb25seSBwcm92aWRlcyB0aGVtIGZvciBjaGFuZ2VzZXQgYmF0Y2ggY29uZmlnLlxuICpcbiAqIEBwYXJhbSBpc0NoYW5nZVNldCBUaGUgcmVxdWVzdCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgZXhpc3RhbmNlIG9mIG1lc3NhZ2VzXG4gKi9cbmZ1bmN0aW9uIGlzQ2hhbmdlU2V0QW5kSGFzRXJyb3JzT3JXYXJuaW5ncyhpc0NoYW5nZVNldDogYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRsZXQgbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG5cdGlmIChpc0NoYW5nZVNldCkge1xuXHRcdGNvbnN0IHVuQm91bmRNc2dzOiBNZXNzYWdlW10gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXMoKTtcblx0XHRjb25zdCBib3VuZE1zZ3M6IE1lc3NhZ2VbXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlKTtcblx0XHRtZXNzYWdlcyA9IFsuLi51bkJvdW5kTXNncywgLi4uYm91bmRNc2dzXTtcblx0fVxuXG5cdHJldHVybiBtZXNzYWdlcy5zb21lKGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCIgfHwgbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiV2FybmluZ1wiO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gX2V4ZWN1dGVBY3Rpb24oXG5cdG9BcHBDb21wb25lbnQ6IGFueSxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0b1BhcmVudENvbnRyb2w/OiBhbnksXG5cdG1lc3NhZ2VIYW5kbGVyPzogTWVzc2FnZUhhbmRsZXIsXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbikge1xuXHRjb25zdCBhQ29udGV4dHMgPSBtUGFyYW1ldGVycy5hQ29udGV4dHMgfHwgW107XG5cdGNvbnN0IG9Nb2RlbCA9IG1QYXJhbWV0ZXJzLm1vZGVsO1xuXHRjb25zdCBhQWN0aW9uUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzIHx8IFtdO1xuXHRjb25zdCBzQWN0aW9uTmFtZSA9IG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWU7XG5cdGNvbnN0IGZuT25TdWJtaXR0ZWQgPSBtUGFyYW1ldGVycy5mbk9uU3VibWl0dGVkO1xuXHRjb25zdCBmbk9uUmVzcG9uc2UgPSBtUGFyYW1ldGVycy5mbk9uUmVzcG9uc2U7XG5cdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9QYXJlbnRDb250cm9sKTtcblx0bGV0IG9BY3Rpb246IGFueTtcblxuXHRmdW5jdGlvbiBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKSB7XG5cdFx0aWYgKGFBY3Rpb25QYXJhbWV0ZXJzICYmIGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhQWN0aW9uUGFyYW1ldGVycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRpZiAoIWFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChhQWN0aW9uUGFyYW1ldGVyc1tqXS4kVHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5TdHJpbmdcIjpcblx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IDA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gdGJjXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b0FjdGlvbi5zZXRQYXJhbWV0ZXIoYUFjdGlvblBhcmFtZXRlcnNbal0uJE5hbWUsIGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBUT0RPOiByZWZhY3RvciB0byBkaXJlY3QgdXNlIG9mIFByb21pc2UuYWxsU2V0dGxlZFxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLmFwcENvbXBvbmVudCA9IG9BcHBDb21wb25lbnQ7XG5cdFx0XHRjb25zdCBtQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRjb25zdCBiR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmJHcm91cGVkO1xuXHRcdFx0Y29uc3QgYkdldEJvdW5kQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHQ7XG5cdFx0XHRjb25zdCBhQWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG5cdFx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBzR3JvdXBJZDogc3RyaW5nO1xuXHRcdFx0Y29uc3Qgb2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QgPSBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uKCk7XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVBY3Rpb24gPSBmdW5jdGlvbiAoYWN0aW9uQ29udGV4dDogYW55LCBjdXJyZW50X2NvbnRleHRfaW5kZXg6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSwgaUNvbnRleHRMZW5ndGg6IGFueSkge1xuXHRcdFx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRcdFx0Y29uc3QgaW5kaXZpZHVhbEFjdGlvblByb21pc2U6IGFueSA9IFtdO1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgbmVlZCBiYXRjaCBncm91cCBwZXIgYWN0aW9uIGNhbGxcblx0XHRcdFx0c0dyb3VwSWQgPSAhYkdyb3VwZWQgPyBgJGF1dG8uJHtjdXJyZW50X2NvbnRleHRfaW5kZXh9YCA6IGFjdGlvbkNvbnRleHQuZ2V0VXBkYXRlR3JvdXBJZCgpO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5yZXF1ZXN0U2lkZUVmZmVjdHMgPSBmblJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKFxuXHRcdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRvU2lkZUVmZmVjdCxcblx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRvQWN0aW9uUHJvbWlzZSA9IGV4ZWN1dGVEZXBlbmRpbmdPblNlbGVjdGVkQ29udGV4dHMoXG5cdFx0XHRcdFx0YWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRiR2V0Qm91bmRDb250ZXh0LFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdG9pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0LmludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlLFxuXHRcdFx0XHRcdG9pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0LmludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QsXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0KTtcblx0XHRcdFx0YUFjdGlvblByb21pc2VzLnB1c2gob0FjdGlvblByb21pc2UpO1xuXHRcdFx0XHRpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZS5wdXNoKG9pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0Lm9Mb2NhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRmblJlcXVlc3RTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LCBvU2lkZUVmZmVjdCwgbVBhcmFtZXRlcnMsIHNHcm91cElkLCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGZuRXhlY3V0ZVNpbmdsZUFjdGlvbiA9IGZ1bmN0aW9uIChhY3Rpb25Db250ZXh0OiBhbnksIGN1cnJlbnRfY29udGV4dF9pbmRleDogYW55LCBvU2lkZUVmZmVjdDogYW55LCBpQ29udGV4dExlbmd0aDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlOiBhbnkgPSBbXTtcblx0XHRcdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBuZWVkIGJhdGNoIGdyb3VwIHBlciBhY3Rpb24gY2FsbFxuXHRcdFx0XHRzR3JvdXBJZCA9IG1QYXJhbWV0ZXJzLmdyb3VwSWQgfHwgYGFwaU1vZGUke2N1cnJlbnRfY29udGV4dF9pbmRleH1gO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5yZXF1ZXN0U2lkZUVmZmVjdHMgPSBmblJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKFxuXHRcdFx0XHRcdG9wZXJhdGlvbnMsXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRvU2lkZUVmZmVjdCxcblx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRvQWN0aW9uUHJvbWlzZSA9IGV4ZWN1dGVEZXBlbmRpbmdPblNlbGVjdGVkQ29udGV4dHMoXG5cdFx0XHRcdFx0YWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRiR2V0Qm91bmRDb250ZXh0LFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdG9pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0LmludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlLFxuXHRcdFx0XHRcdG9pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0LmludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QsXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0KTtcblx0XHRcdFx0YUFjdGlvblByb21pc2VzLnB1c2gob0FjdGlvblByb21pc2UpO1xuXHRcdFx0XHRpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZS5wdXNoKG9pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0Lm9Mb2NhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRmblJlcXVlc3RTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LCBvU2lkZUVmZmVjdCwgbVBhcmFtZXRlcnMsIHNHcm91cElkLCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0fTtcblxuXHRcdFx0YXN5bmMgZnVuY3Rpb24gZm5FeGVjdXRlQ2hhbmdlc2V0KCkge1xuXHRcdFx0XHRjb25zdCBhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcyA9IFtdIGFzIGFueTtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGFDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7c0FjdGlvbk5hbWV9KC4uLilgLCBhQ29udGV4dHNbaV0sIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0YUNoYW5nZVNldExvY2FsUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdGZuRXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA8PSAxID8gbnVsbCA6IGksXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0OiBhQ29udGV4dHNbaV0sXG5cdFx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdFx0dHJpZ2dlckFjdGlvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGhcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoYUFjdGlvblByb21pc2VzKTtcblxuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoYUNoYW5nZVNldExvY2FsUHJvbWlzZXMpO1xuXHRcdFx0XHRpZiAoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0aWYgKCFpc0NoYW5nZVNldEFuZEhhc0Vycm9yc09yV2FybmluZ3ModHJ1ZSkpIHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb3BlcmF0aW9uc0hlbHBlci5yZW5kZXJNZXNzYWdlVmlldyhcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGggPiAxXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmZvckVhY2goZnVuY3Rpb24gKHNoUHJvbWlzZSkge1xuXHRcdFx0XHRcdFx0XHRcdHNoUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VNb2RlbCA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gbWVzc2FnZU1vZGVsLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZU1vZGVsLnNldERhdGEobWVzc2FnZXNJbk1vZGVsLmNvbmNhdChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiUmV0cmlnZ2VyaW5nIG9mIHN0cmljdCBoYW5kbGluZyBhY3Rpb25zIGZhaWxlZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGFzeW5jIGZ1bmN0aW9uIGZuRXhlY3V0ZVNlcXVlbnRpYWxseShjb250ZXh0c1RvRXhlY3V0ZTogQ29udGV4dFtdKSB7XG5cdFx0XHRcdC8vIE9uZSBhY3Rpb24gYW5kIGl0cyBzaWRlIGVmZmVjdHMgYXJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlIG5leHQgYWN0aW9uIGlzIGV4ZWN1dGVkXG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoYUFjdGlvblByb21pc2VzKTtcblx0XHRcdFx0ZnVuY3Rpb24gcHJvY2Vzc09uZUFjdGlvbihjb250ZXh0OiBhbnksIGFjdGlvbkluZGV4OiBhbnksIGlDb250ZXh0TGVuZ3RoOiBhbnkpIHtcblx0XHRcdFx0XHRvQWN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAke3NBY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHQvLyBBY3Rpb24gb24gdGhlIHRhYmxlIGxldmVsIGlzIGJvdW5kIG9uIGEgY29weSBvZiB0aGUgb0RhdGFMaXN0QmluZGluZywgdG8gZXhlY3V0ZSB0aGUgU2lkZUVmZmVjdHMgd2UgbmVlZFxuXHRcdFx0XHRcdC8vIHRvIGRvIGl0IG9uIHRoZSBvcmlnaW5hbCBvRGF0YUxpc3RCaW5kaW5nXG5cdFx0XHRcdFx0Y29uc3QgaW5pdGlhbFRhYmxlQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmNvbnRyb2w/LmdldFJvd0JpbmRpbmc/LigpPy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZuRXhlY3V0ZVNpbmdsZUFjdGlvbihcblx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3Rpb25JbmRleCxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dDpcblx0XHRcdFx0XHRcdFx0XHRpbml0aWFsVGFibGVDb250ZXh0ICYmIGluaXRpYWxUYWJsZUNvbnRleHQuZ2V0UGF0aCgpID09PSBjb250ZXh0LmdldFBhdGgoKSA/IGluaXRpYWxUYWJsZUNvbnRleHQgOiBjb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRwYXRoRXhwcmVzc2lvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyxcblx0XHRcdFx0XHRcdFx0dHJpZ2dlckFjdGlvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gc2VyaWFsaXphdGlvbjogcHJvY2Vzc09uZUFjdGlvbiB0byBiZSBjYWxsZWQgZm9yIGVhY2ggZW50cnkgaW4gY29udGV4dHNUb0V4ZWN1dGUgb25seSBhZnRlciB0aGUgcHJvbWlzZSByZXR1cm5lZCBmcm9tIHRoZSBvbmUgYmVmb3JlIGhhcyBiZWVuIHJlc29sdmVkXG5cdFx0XHRcdGF3YWl0IGNvbnRleHRzVG9FeGVjdXRlLnJlZHVjZShhc3luYyAocHJvbWlzZTogUHJvbWlzZTx2b2lkPiwgY29udGV4dDogQ29udGV4dCwgaWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0XHRcdGF3YWl0IHByb21pc2U7XG5cdFx0XHRcdFx0YXdhaXQgcHJvY2Vzc09uZUFjdGlvbihjb250ZXh0LCBpZCArIDEsIGFDb250ZXh0cy5sZW5ndGgpO1xuXHRcdFx0XHR9LCBQcm9taXNlLnJlc29sdmUoKSk7XG5cblx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0YXdhaXQgb3BlcmF0aW9uc0hlbHBlci5yZW5kZXJNZXNzYWdlVmlldyhcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGggPiAxXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmbkhhbmRsZVJlc3VsdHMoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFiR3JvdXBlZCkge1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIsIGVuc3VyZSB0aGF0IGVhY2ggYWN0aW9uIGFuZCBtYXRjaGluZyBzaWRlIGVmZmVjdHNcblx0XHRcdFx0Ly8gYXJlIHByb2Nlc3NlZCBiZWZvcmUgdGhlIG5leHQgc2V0IGlzIHN1Ym1pdHRlZC4gV29ya2Fyb3VuZCB1bnRpbCBKU09OIGJhdGNoIGlzIGF2YWlsYWJsZS5cblx0XHRcdFx0Ly8gQWxsb3cgYWxzbyBmb3IgTGlzdCBSZXBvcnQuXG5cdFx0XHRcdGZuRXhlY3V0ZVNlcXVlbnRpYWxseShhQ29udGV4dHMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm5FeGVjdXRlQ2hhbmdlc2V0KCk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGZuSGFuZGxlUmVzdWx0cygpIHtcblx0XHRcdFx0Ly8gUHJvbWlzZS5hbGxTZXR0bGVkIHdpbGwgbmV2ZXIgYmUgcmVqZWN0ZWQuIEhvd2V2ZXIsIGVzbGludCByZXF1aXJlcyBlaXRoZXIgY2F0Y2ggb3IgcmV0dXJuIC0gdGh1cyB3ZSByZXR1cm4gdGhlIHJlc3VsdGluZyBQcm9taXNlIGFsdGhvdWdoIG5vIG9uZSB3aWxsIHVzZSBpdC5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChhQWN0aW9uUHJvbWlzZXMpLnRoZW4ocmVzb2x2ZSk7XG5cdFx0XHR9XG5cdFx0fSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHQoXG5cdFx0XHRcdGZuT25SZXNwb25zZSB8fFxuXHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0fVxuXHRcdFx0KSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NBY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBcImFjdGlvbkltcG9ydFwiO1xuXHRcdGNvbnN0IG9BY3Rpb25Qcm9taXNlID0gb0FjdGlvbi5leGVjdXRlKFxuXHRcdFx0c0dyb3VwSWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHQob3BlcmF0aW9uc0hlbHBlciBhcyBhbnkpLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0eyBsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsIG1vZGVsOiBvTW9kZWwgfSxcblx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdC8vIHRyaWdnZXIgb25TdWJtaXR0ZWQgXCJldmVudFwiXG5cdFx0KFxuXHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0LyoqL1xuXHRcdFx0fVxuXHRcdCkob0FjdGlvblByb21pc2UpO1xuXHRcdHJldHVybiBvQWN0aW9uUHJvbWlzZVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGN1cnJlbnRQcm9taXNlVmFsdWU6IHVua25vd24pIHtcblx0XHRcdFx0Ly8gSGVyZSB3ZSBlbnN1cmUgdGhhdCB3ZSByZXR1cm4gdGhlIHJlc3BvbnNlIHdlIGdvdCBmcm9tIGFuIHVuYm91bmQgYWN0aW9uIHRvIHRoZVxuXHRcdFx0XHQvLyBjYWxsZXIgQkNQIDogMjI3MDEzOTI3OVxuXHRcdFx0XHRpZiAoY3VycmVudFByb21pc2VWYWx1ZSkge1xuXHRcdFx0XHRcdHJldHVybiBjdXJyZW50UHJvbWlzZVZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldEJvdW5kQ29udGV4dD8uKCk/LmdldE9iamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgYWN0aW9uIFwiICsgc0FjdGlvbk5hbWUsIG9FcnJvcik7XG5cdFx0XHRcdHRocm93IG9FcnJvcjtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uUmVzcG9uc2UgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSgpO1xuXHRcdFx0fSk7XG5cdH1cbn1cbmZ1bmN0aW9uIF9nZXRQYXRoKG9BY3Rpb25Db250ZXh0OiBhbnksIHNBY3Rpb25OYW1lOiBhbnkpIHtcblx0bGV0IHNQYXRoID0gb0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpO1xuXHRzUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpID8gc1BhdGguc3BsaXQoXCJAJHVpNS5vdmVybG9hZFwiKVswXSA6IHNQYXRoLnNwbGl0KFwiLzBcIilbMF07XG5cdHJldHVybiBzUGF0aC5zcGxpdChgLyR7c0FjdGlvbk5hbWV9YClbMF07XG59XG5cbmZ1bmN0aW9uIF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMoXG5cdGlzQ3JlYXRlQWN0aW9uOiBib29sZWFuLFxuXHRhY3Rpb25QYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG5cdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcblx0c3RhcnR1cFBhcmFtZXRlcnM/OiBhbnlcbik6IGJvb2xlYW4ge1xuXHRpZiAocGFyYW1ldGVyVmFsdWVzKSB7XG5cdFx0Ly8gSWYgc2hvd0RpYWxvZyBpcyBmYWxzZSBidXQgdGhlcmUgYXJlIHBhcmFtZXRlcnMgZnJvbSB0aGUgaW52b2tlQWN0aW9uIGNhbGwsIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCB2YWx1ZXMgaGF2ZSBiZWVuXG5cdFx0Ly8gcHJvdmlkZWQgZm9yIGFsbCBvZiB0aGVtXG5cdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXIgb2YgYWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXIuJE5hbWUgIT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIiAmJlxuXHRcdFx0XHQhcGFyYW1ldGVyVmFsdWVzPy5maW5kKChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQubmFtZSA9PT0gYWN0aW9uUGFyYW1ldGVyLiROYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIEF0IGxlYXN0IGZvciBvbmUgcGFyYW1ldGVyIG5vIHZhbHVlIGhhcyBiZWVuIHByb3ZpZGVkLCBzbyB3ZSBjYW4ndCBza2lwIHRoZSBkaWFsb2dcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChpc0NyZWF0ZUFjdGlvbiAmJiBzdGFydHVwUGFyYW1ldGVycykge1xuXHRcdC8vIElmIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHByb3ZpZGVkIGR1cmluZyBhcHBsaWNhdGlvbiBsYXVuY2gsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHNldCBpcyBjb21wbGV0ZVxuXHRcdC8vIElmIG5vdCwgdGhlIHBhcmFtZXRlciBkaWFsb2cgc3RpbGwgbmVlZHMgdG8gYmUgc2hvd24uXG5cdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXIgb2YgYWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0aWYgKCFzdGFydHVwUGFyYW1ldGVyc1thY3Rpb25QYXJhbWV0ZXIuJE5hbWVdKSB7XG5cdFx0XHRcdC8vIEF0IGxlYXN0IGZvciBvbmUgcGFyYW1ldGVyIG5vIHZhbHVlIGhhcyBiZWVuIHByb3ZpZGVkLCBzbyB3ZSBjYW4ndCBza2lwIHRoZSBkaWFsb2dcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudDogYW55LCBvU2lkZUVmZmVjdDogYW55LCBtUGFyYW1ldGVyczogYW55LCBzR3JvdXBJZDogYW55LCBhTG9jYWxQcm9taXNlPzogYW55KSB7XG5cdGNvbnN0IG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRsZXQgb0xvY2FsUHJvbWlzZTtcblx0Ly8gdHJpZ2dlciBhY3Rpb25zIGZyb20gc2lkZSBlZmZlY3RzXG5cdGlmIChvU2lkZUVmZmVjdCAmJiBvU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucyAmJiBvU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRvU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzVHJpZ2dlckFjdGlvbjogYW55KSB7XG5cdFx0XHRpZiAoc1RyaWdnZXJBY3Rpb24pIHtcblx0XHRcdFx0b0xvY2FsUHJvbWlzZSA9IG9TaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihzVHJpZ2dlckFjdGlvbiwgb1NpZGVFZmZlY3QuY29udGV4dCwgc0dyb3VwSWQpO1xuXHRcdFx0XHRpZiAoYUxvY2FsUHJvbWlzZSkge1xuXHRcdFx0XHRcdGFMb2NhbFByb21pc2UucHVzaChvTG9jYWxQcm9taXNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8vIHJlcXVlc3Qgc2lkZSBlZmZlY3RzIGZvciB0aGlzIGFjdGlvblxuXHQvLyBhcyB3ZSBtb3ZlIHRoZSBtZXNzYWdlcyByZXF1ZXN0IHRvIFBPU1QgJHNlbGVjdCB3ZSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciBhbiBlbXB0eSBhcnJheVxuXHRpZiAob1NpZGVFZmZlY3QgJiYgb1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zICYmIG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0b0xvY2FsUHJvbWlzZSA9IG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucywgb1NpZGVFZmZlY3QuY29udGV4dCwgc0dyb3VwSWQpO1xuXHRcdGlmIChhTG9jYWxQcm9taXNlKSB7XG5cdFx0XHRhTG9jYWxQcm9taXNlLnB1c2gob0xvY2FsUHJvbWlzZSk7XG5cdFx0fVxuXHRcdG9Mb2NhbFByb21pc2Vcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCAmJiBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0SlNPTi5wYXJzZShtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtcyxcblx0XHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgdG8gY2FsbCBPRGF0YSBhY3Rpb25zIChib3VuZC9pbXBvcnQpIGFuZCBmdW5jdGlvbnMgKGJvdW5kL2ltcG9ydClcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBvcGVyYXRpb25zID0ge1xuXHRjYWxsQm91bmRBY3Rpb246IGNhbGxCb3VuZEFjdGlvbixcblx0Y2FsbEFjdGlvbkltcG9ydDogY2FsbEFjdGlvbkltcG9ydCxcblx0Y2FsbEJvdW5kRnVuY3Rpb246IGNhbGxCb3VuZEZ1bmN0aW9uLFxuXHRjYWxsRnVuY3Rpb25JbXBvcnQ6IGNhbGxGdW5jdGlvbkltcG9ydCxcblx0ZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0czogZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyxcblx0Y3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbjogY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbixcblx0dmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzOiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzLFxuXHRnZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lOiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZSxcblx0YWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjazogYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayxcblx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uOiBhZnRlckFjdGlvblJlc29sdXRpb24sXG5cdGlzQ2hhbmdlU2V0QW5kSGFzRXJyb3JzT3JXYXJuaW5nczogaXNDaGFuZ2VTZXRBbmRIYXNFcnJvcnNPcldhcm5pbmdzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBvcGVyYXRpb25zO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7RUFvQ0EsTUFBTUEsU0FBUyxHQUFHQyxTQUFTLENBQUNELFNBQVM7SUFDcENFLGtCQUFrQixHQUFHRCxTQUFTLENBQUNDLGtCQUFrQjtFQUNsRCxNQUFNQyxNQUFNLEdBQUlDLFVBQVUsQ0FBU0QsTUFBTTs7RUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0UsZUFBZSxDQUN2QkMsV0FBbUIsRUFDbkJDLFFBQWEsRUFDYkMsTUFBVyxFQUNYQyxhQUEyQixFQUMzQkMsV0FBZ0IsRUFDaEJDLHVCQUFpRCxFQUNoRDtJQUNELElBQUksQ0FBQ0EsdUJBQXVCLEVBQUU7TUFDN0JBLHVCQUF1QixHQUFHO1FBQ3pCQyxhQUFhLEVBQUUsS0FBSztRQUNwQkMsNkJBQTZCLEVBQUUsRUFBRTtRQUNqQ0Msc0JBQXNCLEVBQUUsRUFBRTtRQUMxQkMsNkJBQTZCLEVBQUUsRUFBRTtRQUNqQ0Msb0JBQW9CLEVBQUUsRUFBRTtRQUN4QkMsbUJBQW1CLEVBQUU7TUFDdEIsQ0FBQztJQUNGO0lBQ0EsSUFBSSxDQUFDVixRQUFRLElBQUlBLFFBQVEsQ0FBQ1csTUFBTSxLQUFLLENBQUMsRUFBRTtNQUN2QztNQUNBLE9BQU9DLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLG9EQUFvRCxDQUFDO0lBQzVFO0lBQ0E7SUFDQTtJQUNBLE1BQU1DLGlCQUFpQixHQUFHQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ2hCLFFBQVEsQ0FBQzs7SUFFakQ7SUFDQUcsV0FBVyxDQUFDYyxTQUFTLEdBQUdILGlCQUFpQixHQUFHZCxRQUFRLEdBQUcsQ0FBQ0EsUUFBUSxDQUFDO0lBRWpFLE1BQU1rQixVQUFVLEdBQUdqQixNQUFNLENBQUNrQixZQUFZLEVBQUU7TUFDdkM7TUFDQTtNQUNBQyxXQUFXLEdBQUksR0FBRUYsVUFBVSxDQUFDRyxXQUFXLENBQUNsQixXQUFXLENBQUNjLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssT0FBTyxFQUFFLENBQUUsSUFBR3ZCLFdBQVksRUFBQztNQUM1RndCLFlBQVksR0FBR0wsVUFBVSxDQUFDTSxvQkFBb0IsQ0FBRSxHQUFFSixXQUFZLG1CQUFrQixDQUFDO0lBQ2xGakIsV0FBVyxDQUFDc0IsZ0JBQWdCLEdBQUdDLGFBQWEsQ0FBQ0MsbUJBQW1CLENBQUNULFVBQVUsRUFBRUUsV0FBVyxFQUFFakIsV0FBVyxDQUFDYyxTQUFTLENBQUM7O0lBRWhIO0lBQ0E7SUFDQTtJQUNBLE1BQU1XLG1CQUFtQixHQUFHLFVBQVVDLE1BQVcsRUFBRTtNQUNsRDtNQUNBLElBQUlBLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxLQUFLLFdBQVcsRUFBRTtRQUNyQyxPQUFPRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNFLEtBQUs7TUFDdkIsQ0FBQyxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0EsTUFBTUYsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDRyxNQUFNLElBQUlILE1BQU07TUFDakM7SUFDRCxDQUFDO0lBRUQsT0FBT0ksVUFBVSxDQUFDbEMsV0FBVyxFQUFFRSxNQUFNLEVBQUVzQixZQUFZLEVBQUVyQixhQUFhLEVBQUVDLFdBQVcsRUFBRUMsdUJBQXVCLENBQUMsQ0FBQzhCLElBQUksQ0FDNUdMLE1BQVcsSUFBSztNQUNoQixJQUFJZixpQkFBaUIsRUFBRTtRQUN0QixPQUFPZSxNQUFNO01BQ2QsQ0FBQyxNQUFNO1FBQ04sT0FBT0QsbUJBQW1CLENBQUNDLE1BQU0sQ0FBQztNQUNuQztJQUNELENBQUMsRUFDQUEsTUFBVyxJQUFLO01BQ2hCLElBQUlmLGlCQUFpQixFQUFFO1FBQ3RCLE1BQU1lLE1BQU07TUFDYixDQUFDLE1BQU07UUFDTixPQUFPRCxtQkFBbUIsQ0FBQ0MsTUFBTSxDQUFDO01BQ25DO0lBQ0QsQ0FBQyxDQUNEO0VBQ0Y7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTTSxnQkFBZ0IsQ0FDeEJwQyxXQUFtQixFQUNuQkUsTUFBVyxFQUNYQyxhQUEyQixFQUMzQkMsV0FBZ0IsRUFDaEJDLHVCQUFpRCxFQUNoRDtJQUNELElBQUksQ0FBQ0gsTUFBTSxFQUFFO01BQ1osT0FBT1csT0FBTyxDQUFDQyxNQUFNLENBQUMsOENBQThDLENBQUM7SUFDdEU7SUFDQSxNQUFNSyxVQUFVLEdBQUdqQixNQUFNLENBQUNrQixZQUFZLEVBQUU7TUFDdkNDLFdBQVcsR0FBR25CLE1BQU0sQ0FBQ21DLFdBQVcsQ0FBRSxJQUFHckMsV0FBWSxFQUFDLENBQUMsQ0FBQ3VCLE9BQU8sRUFBRTtNQUM3RGUsYUFBYSxHQUFHbkIsVUFBVSxDQUFDTSxvQkFBb0IsQ0FBRSxJQUFHTixVQUFVLENBQUNNLG9CQUFvQixDQUFDSixXQUFXLENBQUMsQ0FBQ2tCLFNBQVMsQ0FBQyxTQUFTLENBQUUsSUFBRyxDQUFDO0lBQzNIbkMsV0FBVyxDQUFDc0IsZ0JBQWdCLEdBQUdDLGFBQWEsQ0FBQ0MsbUJBQW1CLENBQUNULFVBQVUsRUFBRyxHQUFFRSxXQUFZLGlCQUFnQixDQUFDO0lBQzdHLE9BQU9hLFVBQVUsQ0FBQ2xDLFdBQVcsRUFBRUUsTUFBTSxFQUFFb0MsYUFBYSxFQUFFbkMsYUFBYSxFQUFFQyxXQUFXLEVBQUVDLHVCQUF1QixDQUFDO0VBQzNHO0VBQ0EsU0FBU21DLGlCQUFpQixDQUFDQyxhQUFxQixFQUFFQyxPQUFZLEVBQUV4QyxNQUFXLEVBQUU7SUFDNUUsSUFBSSxDQUFDd0MsT0FBTyxFQUFFO01BQ2IsT0FBTzdCLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLDJDQUEyQyxDQUFDO0lBQ25FO0lBQ0EsTUFBTUssVUFBVSxHQUFHakIsTUFBTSxDQUFDa0IsWUFBWSxFQUFFO01BQ3ZDdUIsYUFBYSxHQUFJLEdBQUV4QixVQUFVLENBQUNHLFdBQVcsQ0FBQ29CLE9BQU8sQ0FBQ25CLE9BQU8sRUFBRSxDQUFFLElBQUdrQixhQUFjLEVBQUM7TUFDL0VHLGNBQWMsR0FBR3pCLFVBQVUsQ0FBQ00sb0JBQW9CLENBQUNrQixhQUFhLENBQUM7SUFDaEUsT0FBT0UsZ0JBQWdCLENBQUNKLGFBQWEsRUFBRXZDLE1BQU0sRUFBRTBDLGNBQWMsRUFBRUYsT0FBTyxDQUFDO0VBQ3hFO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTSSxrQkFBa0IsQ0FBQ0wsYUFBcUIsRUFBRXZDLE1BQVcsRUFBRTtJQUMvRCxJQUFJLENBQUN1QyxhQUFhLEVBQUU7TUFDbkIsT0FBTzVCLE9BQU8sQ0FBQ2tDLE9BQU8sRUFBRTtJQUN6QjtJQUNBLE1BQU01QixVQUFVLEdBQUdqQixNQUFNLENBQUNrQixZQUFZLEVBQUU7TUFDdkN1QixhQUFhLEdBQUd6QyxNQUFNLENBQUNtQyxXQUFXLENBQUUsSUFBR0ksYUFBYyxFQUFDLENBQUMsQ0FBQ2xCLE9BQU8sRUFBRTtNQUNqRXlCLGVBQWUsR0FBRzdCLFVBQVUsQ0FBQ00sb0JBQW9CLENBQUUsSUFBR04sVUFBVSxDQUFDTSxvQkFBb0IsQ0FBQ2tCLGFBQWEsQ0FBQyxDQUFDSixTQUFTLENBQUMsV0FBVyxDQUFFLElBQUcsQ0FBQztJQUNqSSxPQUFPTSxnQkFBZ0IsQ0FBQ0osYUFBYSxFQUFFdkMsTUFBTSxFQUFFOEMsZUFBZSxDQUFDO0VBQ2hFO0VBQ0EsU0FBU0gsZ0JBQWdCLENBQUNKLGFBQWtCLEVBQUV2QyxNQUFXLEVBQUUrQyxTQUFjLEVBQUVQLE9BQWEsRUFBRTtJQUN6RixJQUFJUSxRQUFRO0lBQ1osSUFBSSxDQUFDRCxTQUFTLElBQUksQ0FBQ0EsU0FBUyxDQUFDVixTQUFTLEVBQUUsRUFBRTtNQUN6QyxPQUFPMUIsT0FBTyxDQUFDQyxNQUFNLENBQUMsSUFBSXFDLEtBQUssQ0FBRSxZQUFXVixhQUFjLFlBQVcsQ0FBQyxDQUFDO0lBQ3hFO0lBQ0EsSUFBSUMsT0FBTyxFQUFFO01BQ1pPLFNBQVMsR0FBRy9DLE1BQU0sQ0FBQ21DLFdBQVcsQ0FBRSxHQUFFSyxPQUFPLENBQUNuQixPQUFPLEVBQUcsSUFBR2tCLGFBQWMsT0FBTSxDQUFDO01BQzVFUyxRQUFRLEdBQUcsZUFBZTtJQUMzQixDQUFDLE1BQU07TUFDTkQsU0FBUyxHQUFHL0MsTUFBTSxDQUFDbUMsV0FBVyxDQUFFLElBQUdJLGFBQWMsT0FBTSxDQUFDO01BQ3hEUyxRQUFRLEdBQUcsZ0JBQWdCO0lBQzVCO0lBQ0EsTUFBTUUsZ0JBQWdCLEdBQUdILFNBQVMsQ0FBQ0ksT0FBTyxDQUFDSCxRQUFRLENBQUM7SUFDcERoRCxNQUFNLENBQUNvRCxXQUFXLENBQUNKLFFBQVEsQ0FBQztJQUM1QixPQUFPRSxnQkFBZ0IsQ0FBQ2pCLElBQUksQ0FBQyxZQUFZO01BQ3hDLE9BQU9jLFNBQVMsQ0FBQ00sZUFBZSxFQUFFO0lBQ25DLENBQUMsQ0FBQztFQUNIO0VBQ0EsU0FBU3JCLFVBQVUsQ0FDbEJsQyxXQUFnQixFQUNoQkUsTUFBVyxFQUNYc0QsT0FBWSxFQUNackQsYUFBMkIsRUFDM0JDLFdBQWdCLEVBQ2hCQyx1QkFBaUQsRUFDaEQ7SUFDRCxJQUFJLENBQUNBLHVCQUF1QixFQUFFO01BQzdCQSx1QkFBdUIsR0FBRztRQUN6QkMsYUFBYSxFQUFFLEtBQUs7UUFDcEJDLDZCQUE2QixFQUFFLEVBQUU7UUFDakNDLHNCQUFzQixFQUFFLEVBQUU7UUFDMUJDLDZCQUE2QixFQUFFLEVBQUU7UUFDakNDLG9CQUFvQixFQUFFLEVBQUU7UUFDeEJDLG1CQUFtQixFQUFFO01BQ3RCLENBQUM7SUFDRjtJQUNBUCxXQUFXLENBQUNxRCxRQUFRLEdBQUdyRCxXQUFXLENBQUNzRCxrQkFBa0IsS0FBSzlELGtCQUFrQixDQUFDK0QsU0FBUztJQUN0RixPQUFPLElBQUk5QyxPQUFPLENBQUMsZ0JBQWdCa0MsT0FBNkIsRUFBRWpDLE1BQThCLEVBQUU7TUFDakcsSUFBSThDLDBCQUErQixHQUFHLENBQUMsQ0FBQztNQUN4QyxJQUFJQyxRQUFRO01BQ1osSUFBSUMsY0FBYztNQUNsQjtNQUNBLE1BQU1DLFlBQVksR0FBRzNELFdBQVcsQ0FBQzRELEtBQUs7TUFDdEMsTUFBTUMsb0JBQW9CLEdBQUc3RCxXQUFXLENBQUM4RCxtQkFBbUI7TUFDNUQsTUFBTWhELFNBQVMsR0FBR2QsV0FBVyxDQUFDYyxTQUFTO01BQ3ZDLE1BQU1pRCxlQUFlLEdBQUcvRCxXQUFXLENBQUMrRCxlQUFlO01BQ25ELE1BQU1DLGlCQUFpQixHQUFHaEUsV0FBVyxDQUFDc0IsZ0JBQWdCO01BQ3RELElBQUlQLFVBQVU7TUFDZCxJQUFJa0QsU0FBUztNQUNiLElBQUlDLGFBQWtCO01BQ3RCLElBQUlDLGtCQUFrQjtNQUN0QixJQUFJQyxhQUFhO01BQ2pCLElBQUlDLFdBQVc7TUFDZixJQUFJQywrQkFBK0I7TUFDbkMsTUFBTUMsZ0JBQWdCLEdBQUduQixPQUFPLENBQUNqQixTQUFTLEVBQUU7TUFDNUMsSUFBSSxDQUFDaUIsT0FBTyxJQUFJLENBQUNBLE9BQU8sQ0FBQ2pCLFNBQVMsRUFBRSxFQUFFO1FBQ3JDLE9BQU96QixNQUFNLENBQUMsSUFBSXFDLEtBQUssQ0FBRSxVQUFTbkQsV0FBWSxZQUFXLENBQUMsQ0FBQztNQUM1RDs7TUFFQTtNQUNBLE1BQU00RSxpQkFBaUIsR0FBR0MsbUJBQW1CLENBQUNyQixPQUFPLENBQUM7O01BRXREO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQSxNQUFNc0IsMkJBQTJCLEdBQ2hDRixpQkFBaUIsQ0FBQ2hFLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRWdFLGlCQUFpQixDQUFDaEUsTUFBTSxLQUFLLENBQUMsSUFBSWdFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDRyxLQUFLLEtBQUssc0JBQXNCLENBQUM7O01BRTNIO01BQ0EsTUFBTUMsZ0JBQWdCLEdBQUc1RSxXQUFXLENBQUM2RSxlQUFlOztNQUVwRDtNQUNBLE1BQU1DLGNBQWMsR0FBRy9FLGFBQWEsQ0FBQ2dGLGdCQUFnQixFQUFFO01BQ3ZELE1BQU1DLGtCQUFrQixHQUFJRixjQUFjLElBQUlBLGNBQWMsQ0FBQ0csaUJBQWlCLElBQUssQ0FBQyxDQUFDOztNQUVyRjtNQUNBLElBQUlQLDJCQUEyQixJQUFJYixvQkFBb0IsRUFBRTtRQUN4RFMsK0JBQStCLEdBQUdZLCtCQUErQixDQUNoRW5CLGVBQWUsRUFDZlMsaUJBQWlCLEVBQ2pCSSxnQkFBZ0IsRUFDaEJJLGtCQUFrQixDQUNsQjtNQUNGOztNQUVBO01BQ0E7TUFDQXZCLFFBQVEsR0FBRyxJQUFJO01BQ2YsSUFBSWlCLDJCQUEyQixFQUFFO1FBQ2hDLElBQUksRUFBRWIsb0JBQW9CLElBQUlTLCtCQUErQixDQUFDLEVBQUU7VUFDL0RiLFFBQVEsR0FBRzBCLHlCQUF5QjtRQUNyQztNQUNELENBQUMsTUFBTSxJQUFJbkIsaUJBQWlCLEVBQUU7UUFDN0JQLFFBQVEsR0FBRzJCLHFCQUFxQjtNQUNqQztNQUVBNUIsMEJBQTBCLEdBQUc7UUFDNUI2QixhQUFhLEVBQUVyRixXQUFXLENBQUNzRixXQUFXO1FBQ3RDQyxZQUFZLEVBQUV2RixXQUFXLENBQUN3RixVQUFVO1FBQ3BDQyxVQUFVLEVBQUU3RixXQUFXO1FBQ3ZCOEYsS0FBSyxFQUFFNUYsTUFBTTtRQUNiMEUsaUJBQWlCLEVBQUVBLGlCQUFpQjtRQUNwQ21CLGdCQUFnQixFQUFFM0YsV0FBVyxDQUFDMkYsZ0JBQWdCO1FBQzlDQyw4QkFBOEIsRUFBRTVGLFdBQVcsQ0FBQzRGLDhCQUE4QjtRQUMxRWhDLEtBQUssRUFBRTVELFdBQVcsQ0FBQzRELEtBQUs7UUFDeEJpQyxhQUFhLEVBQUU3RixXQUFXLENBQUM2RjtNQUM1QixDQUFDO01BQ0QsSUFBSXpDLE9BQU8sQ0FBQ2pCLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNsQyxJQUFJbkMsV0FBVyxDQUFDOEYsb0JBQW9CLElBQUk5RixXQUFXLENBQUM4RixvQkFBb0IsQ0FBQ0MsZUFBZSxFQUFFO1VBQ3pGaEYsVUFBVSxHQUFHakIsTUFBTSxDQUFDa0IsWUFBWSxFQUFFO1VBQ2xDaUQsU0FBUyxHQUFHbEQsVUFBVSxDQUFDRyxXQUFXLENBQUNKLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssT0FBTyxFQUFFLENBQUM7VUFDMUQrQyxhQUFhLEdBQUduRCxVQUFVLENBQUNvQixTQUFTLENBQUUsR0FBRThCLFNBQVUsaURBQWdELENBQUM7VUFFbkcsSUFBSUMsYUFBYSxFQUFFO1lBQ2xCQyxrQkFBa0IsR0FBR25FLFdBQVcsQ0FBQzhGLG9CQUFvQixDQUFDQyxlQUFlLENBQUNDLFNBQVMsQ0FBQyxVQUFVQyxHQUFRLEVBQUU7Y0FDbkc7Y0FDQSxPQUFPLE9BQU9BLEdBQUcsS0FBSyxRQUFRLEtBQUtBLEdBQUcsS0FBSy9CLGFBQWEsSUFBSStCLEdBQUcsS0FBSyxHQUFHLENBQUM7WUFDekUsQ0FBQyxDQUFDOztZQUVGO1lBQ0E7WUFDQTVCLFdBQVcsR0FBR2pCLE9BQU8sQ0FBQ2pCLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDOUNpQyxhQUFhLEdBQ1pDLFdBQVcsSUFBSSxDQUFDQSxXQUFXLENBQUM2QixhQUFhLElBQUk5QyxPQUFPLENBQUMrQyxRQUFRLEVBQUUsQ0FBQ2hFLFNBQVMsQ0FBQzhCLFNBQVMsQ0FBQyxDQUFDbUMsS0FBSyxLQUFLL0IsV0FBVyxDQUFDK0IsS0FBSztZQUVqSCxJQUFJakMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLElBQUlDLGFBQWEsRUFBRTtjQUM3QztjQUNBO2NBQ0FwRSxXQUFXLENBQUNxRyxrQkFBa0IsR0FBR3JHLFdBQVcsQ0FBQ3FHLGtCQUFrQixJQUFJLENBQUMsQ0FBQztjQUVyRSxJQUNDakQsT0FBTyxDQUFDakIsU0FBUyxDQUFFLHFCQUFvQitCLGFBQWMsRUFBQyxDQUFDLEtBQ3RELENBQUNsRSxXQUFXLENBQUNxRyxrQkFBa0IsQ0FBQ0MsT0FBTyxJQUN2Q3RHLFdBQVcsQ0FBQ3FHLGtCQUFrQixDQUFDQyxPQUFPLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsT0FBTyxDQUFDdEMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDaEY7Z0JBQ0QsSUFBSUUsYUFBYSxFQUFFO2tCQUNsQjtrQkFDQTtrQkFDQXBFLFdBQVcsQ0FBQ3FHLGtCQUFrQixDQUFDQyxPQUFPLEdBQUd0RyxXQUFXLENBQUNxRyxrQkFBa0IsQ0FBQ0MsT0FBTyxHQUMzRSxHQUFFdEcsV0FBVyxDQUFDcUcsa0JBQWtCLENBQUNDLE9BQVEsSUFBR3BDLGFBQWMsRUFBQyxHQUM1REEsYUFBYTtrQkFDaEI7a0JBQ0FsRSxXQUFXLENBQUNxRyxrQkFBa0IsQ0FBQ0kscUJBQXFCLEdBQUcsSUFBSTtnQkFDNUQ7Z0JBQ0EsSUFBSXpHLFdBQVcsQ0FBQzhGLG9CQUFvQixDQUFDWSxjQUFjLENBQUNsRyxNQUFNLEtBQUssQ0FBQyxJQUFJMkQsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEVBQUU7a0JBQzVGO2tCQUNBbkUsV0FBVyxDQUFDOEYsb0JBQW9CLENBQUNDLGVBQWUsQ0FBQ1ksTUFBTSxDQUFDeEMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRTtjQUNEO1lBQ0Q7VUFDRDtRQUNEO1FBRUFYLDBCQUEwQixDQUFDMUMsU0FBUyxHQUFHQSxTQUFTO1FBQ2hEMEMsMEJBQTBCLENBQUM2QyxrQkFBa0IsR0FBR3JHLFdBQVcsQ0FBQ3FHLGtCQUFrQjtRQUM5RTdDLDBCQUEwQixDQUFDc0Msb0JBQW9CLEdBQUc5RixXQUFXLENBQUM4RixvQkFBb0I7UUFDbEZ0QywwQkFBMEIsQ0FBQ0gsUUFBUSxHQUFHckQsV0FBVyxDQUFDc0Qsa0JBQWtCLEtBQUs5RCxrQkFBa0IsQ0FBQytELFNBQVM7UUFDckdDLDBCQUEwQixDQUFDb0Qsb0JBQW9CLEdBQUc1RyxXQUFXLENBQUM0RyxvQkFBb0I7UUFDbEZwRCwwQkFBMEIsQ0FBQ3FELHFCQUFxQixHQUFHN0csV0FBVyxDQUFDNkcscUJBQXFCO1FBQ3BGckQsMEJBQTBCLENBQUNzRCxjQUFjLEdBQUcvQyxlQUFlO1FBQzNEUCwwQkFBMEIsQ0FBQ3VELFdBQVcsR0FBRy9HLFdBQVcsQ0FBQytHLFdBQVc7UUFDaEV2RCwwQkFBMEIsQ0FBQ3dELHFCQUFxQixHQUFHaEgsV0FBVyxDQUFDZ0gscUJBQXFCO1FBQ3BGeEQsMEJBQTBCLENBQUN5RCxPQUFPLEdBQUdqSCxXQUFXLENBQUNpSCxPQUFPO1FBQ3hELElBQUlqSCxXQUFXLENBQUNrSCxTQUFTLEVBQUU7VUFDMUIxRCwwQkFBMEIsQ0FBQzJELE9BQU8sR0FBR25ILFdBQVcsQ0FBQ29ILGFBQWEsQ0FBQ0MsSUFBSSxDQUFDckgsV0FBVyxDQUFDa0gsU0FBUyxDQUFDO1VBQzFGbEgsV0FBVyxDQUFDbUgsT0FBTyxHQUFHM0QsMEJBQTBCLENBQUMyRCxPQUFPO1FBQ3pELENBQUMsTUFBTTtVQUNOM0QsMEJBQTBCLENBQUMyRCxPQUFPLEdBQUduSCxXQUFXLENBQUNvSCxhQUFhO1VBQzlEcEgsV0FBVyxDQUFDbUgsT0FBTyxHQUFHbkgsV0FBVyxDQUFDb0gsYUFBYTtRQUNoRDtNQUNEO01BQ0EsSUFBSXJELGVBQWUsRUFBRTtRQUNwQlAsMEJBQTBCLENBQUNPLGVBQWUsR0FBR0EsZUFBZTtNQUM3RDtNQUNBO01BQ0EsTUFBTXVELFFBQVEsR0FBRyxDQUFDL0MsZ0JBQWdCLENBQUNnRCxVQUFVLElBQUksRUFBRSxFQUFFQyxJQUFJLENBQUVDLFVBQWUsSUFBSztRQUM5RSxPQUNDLENBQUVsRCxnQkFBZ0IsQ0FBQ21ELGNBQWMsSUFBSW5ELGdCQUFnQixDQUFDbUQsY0FBYyxLQUFLRCxVQUFVLENBQUM5QyxLQUFLLElBQUtKLGdCQUFnQixDQUFDb0QsUUFBUSxLQUN2SEYsVUFBVSxDQUFDdkIsYUFBYTtNQUUxQixDQUFDLENBQUM7TUFDRjFDLDBCQUEwQixDQUFDOEQsUUFBUSxHQUFHQSxRQUFRO01BQzlDLElBQUk3RCxRQUFRLEVBQUU7UUFDYkMsY0FBYyxHQUFHRCxRQUFRLENBQ3hCN0QsV0FBVyxFQUNYRyxhQUFhLEVBQ2I0RCxZQUFZLEVBQ1pILDBCQUEwQixFQUMxQmdCLGlCQUFpQixFQUNqQkksZ0JBQWdCLEVBQ2hCeEIsT0FBTyxFQUNQcEQsV0FBVyxDQUFDb0gsYUFBYSxFQUN6QnBILFdBQVcsQ0FBQzRILGFBQWEsRUFDekI1SCxXQUFXLENBQUM2SCxjQUFjLEVBQzFCNUgsdUJBQXVCLENBQ3ZCO1FBQ0QsT0FBT3lELGNBQWMsQ0FDbkIzQixJQUFJLENBQUMsVUFBVStGLGdCQUFxQixFQUFFO1VBQ3RDQyxxQkFBcUIsQ0FBQy9ILFdBQVcsRUFBRXdELDBCQUEwQixFQUFFZSxnQkFBZ0IsQ0FBQztVQUNoRjVCLE9BQU8sQ0FBQ21GLGdCQUFnQixDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUNERSxLQUFLLENBQUMsVUFBVUYsZ0JBQXFCLEVBQUU7VUFDdkNwSCxNQUFNLENBQUNvSCxnQkFBZ0IsQ0FBQztRQUN6QixDQUFDLENBQUM7TUFDSixDQUFDLE1BQU07UUFDTjtRQUNBO1FBQ0EsSUFBSWxELGdCQUFnQixFQUFFO1VBQ3JCLEtBQUssTUFBTXFELENBQUMsSUFBSXpFLDBCQUEwQixDQUFDZ0IsaUJBQWlCLEVBQUU7WUFBQTtZQUM3RGhCLDBCQUEwQixDQUFDZ0IsaUJBQWlCLENBQUN5RCxDQUFDLENBQUMsQ0FBQ3JHLEtBQUssR0FBR2dELGdCQUFnQixhQUFoQkEsZ0JBQWdCLGdEQUFoQkEsZ0JBQWdCLENBQUVzRCxJQUFJLENBQzVFQyxPQUFZLElBQUtBLE9BQU8sQ0FBQ0MsSUFBSSxLQUFLNUUsMEJBQTBCLENBQUNnQixpQkFBaUIsQ0FBQ3lELENBQUMsQ0FBQyxDQUFDdEQsS0FBSyxDQUN4RiwwREFGdUQsc0JBRXJEL0MsS0FBSztVQUNUO1FBQ0QsQ0FBQyxNQUFNO1VBQ04sS0FBSyxNQUFNcUcsQ0FBQyxJQUFJekUsMEJBQTBCLENBQUNnQixpQkFBaUIsRUFBRTtZQUFBO1lBQzdEaEIsMEJBQTBCLENBQUNnQixpQkFBaUIsQ0FBQ3lELENBQUMsQ0FBQyxDQUFDckcsS0FBSyw0QkFDcERvRCxrQkFBa0IsQ0FBQ3hCLDBCQUEwQixDQUFDZ0IsaUJBQWlCLENBQUN5RCxDQUFDLENBQUMsQ0FBQ3RELEtBQUssQ0FBQywwREFBekUsc0JBQTRFLENBQUMsQ0FBQztVQUNoRjtRQUNEO1FBQ0EsSUFBSW1ELGdCQUFxQjtRQUN6QixJQUFJO1VBQ0hBLGdCQUFnQixHQUFHLE1BQU1PLGNBQWMsQ0FDdEN0SSxhQUFhLEVBQ2J5RCwwQkFBMEIsRUFDMUJ4RCxXQUFXLENBQUNvSCxhQUFhLEVBQ3pCcEgsV0FBVyxDQUFDNkgsY0FBYyxFQUMxQjVILHVCQUF1QixDQUN2QjtVQUVELE1BQU1xSSxRQUFRLEdBQUdDLElBQUksQ0FBQ0MsaUJBQWlCLEVBQUUsQ0FBQ0MsZUFBZSxFQUFFLENBQUNDLE9BQU8sRUFBRTtVQUNyRSxJQUNDekksdUJBQXVCLElBQ3ZCQSx1QkFBdUIsQ0FBQ0MsYUFBYSxJQUNyQ0QsdUJBQXVCLENBQUNFLDZCQUE2QixDQUFDSyxNQUFNLEVBQzNEO1lBQ0RQLHVCQUF1QixDQUFDSyxvQkFBb0IsR0FBR0wsdUJBQXVCLENBQUNLLG9CQUFvQixDQUFDcUksTUFBTSxDQUFDTCxRQUFRLENBQUM7VUFDN0c7VUFDQVAscUJBQXFCLENBQUMvSCxXQUFXLEVBQUV3RCwwQkFBMEIsRUFBRWUsZ0JBQWdCLENBQUM7VUFDaEY1QixPQUFPLENBQUNtRixnQkFBZ0IsQ0FBQztRQUMxQixDQUFDLENBQUMsTUFBTTtVQUNQcEgsTUFBTSxDQUFDb0gsZ0JBQWdCLENBQUM7UUFDekIsQ0FBQyxTQUFTO1VBQUE7VUFDVCxJQUNDN0gsdUJBQXVCLElBQ3ZCQSx1QkFBdUIsQ0FBQ0MsYUFBYSxJQUNyQ0QsdUJBQXVCLENBQUNFLDZCQUE2QixDQUFDSyxNQUFNLElBQzVEUixXQUFXLENBQUNjLFNBQVMsQ0FBQ04sTUFBTSxHQUFHLENBQUMsRUFDL0I7WUFDRCxJQUFJO2NBQ0gsTUFBTW9JLG1CQUFtQixHQUFHM0ksdUJBQXVCLENBQUNFLDZCQUE2QjtjQUNqRixNQUFNMEksZUFBZSxHQUFHLEVBQVM7Y0FDakNELG1CQUFtQixDQUFDRSxPQUFPLENBQUMsVUFBVUMsSUFBUyxFQUFFO2dCQUNoREYsZUFBZSxDQUFDRyxJQUFJLENBQUNELElBQUksQ0FBQzNGLE9BQU8sQ0FBQzZGLFVBQVUsRUFBRSxDQUFDO2NBQ2hELENBQUMsQ0FBQztjQUNGekYsMEJBQTBCLENBQUMxQyxTQUFTLEdBQUcrSCxlQUFlO2NBQ3RELE1BQU1LLHNCQUFzQixHQUFHLE1BQU1iLGNBQWMsQ0FDbER0SSxhQUFhLEVBQ2J5RCwwQkFBMEIsRUFDMUJ4RCxXQUFXLENBQUNvSCxhQUFhLEVBQ3pCcEgsV0FBVyxDQUFDNkgsY0FBYyxFQUMxQjVILHVCQUF1QixDQUN2QjtjQUNEQSx1QkFBdUIsQ0FBQ0UsNkJBQTZCLEdBQUcsRUFBRTtjQUMxRG9JLElBQUksQ0FBQ0MsaUJBQWlCLEVBQUUsQ0FBQ1csV0FBVyxDQUFDbEosdUJBQXVCLENBQUNLLG9CQUFvQixDQUFDO2NBQ2xGeUgscUJBQXFCLENBQUMvSCxXQUFXLEVBQUV3RCwwQkFBMEIsRUFBRWUsZ0JBQWdCLENBQUM7Y0FDaEY1QixPQUFPLENBQUN1RyxzQkFBc0IsQ0FBQztZQUNoQyxDQUFDLENBQUMsT0FBT0Esc0JBQXNCLEVBQUU7Y0FDaEN4SSxNQUFNLENBQUN3SSxzQkFBc0IsQ0FBQztZQUMvQjtVQUNEO1VBQ0EsSUFBSUUsbUNBQW1DLEdBQUcsS0FBSztVQUMvQyxJQUNFcEosV0FBVyxDQUFDcUQsUUFBUSxJQUFJcEQsdUJBQXVCLElBQUlBLHVCQUF1QixDQUFDRyxzQkFBc0IsQ0FBQ0ksTUFBTSxJQUN6RzZJLGlDQUFpQyxDQUFDckosV0FBVyxDQUFDcUQsUUFBUSxDQUFDLEVBQ3REO1lBQ0QrRixtQ0FBbUMsR0FBRyxJQUFJO1VBQzNDO1VBQ0FwSixXQUFXLGFBQVhBLFdBQVcsZ0RBQVhBLFdBQVcsQ0FBRTZILGNBQWMsMERBQTNCLHNCQUE2QnlCLGlCQUFpQixDQUFDO1lBQzlDbkMsT0FBTywyQkFBRTNELDBCQUEwQiwwREFBMUIsc0JBQTRCMkQsT0FBTztZQUM1Q29DLG1CQUFtQixFQUFFLFVBQVVDLFNBQWMsRUFBRUMsdUJBQTRCLEVBQUU7Y0FDNUUsT0FBT0Msa0NBQWtDLENBQ3hDMUosV0FBVyxFQUNYYyxTQUFTLEVBQ1Q2SSxTQUFTLEVBQ1RILFNBQVMsRUFDVEMsdUJBQXVCLEVBQ3ZCTCxtQ0FBbUMsQ0FDbkM7WUFDRixDQUFDO1lBQ0RRLGlCQUFpQixFQUFFNUosV0FBVyxDQUFDYyxTQUFTO1lBQ3hDbEIsV0FBVyxFQUFFK0Q7VUFDZCxDQUFDLENBQUM7VUFDRixJQUFJMUQsdUJBQXVCLEVBQUU7WUFDNUJBLHVCQUF1QixHQUFHO2NBQ3pCQyxhQUFhLEVBQUUsS0FBSztjQUNwQkMsNkJBQTZCLEVBQUUsRUFBRTtjQUNqQ0Msc0JBQXNCLEVBQUUsRUFBRTtjQUMxQkMsNkJBQTZCLEVBQUUsRUFBRTtjQUNqQ0Msb0JBQW9CLEVBQUUsRUFBRTtjQUN4QkMsbUJBQW1CLEVBQUU7WUFDdEIsQ0FBQztVQUNGO1FBQ0Q7TUFDRDtJQUNELENBQUMsQ0FBQztFQUNIO0VBQ0EsU0FBUzZFLHFCQUFxQixDQUM3QnhGLFdBQWdCLEVBQ2hCRyxhQUEyQixFQUMzQjRELFlBQWlCLEVBQ2pCM0QsV0FBZ0IsRUFDaEJ3RSxpQkFBc0IsRUFDdEJJLGdCQUFxQixFQUNyQmlGLGNBQW1CLEVBQ25CQyxjQUFtQixFQUNuQmxDLGFBQWtCLEVBQ2xCQyxjQUE4QixFQUM5QjVILHVCQUFpRCxFQUNoRDtJQUNELE9BQU8sSUFBSVEsT0FBTyxDQUFPLENBQUNrQyxPQUFPLEVBQUVqQyxNQUFNLEtBQUs7TUFDN0MsSUFBSXFKLGVBQWUsR0FBR25LLFdBQVcsR0FBR0EsV0FBVyxHQUFHLElBQUk7TUFDdERtSyxlQUFlLEdBQ2RBLGVBQWUsQ0FBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUd1RCxlQUFlLENBQUN4RCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUN3RCxlQUFlLENBQUN4RCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMvRixNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUd1SixlQUFlO01BQ3hILE1BQU1DLGlCQUFpQixHQUFHRCxlQUFlLElBQUluQyxhQUFhLEdBQUksR0FBRUEsYUFBYyxJQUFHbUMsZUFBZ0IsRUFBQyxHQUFHLEVBQUU7TUFDdkcsTUFBTUUsYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQ0osY0FBYyxDQUFDO01BQ3RELE1BQU1LLGlCQUFpQixHQUFHRixhQUFhLENBQUNHLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRVQsU0FBUyxFQUFFSyxpQkFBaUIsQ0FBQztNQUVwSHRLLFVBQVUsQ0FBQzJLLE9BQU8sQ0FBQ0YsaUJBQWlCLEVBQUU7UUFDckNHLE9BQU8sRUFBRSxnQkFBZ0JDLE9BQVksRUFBRTtVQUN0QyxJQUFJQSxPQUFPLEtBQUs5SyxNQUFNLENBQUMrSyxFQUFFLEVBQUU7WUFDMUIsSUFBSTtjQUNILE1BQU1DLFVBQVUsR0FBRyxNQUFNcEMsY0FBYyxDQUN0Q3RJLGFBQWEsRUFDYkMsV0FBVyxFQUNYOEosY0FBYyxFQUNkakMsY0FBYyxFQUNkNUgsdUJBQXVCLENBQ3ZCO2NBQ0QwQyxPQUFPLENBQUM4SCxVQUFVLENBQUM7WUFDcEIsQ0FBQyxDQUFDLE9BQU9DLE1BQVcsRUFBRTtjQUNyQixJQUFJO2dCQUNILE1BQU03QyxjQUFjLENBQUN5QixpQkFBaUIsRUFBRTtnQkFDeEM1SSxNQUFNLENBQUNnSyxNQUFNLENBQUM7Y0FDZixDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFO2dCQUNYakssTUFBTSxDQUFDZ0ssTUFBTSxDQUFDO2NBQ2Y7WUFDRDtVQUNELENBQUMsTUFBTTtZQUNOL0gsT0FBTyxDQUFDckQsU0FBUyxDQUFDc0wsa0JBQWtCLENBQUM7VUFDdEM7UUFDRDtNQUNELENBQUMsQ0FBQztJQUNILENBQUMsQ0FBQztFQUNIO0VBRUEsZUFBZUMsZ0JBQWdCLENBQzlCOUssYUFBMkIsRUFDM0JDLFdBQWdCLEVBQ2hCOEosY0FBbUIsRUFDbkJqQyxjQUE4QixFQUM5Qi9HLFNBQWMsRUFDZGdLLE9BQVksRUFDWkMsUUFBaUIsRUFDakI5Syx1QkFBaUQsRUFDaEQ7SUFBQTtJQUNELE1BQU0rSyxPQUFPLEdBQUcsTUFBTTNDLGNBQWMsQ0FBQ3RJLGFBQWEsRUFBRUMsV0FBVyxFQUFFOEosY0FBYyxFQUFFakMsY0FBYyxFQUFFNUgsdUJBQXVCLENBQUM7SUFDekg7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBLDZCQUFJRCxXQUFXLENBQUNjLFNBQVMsa0RBQXJCLHNCQUF1Qk4sTUFBTSxFQUFFO01BQ2xDLElBQUl3SyxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFFeEQsSUFBSSxDQUFFeUQsYUFBa0IsSUFBS0EsYUFBYSxDQUFDdEosTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFO1FBQy9FLE1BQU1xSixPQUFPO01BQ2Q7SUFDRDtJQUVBLE1BQU0xQyxRQUFRLEdBQUdDLElBQUksQ0FBQ0MsaUJBQWlCLEVBQUUsQ0FBQ0MsZUFBZSxFQUFFLENBQUNDLE9BQU8sRUFBRTtJQUNyRSxJQUFJekksdUJBQXVCLElBQUlBLHVCQUF1QixDQUFDQyxhQUFhLElBQUlELHVCQUF1QixDQUFDRSw2QkFBNkIsQ0FBQ0ssTUFBTSxFQUFFO01BQ3JJLElBQUksQ0FBQ3VLLFFBQVEsRUFBRTtRQUNkOUssdUJBQXVCLENBQUNLLG9CQUFvQixHQUFHTCx1QkFBdUIsQ0FBQ0ssb0JBQW9CLENBQUNxSSxNQUFNLENBQUNMLFFBQVEsQ0FBQztNQUM3RyxDQUFDLE1BQU07UUFDTkMsSUFBSSxDQUFDQyxpQkFBaUIsRUFBRSxDQUFDVyxXQUFXLENBQUNsSix1QkFBdUIsQ0FBQ0ssb0JBQW9CLENBQUM7UUFDbEYsSUFBSThJLG1DQUFtQyxHQUFHLEtBQUs7UUFDL0MsSUFDRXBKLFdBQVcsQ0FBQ3FELFFBQVEsSUFBSXBELHVCQUF1QixDQUFDRyxzQkFBc0IsQ0FBQ0ksTUFBTSxJQUM5RTZJLGlDQUFpQyxDQUFDckosV0FBVyxDQUFDcUQsUUFBUSxDQUFDLEVBQ3REO1VBQ0QrRixtQ0FBbUMsR0FBRyxJQUFJO1FBQzNDO1FBQ0EsSUFBSWQsUUFBUSxDQUFDOUgsTUFBTSxFQUFFO1VBQ3BCO1VBQ0FzSyxPQUFPLENBQUNJLGVBQWUsQ0FBQyxZQUFZLEVBQUUsWUFBWTtZQUNqRHJELGNBQWMsQ0FBQ3lCLGlCQUFpQixDQUFDO2NBQ2hDQyxtQkFBbUIsRUFBRSxVQUFVQyxTQUFjLEVBQUVDLHVCQUE0QixFQUFFO2dCQUM1RSxPQUFPQyxrQ0FBa0MsQ0FDeEMxSixXQUFXLEVBQ1hjLFNBQVMsRUFDVGdLLE9BQU8sRUFDUHRCLFNBQVMsRUFDVEMsdUJBQXVCLEVBQ3ZCTCxtQ0FBbUMsQ0FDbkM7Y0FDRixDQUFDO2NBQ0RqQyxPQUFPLEVBQUVuSCxXQUFXLENBQUNtSCxPQUFPO2NBQzVCeUMsaUJBQWlCLEVBQUU1SixXQUFXLENBQUNjLFNBQVM7Y0FDeENsQixXQUFXLEVBQUVJLFdBQVcsQ0FBQzREO1lBQzFCLENBQUMsQ0FBQztVQUNILENBQUMsQ0FBQztRQUNIO01BQ0Q7SUFDRCxDQUFDLE1BQU0sSUFBSTBFLFFBQVEsQ0FBQzlILE1BQU0sRUFBRTtNQUMzQjtNQUNBLElBQUk0SSxtQ0FBbUMsR0FBRyxLQUFLO01BQy9DLElBQ0VwSixXQUFXLENBQUNxRCxRQUFRLElBQUlwRCx1QkFBdUIsSUFBSUEsdUJBQXVCLENBQUNHLHNCQUFzQixDQUFDSSxNQUFNLElBQ3pHNkksaUNBQWlDLENBQUNySixXQUFXLENBQUNxRCxRQUFRLENBQUMsRUFDdEQ7UUFDRCtGLG1DQUFtQyxHQUFHLElBQUk7TUFDM0M7TUFDQTBCLE9BQU8sQ0FBQ0ksZUFBZSxDQUFDLFlBQVksRUFBRSxZQUFZO1FBQ2pEckQsY0FBYyxDQUFDeUIsaUJBQWlCLENBQUM7VUFDaEM2QiwyQkFBMkIsRUFBRW5MLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFOEssT0FBTyxDQUFDTSxNQUFNLEVBQUU7VUFDMUQ3QixtQkFBbUIsRUFBRSxVQUFVQyxTQUFjLEVBQUVDLHVCQUE0QixFQUFFO1lBQzVFLE9BQU9DLGtDQUFrQyxDQUN4QzFKLFdBQVcsRUFDWGMsU0FBUyxFQUNUZ0ssT0FBTyxFQUNQdEIsU0FBUyxFQUNUQyx1QkFBdUIsRUFDdkJMLG1DQUFtQyxDQUNuQztVQUNGLENBQUM7VUFDRGpDLE9BQU8sRUFBRW5ILFdBQVcsQ0FBQ21ILE9BQU87VUFDNUJ5QyxpQkFBaUIsRUFBRTVKLFdBQVcsQ0FBQ2MsU0FBUztVQUN4Q2xCLFdBQVcsRUFBRUksV0FBVyxDQUFDNEQ7UUFDMUIsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxDQUFDO0lBQ0g7SUFFQSxPQUFPb0gsT0FBTztFQUNmO0VBRUEsU0FBU2pELHFCQUFxQixDQUFDL0gsV0FBZ0IsRUFBRXdELDBCQUErQixFQUFFZSxnQkFBcUIsRUFBRTtJQUN4RyxJQUNDZiwwQkFBMEIsQ0FBQ29ELG9CQUFvQixJQUMvQ3BELDBCQUEwQixDQUFDcUQscUJBQXFCLElBQ2hEckQsMEJBQTBCLENBQUMxQyxTQUFTLElBQ3BDMEMsMEJBQTBCLENBQUMxQyxTQUFTLENBQUNOLE1BQU0sSUFDM0MrRCxnQkFBZ0IsQ0FBQ29ELFFBQVEsRUFDeEI7TUFDRCxJQUFJMEQsZ0JBQWdCLEdBQUcsRUFBRTtNQUN6QjtNQUNBLE1BQU0vRCxRQUFRLEdBQUc5RCwwQkFBMEIsQ0FBQzhELFFBQVE7TUFDcEQsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDZCtELGdCQUFnQixHQUFHckwsV0FBVyxDQUFDNkYsYUFBYSxJQUFJLEVBQUU7UUFDbER0RSxhQUFhLENBQUMrSixtQkFBbUIsQ0FDaEM5SCwwQkFBMEIsQ0FBQ29ELG9CQUFvQixFQUMvQzJFLElBQUksQ0FBQ0MsS0FBSyxDQUFDaEksMEJBQTBCLENBQUNxRCxxQkFBcUIsQ0FBQyxFQUM1RDdHLFdBQVcsQ0FBQzZGLGFBQWEsRUFDekIsT0FBTyxDQUNQO01BQ0YsQ0FBQyxNQUFNLElBQUlyQywwQkFBMEIsQ0FBQzJELE9BQU8sRUFBRTtRQUM5QyxNQUFNc0UsUUFBUSxHQUFHakksMEJBQTBCLENBQUMyRCxPQUFPO1FBQ25ELElBQUlzRSxRQUFRLENBQUNDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1VBQ3JDTCxnQkFBZ0IsR0FBR0ksUUFBUSxDQUFDRSxtQkFBbUIsRUFBRTtVQUNqRHBLLGFBQWEsQ0FBQytKLG1CQUFtQixDQUNoQzlILDBCQUEwQixDQUFDb0Qsb0JBQW9CLEVBQy9DMkUsSUFBSSxDQUFDQyxLQUFLLENBQUNoSSwwQkFBMEIsQ0FBQ3FELHFCQUFxQixDQUFDLEVBQzVEd0UsZ0JBQWdCLEVBQ2hCLE9BQU8sQ0FDUDtRQUNGO01BQ0Q7TUFDQTtNQUNBTyxZQUFZLENBQUNDLG1DQUFtQyxDQUFDckksMEJBQTBCLENBQUNvRCxvQkFBb0IsRUFBRXlFLGdCQUFnQixDQUFDO0lBQ3BIO0VBQ0Q7RUFFQSxTQUFTM0Isa0NBQWtDLENBQzFDMUosV0FBZ0IsRUFDaEJjLFNBQWMsRUFDZGdLLE9BQVksRUFDWnhDLFFBQWEsRUFDYm1CLHVCQUFnRixFQUNoRkwsbUNBQTRDLEVBTzNDO0lBQ0QsSUFBSTBDLGNBQWMsR0FBR3JDLHVCQUF1QixDQUFDcUMsY0FBYztNQUMxRHhDLGlCQUFpQixHQUFHRyx1QkFBdUIsQ0FBQ0gsaUJBQWlCO0lBQzlELE1BQU1tQyxRQUFRLEdBQUd6TCxXQUFXLENBQUNtSCxPQUFPO0lBQ3BDLE1BQU00RSxlQUFlLEdBQUd4RCxJQUFJLENBQUN5RCx3QkFBd0IsQ0FBQyxhQUFhLENBQUM7SUFDcEUsTUFBTUMsZUFBZSxHQUFHM0QsUUFBUSxDQUFDNEQsTUFBTSxDQUFDLFVBQVVDLE9BQVksRUFBRTtNQUFBO01BQy9ELE9BQU8sd0JBQUFBLE9BQU8sQ0FBQ0MsVUFBVSxFQUFFLHdEQUFwQixvQkFBdUIsQ0FBQyxDQUFDLE1BQUssRUFBRTtJQUN4QyxDQUFDLENBQUM7SUFDRixNQUFNQyxXQUFXLEdBQUcvRCxRQUFRLENBQUM0RCxNQUFNLENBQUMsVUFBVUMsT0FBWSxFQUFFO01BQUE7TUFDM0QsT0FDQ0EsT0FBTyxDQUFDQyxVQUFVLElBQ2xCLHlCQUFBRCxPQUFPLENBQUNDLFVBQVUsRUFBRSx5REFBcEIscUJBQXVCLENBQUMsQ0FBQyxDQUFDNUYsT0FBTyxDQUFDeEcsV0FBVyxDQUFDeUYsVUFBVSxDQUFDLE1BQUssQ0FBQyxDQUFDLEtBQ2hFekYsV0FBVyxhQUFYQSxXQUFXLGdEQUFYQSxXQUFXLENBQUV3RSxpQkFBaUIsMERBQTlCLHNCQUFnQ2dELElBQUksQ0FBQyxVQUFVOEUsV0FBZ0IsRUFBRTtRQUFBO1FBQ2hFLE9BQU8seUJBQUFILE9BQU8sQ0FBQ0MsVUFBVSxFQUFFLHlEQUFwQixxQkFBdUIsQ0FBQyxDQUFDLENBQUM1RixPQUFPLENBQUM4RixXQUFXLENBQUMzSCxLQUFLLENBQUMsTUFBSyxDQUFDLENBQUM7TUFDbkUsQ0FBQyxDQUFDO0lBRUosQ0FBQyxDQUFDO0lBQ0YwSCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRXZELE9BQU8sQ0FBQyxVQUFVeUQsVUFBZSxFQUFFO01BQy9DQSxVQUFVLENBQUNDLFdBQVcsR0FBRyxJQUFJO0lBQzlCLENBQUMsQ0FBQztJQUVGLE1BQU1DLGlCQUFpQixHQUFHSixXQUFXLENBQUM3TCxNQUFNLEdBQUcsSUFBSSxHQUFHLEtBQUs7SUFDM0QsSUFBSWtNLDJCQUEyQixHQUFHLEtBQUs7SUFDdkMsSUFBSXRELG1DQUFtQyxJQUFJLENBQUNxRCxpQkFBaUIsRUFBRTtNQUFBO01BQzlEQywyQkFBMkIsR0FBRyxJQUFJO01BQ2xDLElBQUlDLFFBQVEsR0FBR1osZUFBZSxDQUFDM0IsT0FBTyxDQUFDLDRDQUE0QyxDQUFDO01BQ3BGLElBQUl3QyxnQkFBZ0IsR0FBR2IsZUFBZSxDQUFDM0IsT0FBTyxDQUFDLG1EQUFtRCxDQUFDO01BQ25HLE1BQU15QyxZQUFZLEdBQUd0RSxJQUFJLENBQUNDLGlCQUFpQixFQUFFLENBQUNDLGVBQWUsRUFBRTtNQUMvRCxNQUFNcUUsZUFBZSxHQUFHRCxZQUFZLENBQUNuRSxPQUFPLEVBQUU7TUFDOUMsTUFBTXFFLGNBQWMsR0FBR0MsZUFBZSxDQUFDQyxXQUFXLENBQUMsSUFBSSxDQUFDO01BQ3hELElBQUlDLGNBQWM7TUFDbEIsTUFBTUMsVUFBVSxHQUFHMUIsUUFBUSxJQUFJQSxRQUFRLENBQUN0RixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUNpSCxXQUFXLENBQUMsYUFBYSxDQUFDO01BRWpGLE1BQU1DLDZCQUE2QixHQUFHL0UsUUFBUSxDQUFDdEMsU0FBUyxDQUFDLFVBQVVtRyxPQUFnQixFQUFFO1FBQ3BGLE9BQU9BLE9BQU8sQ0FBQ21CLE9BQU8sRUFBRSxLQUFLLE9BQU8sSUFBSW5CLE9BQU8sQ0FBQ21CLE9BQU8sRUFBRSxLQUFLLFNBQVM7TUFDeEUsQ0FBQyxDQUFDO01BQ0YsTUFBTUMsNEJBQTRCLEdBQUdULGVBQWUsQ0FBQzlHLFNBQVMsQ0FBQyxVQUFVbUcsT0FBZ0IsRUFBRTtRQUMxRixPQUFPQSxPQUFPLENBQUNtQixPQUFPLEVBQUUsS0FBSyxPQUFPLElBQUluQixPQUFPLENBQUNtQixPQUFPLEVBQUUsS0FBSyxTQUFTO01BQ3hFLENBQUMsQ0FBQztNQUVGLElBQUlELDZCQUE2QixLQUFLLENBQUMsSUFBSUUsNEJBQTRCLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQXZOLFdBQVcsYUFBWEEsV0FBVyxpREFBWEEsV0FBVyxDQUFFYyxTQUFTLDJEQUF0Qix1QkFBd0JOLE1BQU0sSUFBRyxDQUFDLEVBQUU7UUFDckgsSUFBSXNNLGVBQWUsQ0FBQ3RNLE1BQU0sS0FBSyxDQUFDLElBQUl1TSxjQUFjLENBQUN2TSxNQUFNLEtBQUssQ0FBQyxFQUFFO1VBQ2hFLElBQUkyTSxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQ3pCTCxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUNVLFVBQVUsQ0FDNUJ6QixlQUFlLENBQUMzQixPQUFPLENBQUMsa0RBQWtELENBQUMsR0FDMUUsTUFBTSxHQUNOMEMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDVyxVQUFVLEVBQUUsQ0FDaEM7VUFDRixDQUFDLE1BQU07WUFDTmQsUUFBUSxHQUFHUSxVQUFVLEdBQ2xCcEIsZUFBZSxDQUFDM0IsT0FBTyxDQUFDLHVEQUF1RCxDQUFDLEdBQ2hGMkIsZUFBZSxDQUFDM0IsT0FBTyxDQUFDLGtEQUFrRCxDQUFDO1lBQzlFd0MsZ0JBQWdCLEdBQUcsRUFBRTtZQUNyQk0sY0FBYyxHQUFHLElBQUlRLE9BQU8sQ0FBQztjQUM1QnZCLE9BQU8sRUFBRVEsUUFBUTtjQUNqQmdCLElBQUksRUFBRUMsV0FBVyxDQUFDN0ssS0FBSztjQUN2QjhLLE1BQU0sRUFBRSxFQUFFO2NBQ1ZDLFVBQVUsRUFBRSxJQUFJO2NBQ2hCQyxXQUFXLEVBQUVuQixnQkFBZ0I7Y0FDN0JvQixJQUFJLEVBQUU7WUFDUCxDQUFDLENBQUM7WUFDRjFGLFFBQVEsQ0FBQzJGLE9BQU8sQ0FBQ2YsY0FBYyxDQUFDO1lBQ2hDLElBQUk1RSxRQUFRLENBQUM5SCxNQUFNLEtBQUssQ0FBQyxFQUFFO2NBQzFCc0wsY0FBYyxHQUFHLElBQUk7Y0FDckJ4QyxpQkFBaUIsR0FBRyxLQUFLO1lBQzFCLENBQUMsTUFBTTtjQUNOQSxpQkFBaUIsR0FBRyxJQUFJO2NBQ3hCd0MsY0FBYyxHQUFHLEtBQUs7WUFDdkI7VUFDRDtRQUNELENBQUMsTUFBTTtVQUNOb0IsY0FBYyxHQUFHLElBQUlRLE9BQU8sQ0FBQztZQUM1QnZCLE9BQU8sRUFBRVEsUUFBUTtZQUNqQmdCLElBQUksRUFBRUMsV0FBVyxDQUFDN0ssS0FBSztZQUN2QjhLLE1BQU0sRUFBRSxFQUFFO1lBQ1ZDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCQyxXQUFXLEVBQUVuQixnQkFBZ0I7WUFDN0JvQixJQUFJLEVBQUU7VUFDUCxDQUFDLENBQUM7VUFDRjFGLFFBQVEsQ0FBQzJGLE9BQU8sQ0FBQ2YsY0FBYyxDQUFDO1VBQ2hDLElBQUk1RSxRQUFRLENBQUM5SCxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCc0wsY0FBYyxHQUFHLElBQUk7WUFDckJ4QyxpQkFBaUIsR0FBRyxLQUFLO1VBQzFCLENBQUMsTUFBTTtZQUNOQSxpQkFBaUIsR0FBRyxJQUFJO1lBQ3hCd0MsY0FBYyxHQUFHLEtBQUs7VUFDdkI7UUFDRDtNQUNEO0lBQ0Q7SUFFQSxJQUFJaEIsT0FBTyxJQUFJQSxPQUFPLENBQUNNLE1BQU0sRUFBRSxJQUFJdEssU0FBUyxDQUFDTixNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUNSLFdBQVcsQ0FBQ3NILFFBQVEsRUFBRTtNQUNuRixJQUFJLENBQUN0SCxXQUFXLENBQUNxRCxRQUFRLEVBQUU7UUFDMUI7UUFDQSxJQUFJdkMsU0FBUyxDQUFDTixNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUNpTSxpQkFBaUIsRUFBRTtVQUMvQztVQUNBO1VBQ0E7VUFDQTNCLE9BQU8sQ0FBQ29ELEtBQUssRUFBRTtVQUNmcEQsT0FBTyxDQUFDcUQsT0FBTyxFQUFFO1FBQ2xCO01BQ0QsQ0FBQyxNQUFNLElBQUksQ0FBQzFCLGlCQUFpQixFQUFFO1FBQzlCO1FBQ0EzQixPQUFPLENBQUNvRCxLQUFLLEVBQUU7UUFDZnBELE9BQU8sQ0FBQ3FELE9BQU8sRUFBRTtNQUNsQjtJQUNEO0lBQ0EsSUFBSUMsZ0JBQXVCLEdBQUcsRUFBRTtJQUNoQyxNQUFNQyxVQUFVLEdBQUd2RCxPQUFPLElBQUlBLE9BQU8sQ0FBQ00sTUFBTSxFQUFFO0lBQzlDLElBQUksQ0FBQ3NCLDJCQUEyQixFQUFFO01BQUE7TUFDakMsSUFDQ3BFLFFBQVEsQ0FBQzlILE1BQU0sS0FBSyxDQUFDLElBQ3JCOEgsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOEQsVUFBVSxJQUN0QiwwQkFBQTlELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzhELFVBQVUsRUFBRSwwREFBeEIsc0JBQTJCLENBQUMsQ0FBQyxNQUFLekMsU0FBUyxJQUMzQywyQkFBQXJCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzhELFVBQVUsRUFBRSwyREFBeEIsdUJBQTJCLENBQUMsQ0FBQyxNQUFLLEVBQUUsRUFDbkM7UUFDRCxJQUFLWCxRQUFRLElBQUlBLFFBQVEsQ0FBQ3RGLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQ2lILFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLElBQUssQ0FBQzNCLFFBQVEsRUFBRTtVQUM1RjtVQUNBSyxjQUFjLEdBQUcsQ0FBQ1csaUJBQWlCO1VBQ25DbkQsaUJBQWlCLEdBQUcsS0FBSztRQUMxQixDQUFDLE1BQU0sSUFBSW1DLFFBQVEsSUFBSUEsUUFBUSxDQUFDdEYsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDaUgsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRTtVQUNuRnRCLGNBQWMsR0FBRyxLQUFLO1VBQ3RCeEMsaUJBQWlCLEdBQUcsS0FBSztRQUMxQjtNQUNELENBQUMsTUFBTSxJQUFJbUMsUUFBUSxFQUFFO1FBQ3BCLElBQUlBLFFBQVEsQ0FBQ3RGLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQ2lILFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLEVBQUU7VUFDakUsSUFBSWlCLFVBQVUsSUFBSTVCLGlCQUFpQixFQUFFO1lBQ3BDbkQsaUJBQWlCLEdBQUcsS0FBSztVQUMxQjtRQUNELENBQUMsTUFBTSxJQUFJbUMsUUFBUSxDQUFDdEYsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDaUgsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRTtVQUN2RSxJQUFJLENBQUNpQixVQUFVLElBQUk1QixpQkFBaUIsRUFBRTtZQUNyQ25ELGlCQUFpQixHQUFHLElBQUk7WUFDeEI4RSxnQkFBZ0IsR0FBR25DLGVBQWUsQ0FBQ3RELE1BQU0sQ0FBQzBELFdBQVcsQ0FBQztVQUN2RCxDQUFDLE1BQU0sSUFBSSxDQUFDZ0MsVUFBVSxJQUFJcEMsZUFBZSxDQUFDekwsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2RDtZQUNBO1lBQ0E4SSxpQkFBaUIsR0FBRyxLQUFLO1VBQzFCO1FBQ0Q7TUFDRDtJQUNEO0lBRUEsT0FBTztNQUNOd0MsY0FBYyxFQUFFQSxjQUFjO01BQzlCeEMsaUJBQWlCLEVBQUVBLGlCQUFpQjtNQUNwQzhFLGdCQUFnQixFQUFFQSxnQkFBZ0IsQ0FBQzVOLE1BQU0sR0FBRzROLGdCQUFnQixHQUFHOUYsUUFBUTtNQUN2RWdHLG9CQUFvQixFQUNuQjdDLFFBQVEsSUFBSUEsUUFBUSxDQUFDQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSXNCLGVBQWUsQ0FBQ3VCLGtCQUFrQixDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUvQyxRQUFRLEVBQUUzSyxTQUFTLENBQUM7TUFDakgyTix3QkFBd0IsRUFBRXpPLFdBQVcsQ0FBQ3FEO0lBQ3ZDLENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBRUEsU0FBUzhCLHlCQUF5QixDQUNqQ3ZGLFdBQW1CLEVBQ25CRyxhQUEyQixFQUMzQjRELFlBQW9CLEVBQ3BCM0QsV0FBZ0IsRUFDaEJ3RSxpQkFBb0MsRUFDcENJLGdCQUFxQixFQUNyQmlGLGNBQW1CLEVBQ25CQyxjQUFtQixFQUNuQmxDLGFBQWtCLEVBQ2xCQyxjQUFtQixFQUNuQjVILHVCQUFpRCxFQUNoRDtJQUNELE1BQU15TyxLQUFLLEdBQUdDLFFBQVEsQ0FBQzlFLGNBQWMsRUFBRWpLLFdBQVcsQ0FBQztNQUNsRGdQLFNBQVMsR0FBRy9FLGNBQWMsQ0FBQzFELFFBQVEsRUFBRSxDQUFDckcsTUFBTSxDQUFDa0IsWUFBWSxFQUFFO01BQzNENk4sZ0JBQWdCLEdBQUdELFNBQVMsQ0FBQ3ZOLG9CQUFvQixDQUFDcU4sS0FBSyxDQUFDO01BQ3hESSxlQUFlLEdBQUdqRixjQUFjLENBQUMxSCxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQ25EMEgsY0FBYyxDQUFDMUksT0FBTyxFQUFFLENBQUNvRixLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDdERzRCxjQUFjLENBQUMxSSxPQUFPLEVBQUUsQ0FBQ29GLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDMUN3SSxpQkFBaUIsR0FBR0gsU0FBUyxDQUFDdk4sb0JBQW9CLENBQUN5TixlQUFlLENBQUM7TUFDbkUvSyxlQUFlLEdBQUcvRCxXQUFXLENBQUM4RyxjQUFjO01BQzVDa0ksYUFBYSxHQUFHLDRDQUE0QztJQUM3RCxPQUFPLElBQUl2TyxPQUFPLENBQUMsZ0JBQWdCa0MsT0FBTyxFQUFFakMsTUFBTSxFQUFFO01BQ25ELElBQUl1TyxvQkFBMkMsQ0FBQyxDQUFDOztNQUVqRCxNQUFNQyxjQUFjLEdBQUczRyxJQUFJLENBQUNDLGlCQUFpQixFQUFFO01BRS9DLE1BQU0yRyxnQ0FBZ0MsR0FBSUMsU0FBMEIsSUFBSztRQUN4RSxNQUFNQyxXQUFXLEdBQUdILGNBQWMsQ0FBQ3pHLGVBQWUsRUFBRSxDQUFDQyxPQUFPLEVBQUU7UUFDOUQsTUFBTXhCLFNBQVMsR0FBR29JLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRUYsU0FBUyxDQUFDekssS0FBSyxDQUFDLENBQUM7UUFDckQ7UUFDQSxNQUFNNEssZ0JBQWdCLEdBQUdGLFdBQVcsQ0FBQ25ELE1BQU0sQ0FBRXNELEdBQVksSUFDeERBLEdBQUcsQ0FBQ0MsYUFBYSxFQUFFLENBQUNqSSxJQUFJLENBQUVrSSxFQUFVLElBQUt4SSxTQUFTLENBQUNYLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ29KLFFBQVEsQ0FBQ0QsRUFBRSxDQUFDLENBQUMsQ0FDM0U7UUFDRFIsY0FBYyxDQUFDVSxjQUFjLENBQUNMLGdCQUFnQixDQUFDO01BQ2hELENBQUM7TUFFRCxNQUFNTSxXQUFXLEdBQUc7UUFDbkJDLFlBQVksRUFBRSxnQkFBZ0JDLE1BQTJDLEVBQWlCO1VBQ3pGLE1BQU1DLEtBQUssR0FBR0QsTUFBTSxDQUFDRSxTQUFTLEVBQUU7VUFDaEMsTUFBTUMsbUJBQW1CLEdBQUdqQixvQkFBb0IsQ0FBQy9HLElBQUksQ0FDbkRnSSxtQkFBbUIsSUFBS0EsbUJBQW1CLENBQUNGLEtBQUssS0FBS0EsS0FBSyxDQUNyQztVQUN4QjtVQUNBYixnQ0FBZ0MsQ0FBQ2UsbUJBQW1CLENBQUNkLFNBQVMsQ0FBQztVQUMvRDtVQUNBYyxtQkFBbUIsQ0FBQ0MsaUJBQWlCLEdBQUdKLE1BQU0sQ0FBQ0ssWUFBWSxDQUFDLFNBQVMsQ0FBQztVQUN0RSxJQUFJO1lBQ0hGLG1CQUFtQixDQUFDdE8sS0FBSyxHQUFHLE1BQU1zTyxtQkFBbUIsQ0FBQ0MsaUJBQWlCO1lBQ3ZFRCxtQkFBbUIsQ0FBQ0csUUFBUSxHQUFHLEtBQUs7VUFDckMsQ0FBQyxDQUFDLE9BQU9DLEtBQUssRUFBRTtZQUNmLE9BQU9KLG1CQUFtQixDQUFDdE8sS0FBSztZQUNoQ3NPLG1CQUFtQixDQUFDRyxRQUFRLEdBQUcsSUFBSTtZQUNuQ0UsNkJBQTZCLENBQUNyQixjQUFjLEVBQUUsQ0FDN0M7Y0FDQ2dCLG1CQUFtQixFQUFFQSxtQkFBbUI7Y0FDeEMvRCxPQUFPLEVBQUdtRSxLQUFLLENBQXlCbkU7WUFDekMsQ0FBQyxDQUNELENBQUM7VUFDSDtRQUNEO01BQ0QsQ0FBQztNQUVELE1BQU1xRSxTQUFTLEdBQUdDLG9CQUFvQixDQUFDQyxZQUFZLENBQUMxQixhQUFhLEVBQUUsVUFBVSxDQUFDO01BQzlFLE1BQU0yQixlQUFlLEdBQUcsSUFBSUMsU0FBUyxDQUFDO1FBQ3JDQyxZQUFZLEVBQUUsQ0FBQztNQUNoQixDQUFDLENBQUM7TUFFRixJQUFJO1FBQ0gsTUFBTUMsZUFBZSxHQUFHLE1BQU1DLGVBQWUsQ0FBQ0MsT0FBTyxDQUNwRFIsU0FBUyxFQUNUO1VBQUVwSSxJQUFJLEVBQUU0RztRQUFjLENBQUMsRUFDdkI7VUFDQ2lDLGVBQWUsRUFBRTtZQUNoQkMsTUFBTSxFQUFFckgsY0FBYztZQUN0QnBFLFVBQVUsRUFBRXNKLGlCQUFpQjtZQUM3Qm9DLFNBQVMsRUFBRXRDO1VBQ1osQ0FBQztVQUNEdUMsTUFBTSxFQUFFO1lBQ1BGLE1BQU0sRUFBRXJILGNBQWMsQ0FBQzFELFFBQVEsRUFBRTtZQUNqQ1YsVUFBVSxFQUFFc0osaUJBQWlCLENBQUM1SSxRQUFRLEVBQUU7WUFDeENnTCxTQUFTLEVBQUV0QyxnQkFBZ0IsQ0FBQzFJLFFBQVEsRUFBRTtZQUN0Q3lJLFNBQVMsRUFBRUMsZ0JBQWdCLENBQUMxSSxRQUFRO1VBQ3JDO1FBQ0QsQ0FBQyxDQUNEO1FBQ0Q7UUFDQSxNQUFNckYsU0FBZ0IsR0FBR2QsV0FBVyxDQUFDYyxTQUFTLElBQUksRUFBRTtRQUNwRCxNQUFNdVEsZUFBc0IsR0FBRyxFQUFFO1FBQ2pDO1FBQ0EsSUFBSUMsaUJBQXNCO1FBQzFCLE1BQU1DLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDelIsYUFBYSxFQUFFeUUsaUJBQWlCLEVBQUVtTSxlQUFlLEVBQUUsSUFBSSxDQUFDO1FBQzFGLE1BQU1jLGNBQWMsR0FBSSxNQUFNQyxRQUFRLENBQUNDLElBQUksQ0FBQztVQUMzQ0MsVUFBVSxFQUFFZCxlQUFlO1VBQzNCZSxVQUFVLEVBQUVoQztRQUNiLENBQUMsQ0FBYTtRQUVkWixvQkFBb0IsR0FBR3pLLGlCQUFpQixDQUFDc04sR0FBRyxDQUFFQyxlQUFlLElBQUs7VUFDakUsTUFBTS9CLEtBQUssR0FBR3pILElBQUksQ0FBQ2xCLElBQUksQ0FBQ2lJLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRXlDLGVBQWUsQ0FBQ3BOLEtBQUssQ0FBQyxDQUFDLENBQTRCO1VBQzdGLE1BQU1xTixZQUFZLEdBQUdoQyxLQUFLLENBQUN0RSxHQUFHLENBQUMsNEJBQTRCLENBQUM7VUFDNUQsT0FBTztZQUNOMEQsU0FBUyxFQUFFMkMsZUFBZTtZQUMxQi9CLEtBQUssRUFBRUEsS0FBSztZQUNaZ0MsWUFBWSxFQUFFQTtVQUNmLENBQUM7UUFDRixDQUFDLENBQUM7UUFFRixNQUFNL0gsYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQ0osY0FBYyxDQUFDO1FBQ3RELElBQUltSSxZQUFZLEdBQUc7VUFDbEJDLGVBQWUsRUFBRSxJQUFJO1VBQUU7VUFDdkJ4USxNQUFNLEVBQUVpSTtRQUNULENBQUM7UUFFRCxJQUFJd0ksVUFBVSxHQUFHLEtBQUs7UUFFdEIsTUFBTXJILE9BQU8sR0FBRyxJQUFJc0gsTUFBTSxDQUFDOUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTFQLFdBQVcsQ0FBQyxDQUFDLEVBQUU7VUFDakV5UyxLQUFLLEVBQUUxTyxZQUFZLElBQUlzRyxhQUFhLENBQUNHLE9BQU8sQ0FBQyw0Q0FBNEMsQ0FBQztVQUMxRmtJLE9BQU8sRUFBRSxDQUFDYixjQUFjLENBQUM7VUFDekJjLGFBQWEsRUFBRSxZQUFZO1lBQzFCO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBekgsT0FBTyxDQUFDb0QsS0FBSyxFQUFFO1lBQ2Y7VUFDRCxDQUFDOztVQUNEc0UsV0FBVyxFQUFFLElBQUlDLE1BQU0sQ0FBQ25ELFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUxUCxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDOUU4UyxJQUFJLEVBQUUzTyxlQUFlLEdBQ2xCa0csYUFBYSxDQUFDRyxPQUFPLENBQUMsaURBQWlELENBQUMsR0FDeEV1SSw2QkFBNkIsQ0FBQzFJLGFBQWEsRUFBRXRHLFlBQVksRUFBRS9ELFdBQVcsRUFBRWdJLGFBQWEsQ0FBQztZQUN6RitGLElBQUksRUFBRSxZQUFZO1lBQ2xCaUYsS0FBSyxFQUFFLGtCQUFvQztjQUMxQyxJQUFJO2dCQUNIO2dCQUNBO2dCQUNBO2dCQUNBO2dCQUNBOztnQkFFQSxJQUFJVCxVQUFVLEtBQUssSUFBSSxFQUFFO2tCQUN4QjtnQkFDRDtnQkFDQUEsVUFBVSxHQUFHLElBQUk7Z0JBRWpCLElBQUksRUFBRSxNQUFNVSxtQkFBbUIsQ0FBQzNELGNBQWMsRUFBRUQsb0JBQW9CLEVBQUVoRixhQUFhLENBQUMsQ0FBQyxFQUFFO2tCQUN0RmtJLFVBQVUsR0FBRyxLQUFLO2tCQUNsQjtnQkFDRDtnQkFFQVcsVUFBVSxDQUFDQyxJQUFJLENBQUNqSSxPQUFPLENBQUM7Z0JBRXhCLElBQUlrSSxjQUF5QixHQUFHLEVBQUU7Z0JBRWxDLElBQUk7a0JBQ0g7a0JBQ0E7a0JBQ0FuTCxjQUFjLENBQUNvTCx3QkFBd0IsRUFBRTtrQkFDekM7a0JBQ0EsSUFBSUMsZUFBZTtrQkFDbkIsTUFBTUMsaUJBQWlCLEdBQUc3QixpQkFBaUIsSUFBSUEsaUJBQWlCLENBQUM4QixtQkFBbUIsRUFBRTtrQkFDdEYsS0FBSyxNQUFNbkwsQ0FBQyxJQUFJekQsaUJBQWlCLEVBQUU7b0JBQ2xDLElBQUlBLGlCQUFpQixDQUFDeUQsQ0FBQyxDQUFDLENBQUMvQixhQUFhLEVBQUU7c0JBQ3ZDLE1BQU1tTixXQUFXLEdBQUl2SSxPQUFPLENBQUMzRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQWVpSCxXQUFXLENBQ3ZFLElBQUc1SSxpQkFBaUIsQ0FBQ3lELENBQUMsQ0FBQyxDQUFDdEQsS0FBTSxFQUFDLENBQ2hDO3dCQUNEMk8sVUFBVSxHQUFHLEVBQUU7c0JBQ2hCLEtBQUssTUFBTUMsQ0FBQyxJQUFJRixXQUFXLEVBQUU7d0JBQzVCQyxVQUFVLENBQUN0SyxJQUFJLENBQUNxSyxXQUFXLENBQUNFLENBQUMsQ0FBQyxDQUFDQyxHQUFHLENBQUM7c0JBQ3BDO3NCQUNBTixlQUFlLEdBQUdJLFVBQVU7b0JBQzdCLENBQUMsTUFBTTtzQkFDTkosZUFBZSxHQUFHQyxpQkFBaUIsQ0FBQy9GLFdBQVcsQ0FBQzVJLGlCQUFpQixDQUFDeUQsQ0FBQyxDQUFDLENBQUN0RCxLQUFLLENBQUM7b0JBQzVFO29CQUNBSCxpQkFBaUIsQ0FBQ3lELENBQUMsQ0FBQyxDQUFDckcsS0FBSyxHQUFHc1IsZUFBZSxDQUFDLENBQUM7b0JBQzlDQSxlQUFlLEdBQUd2SixTQUFTO2tCQUM1QjtrQkFDQTtrQkFDQSxNQUFNOEosZUFBZSxHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTNULFdBQVcsQ0FBQztrQkFDdER5VCxlQUFlLENBQUM3UCxLQUFLLEdBQUdELFlBQVk7a0JBQ3BDLElBQUk7b0JBQ0gsTUFBTXFILE9BQU8sR0FBRyxNQUFNSCxnQkFBZ0IsQ0FDckM5SyxhQUFhLEVBQ2IwVCxlQUFlLEVBQ2YzSixjQUFjLEVBQ2RqQyxjQUFjLEVBQ2QvRyxTQUFTLEVBQ1RnSyxPQUFPLEVBQ1AsS0FBSyxFQUNMN0ssdUJBQXVCLENBQ3ZCO29CQUNEZ1MsWUFBWSxHQUFHO3NCQUNkQyxlQUFlLEVBQUUsS0FBSztzQkFDdEJ4USxNQUFNLEVBQUVzSjtvQkFDVCxDQUFDO29CQUNERixPQUFPLENBQUNvRCxLQUFLLEVBQUU7b0JBQ2Y7a0JBQ0QsQ0FBQyxDQUFDLE9BQU94RCxNQUFXLEVBQUU7b0JBQ3JCLE1BQU1wQyxRQUFRLEdBQUdzTCxHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsT0FBTyxFQUFFLENBQUN0TCxpQkFBaUIsRUFBRSxDQUFDQyxlQUFlLEVBQUUsQ0FBQ0MsT0FBTyxFQUFFO29CQUNqRixJQUNDekksdUJBQXVCLElBQ3ZCQSx1QkFBdUIsQ0FBQ0MsYUFBYSxJQUNyQ0QsdUJBQXVCLENBQUNFLDZCQUE2QixDQUFDSyxNQUFNLEVBQzNEO3NCQUNEUCx1QkFBdUIsQ0FBQ0ssb0JBQW9CLEdBQzNDTCx1QkFBdUIsQ0FBQ0ssb0JBQW9CLENBQUNxSSxNQUFNLENBQUNMLFFBQVEsQ0FBQztvQkFDL0Q7b0JBQ0EsTUFBTW9DLE1BQU07a0JBQ2IsQ0FBQyxTQUFTO29CQUNULElBQ0N6Syx1QkFBdUIsSUFDdkJBLHVCQUF1QixDQUFDQyxhQUFhLElBQ3JDRCx1QkFBdUIsQ0FBQ0UsNkJBQTZCLENBQUNLLE1BQU0sRUFDM0Q7c0JBQ0QsSUFBSTt3QkFDSHdTLGNBQWMsR0FDYi9TLHVCQUF1QixDQUFDRSw2QkFBNkIsQ0FHcEQyUixHQUFHLENBQUUvSSxJQUFJLElBQUtBLElBQUksQ0FBQzNGLE9BQU8sQ0FBQzZGLFVBQVUsRUFBRSxDQUFDO3dCQUMxQ3dLLGVBQWUsQ0FBQzNTLFNBQVMsR0FBR2tTLGNBQWM7d0JBQzFDLE1BQU1oSSxPQUFPLEdBQUcsTUFBTUgsZ0JBQWdCLENBQ3JDOUssYUFBYSxFQUNiMFQsZUFBZSxFQUNmM0osY0FBYyxFQUNkakMsY0FBYyxFQUNkL0csU0FBUyxFQUNUZ0ssT0FBTyxFQUNQLElBQUksRUFDSjdLLHVCQUF1QixDQUN2Qjt3QkFFREEsdUJBQXVCLENBQUNFLDZCQUE2QixHQUFHLEVBQUU7d0JBQzFEOFIsWUFBWSxHQUFHOzBCQUNkQyxlQUFlLEVBQUUsS0FBSzswQkFDdEJ4USxNQUFNLEVBQUVzSjt3QkFDVCxDQUFDO3dCQUNEO3NCQUNELENBQUMsQ0FBQyxNQUFNO3dCQUNQLElBQ0MvSyx1QkFBdUIsQ0FBQ0MsYUFBYSxJQUNyQ0QsdUJBQXVCLENBQUNFLDZCQUE2QixDQUFDSyxNQUFNLEVBQzNEOzBCQUNEK0gsSUFBSSxDQUFDQyxpQkFBaUIsRUFBRSxDQUFDVyxXQUFXLENBQUNsSix1QkFBdUIsQ0FBQ0ssb0JBQW9CLENBQUM7d0JBQ25GO3dCQUNBLElBQUk4SSxtQ0FBbUMsR0FBRyxLQUFLO3dCQUMvQyxJQUNFcEosV0FBVyxDQUFDcUQsUUFBUSxJQUFJcEQsdUJBQXVCLENBQUNHLHNCQUFzQixDQUFDSSxNQUFNLElBQzlFNkksaUNBQWlDLENBQUNySixXQUFXLENBQUNxRCxRQUFRLENBQUMsRUFDdEQ7MEJBQ0QrRixtQ0FBbUMsR0FBRyxJQUFJO3dCQUMzQzt3QkFDQSxNQUFNdkIsY0FBYyxDQUFDeUIsaUJBQWlCLENBQUM7MEJBQ3RDNkIsMkJBQTJCLEVBQUVMLE9BQU8sQ0FBQ00sTUFBTSxFQUFFOzBCQUM3QzdCLG1CQUFtQixFQUFFLFVBQVVDLFNBQWMsRUFBRUMsdUJBQTRCLEVBQUU7NEJBQzVFLE9BQU9DLGtDQUFrQyxDQUN4QytKLGVBQWUsRUFDZjNTLFNBQVMsRUFDVGdLLE9BQU8sRUFDUHRCLFNBQVMsRUFDVEMsdUJBQXVCLEVBQ3ZCTCxtQ0FBbUMsQ0FDbkM7MEJBQ0YsQ0FBQzswQkFDRFEsaUJBQWlCLEVBQUVELFNBQVM7MEJBQUU7MEJBQzlCL0osV0FBVyxFQUFFK0Q7d0JBQ2QsQ0FBQyxDQUFDO3NCQUNIO29CQUNEO29CQUNBLElBQUltUCxVQUFVLENBQUNpQixRQUFRLENBQUNqSixPQUFPLENBQUMsRUFBRTtzQkFDakNnSSxVQUFVLENBQUNrQixNQUFNLENBQUNsSixPQUFPLENBQUM7b0JBQzNCO2tCQUNEO2dCQUNELENBQUMsQ0FBQyxPQUFPSixNQUFXLEVBQUU7a0JBQ3JCLElBQUlwQixpQkFBaUIsR0FBRyxJQUFJO2tCQUM1QixJQUFJRixtQ0FBbUMsR0FBRyxLQUFLO2tCQUMvQyxJQUNFcEosV0FBVyxDQUFDcUQsUUFBUSxJQUNwQnBELHVCQUF1QixJQUN2QkEsdUJBQXVCLENBQUNHLHNCQUFzQixDQUFDSSxNQUFNLElBQ3RENkksaUNBQWlDLENBQUNySixXQUFXLENBQUNxRCxRQUFRLENBQUMsRUFDdEQ7b0JBQ0QrRixtQ0FBbUMsR0FBRyxJQUFJO2tCQUMzQztrQkFDQSxNQUFNdkIsY0FBYyxDQUFDb00sWUFBWSxDQUFDO29CQUNqQzNSLE9BQU8sRUFBRTBRLGNBQWMsQ0FBQyxDQUFDLENBQUM7b0JBQUU7b0JBQzVCN0gsMkJBQTJCLEVBQUVMLE9BQU8sQ0FBQ00sTUFBTSxFQUFFO29CQUM3QzhJLDZCQUE2QixFQUFFLFlBQVk7c0JBQzFDcEosT0FBTyxDQUFDb0QsS0FBSyxFQUFFO29CQUNoQixDQUFDO29CQUNEM0UsbUJBQW1CLEVBQUUsVUFBVUMsU0FBYyxFQUFFQyx1QkFBNEIsRUFBRTtzQkFDNUU7c0JBQ0E7c0JBQ0EsTUFBTTBLLHFCQUFxQixHQUFHekssa0NBQWtDLENBQy9EMUosV0FBVyxFQUNYYyxTQUFTLEVBQ1RnSyxPQUFPLEVBQ1B0QixTQUFTLEVBQ1RDLHVCQUF1QixFQUN2QkwsbUNBQW1DLENBQ25DO3NCQUNERSxpQkFBaUIsR0FBRzZLLHFCQUFxQixDQUFDN0ssaUJBQWlCO3NCQUMzRCxPQUFPNksscUJBQXFCO29CQUM3QixDQUFDO29CQUNEdkssaUJBQWlCLEVBQUVELFNBQVM7b0JBQUU7b0JBQzlCL0osV0FBVyxFQUFFK0QsWUFBWTtvQkFDekJ3RCxPQUFPLEVBQUVuSCxXQUFXLENBQUNtSDtrQkFDdEIsQ0FBQyxDQUFDO2tCQUNGZ0wsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO2tCQUNwQjtrQkFDQTtrQkFDQTtrQkFDQTtrQkFDQTtrQkFDQSxJQUFJN0ksaUJBQWlCLEVBQUU7b0JBQ3RCLElBQUl3QixPQUFPLENBQUNNLE1BQU0sRUFBRSxFQUFFO3NCQUNyQjtzQkFDQTtzQkFDQTtzQkFDQTtzQkFDQTtvQkFBQSxDQUNBLE1BQU07c0JBQ04xSyxNQUFNLENBQUNnSyxNQUFNLENBQUM7b0JBQ2Y7a0JBQ0Q7Z0JBQ0Q7Y0FDRCxDQUFDLFNBQVM7Z0JBQ1QsSUFBSXpLLHVCQUF1QixFQUFFO2tCQUM1QkEsdUJBQXVCLEdBQUc7b0JBQ3pCQyxhQUFhLEVBQUUsS0FBSztvQkFDcEJDLDZCQUE2QixFQUFFLEVBQUU7b0JBQ2pDQyxzQkFBc0IsRUFBRSxFQUFFO29CQUMxQkMsNkJBQTZCLEVBQUUsRUFBRTtvQkFDakNDLG9CQUFvQixFQUFFLEVBQUU7b0JBQ3hCQyxtQkFBbUIsRUFBRTtrQkFDdEIsQ0FBQztnQkFDRjtnQkFDQSxJQUFJdVMsVUFBVSxDQUFDaUIsUUFBUSxDQUFDakosT0FBTyxDQUFDLEVBQUU7a0JBQ2pDZ0ksVUFBVSxDQUFDa0IsTUFBTSxDQUFDbEosT0FBTyxDQUFDO2dCQUMzQjtjQUNEO1lBQ0Q7VUFDRCxDQUFDLENBQUM7VUFDRnNKLFNBQVMsRUFBRSxJQUFJM0IsTUFBTSxDQUFDbkQsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTFQLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUNoRjhTLElBQUksRUFBRXpJLGFBQWEsQ0FBQ0csT0FBTyxDQUFDLHlDQUF5QyxDQUFDO1lBQ3RFd0ksS0FBSyxFQUFFLFlBQVk7Y0FDbEI7Y0FDQTlILE9BQU8sQ0FBQ29ELEtBQUssRUFBRTtjQUNmO1lBQ0Q7VUFDRCxDQUFDLENBQUM7O1VBQ0Y7VUFDQTtVQUNBO1VBQ0FtRyxVQUFVLEVBQUUsZ0JBQWdCdEUsTUFBVyxFQUFFO1lBQ3hDO1lBQ0EsTUFBTXVFLFdBQVcsR0FBR1osTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU1RCxNQUFNLENBQUM7WUFFN0NsSSxjQUFjLENBQUNvTCx3QkFBd0IsRUFBRTtZQUN6QyxNQUFNc0Isd0JBQXdCLEdBQUcsWUFBWTtjQUM1QyxNQUFNeFQsVUFBVSxHQUFJK0osT0FBTyxDQUFDM0UsUUFBUSxFQUFFLENBQWdCbkYsWUFBWSxFQUFFO2dCQUNuRUMsV0FBVyxHQUFHNEksY0FBYyxDQUFDNkUsS0FBSyxJQUFJN0UsY0FBYyxDQUFDNkUsS0FBSyxDQUFDbkksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekVpTyxzQkFBc0IsR0FBR3pULFVBQVUsQ0FBQ29CLFNBQVMsQ0FDM0MsR0FBRWxCLFdBQVksdURBQXNELENBQ3JFO2NBQ0YsT0FBT3VULHNCQUFzQjtZQUM5QixDQUFDO1lBQ0QsTUFBTUMsMEJBQTBCLEdBQUcsZ0JBQWdCQyxpQkFBdUIsRUFBRTtjQUMzRSxNQUFNQyxrQkFBa0IsR0FBR0osd0JBQXdCLEVBQUU7Y0FDckQsTUFBTUssZ0JBQWdCLEdBQUcsZ0JBQWdCQyxVQUFlLEVBQUVDLGtCQUF1QixFQUFFO2dCQUNsRjtnQkFDQSxJQUFJQSxrQkFBa0IsS0FBS25MLFNBQVMsRUFBRTtrQkFDckMsSUFBSTdJLFNBQVMsQ0FBQ04sTUFBTSxHQUFHLENBQUMsSUFBSXNVLGtCQUFrQixDQUFDQyxLQUFLLEVBQUU7b0JBQ3JELElBQUk7c0JBQ0gsSUFBSUMsV0FBVyxHQUFHLE1BQU16RCxXQUFXLENBQUMwRCx3QkFBd0IsQ0FDM0RILGtCQUFrQixDQUFDQyxLQUFLLEVBQ3hCekQsaUJBQWlCLENBQUNuTCxRQUFRLEVBQUUsQ0FDNUI7c0JBQ0QsSUFBSTZPLFdBQVcsS0FBSyxJQUFJLEVBQUU7d0JBQ3pCQSxXQUFXLEdBQUcsTUFBTTFELGlCQUFpQixDQUNuQzhCLG1CQUFtQixFQUFFLENBQ3JCOEIsZUFBZSxDQUFDSixrQkFBa0IsQ0FBQ0MsS0FBSyxDQUFDO3NCQUM1QztzQkFDQSxJQUFJalUsU0FBUyxDQUFDTixNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUN6Qjt3QkFDQSxJQUFJMlUsZUFBZSxHQUFHTCxrQkFBa0IsQ0FBQ0MsS0FBSzt3QkFDOUMsSUFBSUksZUFBZSxDQUFDM08sT0FBTyxDQUFFLEdBQUVrTyxpQkFBa0IsR0FBRSxDQUFDLEtBQUssQ0FBQyxFQUFFOzBCQUMzRFMsZUFBZSxHQUFHQSxlQUFlLENBQUNDLE9BQU8sQ0FBRSxHQUFFVixpQkFBa0IsR0FBRSxFQUFFLEVBQUUsQ0FBQzt3QkFDdkU7d0JBQ0EsS0FBSyxJQUFJek0sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHbkgsU0FBUyxDQUFDTixNQUFNLEVBQUV5SCxDQUFDLEVBQUUsRUFBRTswQkFDMUMsSUFBSW5ILFNBQVMsQ0FBQ21ILENBQUMsQ0FBQyxDQUFDbUYsV0FBVyxDQUFDK0gsZUFBZSxDQUFDLEtBQUtILFdBQVcsRUFBRTs0QkFDOUQ7NEJBQ0EsT0FBTzs4QkFDTkssU0FBUyxFQUFFUixVQUFVOzhCQUNyQmpULEtBQUssRUFBRStILFNBQVM7OEJBQ2hCMkwsZ0JBQWdCLEVBQUU7NEJBQ25CLENBQUM7MEJBQ0Y7d0JBQ0Q7c0JBQ0Q7c0JBQ0EsT0FBTzt3QkFBRUQsU0FBUyxFQUFFUixVQUFVO3dCQUFFalQsS0FBSyxFQUFFb1Q7c0JBQVksQ0FBQztvQkFDckQsQ0FBQyxDQUFDLE9BQU90SyxNQUFNLEVBQUU7c0JBQ2hCNkssR0FBRyxDQUFDakYsS0FBSyxDQUFDLDhDQUE4QyxFQUFFdUUsVUFBVSxFQUFFN1UsV0FBVyxDQUFDeUYsVUFBVSxDQUFDO3NCQUM3RixPQUFPO3dCQUNONFAsU0FBUyxFQUFFUixVQUFVO3dCQUNyQmpULEtBQUssRUFBRStILFNBQVM7d0JBQ2hCNkwsa0JBQWtCLEVBQUU7c0JBQ3JCLENBQUM7b0JBQ0Y7a0JBQ0QsQ0FBQyxNQUFNO29CQUNOO29CQUNBLE9BQU87c0JBQUVILFNBQVMsRUFBRVIsVUFBVTtzQkFBRWpULEtBQUssRUFBRWtUO29CQUFtQixDQUFDO2tCQUM1RDtnQkFDRCxDQUFDLE1BQU0sSUFBSW5FLGVBQWUsSUFBS0EsZUFBZSxDQUFTOEUsS0FBSyxDQUFDWixVQUFVLENBQUMsRUFBRTtrQkFDekU7O2tCQUVBLE9BQU87b0JBQ05RLFNBQVMsRUFBRVIsVUFBVTtvQkFDckJqVCxLQUFLLEVBQUcrTyxlQUFlLENBQVM4RSxLQUFLLENBQUNaLFVBQVU7a0JBQ2pELENBQUM7Z0JBQ0YsQ0FBQyxNQUFNO2tCQUNOLE9BQU87b0JBQUVRLFNBQVMsRUFBRVIsVUFBVTtvQkFBRWpULEtBQUssRUFBRStIO2tCQUFVLENBQUM7Z0JBQ25EO2NBQ0QsQ0FBQztjQUVELE1BQU0rTCx3QkFBd0IsR0FBRyxVQUFVYixVQUFlLEVBQUU7Z0JBQzNELE1BQU05VCxVQUFVLEdBQUkrSixPQUFPLENBQUMzRSxRQUFRLEVBQUUsQ0FBZ0JuRixZQUFZLEVBQUU7a0JBQ25FMlUsOEJBQThCLEdBQUdwRSxXQUFXLENBQUNxRSxnQkFBZ0IsQ0FBQy9MLGNBQWMsQ0FBQzFJLE9BQU8sRUFBRSxFQUFFMFQsVUFBVSxDQUFDLEdBQUcsR0FBRztrQkFDekdnQixxQkFBcUIsR0FBRzlVLFVBQVUsQ0FBQ29CLFNBQVMsQ0FBQ3dULDhCQUE4QixDQUFDO2tCQUM1RUcsc0JBQXNCLEdBQ3JCRCxxQkFBcUIsSUFBSUEscUJBQXFCLENBQUMsbURBQW1ELENBQUMsQ0FBQyxDQUFDO2dCQUN2RyxPQUFPQyxzQkFBc0I7Y0FDOUIsQ0FBQztjQUVELE1BQU1DLHlCQUF5QixHQUFHLEVBQUU7Y0FDcEMsSUFBSWxCLFVBQVUsRUFBRW1CLHNCQUFzQjtjQUN0QyxLQUFLLE1BQU0vTixDQUFDLElBQUl6RCxpQkFBaUIsRUFBRTtnQkFDbENxUSxVQUFVLEdBQUdyUSxpQkFBaUIsQ0FBQ3lELENBQUMsQ0FBQyxDQUFDdEQsS0FBSztnQkFDdkNxUixzQkFBc0IsR0FBR04sd0JBQXdCLENBQUNiLFVBQVUsQ0FBQztnQkFDN0RrQix5QkFBeUIsQ0FBQy9NLElBQUksQ0FBQzRMLGdCQUFnQixDQUFDQyxVQUFVLEVBQUVtQixzQkFBc0IsQ0FBQyxDQUFDO2NBQ3JGO2NBRUEsSUFBSW5NLGNBQWMsQ0FBQzFILFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSXJCLFNBQVMsQ0FBQ04sTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDakUsSUFBSW1VLGtCQUFrQixJQUFJQSxrQkFBa0IsQ0FBQ25VLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBT21VLGtCQUFrQixLQUFLLFFBQVEsRUFBRTtrQkFDbEcsS0FBSyxNQUFNMU0sQ0FBQyxJQUFJbkgsU0FBUyxFQUFFO29CQUMxQnVRLGVBQWUsQ0FBQ3JJLElBQUksQ0FBQzVHLGlCQUFpQixDQUFDdVMsa0JBQWtCLEVBQUU3VCxTQUFTLENBQUNtSCxDQUFDLENBQUMsRUFBRWpJLFdBQVcsQ0FBQzBGLEtBQUssQ0FBQyxDQUFDO2tCQUM3RjtnQkFDRDtjQUNEO2NBRUEsTUFBTXVRLHFCQUFxQixHQUFHeFYsT0FBTyxDQUFDeVYsR0FBRyxDQUFDSCx5QkFBeUIsQ0FBQztjQUNwRSxJQUFJSSxxQkFBcUMsR0FBRzFWLE9BQU8sQ0FBQ2tDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Y0FDL0QsSUFBSXlULGdDQUFnQztjQUNwQyxJQUFJL0UsZUFBZSxJQUFJQSxlQUFlLENBQUM3USxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNsRDJWLHFCQUFxQixHQUFHMVYsT0FBTyxDQUFDeVYsR0FBRyxDQUFDN0UsZUFBZSxDQUFDO2NBQ3JEO2NBQ0EsSUFBSXJSLFdBQVcsQ0FBQzRGLDhCQUE4QixFQUFFO2dCQUMvQyxNQUFNeVEsT0FBTyxHQUFHclcsV0FBVyxDQUFDNEYsOEJBQThCLENBQ3ZEMFEsU0FBUyxDQUFDLENBQUMsRUFBRXRXLFdBQVcsQ0FBQzRGLDhCQUE4QixDQUFDMlEsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQy9FbkIsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7a0JBQ3RCL1MsYUFBYSxHQUFHckMsV0FBVyxDQUFDNEYsOEJBQThCLENBQUMwUSxTQUFTLENBQ25FdFcsV0FBVyxDQUFDNEYsOEJBQThCLENBQUMyUSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUMvRHZXLFdBQVcsQ0FBQzRGLDhCQUE4QixDQUFDcEYsTUFBTSxDQUNqRDtnQkFDRjRWLGdDQUFnQyxHQUFHSSxTQUFTLENBQUNDLGFBQWEsQ0FBQ25DLFdBQVcsRUFBRStCLE9BQU8sRUFBRWhVLGFBQWEsRUFBRTtrQkFDL0Z4QyxRQUFRLEVBQUVpQjtnQkFDWCxDQUFDLENBQUM7Y0FDSDtjQUVBLElBQUk7Z0JBQ0gsTUFBTTRWLFNBQVMsR0FBRyxNQUFNalcsT0FBTyxDQUFDeVYsR0FBRyxDQUFDLENBQ25DRCxxQkFBcUIsRUFDckJFLHFCQUFxQixFQUNyQkMsZ0NBQWdDLENBQ2hDLENBQUM7Z0JBQ0YsTUFBTU8sd0JBQTZCLEdBQUdELFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELE1BQU1FLGNBQWMsR0FBR0YsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsTUFBTUcsMkJBQTJCLEdBQUdILFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELElBQUlJLGdCQUF3Qjs7Z0JBRTVCO2dCQUNBLEtBQUssTUFBTTdPLENBQUMsSUFBSXpELGlCQUFpQixFQUFFO2tCQUFBO2tCQUNsQ3NTLGdCQUFnQixHQUFHdFMsaUJBQWlCLENBQUN5RCxDQUFDLENBQUMsQ0FBQ3RELEtBQUs7a0JBQzdDO2tCQUNBLE1BQU1vUyx1QkFBdUIsR0FBR25TLGdCQUFnQixhQUFoQkEsZ0JBQWdCLGlEQUFoQkEsZ0JBQWdCLENBQUVzRCxJQUFJLENBQ3BEQyxPQUFZLElBQUtBLE9BQU8sQ0FBQ0MsSUFBSSxLQUFLNUQsaUJBQWlCLENBQUN5RCxDQUFDLENBQUMsQ0FBQ3RELEtBQUssQ0FDN0QsMkRBRitCLHVCQUU3Qi9DLEtBQUs7a0JBQ1IsSUFBSW1WLHVCQUF1QixFQUFFO29CQUM1QnpGLGlCQUFpQixDQUFDMEYsWUFBWSxDQUFDeFMsaUJBQWlCLENBQUN5RCxDQUFDLENBQUMsQ0FBQ3RELEtBQUssRUFBRW9TLHVCQUF1QixDQUFDO2tCQUNwRixDQUFDLE1BQU0sSUFBSUYsMkJBQTJCLElBQUlBLDJCQUEyQixDQUFDSSxjQUFjLENBQUNILGdCQUFnQixDQUFDLEVBQUU7b0JBQ3ZHeEYsaUJBQWlCLENBQUMwRixZQUFZLENBQzdCeFMsaUJBQWlCLENBQUN5RCxDQUFDLENBQUMsQ0FBQ3RELEtBQUssRUFDMUJrUywyQkFBMkIsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FDN0M7a0JBQ0YsQ0FBQyxNQUFNLElBQUlILHdCQUF3QixDQUFDMU8sQ0FBQyxDQUFDLElBQUkwTyx3QkFBd0IsQ0FBQzFPLENBQUMsQ0FBQyxDQUFDckcsS0FBSyxLQUFLK0gsU0FBUyxFQUFFO29CQUMxRjJILGlCQUFpQixDQUFDMEYsWUFBWSxDQUFDeFMsaUJBQWlCLENBQUN5RCxDQUFDLENBQUMsQ0FBQ3RELEtBQUssRUFBRWdTLHdCQUF3QixDQUFDMU8sQ0FBQyxDQUFDLENBQUNyRyxLQUFLLENBQUM7b0JBQzdGO2tCQUNELENBQUMsTUFBTSxJQUFJK1Msa0JBQWtCLElBQUksQ0FBQ2dDLHdCQUF3QixDQUFDMU8sQ0FBQyxDQUFDLENBQUNxTixnQkFBZ0IsRUFBRTtvQkFDL0UsSUFBSXhVLFNBQVMsQ0FBQ04sTUFBTSxHQUFHLENBQUMsRUFBRTtzQkFDekI7c0JBQ0EsSUFBSStTLENBQUMsR0FBRyxDQUFDO3NCQUNULE9BQU9BLENBQUMsR0FBR3pTLFNBQVMsQ0FBQ04sTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDaEMsSUFDQ29XLGNBQWMsQ0FBQ3JELENBQUMsQ0FBQyxJQUNqQnFELGNBQWMsQ0FBQ3JELENBQUMsR0FBRyxDQUFDLENBQUMsSUFDckJxRCxjQUFjLENBQUNyRCxDQUFDLENBQUMsQ0FBQ3BSLFNBQVMsQ0FBQzJVLGdCQUFnQixDQUFDLEtBQzVDRixjQUFjLENBQUNyRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNwUixTQUFTLENBQUMyVSxnQkFBZ0IsQ0FBQyxFQUNqRDswQkFDRHZELENBQUMsRUFBRTt3QkFDSixDQUFDLE1BQU07MEJBQ047d0JBQ0Q7c0JBQ0Q7c0JBQ0E7c0JBQ0EsSUFBSUEsQ0FBQyxLQUFLelMsU0FBUyxDQUFDTixNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUMvQjhRLGlCQUFpQixDQUFDMEYsWUFBWSxDQUM3QnhTLGlCQUFpQixDQUFDeUQsQ0FBQyxDQUFDLENBQUN0RCxLQUFLLEVBQzFCaVMsY0FBYyxDQUFDckQsQ0FBQyxDQUFDLENBQUNwUixTQUFTLENBQUMyVSxnQkFBZ0IsQ0FBQyxDQUM3QztzQkFDRjtvQkFDRCxDQUFDLE1BQU0sSUFBSUYsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJQSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUN6VSxTQUFTLENBQUMyVSxnQkFBZ0IsQ0FBQyxFQUFFO3NCQUM5RTs7c0JBRUF4RixpQkFBaUIsQ0FBQzBGLFlBQVksQ0FDN0J4UyxpQkFBaUIsQ0FBQ3lELENBQUMsQ0FBQyxDQUFDdEQsS0FBSyxFQUMxQmlTLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3pVLFNBQVMsQ0FBQzJVLGdCQUFnQixDQUFDLENBQzdDO29CQUNGO2tCQUNEO2dCQUNEO2dCQUNBLE1BQU1JLFdBQVcsR0FBR1Asd0JBQXdCLENBQUNuUCxJQUFJLENBQUMsVUFBVTJQLE1BQVcsRUFBRTtrQkFDeEUsSUFBSUEsTUFBTSxDQUFDM0Isa0JBQWtCLEVBQUU7b0JBQzlCLE9BQU8yQixNQUFNLENBQUMzQixrQkFBa0I7a0JBQ2pDO2dCQUNELENBQUMsQ0FBQztnQkFDRjtnQkFDQSxJQUFJMEIsV0FBVyxFQUFFO2tCQUNoQixNQUFNRSxLQUFLLEdBQUduTixhQUFhLENBQUNHLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQztrQkFDL0UxSyxVQUFVLENBQUMyWCxPQUFPLENBQUNELEtBQUssRUFBRTtvQkFBRUUsWUFBWSxFQUFFO2tCQUFPLENBQUMsQ0FBUTtnQkFDM0Q7Y0FDRCxDQUFDLENBQUMsT0FBTzVNLE1BQVcsRUFBRTtnQkFDckI2SyxHQUFHLENBQUNqRixLQUFLLENBQUMsc0NBQXNDLEVBQUU1RixNQUFNLENBQUM7Y0FDMUQ7WUFDRCxDQUFDO1lBQ0QsTUFBTTZNLGlCQUFpQixHQUFHLGtCQUFrQjtjQUMzQyxJQUFJMU4sY0FBYyxDQUFDMUgsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJckIsU0FBUyxDQUFDTixNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqRSxNQUFNZ1gsV0FBVyxHQUFHM04sY0FBYyxDQUFDMUgsU0FBUyxDQUFDLFlBQVksQ0FBQztnQkFDMUQsTUFBTXVTLGlCQUFpQixHQUFHOEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJQSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM3UyxLQUFLO2dCQUVoRSxJQUFJO2tCQUNILE1BQU04UyxjQUFjLEdBQUcsTUFBTTNXLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzRXLGFBQWEsRUFBRTtrQkFDekQsSUFBSUQsY0FBYyxFQUFFO29CQUNuQm5HLGlCQUFpQixDQUFDMEYsWUFBWSxDQUFDdEMsaUJBQWlCLEVBQUUrQyxjQUFjLENBQUM7a0JBQ2xFO2tCQUNBLE1BQU1oRCwwQkFBMEIsQ0FBQ0MsaUJBQWlCLENBQUM7Z0JBQ3BELENBQUMsQ0FBQyxPQUFPaEssTUFBVyxFQUFFO2tCQUNyQjZLLEdBQUcsQ0FBQ2pGLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRTVGLE1BQU0sQ0FBQztnQkFDMUQ7Y0FDRCxDQUFDLE1BQU07Z0JBQ04sTUFBTStKLDBCQUEwQixFQUFFO2NBQ25DO1lBQ0QsQ0FBQztZQUVELE1BQU04QyxpQkFBaUIsRUFBRTs7WUFFekI7WUFDQSxLQUFLLE1BQU1ySCxtQkFBbUIsSUFBSWpCLG9CQUFvQixFQUFFO2NBQ3ZELE1BQU1yTixLQUFLLEdBQUdzTyxtQkFBbUIsQ0FBQzhCLFlBQVksR0FDMUM5QixtQkFBbUIsQ0FBQ0YsS0FBSyxDQUFxQjJILFFBQVEsRUFBRSxHQUN4RHpILG1CQUFtQixDQUFDRixLQUFLLENBQVc0SCxRQUFRLEVBQUU7Y0FDbEQxSCxtQkFBbUIsQ0FBQ3RPLEtBQUssR0FBR0EsS0FBSztjQUNqQ3NPLG1CQUFtQixDQUFDQyxpQkFBaUIsR0FBRzFQLE9BQU8sQ0FBQ2tDLE9BQU8sQ0FBQ2YsS0FBSyxDQUFDO1lBQy9EO1VBQ0QsQ0FBQztVQUNEaVcsVUFBVSxFQUFFLFlBQVk7WUFDdkI7WUFDQXJULGlCQUFpQixDQUFDc0UsT0FBTyxDQUFDcUcsZ0NBQWdDLENBQUM7WUFDM0RyRSxPQUFPLENBQUNxRCxPQUFPLEVBQUU7WUFDakJnRSxVQUFVLEdBQUcsS0FBSztZQUNsQixJQUFJRixZQUFZLENBQUNDLGVBQWUsRUFBRTtjQUNqQ3hSLE1BQU0sQ0FBQ3BCLFNBQVMsQ0FBQ3NMLGtCQUFrQixDQUFDO1lBQ3JDLENBQUMsTUFBTTtjQUNOakksT0FBTyxDQUFDc1AsWUFBWSxDQUFDdlEsTUFBTSxDQUFDO1lBQzdCO1VBQ0Q7UUFDRCxDQUFDLENBQUM7UUFDRjFCLFdBQVcsQ0FBQzhLLE9BQU8sR0FBR0EsT0FBTztRQUM3QkEsT0FBTyxDQUFDZ04sUUFBUSxDQUFDak8sY0FBYyxDQUFDMUQsUUFBUSxFQUFFLENBQUNyRyxNQUFNLENBQUM7UUFDbERnTCxPQUFPLENBQUNnTixRQUFRLENBQUNuSCxlQUFlLEVBQUUsYUFBYSxDQUFDO1FBQ2hEN0YsT0FBTyxDQUFDaU4sV0FBVyxDQUFDO1VBQ25CQyxJQUFJLEVBQUUsR0FBRztVQUNUdFMsS0FBSyxFQUFFO1FBQ1IsQ0FBQyxDQUFDOztRQUVGO1FBQ0EsTUFBTXVTLFNBQVMsR0FBRyxJQUFJckgsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DOUYsT0FBTyxDQUFDZ04sUUFBUSxDQUFDRyxTQUFTLEVBQUUsU0FBUyxDQUFDOztRQUV0QztRQUNBLEtBQUssTUFBTS9ILG1CQUFtQixJQUFJakIsb0JBQW9CLEVBQUU7VUFDdkQsSUFBSWlCLG1CQUFtQixDQUFDOEIsWUFBWSxFQUFFO1lBQUE7WUFDckM5QixtQkFBbUIsYUFBbkJBLG1CQUFtQixnREFBbkJBLG1CQUFtQixDQUFFRixLQUFLLG9GQUExQixzQkFBNEJrSSxVQUFVLENBQUMsT0FBTyxDQUFDLDJEQUEvQyx1QkFBaURDLFlBQVksQ0FBQyxNQUFNO2NBQ25FaEosZ0NBQWdDLENBQUNlLG1CQUFtQixDQUFDZCxTQUFTLENBQUM7WUFDaEUsQ0FBQyxDQUFDO1VBQ0gsQ0FBQyxNQUFNO1lBQUE7WUFDTmMsbUJBQW1CLGFBQW5CQSxtQkFBbUIsaURBQW5CQSxtQkFBbUIsQ0FBRUYsS0FBSyxxRkFBMUIsdUJBQTRCa0ksVUFBVSxDQUFDLE9BQU8sQ0FBQywyREFBL0MsdUJBQWlEQyxZQUFZLENBQUMsTUFBTTtjQUNuRWhKLGdDQUFnQyxDQUFDZSxtQkFBbUIsQ0FBQ2QsU0FBUyxDQUFDO1lBQ2hFLENBQUMsQ0FBQztVQUNIO1FBQ0Q7UUFFQSxJQUFJbk8sV0FBVyxHQUFJLEdBQUVyQixXQUFZLE9BQU07UUFDdkMsSUFBSSxDQUFDa0IsU0FBUyxDQUFDTixNQUFNLEVBQUU7VUFDdEJTLFdBQVcsR0FBSSxJQUFHQSxXQUFZLEVBQUM7UUFDaEM7UUFDQTZKLE9BQU8sQ0FBQ2lOLFdBQVcsQ0FBQztVQUNuQkMsSUFBSSxFQUFFL1c7UUFDUCxDQUFDLENBQUM7UUFDRixJQUFJNkksY0FBYyxFQUFFO1VBQ25CO1VBQ0FBLGNBQWMsQ0FBQ3NPLFlBQVksQ0FBQ3ROLE9BQU8sQ0FBQztRQUNyQztRQUNBLElBQUloSyxTQUFTLENBQUNOLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDekJzSyxPQUFPLENBQUN1TixpQkFBaUIsQ0FBQ3ZYLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUM7O1FBQ0F3USxpQkFBaUIsR0FBR3hHLE9BQU8sQ0FBQ3dOLGdCQUFnQixFQUFFO1FBQzlDeE4sT0FBTyxDQUFDeU4sSUFBSSxFQUFFO01BQ2YsQ0FBQyxDQUFDLE9BQU83TixNQUFXLEVBQUU7UUFDckJoSyxNQUFNLENBQUNnSyxNQUFNLENBQUM7TUFDZjtJQUNELENBQUMsQ0FBQztFQUNIO0VBQ0EsU0FBU2pHLG1CQUFtQixDQUFDckIsT0FBWSxFQUFFO0lBQzFDLE1BQU1vVSxXQUFXLEdBQUdwVSxPQUFPLENBQUNqQixTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtJQUN6RCxJQUFJcVYsV0FBVyxJQUFJQSxXQUFXLENBQUNoWCxNQUFNLEVBQUU7TUFDdEMsSUFBSTRDLE9BQU8sQ0FBQ2pCLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNsQztRQUNBLE9BQU9xVixXQUFXLENBQUNnQixLQUFLLENBQUMsQ0FBQyxFQUFFaEIsV0FBVyxDQUFDaFgsTUFBTSxDQUFDLElBQUksRUFBRTtNQUN0RDtJQUNEO0lBQ0EsT0FBT2dYLFdBQVc7RUFDbkI7RUFFQSxTQUFTN0UsNkJBQTZCLENBQUMxSSxhQUE0QixFQUFFdEcsWUFBb0IsRUFBRS9ELFdBQW1CLEVBQUU2WSxjQUFzQixFQUFFO0lBQ3ZJLElBQUkxTyxlQUFvQixHQUFHbkssV0FBVyxHQUFHQSxXQUFXLEdBQUcsSUFBSTtJQUMzRCxNQUFNOFksV0FBVyxHQUFHM08sZUFBZSxDQUFDeEQsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUM5Q3dELGVBQWUsR0FBR0EsZUFBZSxDQUFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBR2tTLFdBQVcsQ0FBQ0EsV0FBVyxDQUFDbFksTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHdUosZUFBZTtJQUMzRyxNQUFNQyxpQkFBaUIsR0FBR0QsZUFBZSxJQUFJME8sY0FBYyxHQUFJLEdBQUVBLGNBQWUsSUFBRzFPLGVBQWdCLEVBQUMsR0FBRyxFQUFFO0lBQ3pHLE1BQU00TyxJQUFJLEdBQUcscUNBQXFDO0lBQ2xELE1BQU1DLGtCQUFrQixHQUFHM08sYUFBYSxDQUFDNE8sd0JBQXdCLENBQUUsR0FBRUYsSUFBSyxJQUFHM08saUJBQWtCLEVBQUMsQ0FBQztJQUNqRyxJQUFJckcsWUFBWSxFQUFFO01BQ2pCLElBQUlpVixrQkFBa0IsRUFBRTtRQUN2QixPQUFPM08sYUFBYSxDQUFDRyxPQUFPLENBQUN1TyxJQUFJLEVBQUVoUCxTQUFTLEVBQUVLLGlCQUFpQixDQUFDO01BQ2pFLENBQUMsTUFBTSxJQUFJQyxhQUFhLENBQUM0Tyx3QkFBd0IsQ0FBRSxHQUFFRixJQUFLLElBQUdGLGNBQWUsRUFBQyxDQUFDLEVBQUU7UUFDL0UsT0FBT3hPLGFBQWEsQ0FBQ0csT0FBTyxDQUFDdU8sSUFBSSxFQUFFaFAsU0FBUyxFQUFHLEdBQUU4TyxjQUFlLEVBQUMsQ0FBQztNQUNuRSxDQUFDLE1BQU0sSUFBSXhPLGFBQWEsQ0FBQzRPLHdCQUF3QixDQUFFLEdBQUVGLElBQUssRUFBQyxDQUFDLEVBQUU7UUFDN0QsT0FBTzFPLGFBQWEsQ0FBQ0csT0FBTyxDQUFDdU8sSUFBSSxDQUFDO01BQ25DLENBQUMsTUFBTTtRQUNOLE9BQU9oVixZQUFZO01BQ3BCO0lBQ0QsQ0FBQyxNQUFNO01BQ04sT0FBT3NHLGFBQWEsQ0FBQ0csT0FBTyxDQUFDLG9CQUFvQixDQUFDO0lBQ25EO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzBPLGtCQUFrQixDQUMxQkMsWUFBc0MsRUFDdENDLHVCQUE0QyxFQUM1Q0MsZUFBMkMsRUFDcEM7SUFDUCxJQUFJQSxlQUFlLEVBQUU7TUFDcEIsTUFBTUMsTUFBTSxHQUFHRix1QkFBdUIsQ0FBQ0csa0JBQWtCLENBQUMzSyxJQUFJLENBQUN3Syx1QkFBdUIsQ0FBQztNQUN2RkEsdUJBQXVCLENBQUNHLGtCQUFrQixHQUFHLGtCQUE2QztRQUN6RixJQUNDSixZQUFZLGFBQVpBLFlBQVksZUFBWkEsWUFBWSxDQUNUSyxxQkFBcUIsRUFBRSxDQUN4QkMsaUJBQWlCLEVBQUUsQ0FDbkJuUixJQUFJLENBQUVvUixRQUFjLElBQUtBLFFBQVEsQ0FBQ0MsaUJBQWlCLEVBQUUsS0FBS04sZUFBZSxDQUFDLEVBQzNFO1VBQ0QsT0FBT0MsTUFBTSxDQUFDLFlBQU8sQ0FBQztRQUN2QjtRQUNBLE9BQU96WSxPQUFPLENBQUNrQyxPQUFPLEVBQUU7TUFDekIsQ0FBQztJQUNGO0VBQ0Q7RUFFQSxTQUFTNlcsa0NBQWtDLENBQzFDcFcsT0FBWSxFQUNacEQsV0FBZ0IsRUFDaEIyRixnQkFBeUIsRUFDekI3QyxRQUFnQixFQUNoQm1ILGFBQTRCLEVBQzVCcEMsY0FBMEMsRUFDMUM0UixjQUE2QixFQUM3QkMscUJBQW9DLEVBQ3BDQyxnQ0FBMEMsRUFDMUNDLCtCQUF5QyxFQUN6QzNaLHVCQUFpRCxFQUNoRDtJQUNELElBQUl5RCxjQUFjO01BQ2pCbVcscUJBQXFCLEdBQUcsSUFBSTtJQUM3QixJQUFJN1osV0FBVyxFQUFFO01BQ2hCQSxXQUFXLENBQUMyWixnQ0FBZ0MsR0FBR0EsZ0NBQWdDO0lBQ2hGO0lBQ0EsSUFBSWhVLGdCQUFnQixFQUFFO01BQUE7TUFDckIsTUFBTStJLEtBQUssR0FBR3RMLE9BQU8sQ0FBQ0QsZUFBZSxFQUFFLENBQUNoQyxPQUFPLEVBQUU7TUFDakQsTUFBTThDLFNBQVMsR0FBR2IsT0FBTyxDQUFDK0MsUUFBUSxFQUFFLENBQUNuRixZQUFZLEVBQUUsQ0FBQ0UsV0FBVyxDQUFDd04sS0FBSyxDQUFDO01BQ3RFLE1BQU1vTCxTQUFTLEdBQUcxVyxPQUFPLENBQUMrQyxRQUFRLEVBQUUsQ0FBQ25GLFlBQVksRUFBRSxDQUFDbUIsU0FBUyxDQUFDOEIsU0FBUyxDQUFDO01BQ3hFLElBQUk2VixTQUFTLElBQUksZ0JBQUFBLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0RBQVosWUFBY0MsS0FBSyxNQUFLLFFBQVEsRUFBRTtRQUNsRDtRQUNBRixxQkFBcUIsR0FBRyxLQUFLO01BQzlCO01BQ0EsSUFBSTdaLFdBQVcsQ0FBQ2dILHFCQUFxQixFQUFFO1FBQ3RDNlMscUJBQXFCLEdBQUcsS0FBSztNQUM5QjtJQUNEO0lBRUEsSUFBSSxDQUFDQSxxQkFBcUIsRUFBRTtNQUMzQm5XLGNBQWMsR0FBR04sT0FBTyxDQUFDSCxPQUFPLENBQUNILFFBQVEsQ0FBQyxDQUFDZixJQUFJLENBQUMsVUFBVUwsTUFBa0MsRUFBRTtRQUM3Rm9YLGtCQUFrQixDQUFDOVksV0FBVyxDQUFDK1ksWUFBWSxFQUFFM1YsT0FBTyxFQUFFMUIsTUFBTSxDQUFDO1FBQzdEaVksZ0NBQWdDLENBQUN2VyxPQUFPLENBQUNELGVBQWUsRUFBRSxDQUFDO1FBQzNELE9BQU9DLE9BQU8sQ0FBQ0QsZUFBZSxFQUFFO01BQ2pDLENBQUMsQ0FBQztJQUNILENBQUMsTUFBTTtNQUNOTyxjQUFjLEdBQUdpQyxnQkFBZ0IsR0FDOUJ2QyxPQUFPLENBQ05ILE9BQU8sQ0FDUEgsUUFBUSxFQUNSNkcsU0FBUyxFQUNUcVEsZ0JBQWdCLENBQUNDLHdCQUF3QixDQUFDekwsSUFBSSxDQUM3QzBMLFVBQVUsRUFDVnBYLFFBQVEsRUFDUjlDLFdBQVcsRUFDWGlLLGFBQWEsRUFDYnlQLHFCQUFxQixFQUNyQnRXLE9BQU8sQ0FBQzZGLFVBQVUsRUFBRSxFQUNwQndRLGNBQWMsRUFDZDVSLGNBQWMsRUFDZDVILHVCQUF1QixDQUN2QixDQUNELENBQ0E4QixJQUFJLENBQUMsVUFBVUwsTUFBa0MsRUFBRTtRQUNuRG9YLGtCQUFrQixDQUFDOVksV0FBVyxDQUFDK1ksWUFBWSxFQUFFM1YsT0FBTyxFQUFFMUIsTUFBTSxDQUFDO1FBQzdELElBQUl6Qix1QkFBdUIsSUFBSSxDQUFDRCxXQUFXLENBQUNxRCxRQUFRLEVBQUU7VUFDckQ4Vyw0QkFBNEIsQ0FBQy9XLE9BQU8sRUFBRU4sUUFBUSxFQUFFN0MsdUJBQXVCLEVBQUVELFdBQVcsRUFBRSxJQUFJLENBQUM7UUFDNUY7UUFDQTJaLGdDQUFnQyxDQUFDdlcsT0FBTyxDQUFDRCxlQUFlLEVBQUUsQ0FBQztRQUMzRCxPQUFPQyxPQUFPLENBQUNELGVBQWUsRUFBRTtNQUNqQyxDQUFDLENBQUMsQ0FDRDZFLEtBQUssQ0FBQyxZQUFZO1FBQ2xCLElBQUkvSCx1QkFBdUIsSUFBSSxDQUFDRCxXQUFXLENBQUNxRCxRQUFRLEVBQUU7VUFDckQ4Vyw0QkFBNEIsQ0FBQy9XLE9BQU8sRUFBRU4sUUFBUSxFQUFFN0MsdUJBQXVCLEVBQUVELFdBQVcsQ0FBQztRQUN0RjtRQUNBNFosK0JBQStCLEVBQUU7UUFDakMsTUFBTXRhLFNBQVMsQ0FBQzhhLHFCQUFxQjtNQUN0QyxDQUFDLENBQUMsR0FDRmhYLE9BQU8sQ0FDTkgsT0FBTyxDQUNQSCxRQUFRLEVBQ1I2RyxTQUFTLEVBQ1RxUSxnQkFBZ0IsQ0FBQ0Msd0JBQXdCLENBQUN6TCxJQUFJLENBQzdDMEwsVUFBVSxFQUNWcFgsUUFBUSxFQUNSOUMsV0FBVyxFQUNYaUssYUFBYSxFQUNieVAscUJBQXFCLEVBQ3JCdFcsT0FBTyxDQUFDNkYsVUFBVSxFQUFFLEVBQ3BCd1EsY0FBYyxFQUNkNVIsY0FBYyxFQUNkNUgsdUJBQXVCLENBQ3ZCLENBQ0QsQ0FDQThCLElBQUksQ0FBQyxVQUFVTCxNQUFrQyxFQUFFO1FBQ25Eb1gsa0JBQWtCLENBQUM5WSxXQUFXLENBQUMrWSxZQUFZLEVBQUUzVixPQUFPLEVBQUUxQixNQUFNLENBQUM7UUFDN0QsSUFBSXpCLHVCQUF1QixJQUFJLENBQUNELFdBQVcsQ0FBQ3FELFFBQVEsRUFBRTtVQUNyRDhXLDRCQUE0QixDQUFDL1csT0FBTyxFQUFFTixRQUFRLEVBQUU3Qyx1QkFBdUIsRUFBRUQsV0FBVyxFQUFFLElBQUksQ0FBQztRQUM1RjtRQUNBMlosZ0NBQWdDLENBQUNqWSxNQUFNLENBQUM7UUFDeEMsT0FBT0EsTUFBTTtNQUNkLENBQUMsQ0FBQyxDQUNEc0csS0FBSyxDQUFDLFlBQVk7UUFDbEIsSUFBSS9ILHVCQUF1QixJQUFJLENBQUNELFdBQVcsQ0FBQ3FELFFBQVEsRUFBRTtVQUNyRDhXLDRCQUE0QixDQUFDL1csT0FBTyxFQUFFTixRQUFRLEVBQUU3Qyx1QkFBdUIsRUFBRUQsV0FBVyxDQUFDO1FBQ3RGO1FBQ0E0WiwrQkFBK0IsRUFBRTtRQUNqQyxNQUFNdGEsU0FBUyxDQUFDOGEscUJBQXFCO01BQ3RDLENBQUMsQ0FBQztJQUNOO0lBRUEsT0FBTzFXLGNBQWMsQ0FBQ3NFLEtBQUssQ0FBQyxNQUFNO01BQ2pDNFIsK0JBQStCLEVBQUU7TUFDakMsTUFBTXRhLFNBQVMsQ0FBQzhhLHFCQUFxQjtJQUN0QyxDQUFDLENBQUM7RUFDSDtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0QsNEJBQTRCLENBQ3BDL1csT0FBZ0IsRUFDaEJOLFFBQWdCLEVBQ2hCN0MsdUJBQWdELEVBQ2hERCxXQUFzQyxFQUVyQztJQUFBLElBRERxYSxtQkFBbUIsdUVBQUcsS0FBSztJQUUzQixNQUFNL1IsUUFBd0IsR0FBR3NMLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxPQUFPLEVBQUUsQ0FBQ3RMLGlCQUFpQixFQUFFLENBQUNDLGVBQWUsRUFBRSxDQUFDQyxPQUFPLEVBQUU7SUFDakcsTUFBTTtNQUFFbkksbUJBQW1CO01BQUVELG9CQUFvQjtNQUFFSDtJQUE4QixDQUFDLEdBQUdGLHVCQUF1QjtJQUM1RyxNQUFNcWEsa0JBQWtCLEdBQUdoUyxRQUFRLENBQUM0RCxNQUFNLENBQUMsVUFBVUMsT0FBWSxFQUFFO01BQ2xFO01BQ0EsTUFBTW9PLFdBQVcsR0FBR2hhLG1CQUFtQixDQUFDMkgsSUFBSSxDQUFDLFVBQVV3SCxFQUFVLEVBQUU7UUFDbEUsT0FBT3ZELE9BQU8sQ0FBQ3VELEVBQUUsS0FBS0EsRUFBRTtNQUN6QixDQUFDLENBQUM7TUFDRjtNQUNBLElBQUksQ0FBQzZLLFdBQVcsRUFBRTtRQUNqQmhhLG1CQUFtQixDQUFDeUksSUFBSSxDQUFDbUQsT0FBTyxDQUFDdUQsRUFBRSxDQUFDO1FBQ3BDLElBQUl2RCxPQUFPLENBQUN3QixJQUFJLEtBQUtDLFdBQVcsQ0FBQzRNLE9BQU8sRUFBRTtVQUN6Q2xhLG9CQUFvQixDQUFDMEksSUFBSSxDQUFDbUQsT0FBTyxDQUFDO1FBQ25DO01BQ0Q7TUFDQSxPQUFPQSxPQUFPLENBQUMyQixVQUFVLEtBQUssSUFBSSxJQUFJM0IsT0FBTyxDQUFDd0IsSUFBSSxLQUFLQyxXQUFXLENBQUM0TSxPQUFPLElBQUksQ0FBQ0QsV0FBVztJQUMzRixDQUFDLENBQUM7SUFDRjtJQUNBLElBQUksQ0FBQ0YsbUJBQW1CLElBQUlDLGtCQUFrQixDQUFDOVosTUFBTSxFQUFFO01BQ3RELElBQUlSLFdBQVcsYUFBWEEsV0FBVyxlQUFYQSxXQUFXLENBQUU0RyxvQkFBb0IsRUFBRTtRQUN0Q3pHLDZCQUE2QixDQUFDNkksSUFBSSxDQUFDO1VBQ2xDNUYsT0FBTyxFQUFFQSxPQUFPO1VBQ2hCNkQsT0FBTyxFQUFFbkU7UUFDVixDQUFDLENBQUM7TUFDSDtJQUNEO0VBQ0Q7RUFFQSxTQUFTMlgsaURBQWlELEdBQUc7SUFDNUQsSUFBSWQsZ0NBQXFDLEdBQUcsSUFBSTtNQUMvQ0MsK0JBQW9DLEdBQUcsSUFBSTtJQUM1QyxNQUFNYyxtQkFBbUIsR0FBRyxJQUFJamEsT0FBTyxDQUFDLFVBQVVrQyxPQUFPLEVBQUVqQyxNQUFNLEVBQUU7TUFDbEVpWixnQ0FBZ0MsR0FBR2hYLE9BQU87TUFDMUNpWCwrQkFBK0IsR0FBR2xaLE1BQU07SUFDekMsQ0FBQyxDQUFDLENBQUNzSCxLQUFLLENBQUMsVUFBVTBDLE1BQU0sRUFBRTtNQUMxQjZLLEdBQUcsQ0FBQ2pGLEtBQUssQ0FBQywrQkFBK0IsRUFBRTVGLE1BQU0sQ0FBQztJQUNuRCxDQUFDLENBQUM7SUFFRixPQUFPO01BQUVnUSxtQkFBbUI7TUFBRWYsZ0NBQWdDO01BQUVDO0lBQWdDLENBQUM7RUFDbEc7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3ZRLGlDQUFpQyxDQUFDc1IsV0FBb0IsRUFBVztJQUN6RSxJQUFJclMsUUFBbUIsR0FBRyxFQUFFO0lBRTVCLElBQUlxUyxXQUFXLEVBQUU7TUFDaEIsTUFBTUMsV0FBc0IsR0FBRzVOLGVBQWUsQ0FBQ0MsV0FBVyxFQUFFO01BQzVELE1BQU00TixTQUFvQixHQUFHN04sZUFBZSxDQUFDQyxXQUFXLENBQUMsSUFBSSxDQUFDO01BQzlEM0UsUUFBUSxHQUFHLENBQUMsR0FBR3NTLFdBQVcsRUFBRSxHQUFHQyxTQUFTLENBQUM7SUFDMUM7SUFFQSxPQUFPdlMsUUFBUSxDQUFDZCxJQUFJLENBQUMsVUFBVTJFLE9BQWdCLEVBQUU7TUFDaEQsT0FBT0EsT0FBTyxDQUFDbUIsT0FBTyxFQUFFLEtBQUssT0FBTyxJQUFJbkIsT0FBTyxDQUFDbUIsT0FBTyxFQUFFLEtBQUssU0FBUztJQUN4RSxDQUFDLENBQUM7RUFDSDtFQUVBLFNBQVNqRixjQUFjLENBQ3RCdEksYUFBa0IsRUFDbEJDLFdBQWdCLEVBQ2hCOEosY0FBb0IsRUFDcEJqQyxjQUErQixFQUMvQjVILHVCQUFpRCxFQUNoRDtJQUNELE1BQU1hLFNBQVMsR0FBR2QsV0FBVyxDQUFDYyxTQUFTLElBQUksRUFBRTtJQUM3QyxNQUFNaEIsTUFBTSxHQUFHRSxXQUFXLENBQUMwRixLQUFLO0lBQ2hDLE1BQU1sQixpQkFBaUIsR0FBR3hFLFdBQVcsQ0FBQ3dFLGlCQUFpQixJQUFJLEVBQUU7SUFDN0QsTUFBTTVFLFdBQVcsR0FBR0ksV0FBVyxDQUFDeUYsVUFBVTtJQUMxQyxNQUFNSixhQUFhLEdBQUdyRixXQUFXLENBQUNxRixhQUFhO0lBQy9DLE1BQU1FLFlBQVksR0FBR3ZGLFdBQVcsQ0FBQ3VGLFlBQVk7SUFDN0MsTUFBTTBFLGFBQWEsR0FBR0MsZ0JBQWdCLENBQUNKLGNBQWMsQ0FBQztJQUN0RCxJQUFJMUcsT0FBWTtJQUVoQixTQUFTMFgsOEJBQThCLEdBQUc7TUFDekMsSUFBSXRXLGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ2hFLE1BQU0sRUFBRTtRQUNsRCxLQUFLLElBQUkrUyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcvTyxpQkFBaUIsQ0FBQ2hFLE1BQU0sRUFBRStTLENBQUMsRUFBRSxFQUFFO1VBQ2xELElBQUksQ0FBQy9PLGlCQUFpQixDQUFDK08sQ0FBQyxDQUFDLENBQUMzUixLQUFLLEVBQUU7WUFDaEMsUUFBUTRDLGlCQUFpQixDQUFDK08sQ0FBQyxDQUFDLENBQUNuTixLQUFLO2NBQ2pDLEtBQUssWUFBWTtnQkFDaEI1QixpQkFBaUIsQ0FBQytPLENBQUMsQ0FBQyxDQUFDM1IsS0FBSyxHQUFHLEVBQUU7Z0JBQy9CO2NBQ0QsS0FBSyxhQUFhO2dCQUNqQjRDLGlCQUFpQixDQUFDK08sQ0FBQyxDQUFDLENBQUMzUixLQUFLLEdBQUcsS0FBSztnQkFDbEM7Y0FDRCxLQUFLLFVBQVU7Y0FDZixLQUFLLFdBQVc7Y0FDaEIsS0FBSyxXQUFXO2NBQ2hCLEtBQUssV0FBVztnQkFDZjRDLGlCQUFpQixDQUFDK08sQ0FBQyxDQUFDLENBQUMzUixLQUFLLEdBQUcsQ0FBQztnQkFDOUI7Y0FDRDtjQUNBO2dCQUNDO1lBQU07VUFFVDtVQUNBd0IsT0FBTyxDQUFDNFQsWUFBWSxDQUFDeFMsaUJBQWlCLENBQUMrTyxDQUFDLENBQUMsQ0FBQzVPLEtBQUssRUFBRUgsaUJBQWlCLENBQUMrTyxDQUFDLENBQUMsQ0FBQzNSLEtBQUssQ0FBQztRQUM3RTtNQUNEO0lBQ0Q7SUFDQSxJQUFJZCxTQUFTLENBQUNOLE1BQU0sRUFBRTtNQUNyQjtNQUNBLE9BQU8sSUFBSUMsT0FBTyxDQUFDLFVBQVVrQyxPQUE2QixFQUFFO1FBQzNEM0MsV0FBVyxDQUFDK1ksWUFBWSxHQUFHaFosYUFBYTtRQUN4QyxNQUFNc0csa0JBQWtCLEdBQUdyRyxXQUFXLENBQUNxRyxrQkFBa0I7UUFDekQsTUFBTWhELFFBQVEsR0FBR3JELFdBQVcsQ0FBQ3FELFFBQVE7UUFDckMsTUFBTXNDLGdCQUFnQixHQUFHM0YsV0FBVyxDQUFDMkYsZ0JBQWdCO1FBQ3JELE1BQU1vVixlQUFzQixHQUFHLEVBQUU7UUFDakMsSUFBSXJYLGNBQWM7UUFDbEIsSUFBSXVFLENBQUM7UUFDTCxJQUFJbkYsUUFBZ0I7UUFDcEIsTUFBTWtZLGdDQUFnQyxHQUFHUCxpREFBaUQsRUFBRTtRQUM1RixNQUFNUSxlQUFlLEdBQUcsVUFBVUMsYUFBa0IsRUFBRXhCLHFCQUEwQixFQUFFeUIsV0FBZ0IsRUFBRTFCLGNBQW1CLEVBQUU7VUFDeEhxQiw4QkFBOEIsRUFBRTtVQUNoQyxNQUFNTSx1QkFBNEIsR0FBRyxFQUFFO1VBQ3ZDO1VBQ0F0WSxRQUFRLEdBQUcsQ0FBQ08sUUFBUSxHQUFJLFNBQVFxVyxxQkFBc0IsRUFBQyxHQUFHd0IsYUFBYSxDQUFDRyxnQkFBZ0IsRUFBRTtVQUMxRnJiLFdBQVcsQ0FBQ21aLGtCQUFrQixHQUFHbUMsb0JBQW9CLENBQUM5TSxJQUFJLENBQ3pEMEwsVUFBVSxFQUNWbmEsYUFBYSxFQUNib2IsV0FBVyxFQUNYbmIsV0FBVyxFQUNYOEMsUUFBUSxFQUNSc1ksdUJBQXVCLENBQ3ZCO1VBQ0QxWCxjQUFjLEdBQUc4VixrQ0FBa0MsQ0FDbEQwQixhQUFhLEVBQ2JsYixXQUFXLEVBQ1gyRixnQkFBZ0IsRUFDaEI3QyxRQUFRLEVBQ1JtSCxhQUFhLEVBQ2JwQyxjQUFjLEVBQ2Q0UixjQUFjLEVBQ2RDLHFCQUFxQixFQUNyQnNCLGdDQUFnQyxDQUFDckIsZ0NBQWdDLEVBQ2pFcUIsZ0NBQWdDLENBQUNwQiwrQkFBK0IsRUFDaEUzWix1QkFBdUIsQ0FDdkI7VUFDRDhhLGVBQWUsQ0FBQy9SLElBQUksQ0FBQ3RGLGNBQWMsQ0FBQztVQUNwQzBYLHVCQUF1QixDQUFDcFMsSUFBSSxDQUFDZ1MsZ0NBQWdDLENBQUNOLG1CQUFtQixDQUFDO1VBQ2xGWSxvQkFBb0IsQ0FBQ3ZiLGFBQWEsRUFBRW9iLFdBQVcsRUFBRW5iLFdBQVcsRUFBRThDLFFBQVEsRUFBRXNZLHVCQUF1QixDQUFDO1VBQ2hHLE9BQU8zYSxPQUFPLENBQUM4YSxVQUFVLENBQUNILHVCQUF1QixDQUFDO1FBQ25ELENBQUM7UUFDRCxNQUFNSSxxQkFBcUIsR0FBRyxVQUFVTixhQUFrQixFQUFFeEIscUJBQTBCLEVBQUV5QixXQUFnQixFQUFFMUIsY0FBbUIsRUFBRTtVQUM5SCxNQUFNMkIsdUJBQTRCLEdBQUcsRUFBRTtVQUN2Q04sOEJBQThCLEVBQUU7VUFDaEM7VUFDQWhZLFFBQVEsR0FBRzlDLFdBQVcsQ0FBQ2lILE9BQU8sSUFBSyxVQUFTeVMscUJBQXNCLEVBQUM7VUFDbkUxWixXQUFXLENBQUNtWixrQkFBa0IsR0FBR21DLG9CQUFvQixDQUFDOU0sSUFBSSxDQUN6RDBMLFVBQVUsRUFDVm5hLGFBQWEsRUFDYm9iLFdBQVcsRUFDWG5iLFdBQVcsRUFDWDhDLFFBQVEsRUFDUnNZLHVCQUF1QixDQUN2QjtVQUNEMVgsY0FBYyxHQUFHOFYsa0NBQWtDLENBQ2xEMEIsYUFBYSxFQUNibGIsV0FBVyxFQUNYMkYsZ0JBQWdCLEVBQ2hCN0MsUUFBUSxFQUNSbUgsYUFBYSxFQUNicEMsY0FBYyxFQUNkNFIsY0FBYyxFQUNkQyxxQkFBcUIsRUFDckJzQixnQ0FBZ0MsQ0FBQ3JCLGdDQUFnQyxFQUNqRXFCLGdDQUFnQyxDQUFDcEIsK0JBQStCLEVBQ2hFM1osdUJBQXVCLENBQ3ZCO1VBQ0Q4YSxlQUFlLENBQUMvUixJQUFJLENBQUN0RixjQUFjLENBQUM7VUFDcEMwWCx1QkFBdUIsQ0FBQ3BTLElBQUksQ0FBQ2dTLGdDQUFnQyxDQUFDTixtQkFBbUIsQ0FBQztVQUNsRlksb0JBQW9CLENBQUN2YixhQUFhLEVBQUVvYixXQUFXLEVBQUVuYixXQUFXLEVBQUU4QyxRQUFRLEVBQUVzWSx1QkFBdUIsQ0FBQztVQUNoR3RiLE1BQU0sQ0FBQ29ELFdBQVcsQ0FBQ0osUUFBUSxDQUFDO1VBQzVCLE9BQU9yQyxPQUFPLENBQUM4YSxVQUFVLENBQUNILHVCQUF1QixDQUFDO1FBQ25ELENBQUM7UUFFRCxlQUFlSyxrQkFBa0IsR0FBRztVQUNuQyxNQUFNQyx1QkFBdUIsR0FBRyxFQUFTO1VBQ3pDLEtBQUt6VCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUduSCxTQUFTLENBQUNOLE1BQU0sRUFBRXlILENBQUMsRUFBRSxFQUFFO1lBQ3RDN0UsT0FBTyxHQUFHdEQsTUFBTSxDQUFDbUMsV0FBVyxDQUFFLEdBQUVyQyxXQUFZLE9BQU0sRUFBRWtCLFNBQVMsQ0FBQ21ILENBQUMsQ0FBQyxFQUFFNUIsa0JBQWtCLENBQUM7WUFDckZxVix1QkFBdUIsQ0FBQzFTLElBQUksQ0FDM0JpUyxlQUFlLENBQ2Q3WCxPQUFPLEVBQ1B0QyxTQUFTLENBQUNOLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHeUgsQ0FBQyxFQUNoQztjQUNDM0YsT0FBTyxFQUFFeEIsU0FBUyxDQUFDbUgsQ0FBQyxDQUFDO2NBQ3JCbEMsZUFBZSxFQUFFL0YsV0FBVyxDQUFDOEYsb0JBQW9CLElBQUk5RixXQUFXLENBQUM4RixvQkFBb0IsQ0FBQ0MsZUFBZTtjQUNyR1csY0FBYyxFQUFFMUcsV0FBVyxDQUFDOEYsb0JBQW9CLElBQUk5RixXQUFXLENBQUM4RixvQkFBb0IsQ0FBQ1k7WUFDdEYsQ0FBQyxFQUNENUYsU0FBUyxDQUFDTixNQUFNLENBQ2hCLENBQ0Q7VUFDRjtVQUNBLENBQ0M2RSxhQUFhLElBQ2IsU0FBU3NXLElBQUksR0FBRztZQUNmO1VBQUEsQ0FDQSxFQUNBWixlQUFlLENBQUM7VUFFbEIsTUFBTXRhLE9BQU8sQ0FBQzhhLFVBQVUsQ0FBQ0csdUJBQXVCLENBQUM7VUFDakQsSUFBSXpiLHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQ0csc0JBQXNCLENBQUNJLE1BQU0sRUFBRTtZQUNyRixJQUFJO2NBQ0gsSUFBSSxDQUFDNkksaUNBQWlDLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzdDLE1BQU0yUSxnQkFBZ0IsQ0FBQzRCLGlCQUFpQixDQUN2QzViLFdBQVcsRUFDWGlLLGFBQWEsRUFDYnBDLGNBQWMsRUFDZDVILHVCQUF1QixDQUFDSSw2QkFBNkIsRUFDckRKLHVCQUF1QixFQUN2QmEsU0FBUyxDQUFDTixNQUFNLEdBQUcsQ0FBQyxDQUNwQjtjQUNGLENBQUMsTUFBTTtnQkFDTlAsdUJBQXVCLENBQUNHLHNCQUFzQixDQUFDMEksT0FBTyxDQUFDLFVBQVUrUyxTQUFTLEVBQUU7a0JBQzNFQSxTQUFTLENBQUNsWixPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN6QixDQUFDLENBQUM7Z0JBQ0YsTUFBTWtLLFlBQVksR0FBR3RFLElBQUksQ0FBQ0MsaUJBQWlCLEVBQUUsQ0FBQ0MsZUFBZSxFQUFFO2dCQUMvRCxNQUFNcUUsZUFBZSxHQUFHRCxZQUFZLENBQUNuRSxPQUFPLEVBQUU7Z0JBQzlDbUUsWUFBWSxDQUFDaVAsT0FBTyxDQUFDaFAsZUFBZSxDQUFDbkUsTUFBTSxDQUFDMUksdUJBQXVCLENBQUNJLDZCQUE2QixDQUFDLENBQUM7Y0FDcEc7WUFDRCxDQUFDLENBQUMsTUFBTTtjQUNQa1YsR0FBRyxDQUFDakYsS0FBSyxDQUFDLGdEQUFnRCxDQUFDO1lBQzVEO1VBQ0Q7VUFDQXlMLGVBQWUsRUFBRTtRQUNsQjtRQUVBLGVBQWVDLHFCQUFxQixDQUFDQyxpQkFBNEIsRUFBRTtVQUNsRTtVQUNBLENBQ0M1VyxhQUFhLElBQ2IsU0FBU3NXLElBQUksR0FBRztZQUNmO1VBQUEsQ0FDQSxFQUNBWixlQUFlLENBQUM7VUFDbEIsU0FBU21CLGdCQUFnQixDQUFDNVosT0FBWSxFQUFFNlosV0FBZ0IsRUFBRTFDLGNBQW1CLEVBQUU7WUFBQTtZQUM5RXJXLE9BQU8sR0FBR3RELE1BQU0sQ0FBQ21DLFdBQVcsQ0FBRSxHQUFFckMsV0FBWSxPQUFNLEVBQUUwQyxPQUFPLEVBQUUrRCxrQkFBa0IsQ0FBQztZQUNoRjtZQUNBO1lBQ0EsTUFBTStWLG1CQUFtQiwyQkFBR3BjLFdBQVcsQ0FBQ21ILE9BQU8sa0ZBQW5CLHFCQUFxQmtWLGFBQWEsb0ZBQWxDLGdEQUFzQywyREFBdEMsdUJBQXdDQyxnQkFBZ0IsRUFBRTtZQUN0RixPQUFPZCxxQkFBcUIsQ0FDM0JwWSxPQUFPLEVBQ1ArWSxXQUFXLEVBQ1g7Y0FDQzdaLE9BQU8sRUFDTjhaLG1CQUFtQixJQUFJQSxtQkFBbUIsQ0FBQ2piLE9BQU8sRUFBRSxLQUFLbUIsT0FBTyxDQUFDbkIsT0FBTyxFQUFFLEdBQUdpYixtQkFBbUIsR0FBRzlaLE9BQU87Y0FDM0d5RCxlQUFlLEVBQUUvRixXQUFXLENBQUM4RixvQkFBb0IsSUFBSTlGLFdBQVcsQ0FBQzhGLG9CQUFvQixDQUFDQyxlQUFlO2NBQ3JHVyxjQUFjLEVBQUUxRyxXQUFXLENBQUM4RixvQkFBb0IsSUFBSTlGLFdBQVcsQ0FBQzhGLG9CQUFvQixDQUFDWTtZQUN0RixDQUFDLEVBQ0QrUyxjQUFjLENBQ2Q7VUFDRjs7VUFFQTtVQUNBLE1BQU13QyxpQkFBaUIsQ0FBQ00sTUFBTSxDQUFDLE9BQU9DLE9BQXNCLEVBQUVsYSxPQUFnQixFQUFFb04sRUFBVSxLQUFvQjtZQUM3RyxNQUFNOE0sT0FBTztZQUNiLE1BQU1OLGdCQUFnQixDQUFDNVosT0FBTyxFQUFFb04sRUFBRSxHQUFHLENBQUMsRUFBRTVPLFNBQVMsQ0FBQ04sTUFBTSxDQUFDO1VBQzFELENBQUMsRUFBRUMsT0FBTyxDQUFDa0MsT0FBTyxFQUFFLENBQUM7VUFFckIsSUFBSTFDLHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQ0csc0JBQXNCLENBQUNJLE1BQU0sRUFBRTtZQUNyRixNQUFNd1osZ0JBQWdCLENBQUM0QixpQkFBaUIsQ0FDdkM1YixXQUFXLEVBQ1hpSyxhQUFhLEVBQ2JwQyxjQUFjLEVBQ2Q1SCx1QkFBdUIsQ0FBQ0ksNkJBQTZCLEVBQ3JESix1QkFBdUIsRUFDdkJhLFNBQVMsQ0FBQ04sTUFBTSxHQUFHLENBQUMsQ0FDcEI7VUFDRjtVQUNBdWIsZUFBZSxFQUFFO1FBQ2xCO1FBRUEsSUFBSSxDQUFDMVksUUFBUSxFQUFFO1VBQ2Q7VUFDQTtVQUNBO1VBQ0EyWSxxQkFBcUIsQ0FBQ2xiLFNBQVMsQ0FBQztRQUNqQyxDQUFDLE1BQU07VUFDTjJhLGtCQUFrQixFQUFFO1FBQ3JCO1FBRUEsU0FBU00sZUFBZSxHQUFHO1VBQzFCO1VBQ0EsT0FBT3RiLE9BQU8sQ0FBQzhhLFVBQVUsQ0FBQ1IsZUFBZSxDQUFDLENBQUNoWixJQUFJLENBQUNZLE9BQU8sQ0FBQztRQUN6RDtNQUNELENBQUMsQ0FBQyxDQUFDOFosT0FBTyxDQUFDLFlBQVk7UUFDdEIsQ0FDQ2xYLFlBQVksSUFDWixTQUFTb1csSUFBSSxHQUFHO1VBQ2Y7UUFBQSxDQUNBLEdBQ0M7TUFDSixDQUFDLENBQUM7SUFDSCxDQUFDLE1BQU07TUFDTnZZLE9BQU8sR0FBR3RELE1BQU0sQ0FBQ21DLFdBQVcsQ0FBRSxJQUFHckMsV0FBWSxPQUFNLENBQUM7TUFDcERrYiw4QkFBOEIsRUFBRTtNQUNoQyxNQUFNaFksUUFBUSxHQUFHLGNBQWM7TUFDL0IsTUFBTVksY0FBYyxHQUFHTixPQUFPLENBQUNILE9BQU8sQ0FDckNILFFBQVEsRUFDUjZHLFNBQVMsRUFDUnFRLGdCQUFnQixDQUFTQyx3QkFBd0IsQ0FBQ3pMLElBQUksQ0FDdEQwTCxVQUFVLEVBQ1ZwWCxRQUFRLEVBQ1I7UUFBRWMsS0FBSyxFQUFFNUQsV0FBVyxDQUFDNEQsS0FBSztRQUFFOEIsS0FBSyxFQUFFNUY7TUFBTyxDQUFDLEVBQzNDbUssYUFBYSxFQUNiLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKcEMsY0FBYyxFQUNkNUgsdUJBQXVCLENBQ3ZCLENBQ0Q7TUFDREgsTUFBTSxDQUFDb0QsV0FBVyxDQUFDSixRQUFRLENBQUM7TUFDNUI7TUFDQSxDQUNDdUMsYUFBYSxJQUNiLFNBQVNzVyxJQUFJLEdBQUc7UUFDZjtNQUFBLENBQ0EsRUFDQWpZLGNBQWMsQ0FBQztNQUNqQixPQUFPQSxjQUFjLENBQ25CM0IsSUFBSSxDQUFDLFVBQVUyYSxtQkFBNEIsRUFBRTtRQUM3QztRQUNBO1FBQ0EsSUFBSUEsbUJBQW1CLEVBQUU7VUFDeEIsT0FBT0EsbUJBQW1CO1FBQzNCLENBQUMsTUFBTTtVQUFBO1VBQ04sZ0NBQU8sWUFBQXRaLE9BQU8sRUFBQ0QsZUFBZSxvRkFBdkIsb0NBQTJCLDJEQUEzQix1QkFBNkJoQixTQUFTLEVBQUU7UUFDaEQ7TUFDRCxDQUFDLENBQUMsQ0FDRDZGLEtBQUssQ0FBQyxVQUFVMEMsTUFBVyxFQUFFO1FBQzdCNkssR0FBRyxDQUFDakYsS0FBSyxDQUFDLCtCQUErQixHQUFHMVEsV0FBVyxFQUFFOEssTUFBTSxDQUFDO1FBQ2hFLE1BQU1BLE1BQU07TUFDYixDQUFDLENBQUMsQ0FDRCtSLE9BQU8sQ0FBQyxZQUFZO1FBQ3BCLENBQ0NsWCxZQUFZLElBQ1osU0FBU29XLElBQUksR0FBRztVQUNmO1FBQUEsQ0FDQSxHQUNDO01BQ0osQ0FBQyxDQUFDO0lBQ0o7RUFDRDtFQUNBLFNBQVNoTixRQUFRLENBQUM5RSxjQUFtQixFQUFFakssV0FBZ0IsRUFBRTtJQUN4RCxJQUFJOE8sS0FBSyxHQUFHN0UsY0FBYyxDQUFDMUksT0FBTyxFQUFFO0lBQ3BDdU4sS0FBSyxHQUFHN0UsY0FBYyxDQUFDMUgsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHdU0sS0FBSyxDQUFDbkksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdtSSxLQUFLLENBQUNuSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RHLE9BQU9tSSxLQUFLLENBQUNuSSxLQUFLLENBQUUsSUFBRzNHLFdBQVksRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3pDO0VBRUEsU0FBU3NGLCtCQUErQixDQUN2QzRCLGNBQXVCLEVBQ3ZCNlYsZ0JBQXVDLEVBQ3ZDOVgsZUFBdUMsRUFDdkNJLGlCQUF1QixFQUNiO0lBQ1YsSUFBSUosZUFBZSxFQUFFO01BQ3BCO01BQ0E7TUFDQSxLQUFLLE1BQU1rTixlQUFlLElBQUk0SyxnQkFBZ0IsRUFBRTtRQUMvQyxJQUNDNUssZUFBZSxDQUFDcE4sS0FBSyxLQUFLLHNCQUFzQixJQUNoRCxFQUFDRSxlQUFlLGFBQWZBLGVBQWUsZUFBZkEsZUFBZSxDQUFFcUQsSUFBSSxDQUFFQyxPQUFZLElBQUtBLE9BQU8sQ0FBQ0MsSUFBSSxLQUFLMkosZUFBZSxDQUFDcE4sS0FBSyxDQUFDLEdBQy9FO1VBQ0Q7VUFDQSxPQUFPLEtBQUs7UUFDYjtNQUNEO0lBQ0QsQ0FBQyxNQUFNLElBQUltQyxjQUFjLElBQUk3QixpQkFBaUIsRUFBRTtNQUMvQztNQUNBO01BQ0EsS0FBSyxNQUFNOE0sZUFBZSxJQUFJNEssZ0JBQWdCLEVBQUU7UUFDL0MsSUFBSSxDQUFDMVgsaUJBQWlCLENBQUM4TSxlQUFlLENBQUNwTixLQUFLLENBQUMsRUFBRTtVQUM5QztVQUNBLE9BQU8sS0FBSztRQUNiO01BQ0Q7SUFDRDtJQUNBLE9BQU8sSUFBSTtFQUNaO0VBRUEsU0FBUzJXLG9CQUFvQixDQUFDdmIsYUFBa0IsRUFBRW9iLFdBQWdCLEVBQUVuYixXQUFnQixFQUFFOEMsUUFBYSxFQUFFOFosYUFBbUIsRUFBRTtJQUN6SCxNQUFNQyxtQkFBbUIsR0FBRzljLGFBQWEsQ0FBQytjLHFCQUFxQixFQUFFO0lBQ2pFLElBQUlDLGFBQWE7SUFDakI7SUFDQSxJQUFJNUIsV0FBVyxJQUFJQSxXQUFXLENBQUN6VSxjQUFjLElBQUl5VSxXQUFXLENBQUN6VSxjQUFjLENBQUNsRyxNQUFNLEVBQUU7TUFDbkYyYSxXQUFXLENBQUN6VSxjQUFjLENBQUNvQyxPQUFPLENBQUMsVUFBVWtVLGNBQW1CLEVBQUU7UUFDakUsSUFBSUEsY0FBYyxFQUFFO1VBQ25CRCxhQUFhLEdBQUdGLG1CQUFtQixDQUFDSSxhQUFhLENBQUNELGNBQWMsRUFBRTdCLFdBQVcsQ0FBQzdZLE9BQU8sRUFBRVEsUUFBUSxDQUFDO1VBQ2hHLElBQUk4WixhQUFhLEVBQUU7WUFDbEJBLGFBQWEsQ0FBQzVULElBQUksQ0FBQytULGFBQWEsQ0FBQztVQUNsQztRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0g7SUFDQTtJQUNBO0lBQ0EsSUFBSTVCLFdBQVcsSUFBSUEsV0FBVyxDQUFDcFYsZUFBZSxJQUFJb1YsV0FBVyxDQUFDcFYsZUFBZSxDQUFDdkYsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN6RnVjLGFBQWEsR0FBR0YsbUJBQW1CLENBQUMxRCxrQkFBa0IsQ0FBQ2dDLFdBQVcsQ0FBQ3BWLGVBQWUsRUFBRW9WLFdBQVcsQ0FBQzdZLE9BQU8sRUFBRVEsUUFBUSxDQUFDO01BQ2xILElBQUk4WixhQUFhLEVBQUU7UUFDbEJBLGFBQWEsQ0FBQzVULElBQUksQ0FBQytULGFBQWEsQ0FBQztNQUNsQztNQUNBQSxhQUFhLENBQ1hoYixJQUFJLENBQUMsWUFBWTtRQUNqQixJQUFJL0IsV0FBVyxDQUFDNkcscUJBQXFCLElBQUk3RyxXQUFXLENBQUM0RyxvQkFBb0IsRUFBRTtVQUMxRXJGLGFBQWEsQ0FBQytKLG1CQUFtQixDQUNoQ3RMLFdBQVcsQ0FBQzRHLG9CQUFvQixFQUNoQzJFLElBQUksQ0FBQ0MsS0FBSyxDQUFDeEwsV0FBVyxDQUFDNkcscUJBQXFCLENBQUMsRUFDN0M3RyxXQUFXLENBQUM2RixhQUFhLEVBQ3pCLE9BQU8sQ0FDUDtRQUNGO01BQ0QsQ0FBQyxDQUFDLENBQ0RtQyxLQUFLLENBQUMsVUFBVTBDLE1BQVcsRUFBRTtRQUM3QjZLLEdBQUcsQ0FBQ2pGLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRTVGLE1BQU0sQ0FBQztNQUN6RCxDQUFDLENBQUM7SUFDSjtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTXdQLFVBQVUsR0FBRztJQUNsQnZhLGVBQWUsRUFBRUEsZUFBZTtJQUNoQ3FDLGdCQUFnQixFQUFFQSxnQkFBZ0I7SUFDbENJLGlCQUFpQixFQUFFQSxpQkFBaUI7SUFDcENNLGtCQUFrQixFQUFFQSxrQkFBa0I7SUFDdEM4VyxrQ0FBa0MsRUFBRUEsa0NBQWtDO0lBQ3RFaUIsaURBQWlELEVBQUVBLGlEQUFpRDtJQUNwR3lDLDhCQUE4QixFQUFFaFksK0JBQStCO0lBQy9EaVksNEJBQTRCLEVBQUV4Syw2QkFBNkI7SUFDM0RqSixrQ0FBa0MsRUFBRUEsa0NBQWtDO0lBQ3RFM0IscUJBQXFCLEVBQUVBLHFCQUFxQjtJQUM1Q3NCLGlDQUFpQyxFQUFFQTtFQUNwQyxDQUFDO0VBQUMsT0FFYTZRLFVBQVU7QUFBQSJ9
|