occam-custom-grammars 5.0.404 → 5.0.405

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/example.js CHANGED
@@ -34169,12 +34169,12 @@
34169
34169
  var name = _grammarNames.DEFAULT_CUSTOM_GRAMMAR_NAME;
34170
34170
  var json = {
34171
34171
  name,
34172
- termBNF,
34173
- statementBNF,
34174
- metastatementBNF,
34175
34172
  typePattern,
34176
34173
  symbolPattern,
34177
- operatorPattern
34174
+ operatorPattern,
34175
+ termBNF,
34176
+ statementBNF,
34177
+ metastatementBNF
34178
34178
  };
34179
34179
  var defaultCustomGrammar = _customGrammar.default.fromJSON(json);
34180
34180
  var _default = defaultCustomGrammar;
@@ -42692,4 +42692,4 @@
42692
42692
  });
42693
42693
  require_example3();
42694
42694
  })();
42695
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ib3VuZHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvZG9tLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdGV4dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9lbGVtZW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2pzeC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZXZlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2tleS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2NsaWNrLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvc3RhdGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2NvbnRlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3Jlc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvbW91c2UuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3JlYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2JvZHkuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2xpbmsuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2hhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2lucHV0RWxlbWVudC9pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvaW5wdXRFbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9idXR0b24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L3NlbGVjdC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9jaGVja2JveC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvaW5wdXRFbGVtZW50L3RleHRhcmVhLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L2xpYi9pbnB1dEVsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvd2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy93aW5kb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2J1dHRvbnMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvanV4dGFwb3NlL3NyYy9qdXh0YXBvc2UuanMiLCAibm9kZV9tb2R1bGVzL2p1eHRhcG9zZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvc3BlY2lhbFN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvY29tbW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvYmFzaWMvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3N0YXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2hvcml6b250YWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9jaGlsZE5vZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2xvb2tBaGVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uL3BhcnRSdWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi9wYXJ0UnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9lcnJvci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9lcHNpbG9uTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvcGFydC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvdGVybWluYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3BhcnQvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL21vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vYW1iaWd1b3VzTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9hbWJpZ3VvdXNNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9vcHRpb25hbFF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3plcm9Pck1vcmVRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvY29tbW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9iYXNpYy88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvc3ByZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9kZWNsYXJhdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXRzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9tZWRpYS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWFzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL3N0eWxlcy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzTmFtZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy93aXRoU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9jdXJzb3JzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvY3Vyc29yLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3Jvdy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9yb3dzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L2NvbHVtbi5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9jb2x1bW5zLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL2V2ZW50VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL3V0aWxpdGllcy9ldmVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9taXhpbnMvZHJhZy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9taXhpbnMvZHJvcC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9lbGVtZW50L2RyYWcuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvZWxlbWVudC9kcm9wLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3NpemVhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3NwbGl0dGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3NwbGl0dGVyL3ZlcnRpY2FsLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3NwbGl0dGVyL2hvcml6b250YWwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9pbmRleC5qcyIsICJzcmMvZ3JhbW1hck5hbWVzLmpzIiwgInNyYy9ydWxlTmFtZXMuanMiLCAic3JjL3BhdHRlcm5OYW1lcy5qcyIsICJzcmMvY29uc3RhbnRzLmpzIiwgInNyYy9jdXN0b21HcmFtbWFyLmpzIiwgImxpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy90ZVgvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvc3JjL3RlWC9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvbGliL3RlWC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy90ZVgvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvdGVYL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvbGliL3RlWC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9wbGFpbi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvcGxhaW4vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9wbGFpbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9wbGFpbi9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9wbGFpbi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9wbGFpbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9yZWFkbWUvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvc3JjL3JlYWRtZS9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvbGliL3JlYWRtZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9yZWFkbWUvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvcmVhZG1lL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvbGliL3JlYWRtZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9tZXRhSlNPTi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvbWV0YUpTT04vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9tZXRhSlNPTi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9tZXRhSlNPTi9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9tZXRhSlNPTi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9tZXRhSlNPTi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9mbG9yZW5jZS9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvZmxvcmVuY2UvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9mbG9yZW5jZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9mbG9yZW5jZS9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9mbG9yZW5jZS9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9mbG9yZW5jZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9jdXN0b21HcmFtbWFyQk5GL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9saWIvY3VzdG9tR3JhbW1hckJORi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9jdXN0b21HcmFtbWFyQk5GL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvbGliL2N1c3RvbUdyYW1tYXJCTkYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvY3VzdG9tR3JhbW1hclBhdHRlcm4vZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvc3JjL2N1c3RvbUdyYW1tYXJQYXR0ZXJuL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9saWIvY3VzdG9tR3JhbW1hclBhdHRlcm4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvY3VzdG9tR3JhbW1hclBhdHRlcm4vYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvY3VzdG9tR3JhbW1hclBhdHRlcm4vcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9saWIvY3VzdG9tR3JhbW1hclBhdHRlcm4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvaW5kZXguanMiLCAic3JjL2RlZmF1bHRDdXN0b21HcmFtbWFyLmpzIiwgInNyYy9jb21iaW5lZEN1c3RvbUdyYW1tYXIuanMiLCAic3JjL3V0aWxpdGllcy9sZXhlcnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ub2RlL3Jld3JpdHRlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL25vZGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZWR1Y2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvbm9kZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ub2RlL3JlZHVjZWQvZGlyZWN0bHkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ub2RlL3JlZHVjZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZXBlYXRlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL25vZGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZXBlYXRlZC9kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL25vZGUvcmVwZWF0ZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZWR1Y2VkL2luZGlyZWN0bHkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ub2RlL3JlZHVjZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZXBlYXRlZC9pbmRpcmVjdGx5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvbm9kZS9yZXBlYXRlZC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9yZXdyaXRlTm9kZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9vcGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9vcGVyYXRpb24vcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL29wZXJhdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ydWxlL3JlZHVjZWQvZGlyZWN0bHkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ydWxlL3JlZHVjZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL3BhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvcGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3JlY3Vyc2l2ZURlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9yZWN1cnNpdmVEZWZpbml0aW9uL2xlZnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9yZWN1cnNpdmVEZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdC9kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9yZWN1cnNpdmVEZWZpbml0aW9uL2xlZnQvaW5kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3V0aWxpdGllcy9jb250ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvb3BlcmF0aW9uL3J1bGUvZGlyZWN0bHlSZWR1Y2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvb3BlcmF0aW9uL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvcnVsZS9yZXBlYXRlZC9kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3J1bGUvcmVwZWF0ZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvb3BlcmF0aW9uL3J1bGUvZGlyZWN0bHlSZXBlYXRlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL29wZXJhdGlvbi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL29wZXJhdGlvbi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvb3BlcmF0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL2RlZmluaXRpb24vcmVwbGFjZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL29wZXJhdGlvbi9kZWZpbml0aW9uL2RpcmVjdGx5TGVmdFJlY3Vyc2l2ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL29wZXJhdGlvbi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL2VsaW1pbmF0ZURpcmVjdExlZnRSZWN1cnNpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ydWxlL3JlZHVjZWQvaW5kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3J1bGUvcmVkdWNlZC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9vcGVyYXRpb24vcnVsZS9pbmRpcmVjdGx5UmVkdWNlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL29wZXJhdGlvbi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3J1bGUvcmVwZWF0ZWQvaW5kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3J1bGUvcmVwZWF0ZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvb3BlcmF0aW9uL3J1bGUvaW5kaXJlY3RseVJlcGVhdGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvb3BlcmF0aW9uL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvb3BlcmF0aW9uL2RlZmluaXRpb24vbGVmdFJlY3Vyc2l2ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL29wZXJhdGlvbi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL29wZXJhdGlvbi9kZWZpbml0aW9uL2luZGlyZWN0bHlMZWZ0UmVjdXJzaXZlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvb3BlcmF0aW9uL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZWxpbWluYXRlSW5kaXJlY3RMZWZ0UmVjdXJzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvcmV0cmlldmVMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9lbGltaW5hdGVMZWZ0UmVjdXJzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbGV4ZXIvZXhhbXBsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL2xleGVyLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3BhcnNlci9leGFtcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvcGFyc2VyLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL2luZGV4LmpzIiwgInNyYy91dGlsaXRpZXMvcGFyc2Vycy5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUvc3ViSGVhZGluZy5qcyIsICJzcmMvZXhhbXBsZS9zZWxlY3QuanMiLCAic3JjL2V4YW1wbGUvZ3JhbW1hck5hbWVzLmpzIiwgInNyYy9leGFtcGxlL3NlbGVjdC9uYW1lLmpzIiwgImxpYi9leGFtcGxlL3NlbGVjdC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvZGl2L3NpemVhYmxlLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2JuZi5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvaW5wdXQuanMiLCAic3JjL2V4YW1wbGUvaW5wdXQvcGF0dGVybi5qcyIsICJsaWIvZXhhbXBsZS9pbnB1dC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvc2VsZWN0L3J1bGVOYW1lLmpzIiwgImxpYi9leGFtcGxlL3NlbGVjdC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvY29udGVudC5qcyIsICJzcmMvZXhhbXBsZS9zZWxlY3QvcGF0dGVybk5hbWUuanMiLCAibGliL2V4YW1wbGUvc2VsZWN0Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9wYXJzZVRyZWUuanMiLCAibGliL2V4YW1wbGUvdGV4dGFyZWEvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL2lucHV0L3N0YXJ0UnVsZU5hbWUuanMiLCAibGliL2V4YW1wbGUvaW5wdXQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2Zsb3JlbmNlQk5GLmpzIiwgInNyYy9leGFtcGxlL3VzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjEuanMiLCAic3JjL2V4YW1wbGUvdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMi5qcyIsICJzcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcuanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPZmZzZXQge1xuICBjb25zdHJ1Y3Rvcih0b3AsIGxlZnQpIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICB9XG5cbiAgZ2V0VG9wKCkge1xuICAgIHJldHVybiB0aGlzLnRvcDtcbiAgfVxuXG4gIGdldExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvdW5kcyB7XG4gIGNvbnN0cnVjdG9yKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgZ2V0VG9wKCkge1xuICAgIHJldHVybiB0aGlzLnRvcDtcbiAgfVxuXG4gIGdldExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxuXG4gIGdldFJpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0O1xuICB9XG5cbiAgZ2V0Qm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGNvbnN0IHdpZHRoID0gKHRoaXMucmlnaHQgLSB0aGlzLmxlZnQpO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGhlaWdodCA9ICh0aGlzLmJvdHRvbSAtIHRoaXMudG9wKTtcblxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cbiAgXG4gIHNldFRvcCh0b3ApIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgfVxuXG4gIHNldExlZnQobGVmdCkge1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gIH1cblxuICBzZXRSaWdodChyaWdodCkge1xuICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgfVxuXG4gIHNldEJvdHRvbShib3R0b20pIHtcbiAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgfVxuXG4gIHNoaWZ0KGhvcml6b250YWxPZmZzZXQsIHZlcnRpY2FsT2Zmc2V0KSB7XG4gICAgdGhpcy50b3AgKz0gdmVydGljYWxPZmZzZXQ7XG4gICAgdGhpcy5sZWZ0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5yaWdodCArPSBob3Jpem9udGFsT2Zmc2V0O1xuICAgIHRoaXMuYm90dG9tICs9IHZlcnRpY2FsT2Zmc2V0O1xuICB9XG5cbiAgaXNPdmVybGFwcGluZ01vdXNlKG1vdXNlVG9wLCBtb3VzZUxlZnQpIHtcbiAgICByZXR1cm4gKCAgKHRoaXMudG9wIDw9IG1vdXNlVG9wKVxuICAgICAgICAgICAmJiAodGhpcy5sZWZ0IDw9IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMucmlnaHQgPiBtb3VzZUxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IG1vdXNlVG9wKSAgKTtcbiAgfVxuXG4gIGFyZU92ZXJsYXBwaW5nKGJvdW5kcykge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPCBib3VuZHMuYm90dG9tKVxuICAgICAgICAgICAmJiAodGhpcy5sZWZ0IDwgYm91bmRzLnJpZ2h0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IGJvdW5kcy5sZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiBib3VuZHMudG9wKSAgKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQm91bmRpbmdDbGllbnRSZWN0KGJvdW5kaW5nQ2xpZW50UmVjdCkge1xuICAgIGNvbnN0IHdpbmRvd1Njcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCwgLy8vXG4gICAgICAgICAgd2luZG93U2Nyb2xsTGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCwgIC8vL1xuICAgICAgICAgIHRvcCA9IGJvdW5kaW5nQ2xpZW50UmVjdC50b3AgKyB3aW5kb3dTY3JvbGxUb3AsXG4gICAgICAgICAgbGVmdCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICByaWdodCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCArIHdpbmRvd1Njcm9sbExlZnQsXG4gICAgICAgICAgYm90dG9tID0gYm91bmRpbmdDbGllbnRSZWN0LmJvdHRvbSArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBib3VuZHMgPSBuZXcgQm91bmRzKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub3BMZWZ0V2lkdGhBbmRIZWlnaHQodG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0LFxuICAgICAgICAgIHJpZ2h0ID0gbGVmdCArIHdpZHRoLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRk9SID0gXCJmb3JcIjtcbmV4cG9ydCBjb25zdCBCT0RZID0gXCJib2R5XCI7XG5leHBvcnQgY29uc3QgTk9ORSA9IFwibm9uZVwiO1xuZXhwb3J0IGNvbnN0IFNQQUNFID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ0xBU1MgPSBcImNsYXNzXCI7XG5leHBvcnQgY29uc3QgV0lEVEggPSBcIndpZHRoXCI7XG5leHBvcnQgY29uc3QgQkxPQ0sgPSBcImJsb2NrXCI7XG5leHBvcnQgY29uc3QgSEVJR0hUID0gXCJoZWlnaHRcIjtcbmV4cG9ydCBjb25zdCBPQkpFQ1QgPSBcIm9iamVjdFwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgRElTUExBWSA9IFwiZGlzcGxheVwiO1xuZXhwb3J0IGNvbnN0IEJPT0xFQU4gPSBcImJvb2xlYW5cIjtcbmV4cG9ydCBjb25zdCBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcbmV4cG9ydCBjb25zdCBGVU5DVElPTiA9IFwiZnVuY3Rpb25cIjtcbmV4cG9ydCBjb25zdCBXSUxEQ0FSRCA9IFwiKlwiO1xuZXhwb3J0IGNvbnN0IEhUTUxfRk9SID0gXCJodG1sRm9yXCI7XG5leHBvcnQgY29uc3QgVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRSA9IFwiY2xhc3NOYW1lXCI7XG5leHBvcnQgY29uc3QgQUJPVVRfQkxBTksgPSBcImFib3V0OmJsYW5rXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBTVkdfTkFNRVNQQUNFX1VSSSA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BST1BFUlRJRVMgPSBcImRlZmF1bHRQcm9wZXJ0aWVzXCI7XG5leHBvcnQgY29uc3QgSUdOT1JFRF9QUk9QRVJUSUVTID0gXCJpZ25vcmVkUHJvcGVydGllc1wiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCT09MRUFOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YXJnZXQsIHNvdXJjZSA9IHt9KSB7XG4gIHRhcmdldCA9IHsgLi4udGFyZ2V0IH07ICAvLy9cblxuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7ICAvLy9cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0YXJnZXRbbmFtZV0sXG4gICAgICAgICAgc291cmNlVmFsdWUgPSBzb3VyY2VbbmFtZV0sXG4gICAgICAgICAgdGFyZ2V0SGFzT3duUHJvcGVydHkgPSB0YXJnZXQuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cbiAgICB0YXJnZXRbbmFtZV0gPSB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA/XG4gICAgICAgICAgICAgICAgICAgICBjb21iaW5lVmFsdWVzKHRhcmdldFZhbHVlLCBzb3VyY2VWYWx1ZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VWYWx1ZTsgLy8vXG4gIH0pO1xuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZSh0YXJnZXQsIG5hbWVzID0gW10pIHtcbiAgdGFyZ2V0ID0geyAuLi50YXJnZXQgfTsgIC8vL1xuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA9IHRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblxuICAgIGlmICh0YXJnZXRIYXNPd25Qcm9wZXJ0eSkge1xuICAgICAgZGVsZXRlIHRhcmdldFtuYW1lXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVWYWx1ZXModGFyZ2V0VmFsdWUsIHNvdXJjZVZhbHVlKSB7XG4gIGNvbnN0IHRhcmdldFZhbHVlQm9vbGVhbiA9IGlzVmFsdWVCb29sZWFuKHRhcmdldFZhbHVlKSxcbiAgICAgICAgc291cmNlVmFsdWVCb29sZWFuID0gaXNWYWx1ZUJvb2xlYW4oc291cmNlVmFsdWUpLFxuICAgICAgICBjb21iaW5lZFZhbHVlID0gKHRhcmdldFZhbHVlQm9vbGVhbiAmJiBzb3VyY2VWYWx1ZUJvb2xlYW4pID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0YXJnZXRWYWx1ZX0gJHtzb3VyY2VWYWx1ZX1gO1xuXG4gIHJldHVybiBjb21iaW5lZFZhbHVlO1xufVxuXG5mdW5jdGlvbiBpc1ZhbHVlQm9vbGVhbih2YWx1ZSkge1xuICBjb25zdCB2YWx1ZUJvb2xlYW4gPSAodHlwZW9mIHZhbHVlID09PSBCT09MRUFOKTtcblxuICByZXR1cm4gdmFsdWVCb29sZWFuO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzBdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoKGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYXVnbWVudChhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheTEgPSBbIC4uLmFycmF5MSBdOyAvLy9cblxuICBhcnJheTIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGFycmF5MTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LnJlZHVjZSgoYXJyYXksIGVsZW1lbnQpID0+IHtcbiAgICBhcnJheSA9IGFycmF5LmNvbmNhdChlbGVtZW50KTsgIC8vL1xuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBndWFyYW50ZWUoYXJyYXlPckVsZW1lbnQpIHtcbiAgYXJyYXlPckVsZW1lbnQgPSBhcnJheU9yRWxlbWVudCB8fCBbXTtcblxuICByZXR1cm4gKGFycmF5T3JFbGVtZW50IGluc3RhbmNlb2YgQXJyYXkpID9cbiAgICAgICAgICAgIGFycmF5T3JFbGVtZW50IDpcbiAgICAgICAgICAgICAgW2FycmF5T3JFbGVtZW50XTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU1ZHVGFnTmFtZSh0YWdOYW1lKSB7XG4gIHJldHVybiBzdmdUYWdOYW1lcy5pbmNsdWRlcyh0YWdOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU1ZHQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gIHJldHVybiBzdmdBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSFRNTEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkge1xuICByZXR1cm4gaHRtbEF0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5jb25zdCBzdmdUYWdOYW1lcyA9IFtcbiAgICAgICAgXCJhbHRHbHlwaFwiLCBcImFuaW1hdGVcIiwgXCJhbmltYXRlQ29sb3JcIiwgXCJhbmltYXRlTW90aW9uXCIsIFwiYW5pbWF0ZVRyYW5zZm9ybVwiLCBcImFuaW1hdGlvblwiLCBcImF1ZGlvXCIsXG4gICAgICAgIFwiY2lyY2xlXCIsIFwiY2xpcFBhdGhcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY3Vyc29yXCIsXG4gICAgICAgIFwiZGVmc1wiLCBcImRlc2NcIiwgXCJkaXNjYXJkXCIsXG4gICAgICAgIFwiZWxsaXBzZVwiLFxuICAgICAgICBcImZlQmxlbmRcIiwgXCJmZUNvbG9yTWF0cml4XCIsIFwiZmVDb21wb25lbnRUcmFuc2ZlclwiLCBcImZlQ29tcG9zaXRlXCIsIFwiZmVDb252b2x2ZU1hdHJpeFwiLCBcImZlRGlmZnVzZUxpZ2h0aW5nXCIsIFwiZmVEaXNwbGFjZW1lbnRNYXBcIiwgXCJmZURpc3RhbnRMaWdodFwiLCBcImZlRHJvcFNoYWRvd1wiLCBcImZlRmxvb2RcIiwgXCJmZUZ1bmNBXCIsIFwiZmVGdW5jQlwiLCBcImZlRnVuY0dcIiwgXCJmZUZ1bmNSXCIsIFwiZmVHYXVzc2lhbkJsdXJcIiwgXCJmZUltYWdlXCIsIFwiZmVNZXJnZVwiLCBcImZlTWVyZ2VOb2RlXCIsIFwiZmVNb3JwaG9sb2d5XCIsIFwiZmVPZmZzZXRcIiwgXCJmZVBvaW50TGlnaHRcIiwgXCJmZVNwZWN1bGFyTGlnaHRpbmdcIiwgXCJmZVNwb3RMaWdodFwiLCBcImZlVGlsZVwiLCBcImZlVHVyYnVsZW5jZVwiLCBcImZpbHRlclwiLCBcImZvbnRcIiwgXCJmb250LWZhY2VcIiwgXCJmb250LWZhY2UtZm9ybWF0XCIsIFwiZm9udC1mYWNlLW5hbWVcIiwgXCJmb250LWZhY2UtdXJpXCIsIFwiZm9yZWlnbk9iamVjdFwiLFxuICAgICAgICBcImdcIiwgXCJnbHlwaFwiLCBcImdseXBoUmVmXCIsXG4gICAgICAgIFwiaGFuZGxlclwiLCBcImhhdGNoXCIsIFwiaGF0Y2hwYXRoXCIsIFwiaGtlcm5cIixcbiAgICAgICAgXCJpbWFnZVwiLCBcImxpbmVcIiwgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICBcImxpc3RlbmVyXCIsXG4gICAgICAgIFwibWFya2VyXCIsIFwibWFza1wiLCBcIm1lc2hcIiwgXCJtZXNoZ3JhZGllbnRcIiwgXCJtZXNocGF0Y2hcIiwgXCJtZXNocm93XCIsIFwibWV0YWRhdGFcIiwgXCJtaXNzaW5nLWdseXBoXCIsIFwibXBhdGhcIixcbiAgICAgICAgXCJwYXRoXCIsIFwicGF0dGVyblwiLCBcInBvbHlnb25cIiwgXCJwb2x5bGluZVwiLCBcInByZWZldGNoXCIsXG4gICAgICAgIFwicmFkaWFsR3JhZGllbnRcIiwgXCJyZWN0XCIsXG4gICAgICAgIFwic2NyaXB0XCIsIFwic2V0XCIsIFwic29saWRjb2xvclwiLCBcInN0b3BcIiwgXCJzdHlsZVwiLCBcInN2Z1wiLCBcInN3aXRjaFwiLCBcInN5bWJvbFwiLFxuICAgICAgICBcInRicmVha1wiLCBcInRleHRcIiwgXCJ0ZXh0QXJlYVwiLCBcInRleHRQYXRoXCIsIFwidGl0bGVcIiwgXCJ0cmVmXCIsIFwidHNwYW5cIixcbiAgICAgICAgXCJ1bmtub3duXCIsIFwidXNlXCIsXG4gICAgICAgIFwidmlkZW9cIiwgXCJ2aWV3XCIsIFwidmtlcm5cIlxuICAgICAgXSxcbiAgICAgIHN2Z0F0dHJpYnV0ZU5hbWVzID0gW1xuICAgICAgICBcImFjY2VudC1oZWlnaHRcIiwgXCJhY2N1bXVsYXRlXCIsIFwiYWRkaXRpdmVcIiwgXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJhbHBoYWJldGljXCIsIFwiYW1wbGl0dWRlXCIsIFwiYXJhYmljLWZvcm1cIiwgXCJhc2NlbnRcIiwgXCJhdHRyaWJ1dGVOYW1lXCIsIFwiYXR0cmlidXRlVHlwZVwiLCBcImF6aW11dGhcIixcbiAgICAgICAgXCJiYW5kd2lkdGhcIiwgXCJiYXNlRnJlcXVlbmN5XCIsIFwiYmFzZVByb2ZpbGVcIiwgXCJiYXNlbGluZS1zaGlmdFwiLCBcImJib3hcIiwgXCJiZWdpblwiLCBcImJpYXNcIiwgXCJieVwiLFxuICAgICAgICBcImNhbGNNb2RlXCIsIFwiY2FwLWhlaWdodFwiLCBcImNsaXBcIiwgXCJjbGFzc05hbWVcIiwgXCJjbGlwLXBhdGhcIiwgXCJjbGlwLXJ1bGVcIiwgXCJjbGlwUGF0aFVuaXRzXCIsIFwiY29sb3JcIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCIsIFwiY29sb3ItcHJvZmlsZVwiLCBcImNvbG9yLXJlbmRlcmluZ1wiLCBcImNvbnRlbnRTY3JpcHRUeXBlXCIsIFwiY29udGVudFN0eWxlVHlwZVwiLCBcImNyb3Nzb3JpZ2luXCIsIFwiY3Vyc29yXCIsIFwiY3hcIiwgXCJjeVwiLFxuICAgICAgICBcImRcIiwgXCJkZWZhdWx0QWN0aW9uXCIsIFwiZGVzY2VudFwiLCBcImRpZmZ1c2VDb25zdGFudFwiLCBcImRpcmVjdGlvblwiLCBcImRpc3BsYXlcIiwgXCJkaXZpc29yXCIsIFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJkb3dubG9hZFwiLCBcImR1clwiLCBcImR4XCIsIFwiZHlcIixcbiAgICAgICAgXCJlZGdlTW9kZVwiLCBcImVkaXRhYmxlXCIsIFwiZWxldmF0aW9uXCIsIFwiZW5hYmxlLWJhY2tncm91bmRcIiwgXCJlbmRcIiwgXCJldmVudFwiLCBcImV4cG9uZW50XCIsIFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFxuICAgICAgICBcImZpbGxcIiwgXCJmaWxsLW9wYWNpdHlcIiwgXCJmaWxsLXJ1bGVcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJSZXNcIiwgXCJmaWx0ZXJVbml0c1wiLCBcImZsb29kLWNvbG9yXCIsIFwiZmxvb2Qtb3BhY2l0eVwiLCBcImZvY3VzSGlnaGxpZ2h0XCIsIFwiZm9jdXNhYmxlXCIsIFwiZm9udC1mYW1pbHlcIiwgXCJmb250LXNpemVcIiwgXCJmb250LXNpemUtYWRqdXN0XCIsIFwiZm9udC1zdHJldGNoXCIsIFwiZm9udC1zdHlsZVwiLCBcImZvbnQtdmFyaWFudFwiLCBcImZvbnQtd2VpZ2h0XCIsIFwiZm9ybWF0XCIsIFwiZnJcIiwgXCJmcm9tXCIsIFwiZnhcIiwgXCJmeVwiLFxuICAgICAgICBcImcxXCIsIFwiZzJcIiwgXCJnbHlwaC1uYW1lXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiLCBcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCIsIFwiZ2x5cGhSZWZcIiwgXCJncmFkaWVudFRyYW5zZm9ybVwiLCBcImdyYWRpZW50VW5pdHNcIixcbiAgICAgICAgXCJoYW5kbGVyXCIsIFwiaGFuZ2luZ1wiLCBcImhhdGNoQ29udGVudFVuaXRzXCIsIFwiaGF0Y2hVbml0c1wiLCBcImhlaWdodFwiLCBcImhvcml6LWFkdi14XCIsIFwiaG9yaXotb3JpZ2luLXhcIiwgXCJob3Jpei1vcmlnaW4teVwiLCBcImhyZWZcIiwgXCJocmVmbGFuZ1wiLFxuICAgICAgICBcImlkXCIsIFwiaWRlb2dyYXBoaWNcIiwgXCJpbWFnZS1yZW5kZXJpbmdcIiwgXCJpblwiLCBcImluMlwiLCBcImluaXRpYWxWaXNpYmlsaXR5XCIsIFwiaW50ZXJjZXB0XCIsXG4gICAgICAgIFwia1wiLCBcImsxXCIsIFwiazJcIiwgXCJrM1wiLCBcIms0XCIsIFwia2VybmVsTWF0cml4XCIsIFwia2VybmVsVW5pdExlbmd0aFwiLCBcImtlcm5pbmdcIiwgXCJrZXlQb2ludHNcIiwgXCJrZXlTcGxpbmVzXCIsIFwia2V5VGltZXNcIixcbiAgICAgICAgXCJsZW5ndGhBZGp1c3RcIiwgXCJsZXR0ZXItc3BhY2luZ1wiLCBcImxpZ2h0aW5nLWNvbG9yXCIsIFwibGltaXRpbmdDb25lQW5nbGVcIiwgXCJsb2NhbFwiLFxuICAgICAgICBcIm1hcmtlci1lbmRcIiwgXCJtYXJrZXItbWlkXCIsIFwibWFya2VyLXN0YXJ0XCIsIFwibWFya2VySGVpZ2h0XCIsIFwibWFya2VyVW5pdHNcIiwgXCJtYXJrZXJXaWR0aFwiLCBcIm1hc2tcIiwgXCJtYXNrQ29udGVudFVuaXRzXCIsIFwibWFza1VuaXRzXCIsIFwibWF0aGVtYXRpY2FsXCIsIFwibWF4XCIsIFwibWVkaWFcIiwgXCJtZWRpYUNoYXJhY3RlckVuY29kaW5nXCIsIFwibWVkaWFDb250ZW50RW5jb2RpbmdzXCIsIFwibWVkaWFTaXplXCIsIFwibWVkaWFUaW1lXCIsIFwibWV0aG9kXCIsIFwibWluXCIsIFwibW9kZVwiLFxuICAgICAgICBcIm5hbWVcIiwgXCJuYXYtZG93blwiLCBcIm5hdi1kb3duLWxlZnRcIiwgXCJuYXYtZG93bi1yaWdodFwiLCBcIm5hdi1sZWZ0XCIsIFwibmF2LW5leHRcIiwgXCJuYXYtcHJldlwiLCBcIm5hdi1yaWdodFwiLCBcIm5hdi11cFwiLCBcIm5hdi11cC1sZWZ0XCIsIFwibmF2LXVwLXJpZ2h0XCIsIFwibnVtT2N0YXZlc1wiLFxuICAgICAgICBcIm9ic2VydmVyXCIsIFwib2Zmc2V0XCIsIFwib3BhY2l0eVwiLCBcIm9wZXJhdG9yXCIsIFwib3JkZXJcIiwgXCJvcmllbnRcIiwgXCJvcmllbnRhdGlvblwiLCBcIm9yaWdpblwiLCBcIm92ZXJmbG93XCIsIFwib3ZlcmxheVwiLCBcIm92ZXJsaW5lLXBvc2l0aW9uXCIsIFwib3ZlcmxpbmUtdGhpY2tuZXNzXCIsXG4gICAgICAgIFwicGFub3NlLTFcIiwgXCJwYXRoXCIsIFwicGF0aExlbmd0aFwiLCBcInBhdHRlcm5Db250ZW50VW5pdHNcIiwgXCJwYXR0ZXJuVHJhbnNmb3JtXCIsIFwicGF0dGVyblVuaXRzXCIsIFwicGhhc2VcIiwgXCJwaXRjaFwiLCBcInBsYXliYWNrT3JkZXJcIiwgXCJwbGF5YmFja29yZGVyXCIsIFwicG9pbnRlci1ldmVudHNcIiwgXCJwb2ludHNcIiwgXCJwb2ludHNBdFhcIiwgXCJwb2ludHNBdFlcIiwgXCJwb2ludHNBdFpcIiwgXCJwcmVzZXJ2ZUFscGhhXCIsIFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInByaW1pdGl2ZVVuaXRzXCIsIFwicHJvcGFnYXRlXCIsXG4gICAgICAgIFwiclwiLCBcInJhZGl1c1wiLCBcInJlZlhcIiwgXCJyZWZZXCIsIFwicmVuZGVyaW5nLWludGVudFwiLCBcInJlcGVhdENvdW50XCIsIFwicmVwZWF0RHVyXCIsIFwicmVxdWlyZWRFeHRlbnNpb25zXCIsIFwicmVxdWlyZWRGZWF0dXJlc1wiLCBcInJlcXVpcmVkRm9udHNcIiwgXCJyZXF1aXJlZEZvcm1hdHNcIiwgXCJyZXN0YXJ0XCIsIFwicmVzdWx0XCIsIFwicm90YXRlXCIsIFwicnhcIiwgXCJyeVwiLFxuICAgICAgICBcInNjYWxlXCIsIFwic2VlZFwiLCBcInNoYXBlLXJlbmRlcmluZ1wiLCBcInNpZGVcIiwgXCJzbG9wZVwiLCBcInNuYXBzaG90VGltZVwiLCBcInNwYWNpbmdcIiwgXCJzcGVjdWxhckNvbnN0YW50XCIsIFwic3BlY3VsYXJFeHBvbmVudFwiLCBcInNwcmVhZE1ldGhvZFwiLCBcInNyY1wiLCBcInN0YXJ0T2Zmc2V0XCIsIFwic3RkRGV2aWF0aW9uXCIsIFwic3RlbWhcIiwgXCJzdGVtdlwiLCBcInN0aXRjaFRpbGVzXCIsIFwic3RvcC1jb2xvclwiLCBcInN0b3Atb3BhY2l0eVwiLCBcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIiwgXCJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzc1wiLCBcInN0cmluZ1wiLCBcInN0cm9rZVwiLCBcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCJzdHJva2UtZGFzaG9mZnNldFwiLCBcInN0cm9rZS1saW5lY2FwXCIsIFwic3Ryb2tlLWxpbmVqb2luXCIsIFwic3Ryb2tlLW1pdGVybGltaXRcIiwgXCJzdHJva2Utb3BhY2l0eVwiLCBcInN0cm9rZS13aWR0aFwiLCBcInN0eWxlXCIsIFwic3VyZmFjZVNjYWxlXCIsIFwic3luY0JlaGF2aW9yXCIsIFwic3luY0JlaGF2aW9yRGVmYXVsdFwiLCBcInN5bmNNYXN0ZXJcIiwgXCJzeW5jVG9sZXJhbmNlXCIsIFwic3luY1RvbGVyYW5jZURlZmF1bHRcIiwgXCJzeXN0ZW1MYW5ndWFnZVwiLFxuICAgICAgICBcInRhYmxlVmFsdWVzXCIsIFwidGFyZ2V0XCIsIFwidGFyZ2V0WFwiLCBcInRhcmdldFlcIiwgXCJ0ZXh0LWFuY2hvclwiLCBcInRleHQtZGVjb3JhdGlvblwiLCBcInRleHQtcmVuZGVyaW5nXCIsIFwidGV4dExlbmd0aFwiLCBcInRpbWVsaW5lQmVnaW5cIiwgXCJ0aW1lbGluZWJlZ2luXCIsIFwidGl0bGVcIiwgXCJ0b1wiLCBcInRyYW5zZm9ybVwiLCBcInRyYW5zZm9ybUJlaGF2aW9yXCIsIFwidHlwZVwiLFxuICAgICAgICBcInUxXCIsIFwidTJcIiwgXCJ1bmRlcmxpbmUtcG9zaXRpb25cIiwgXCJ1bmRlcmxpbmUtdGhpY2tuZXNzXCIsIFwidW5pY29kZVwiLCBcInVuaWNvZGUtYmlkaVwiLCBcInVuaWNvZGUtcmFuZ2VcIiwgXCJ1bml0cy1wZXItZW1cIixcbiAgICAgICAgXCJ2LWFscGhhYmV0aWNcIiwgXCJ2LWhhbmdpbmdcIiwgXCJ2LWlkZW9ncmFwaGljXCIsIFwidi1tYXRoZW1hdGljYWxcIiwgXCJ2YWx1ZXNcIiwgXCJ2ZXJzaW9uXCIsIFwidmVydC1hZHYteVwiLCBcInZlcnQtb3JpZ2luLXhcIiwgXCJ2ZXJ0LW9yaWdpbi15XCIsIFwidmlld0JveFwiLCBcInZpZXdUYXJnZXRcIiwgXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgIFwid2lkdGhcIiwgXCJ3aWR0aHNcIiwgXCJ3b3JkLXNwYWNpbmdcIiwgXCJ3cml0aW5nLW1vZGVcIixcbiAgICAgICAgXCJ4XCIsIFwieC1oZWlnaHRcIiwgXCJ4MVwiLCBcIngyXCIsIFwieENoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICBcInlcIiwgXCJ5MVwiLCBcInkyXCIsIFwieUNoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICBcInpcIiwgXCJ6b29tQW5kUGFuXCJcbiAgICAgIF0sXG4gICAgICBodG1sQXR0cmlidXRlTmFtZXMgPSBbXG4gICAgICAgIFwiYWNjZXB0XCIsIFwiYWNjZXB0Q2hhcnNldFwiLCBcImFjY2Vzc0tleVwiLCBcImFjdGlvblwiLCBcImFsbG93XCIsIFwiYWxsb3dGdWxsU2NyZWVuXCIsIFwiYWxsb3dUcmFuc3BhcmVuY3lcIiwgXCJhbHRcIiwgXCJhc3luY1wiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImF1dG9QbGF5XCIsXG4gICAgICAgIFwiY2FwdHVyZVwiLCBcImNlbGxQYWRkaW5nXCIsIFwiY2VsbFNwYWNpbmdcIiwgXCJjaGFsbGVuZ2VcIiwgXCJjaGFyU2V0XCIsIFwiY2hlY2tlZFwiLCBcImNpdGVcIiwgXCJjbGFzc0lEXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sU3BhblwiLCBcImNvbHNcIiwgXCJjb250ZW50XCIsIFwiY29udGVudEVkaXRhYmxlXCIsIFwiY29udGV4dE1lbnVcIiwgXCJjb250cm9sc1wiLCBcImNvb3Jkc1wiLCBcImNyb3NzT3JpZ2luXCIsXG4gICAgICAgIFwiZGF0YVwiLCBcImRhdGVUaW1lXCIsIFwiZGVmYXVsdFwiLCBcImRlZmVyXCIsIFwiZGlyXCIsIFwiZGlzYWJsZWRcIiwgXCJkb3dubG9hZFwiLCBcImRyYWdnYWJsZVwiLFxuICAgICAgICBcImVuY1R5cGVcIixcbiAgICAgICAgXCJmb3JtXCIsIFwiZm9ybUFjdGlvblwiLCBcImZvcm1FbmNUeXBlXCIsIFwiZm9ybU1ldGhvZFwiLCBcImZvcm1Ob1ZhbGlkYXRlXCIsIFwiZm9ybVRhcmdldFwiLCBcImZyYW1lQm9yZGVyXCIsXG4gICAgICAgIFwiaGVhZGVyc1wiLCBcImhlaWdodFwiLCBcImhpZGRlblwiLCBcImhpZ2hcIiwgXCJocmVmXCIsIFwiaHJlZkxhbmdcIiwgXCJodG1sRm9yXCIsIFwiaHR0cEVxdWl2XCIsXG4gICAgICAgIFwiaWNvblwiLCBcImlkXCIsIFwiaW5wdXRNb2RlXCIsIFwiaW50ZWdyaXR5XCIsIFwiaXNcIixcbiAgICAgICAgXCJrZXlQYXJhbXNcIiwgXCJrZXlUeXBlXCIsIFwia2luZFwiLFxuICAgICAgICBcImxhYmVsXCIsIFwibGFuZ1wiLCBcImxpc3RcIiwgXCJsb29wXCIsIFwibG93XCIsXG4gICAgICAgIFwibWFuaWZlc3RcIiwgXCJtYXJnaW5IZWlnaHRcIiwgXCJtYXJnaW5XaWR0aFwiLCBcIm1heFwiLCBcIm1heExlbmd0aFwiLCBcIm1lZGlhXCIsIFwibWVkaWFHcm91cFwiLCBcIm1ldGhvZFwiLCBcIm1pblwiLCBcIm1pbkxlbmd0aFwiLCBcIm11bHRpcGxlXCIsIFwibXV0ZWRcIixcbiAgICAgICAgXCJuYW1lXCIsIFwibm9WYWxpZGF0ZVwiLCBcIm5vbmNlXCIsXG4gICAgICAgIFwib3BlblwiLCBcIm9wdGltdW1cIixcbiAgICAgICAgXCJwYXR0ZXJuXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJwb3N0ZXJcIiwgXCJwcmVsb2FkXCIsIFwicHJvZmlsZVwiLFxuICAgICAgICBcInJhZGlvR3JvdXBcIiwgXCJyZWFkT25seVwiLCBcInJlbFwiLCBcInJlcXVpcmVkXCIsIFwicmV2ZXJzZWRcIiwgXCJyb2xlXCIsIFwicm93U3BhblwiLCBcInJvd3NcIixcbiAgICAgICAgXCJzYW5kYm94XCIsIFwic2NvcGVcIiwgXCJzY29wZWRcIiwgXCJzY3JvbGxpbmdcIiwgXCJzZWFtbGVzc1wiLCBcInNlbGVjdGVkXCIsIFwic2hhcGVcIiwgXCJzaXplXCIsIFwic2l6ZXNcIiwgXCJzcGFuXCIsIFwic3BlbGxDaGVja1wiLCBcInNyY1wiLCBcInNyY0RvY1wiLCBcInNyY0xhbmdcIiwgXCJzcmNTZXRcIiwgXCJzdGFydFwiLCBcInN0ZXBcIiwgXCJzdHlsZVwiLCBcInN1bW1hcnlcIixcbiAgICAgICAgXCJ0YWJJbmRleFwiLCBcInRhcmdldFwiLCBcInRpdGxlXCIsIFwidHlwZVwiLFxuICAgICAgICBcInVzZU1hcFwiLFxuICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgXCJ3bW9kZVwiLFxuICAgICAgICBcIndyYXBcIlxuICAgICAgXTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFdJTERDQVJEIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZG9tRWxlbWVudHMpIHtcbiAgY29uc3QgZG9tRWxlbWVudHNXaXRoRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlcyhkb21FbGVtZW50cywgKGRvbUVsZW1lbnQpID0+IChkb21FbGVtZW50Ll9fZWxlbWVudF9fICE9PSB1bmRlZmluZWQpKSxcbiAgICAgICAgZWxlbWVudHMgPSBkb21FbGVtZW50c1dpdGhFbGVtZW50cy5tYXAoKGRvbUVsZW1lbnQpID0+IGRvbUVsZW1lbnQuX19lbGVtZW50X18pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgaGVpZ2h0LCBhc2NlbmRhbnRET01Ob2RlcyA9IFtdKSB7XG4gIGlmIChoZWlnaHQgPiAwKSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IGRvbU5vZGUucGFyZW50RWxlbWVudDsgIC8vL1xuXG4gICAgaWYgKHBhcmVudERPTU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGFzY2VuZGFudERPTU5vZGVzLnB1c2gocGFyZW50RE9NTm9kZSk7XG5cbiAgICAgIGhlaWdodC0tO1xuXG4gICAgICBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKHBhcmVudERPTU5vZGUsIGhlaWdodCwgYXNjZW5kYW50RE9NTm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhc2NlbmRhbnRET01Ob2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGRlcHRoLCBkZXNjZW5kYW50RE9NTm9kZXMgPSBbXSkge1xuICBpZiAoZGVwdGggPiAwKSB7XG4gICAgY29uc3QgY2hpbGRET01Ob2RlcyA9IGRvbU5vZGUuY2hpbGROb2RlczsgIC8vL1xuXG4gICAgcHVzaChkZXNjZW5kYW50RE9NTm9kZXMsIGNoaWxkRE9NTm9kZXMpO1xuXG4gICAgZGVwdGgtLTtcblxuICAgIGNoaWxkRE9NTm9kZXMuZm9yRWFjaCgoY2hpbGRET01Ob2RlKSA9PiBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShjaGlsZERPTU5vZGUsIGRlcHRoLCBkZXNjZW5kYW50RE9NTm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBkZXNjZW5kYW50RE9NTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IoZG9tTm9kZXMsIHNlbGVjdG9yKSB7XG4gIGNvbnN0IGZpbHRlcmVkRE9NTm9kZXMgPSBmaWx0ZXJET01Ob2Rlcyhkb21Ob2RlcywgKGRvbU5vZGUpID0+IGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IoZG9tTm9kZSwgc2VsZWN0b3IpKTtcblxuICByZXR1cm4gZmlsdGVyZWRET01Ob2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IoZG9tTm9kZSwgc2VsZWN0b3IpIHtcbiAgY29uc3QgZG9tTm9kZVR5cGUgPSBkb21Ob2RlLm5vZGVUeXBlO1xuXG4gIHN3aXRjaCAoZG9tTm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICBjb25zdCBkb21FbGVtZW50ID0gZG9tTm9kZTsgLy8vXG5cbiAgICAgIHJldHVybiBkb21FbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgIGlmIChzZWxlY3RvciA9PT0gV0lMRENBUkQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRE9NTm9kZXMoZG9tTm9kZXMsIHRlc3QpIHtcbiAgY29uc3QgZmlsdGVyZWRET01Ob2RlcyA9IFtdLFxuICAgICAgICBkb21Ob2Rlc0xlbmd0aCA9IGRvbU5vZGVzLmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZG9tTm9kZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBkb21Ob2RlID0gZG9tTm9kZXNbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IHRlc3QoZG9tTm9kZSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBmaWx0ZXJlZERPTU5vZGVzLnB1c2goZG9tTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRE9NTm9kZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgV0lMRENBUkQgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yLCBlbGVtZW50c0Zyb21ET01FbGVtZW50cywgZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yLCBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlLCBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZG9tXCI7XG5cbmZ1bmN0aW9uIGdldFBhcmVudEVsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgcGFyZW50RWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgcGFyZW50RE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gIGlmIChwYXJlbnRET01FbGVtZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKHBhcmVudERPTUVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgIGNvbnN0IHBhcmVudERPTUVsZW1lbnRzID0gW3BhcmVudERPTUVsZW1lbnRdLFxuICAgICAgICAgICAgcGFyZW50RWxlbWVudHMgPSBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhwYXJlbnRET01FbGVtZW50cyksXG4gICAgICAgICAgICBmaXJzdFBhcmVudEVsZW1lbnQgPSBmaXJzdChwYXJlbnRFbGVtZW50cyk7XG5cbiAgICAgIHBhcmVudEVsZW1lbnQgPSBmaXJzdFBhcmVudEVsZW1lbnQgfHwgbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyZW50RWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRFbGVtZW50cyhzZWxlY3RvciA9IFdJTERDQVJEKSB7XG4gIGNvbnN0IGNoaWxkRE9NTm9kZXMgPSB0aGlzLmRvbUVsZW1lbnQuY2hpbGROb2RlcyxcbiAgICAgICAgY2hpbGRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvcihjaGlsZERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhjaGlsZERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0QXNjZW5kYW50RWxlbWVudHMoc2VsZWN0b3IgPSBXSUxEQ0FSRCwgbWF4aW11bUhlaWdodCA9IEluZmluaXR5KSB7XG4gIGNvbnN0IGhlaWdodCA9IG1heGltdW1IZWlnaHQsIC8vL1xuICAgICAgICBkb21Ob2RlID0gdGhpcy5kb21FbGVtZW50LCAgLy8vXG4gICAgICAgIGFzY2VuZGFudERPTU5vZGVzID0gYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBoZWlnaHQpLFxuICAgICAgICBhc2NlbmRhbnRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3Rvcihhc2NlbmRhbnRET01Ob2Rlcywgc2VsZWN0b3IpLFxuICAgICAgICBhc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGFzY2VuZGFudERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gYXNjZW5kYW50RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldERlc2NlbmRhbnRFbGVtZW50cyhzZWxlY3RvciA9IFdJTERDQVJELCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICBjb25zdCBkZXB0aCA9IG1heGltdW1EZXB0aCwgLy8vXG4gICAgICAgIGRvbU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQsICAvLy9cbiAgICAgICAgZGVzY2VuZGFudERPTU5vZGVzID0gZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgZGVwdGgpLFxuICAgICAgICBkZXNjZW5kYW50RE9NRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IoZGVzY2VuZGFudERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGRlc2NlbmRhbnRET01FbGVtZW50cyk7XG5cbiAgcmV0dXJuIGRlc2NlbmRhbnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgbGV0IG5leHRTaWJsaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgbmV4dFNpYmxpbmdET01Ob2RlID0gdGhpcy5kb21FbGVtZW50Lm5leHRTaWJsaW5nO1xuXG4gIGlmICgobmV4dFNpYmxpbmdET01Ob2RlICE9PSBudWxsKSAmJiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKG5leHRTaWJsaW5nRE9NTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgbmV4dFNpYmxpbmdFbGVtZW50ID0gbmV4dFNpYmxpbmdET01Ob2RlLl9fZWxlbWVudF9fIHx8IG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV4dFNpYmxpbmdFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50KHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgbGV0IHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHByZXZpb3VzU2libGluZ0RPTU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQucHJldmlvdXNTaWJsaW5nOyAgLy8vXG5cbiAgaWYgKChwcmV2aW91c1NpYmxpbmdET01Ob2RlICE9PSBudWxsKSAmJiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKHByZXZpb3VzU2libGluZ0RPTU5vZGUsIHNlbGVjdG9yKSkge1xuICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSBwcmV2aW91c1NpYmxpbmdET01Ob2RlLl9fZWxlbWVudF9fIHx8IG51bGw7XG4gIH1cblxuICByZXR1cm4gcHJldmlvdXNTaWJsaW5nRWxlbWVudDtcbn1cblxuY29uc3QgZWxlbWVudE1peGlucyA9IHtcbiAgZ2V0UGFyZW50RWxlbWVudCxcbiAgZ2V0Q2hpbGRFbGVtZW50cyxcbiAgZ2V0QXNjZW5kYW50RWxlbWVudHMsXG4gIGdldERlc2NlbmRhbnRFbGVtZW50cyxcbiAgZ2V0TmV4dFNpYmxpbmdFbGVtZW50LFxuICBnZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50XG59O1xuXG5leHBvcnQgZGVmYXVsdCBlbGVtZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgT2Zmc2V0IGZyb20gXCIuL29mZnNldFwiO1xuaW1wb3J0IEJvdW5kcyBmcm9tIFwiLi9ib3VuZHNcIjtcbmltcG9ydCBlbGVtZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9lbGVtZW50XCI7XG5cbmNsYXNzIFRleHRFbGVtZW50IHtcbiAgY29uc3RydWN0b3IodGV4dCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOyAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IHRoaXM7XG4gIH1cblxuICBnZXRUZXh0KCkge1xuICAgIGNvbnN0IG5vZGVWYWx1ZSA9IHRoaXMuZG9tRWxlbWVudC5ub2RlVmFsdWUsXG4gICAgICAgICAgdGV4dCA9IG5vZGVWYWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHNldFRleHQodGV4dCkge1xuICAgIGNvbnN0IG5vZGVWYWx1ZSA9IHRleHQ7IC8vL1xuXG4gICAgdGhpcy5kb21FbGVtZW50Lm5vZGVWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgfVxuXG4gIGdldE9mZnNldCgpIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0VG9wLCAgLy8vXG4gICAgICAgICAgbGVmdCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRMZWZ0LCAgLy8vXG4gICAgICAgICAgb2Zmc2V0ID0gbmV3IE9mZnNldCh0b3AsIGxlZnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIGdldEJvdW5kcygpIHtcbiAgICBjb25zdCBib3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgYm91bmRzID0gQm91bmRzLmZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBjb25zdCBjbGllbnRXaWR0aCA9IHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCxcbiAgICAgICAgICB3aWR0aCA9IGNsaWVudFdpZHRoOyAgLy8vXG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICAgICAgICBoZWlnaHQgPSBjbGllbnRIZWlnaHQ7ICAvLy9cblxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cblxuICBwcmVwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LnByZXBlbmQodGhpcyk7IH1cblxuICBhcHBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYXBwZW5kKHRoaXMpOyB9XG5cbiAgYWRkVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFkZCh0aGlzKTsgfVxuXG4gIHJlbW92ZUZyb20ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LnJlbW92ZSh0aGlzKTsgfVxuXG4gIGluc2VydEJlZm9yZShzaWJsaW5nRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICAgICAgc2libGluZ0RPTUVsZW1lbnQgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50O1xuXG4gICAgcGFyZW50RE9NTm9kZS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCBzaWJsaW5nRE9NRWxlbWVudCk7XG4gIH1cblxuICBpbnNlcnRBZnRlcihzaWJsaW5nRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICAgICAgc2libGluZ0RPTUVsZW1lbnQgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50O1xuXG4gICAgcGFyZW50RE9NTm9kZS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCBzaWJsaW5nRE9NRWxlbWVudC5uZXh0U2libGluZyk7ICAvLy9cbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlKCk7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihUZXh0RWxlbWVudC5wcm90b3R5cGUsIGVsZW1lbnRNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0RWxlbWVudDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRFbGVtZW50IGZyb20gXCIuLi90ZXh0RWxlbWVudFwiO1xuXG5pbXBvcnQgeyBTVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGYWxzZXlFbGVtZW50cyhlbGVtZW50cykge1xuICBlbGVtZW50cyA9IGVsZW1lbnRzLnJlZHVjZSgoZWxlbWVudHMsIGVsZW1lbnQpID0+IHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMoZWxlbWVudHMpIHtcbiAgZWxlbWVudHMgPSBlbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+IHsgIC8vL1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gU1RSSU5HKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gZWxlbWVudCwgIC8vL1xuICAgICAgICAgICAgdGV4dEVsZW1lbnQgPSBuZXcgVGV4dEVsZW1lbnQodGV4dCk7XG5cbiAgICAgIGVsZW1lbnQgPSB0ZXh0RWxlbWVudDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY29tYmluZSwgcHJ1bmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL29iamVjdFwiO1xuaW1wb3J0IHsgZmlyc3QsIGd1YXJhbnRlZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzSFRNTEF0dHJpYnV0ZU5hbWUsIGlzU1ZHQXR0cmlidXRlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgcmVtb3ZlRmFsc2V5RWxlbWVudHMsIHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudHNcIjtcbmltcG9ydCB7IEZPUiwgQ0xBU1MsIE9CSkVDVCwgSFRNTF9GT1IsIENMQVNTX05BTUUsIEJPT0xFQU4sIEZVTkNUSU9OLCBTVkdfTkFNRVNQQUNFX1VSSSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZnVuY3Rpb24gYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcykge1xuICB0aGlzLnByb3BlcnRpZXMgPSBjb21iaW5lKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzKTtcblxuICBwcm9wZXJ0aWVzID0gcHJ1bmUodGhpcy5wcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcyk7IC8vL1xuXG4gIGNvbnN0IHsgbmFtZXNwYWNlVVJJIH0gPSB0aGlzLmRvbUVsZW1lbnQsXG4gICAgICAgIHN2ZyA9IChuYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0VfVVJJKSwgLy8vXG4gICAgICAgIHByb3BlcnRpZXNLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksXG4gICAgICAgIG5hbWVzID0gcHJvcGVydGllc0tleXM7ICAvLy89XG5cbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvcGVydGllc1tuYW1lXSxcbiAgICAgICAgICBuYW1lSGFuZGxlck5hbWUgPSBpc05hbWVIYW5kbGVyTmFtZShuYW1lKTtcblxuICAgIGlmIChuYW1lSGFuZGxlck5hbWUpIHtcbiAgICAgIGFkZEhhbmRsZXIodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lQXR0cmlidXRlTmFtZSA9IGlzTmFtZUF0dHJpYnV0ZU5hbWUobmFtZSwgc3ZnKTtcblxuICAgICAgaWYgKG5hbWVBdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgIGFkZEF0dHJpYnV0ZSh0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjaGlsZEVsZW1lbnRzID0gY2hpbGRFbGVtZW50c0Zyb21FbGVtZW50KHRoaXMpIHx8IHByb3BlcnRpZXMuY2hpbGRFbGVtZW50cywgIC8vL1xuICAgICAgICBjb250ZXh0ID0ge307XG5cbiAgY2hpbGRFbGVtZW50cy5mb3JFYWNoKChjaGlsZEVsZW1lbnQpID0+IHtcbiAgICB1cGRhdGVDb250ZXh0KGNoaWxkRWxlbWVudCwgY29udGV4dCk7XG5cbiAgICB0aGlzLmFkZChjaGlsZEVsZW1lbnQpO1xuICB9KTtcblxuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzKCkge1xuICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICByZXR1cm4gdGhpcy5jb250ZXh0O1xufVxuXG5mdW5jdGlvbiBhc3NpZ25Db250ZXh0KG5hbWVzLCB0aGVuRGVsZXRlKSB7XG4gIGNvbnN0IGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGZpcnN0QXJndW1lbnQgPSBmaXJzdChhcmd1bWVudHMpO1xuXG4gICAgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBCT09MRUFOKSB7XG4gICAgICBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udGV4dCk7XG5cbiAgICAgIHRoZW5EZWxldGUgPSBmaXJzdEFyZ3VtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGVuRGVsZXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAwKSB7XG4gICAgbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhlbkRlbGV0ZSA9IHRydWU7XG4gIH1cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnRleHRbbmFtZV0sXG4gICAgICAgICAgcHJvcGVydHlOYW1lID0gbmFtZSwgIC8vL1xuICAgICAgICAgIGRlc2NyaXB0b3IgPSB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG5cbiAgICBpZiAodGhlbkRlbGV0ZSkge1xuICAgICAgZGVsZXRlIHRoaXMuY29udGV4dFtuYW1lXTtcbiAgICB9XG4gIH0sIFtdKTtcbn1cblxuY29uc3QganN4TWl4aW5zID0ge1xuICBhcHBseVByb3BlcnRpZXMsXG4gIGdldFByb3BlcnRpZXMsXG4gIGdldENvbnRleHQsXG4gIGFzc2lnbkNvbnRleHRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGpzeE1peGlucztcblxuZnVuY3Rpb24gY2hpbGRFbGVtZW50c0Zyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgbGV0IGNoaWxkRWxlbWVudHMgPSBudWxsO1xuXG4gIGlmICh0eXBlb2YgZWxlbWVudC5jaGlsZEVsZW1lbnRzID09PSBGVU5DVElPTikge1xuICAgIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50LmNoaWxkRWxlbWVudHMuY2FsbChlbGVtZW50KTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSBndWFyYW50ZWUoY2hpbGRFbGVtZW50cyk7XG5cbiAgICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG5cbiAgICBjaGlsZEVsZW1lbnRzID0gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoY2hpbGRFbGVtZW50LCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSAodHlwZW9mIGNoaWxkRWxlbWVudC5wYXJlbnRDb250ZXh0ID09PSBGVU5DVElPTikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQucGFyZW50Q29udGV4dCgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQuY29udGV4dDsgLy8vXG5cbiAgT2JqZWN0LmFzc2lnbihjb250ZXh0LCBwYXJlbnRDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBldmVudFR5cGUgPSBuYW1lLnN1YnN0cigyKS50b0xvd2VyQ2FzZSgpLCAvLy9cbiAgICAgICAgaGFuZGxlciA9IHZhbHVlOyAgLy8vXG5cbiAgZWxlbWVudC5vbihldmVudFR5cGUsIGhhbmRsZXIpO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKG5hbWUgPT09IENMQVNTX05BTUUpIHtcbiAgICBuYW1lID0gQ0xBU1M7XG4gIH1cblxuICBpZiAobmFtZSA9PT0gSFRNTF9GT1IpIHtcbiAgICBuYW1lID0gRk9SO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gT0JKRUNUKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcblxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBlbGVtZW50LmRvbUVsZW1lbnRbbmFtZV1ba2V5XSA9IHZhbHVlW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBCT09MRUFOKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IG5hbWU7IC8vL1xuXG4gICAgICBlbGVtZW50LmFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc05hbWVIYW5kbGVyTmFtZShuYW1lKSB7XG4gIHJldHVybiAvXm9uLy50ZXN0KG5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc05hbWVBdHRyaWJ1dGVOYW1lKG5hbWUsIHN2Zykge1xuICByZXR1cm4gc3ZnID8gaXNTVkdBdHRyaWJ1dGVOYW1lKG5hbWUpIDogaXNIVE1MQXR0cmlidXRlTmFtZShuYW1lKVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQkxVUl9FVkVOVF9UWVBFID0gXCJibHVyXCI7XG5leHBvcnQgY29uc3QgV0hFRUxfRVZFTlRfVFlQRSA9IFwid2hlZWxcIjtcbmV4cG9ydCBjb25zdCBJTlBVVF9FVkVOVF9UWVBFID0gXCJpbnB1dFwiO1xuZXhwb3J0IGNvbnN0IEZPQ1VTX0VWRU5UX1RZUEUgPSBcImZvY3VzXCI7XG5leHBvcnQgY29uc3QgQ0xJQ0tfRVZFTlRfVFlQRSA9IFwiY2xpY2tcIjtcbmV4cG9ydCBjb25zdCBLRVlVUF9FVkVOVF9UWVBFID0gXCJrZXl1cFwiO1xuZXhwb3J0IGNvbnN0IENIQU5HRV9FVkVOVF9UWVBFID0gXCJjaGFuZ2VcIjtcbmV4cG9ydCBjb25zdCBSRVNJWkVfRVZFTlRfVFlQRSA9IFwicmVzaXplXCI7XG5leHBvcnQgY29uc3QgU0NST0xMX0VWRU5UX1RZUEUgPSBcInNjcm9sbFwiO1xuZXhwb3J0IGNvbnN0IEtFWURPV05fRVZFTlRfVFlQRSA9IFwia2V5ZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFVVBfRVZFTlRfVFlQRSA9IFwibW91c2V1cFwiO1xuZXhwb3J0IGNvbnN0IEFVWENMSUNLX0VWRU5UX1RZUEUgPSBcImF1eGNsaWNrXCI7XG5leHBvcnQgY29uc3QgTU9VU0VPVVRfRVZFTlRfVFlQRSA9IFwibW91c2VvdXRcIjtcbmV4cG9ydCBjb25zdCBEQkxDTElDS19FVkVOVF9UWVBFID0gXCJkYmxjbGlja1wiO1xuZXhwb3J0IGNvbnN0IE1PVVNFT1ZFUl9FVkVOVF9UWVBFID0gXCJtb3VzZW92ZXJcIjtcbmV4cG9ydCBjb25zdCBNT1VTRURPV05fRVZFTlRfVFlQRSA9IFwibW91c2Vkb3duXCI7XG5leHBvcnQgY29uc3QgTU9VU0VNT1ZFX0VWRU5UX1RZUEUgPSBcIm1vdXNlbW92ZVwiO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRNRU5VX0VWRU5UX1RZUEUgPSBcImNvbnRleHRtZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgQkxVUl9FVkVOVF9UWVBFLFxuICBXSEVFTF9FVkVOVF9UWVBFLFxuICBJTlBVVF9FVkVOVF9UWVBFLFxuICBGT0NVU19FVkVOVF9UWVBFLFxuICBDTElDS19FVkVOVF9UWVBFLFxuICBLRVlVUF9FVkVOVF9UWVBFLFxuICBDSEFOR0VfRVZFTlRfVFlQRSxcbiAgUkVTSVpFX0VWRU5UX1RZUEUsXG4gIFNDUk9MTF9FVkVOVF9UWVBFLFxuICBLRVlET1dOX0VWRU5UX1RZUEUsXG4gIE1PVVNFVVBfRVZFTlRfVFlQRSxcbiAgQVVYQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgREJMQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICBNT1VTRU1PVkVfRVZFTlRfVFlQRSxcbiAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgS0VZVVBfRVZFTlRfVFlQRSwgS0VZRE9XTl9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25LZXlVcChrZXlVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihLRVlVUF9FVkVOVF9UWVBFLCBrZXlVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleVVwKGtleVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihLRVlVUF9FVkVOVF9UWVBFLCBrZXlVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uS2V5RG93bihrZXlEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwga2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleURvd24oa2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoS0VZRE9XTl9FVkVOVF9UWVBFLCBrZXlEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3Qga2V5TWl4aW5zID0ge1xuICBvbktleVVwLFxuICBvZmZLZXlVcCxcbiAgb25LZXlEb3duLFxuICBvZmZLZXlEb3duXG59O1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENMSUNLX0VWRU5UX1RZUEUsIERCTENMSUNLX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbkNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Eb3VibGVDbGljayhjbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihEQkxDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkRvdWJsZUNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihEQkxDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IGNsaWNrTWl4aW5zID0ge1xuICBvbkNsaWNrLFxuICBvZmZDbGljayxcbiAgb25Eb3VibGVDbGljayxcbiAgb2ZmRG91YmxlQ2xpY2tcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsaWNrTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgcmV0dXJuIHRoaXMuc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlKSB7XG4gIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RhdGUoc3RhdGUpIHtcbiAgT2JqZWN0LmFzc2lnbih0aGlzLnN0YXRlLCBzdGF0ZSk7XG59XG5cbmNvbnN0IHN0YXRlTWl4aW5zID0ge1xuICBnZXRTdGF0ZSxcbiAgc2V0U3RhdGUsXG4gIHVwZGF0ZVN0YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdGF0ZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRFWFRfSFRNTF9DT05URU5UX1RZUEUgPSBcInRleHQvaHRtbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSRVNJWkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5pbXBvcnQgeyBPQkpFQ1QsIEFCT1VUX0JMQU5LIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihSRVNJWkVfRVZFTlRfVFlQRSwgcmVzaXplSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBhZGRSZXNpemVPYmplY3QoKSB7XG4gIGNvbnN0IHJlc2l6ZU9iamVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoT0JKRUNUKSxcbiAgICAgICAgc3R5bGUgPSBgZGlzcGxheTogYmxvY2s7IFxuICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgICAgICAgICAgICB0b3A6IDA7IFxuICAgICAgICAgICAgICAgICBsZWZ0OiAwOyBcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOyBcbiAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7IFxuICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyBcbiAgICAgICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IFxuICAgICAgICAgICAgICAgICB6LWluZGV4OiAtMTtgLFxuICAgICAgICBkYXRhID0gQUJPVVRfQkxBTkssXG4gICAgICAgIHR5cGUgPSBURVhUX0hUTUxfQ09OVEVOVF9UWVBFO1xuXG4gIHJlc2l6ZU9iamVjdC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBzdHlsZSk7XG5cbiAgcmVzaXplT2JqZWN0LmRhdGEgPSBkYXRhO1xuXG4gIHJlc2l6ZU9iamVjdC50eXBlID0gdHlwZTtcblxuICB0aGlzLl9fcmVzaXplT2JqZWN0X18gPSByZXNpemVPYmplY3Q7XG5cbiAgcmVzaXplT2JqZWN0Lm9ubG9hZCA9ICgpID0+IHJlc2l6ZU9iamVjdExvYWRIYW5kbGVyKHRoaXMpO1xuXG4gIHRoaXMuZG9tRWxlbWVudC5hcHBlbmRDaGlsZChyZXNpemVPYmplY3QpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVSZXNpemVPYmplY3QoKSB7XG4gIGNvbnN0IHJlc2l6ZU9iamVjdCA9IHRoaXMuX19yZXNpemVPYmplY3RfXyxcbiAgICAgICAgb2JqZWN0V2luZG93ID0gcmVzaXplT2JqZWN0LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldzsgIC8vL1xuXG4gIG9iamVjdFdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVFdmVudExpc3RlbmVyKTtcblxuICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQ2hpbGQocmVzaXplT2JqZWN0KTtcblxuICBkZWxldGUgdGhpcy5fX3Jlc2l6ZU9iamVjdF9fO1xufVxuXG5jb25zdCByZXNpemVNaXhpbnMgPSB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemUsXG4gIGFkZFJlc2l6ZU9iamVjdCxcbiAgcmVtb3ZlUmVzaXplT2JqZWN0XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZXNpemVNaXhpbnM7XG5cbmZ1bmN0aW9uIHJlc2l6ZU9iamVjdExvYWRIYW5kbGVyKGVsZW1lbnQpIHtcbiAgY29uc3QgcmVzaXplT2JqZWN0ID0gZWxlbWVudC5fX3Jlc2l6ZU9iamVjdF9fLFxuICAgICAgICByZXNpemVPYmplY3RXaW5kb3cgPSByZXNpemVPYmplY3QuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3OyAgLy8vXG5cbiAgcmVzaXplT2JqZWN0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoUkVTSVpFX0VWRU5UX1RZUEUsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHJlc2l6ZUV2ZW50TGlzdGVuZXJzID0gZWxlbWVudC5maW5kRXZlbnRMaXN0ZW5lcnMoUkVTSVpFX0VWRU5UX1RZUEUpO1xuXG4gICAgcmVzaXplRXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgocmVzaXplRXZlbnRMaXN0ZW5lcikgPT4gcmVzaXplRXZlbnRMaXN0ZW5lcihldmVudCkpO1xuICB9KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU1BBQ0UgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBSRVNJWkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5pbXBvcnQgeyByZW1vdmVSZXNpemVPYmplY3QgfSBmcm9tIFwiLi4vbWl4aW5zL3Jlc2l6ZVwiO1xuXG5mdW5jdGlvbiBvbihldmVudFR5cGVzLCBoYW5kbGVyLCBlbGVtZW50ID0gdGhpcykge1xuICBldmVudFR5cGVzID0gZXZlbnRUeXBlcy5zcGxpdChTUEFDRSk7XG5cbiAgZXZlbnRUeXBlcy5mb3JFYWNoKChldmVudFR5cGUpID0+IHtcbiAgICBpZiAoZXZlbnRUeXBlID09PSBSRVNJWkVfRVZFTlRfVFlQRSkge1xuICAgICAgY29uc3QgcmVzaXplRXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhSRVNJWkVfRVZFTlRfVFlQRSksXG4gICAgICAgICAgICByZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9IHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgaWYgKHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuYWRkUmVzaXplT2JqZWN0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuXG4gICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9mZihldmVudFR5cGVzLCBoYW5kbGVyLCBlbGVtZW50ID0gdGhpcykge1xuICBldmVudFR5cGVzID0gZXZlbnRUeXBlcy5zcGxpdChTUEFDRSk7XG5cbiAgZXZlbnRUeXBlcy5mb3JFYWNoKChldmVudFR5cGUpID0+IHtcbiAgICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIpO1xuXG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gUkVTSVpFX0VWRU5UX1RZUEUpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZUV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoUkVTSVpFX0VWRU5UX1RZUEUpLFxuICAgICAgICAgICAgcmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPSByZXNpemVFdmVudExpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIGlmIChyZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW1vdmVSZXNpemVPYmplY3QodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgaWYgKHRoaXMuZXZlbnRMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goZXZlbnRMaXN0ZW5lcik7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCksXG4gICAgICAgIGluZGV4ID0gdGhpcy5ldmVudExpc3RlbmVycy5pbmRleE9mKGV2ZW50TGlzdGVuZXIpLFxuICAgICAgICBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICB0aGlzLmV2ZW50TGlzdGVuZXJzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIGRlbGV0ZSB0aGlzLmV2ZW50TGlzdGVuZXJzO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5ldmVudExpc3RlbmVycy5maW5kKChldmVudExpc3RlbmVyKSA9PiB7XG4gICAgaWYgKChldmVudExpc3RlbmVyLmVsZW1lbnQgPT09IGVsZW1lbnQpICYmIChldmVudExpc3RlbmVyLmhhbmRsZXIgPT09IGhhbmRsZXIpICYmIChldmVudExpc3RlbmVyLmV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkge1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IFtdO1xuXG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gKGV2ZW50TGlzdGVuZXIuZXZlbnRUeXBlID09PSBldmVudFR5cGUpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMucHVzaChldmVudExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgbGV0IGV2ZW50TGlzdGVuZXI7XG5cbiAgY29uc3QgaGFuZGxlckVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCBldmVudCwgZWxlbWVudCk7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihldmVudExpc3RlbmVyLCB7XG4gICAgZWxlbWVudCxcbiAgICBoYW5kbGVyLFxuICAgIGV2ZW50VHlwZVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuY29uc3QgZXZlbnRNaXhpbnMgPSB7XG4gIG9uLFxuICBvZmYsXG4gIGFkZEV2ZW50TGlzdGVuZXIsXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIsXG4gIGNyZWF0ZUV2ZW50TGlzdGVuZXIsXG4gIGZpbmRFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcnNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV2ZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBNT1VTRVVQX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU9VVF9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VET1dOX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU9WRVJfRVZFTlRfVFlQRSxcbiAgICAgICAgIE1PVVNFTU9WRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25Nb3VzZVVwKG1vdXNlVXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oTU9VU0VVUF9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRVVQX0VWRU5UX1RZUEUsIG1vdXNlVXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFT1VUX0VWRU5UX1RZUEUsIG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VPdXQobW91c2VPdXRIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKE1PVVNFT1VUX0VWRU5UX1RZUEUsIG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFRE9XTl9FVkVOVF9UWVBFLCBtb3VzZURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRURPV05fRVZFTlRfVFlQRSwgbW91c2VEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFT1ZFUl9FVkVOVF9UWVBFLCBtb3VzZU92ZXJIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU9WRVJfRVZFTlRfVFlQRSwgbW91c2VPdmVySGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFTU9WRV9FVkVOVF9UWVBFLCBtb3VzZU1vdmVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgbW91c2VNaXhpbnMgPSB7XG4gIG9uTW91c2VVcCxcbiAgb2ZmTW91c2VVcCxcbiAgb25Nb3VzZU91dCxcbiAgb2ZmTW91c2VPdXQsXG4gIG9uTW91c2VEb3duLFxuICBvZmZNb3VzZURvd24sXG4gIG9uTW91c2VPdmVyLFxuICBvZmZNb3VzZU92ZXIsXG4gIG9uTW91c2VNb3ZlLFxuICBvZmZNb3VzZU1vdmVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1vdXNlTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTQ1JPTExfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgc2Nyb2xsSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoU0NST0xMX0VWRU5UX1RZUEUsIHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIGdldFNjcm9sbFRvcCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsTGVmdCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0OyB9XG5cbmZ1bmN0aW9uIHNldFNjcm9sbFRvcChzY3JvbGxUb3ApIHsgdGhpcy5kb21FbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpIHsgdGhpcy5kb21FbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OyB9XG5cbmNvbnN0IHNjcm9sbE1peGlucyA9IHtcbiAgb25TY3JvbGwsXG4gIG9mZlNjcm9sbCxcbiAgZ2V0U2Nyb2xsVG9wLFxuICBnZXRTY3JvbGxMZWZ0LFxuICBzZXRTY3JvbGxUb3AsXG4gIHNldFNjcm9sbExlZnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNjcm9sbE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE9mZnNldCBmcm9tIFwiLi9vZmZzZXRcIjtcbmltcG9ydCBCb3VuZHMgZnJvbSBcIi4vYm91bmRzXCI7XG5pbXBvcnQganN4TWl4aW5zIGZyb20gXCIuL21peGlucy9qc3hcIjtcbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHN0YXRlTWl4aW5zIGZyb20gXCIuL21peGlucy9zdGF0ZVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IHJlc2l6ZU1peGlucyBmcm9tIFwiLi9taXhpbnMvcmVzaXplXCI7XG5pbXBvcnQgc2Nyb2xsTWl4aW5zIGZyb20gXCIuL21peGlucy9zY3JvbGxcIjtcbmltcG9ydCBlbGVtZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGNvbWJpbmUgfSBmcm9tIFwiLi91dGlsaXRpZXMvb2JqZWN0XCI7XG5pbXBvcnQgeyBpc1NWR1RhZ05hbWUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgZmlyc3QsIGF1Z21lbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IE5PTkUsXG4gICAgICAgICBCTE9DSyxcbiAgICAgICAgIFdJRFRILFxuICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgSEVJR0hULFxuICAgICAgICAgRElTUExBWSxcbiAgICAgICAgIERJU0FCTEVELFxuICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgU1ZHX05BTUVTUEFDRV9VUkksXG4gICAgICAgICBERUZBVUxUX1BST1BFUlRJRVMsXG4gICAgICAgICBJR05PUkVEX1BST1BFUlRJRVMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY2xhc3MgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yKSB7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgICAgdGhpcy5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gdGhpczsgLy8vXG4gICAgfVxuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50O1xuICB9XG5cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRUb3AsICAvLy9cbiAgICAgICAgICBsZWZ0ID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldExlZnQsICAvLy9cbiAgICAgICAgICBvZmZzZXQgPSBuZXcgT2Zmc2V0KHRvcCwgbGVmdCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgZ2V0Qm91bmRzKCkge1xuICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICBib3VuZHMgPSBCb3VuZHMuZnJvbUJvdW5kaW5nQ2xpZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QpO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIGdldFdpZHRoKGluY2x1ZGVCb3JkZXIgPSB0cnVlKSB7XG4gICAgY29uc3Qgd2lkdGggPSBpbmNsdWRlQm9yZGVyID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50Lm9mZnNldFdpZHRoIDpcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBzZXRXaWR0aCh3aWR0aCkge1xuICAgIHdpZHRoID0gYCR7d2lkdGh9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoV0lEVEgsIHdpZHRoKTtcbiAgfVxuXG4gIGdldEhlaWdodChpbmNsdWRlQm9yZGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IGhlaWdodCA9IGluY2x1ZGVCb3JkZXIgP1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50Lm9mZnNldEhlaWdodCA6XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgc2V0SGVpZ2h0KGhlaWdodCkge1xuICAgIGhlaWdodCA9IGAke2hlaWdodH1weGA7IC8vL1xuXG4gICAgdGhpcy5zdHlsZShIRUlHSFQsIGhlaWdodCk7XG4gIH1cblxuICBoYXNBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGdldEF0dHJpYnV0ZShuYW1lKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7IHRoaXMuZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOyB9XG5cbiAgY2xlYXJBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7IHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIHJlbW92ZUF0dHJpYnV0ZShuYW1lKSB7IHRoaXMuY2xlYXJBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBzZXRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuXG4gIGFkZENsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9XG5cbiAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7IH1cblxuICB0b2dnbGVDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lKTsgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpOyB9XG5cbiAgY2xlYXJDbGFzc2VzKCkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HOyB9XG5cbiAgcHJlcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5wcmVwZW5kKHRoaXMpOyB9XG5cbiAgYXBwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFwcGVuZCh0aGlzKTsgfVxuXG4gIGFkZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hZGQodGhpcyk7IH1cblxuICByZW1vdmVGcm9tKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5yZW1vdmUodGhpcyk7IH1cblxuICBpbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQubmV4dFNpYmxpbmcpOyAgLy8vXG4gIH1cblxuICBwcmVwZW5kKGVsZW1lbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50ID0gZWxlbWVudC5kb21FbGVtZW50LFxuICAgICAgICAgIGZpcnN0Q2hpbGRET01FbGVtZW50ID0gdGhpcy5kb21FbGVtZW50LmZpcnN0Q2hpbGQ7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIGZpcnN0Q2hpbGRET01FbGVtZW50KTtcbiAgfVxuXG4gIGFwcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUoZG9tRWxlbWVudCwgbnVsbCk7IC8vL1xuICB9XG5cbiAgYWRkKGVsZW1lbnQpIHsgdGhpcy5hcHBlbmQoZWxlbWVudCk7IH1cblxuICByZW1vdmUoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBjb25zdCBkb21FbGVtZW50ID0gZWxlbWVudC5kb21FbGVtZW50O1xuXG4gICAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQ2hpbGQoZG9tRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmUoKTtcbiAgICB9XG4gIH1cblxuICBtb3VudChlbGVtZW50KSB7XG4gICAgY29uc3QgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudC5nZXREZXNjZW5kYW50RWxlbWVudHMoKSxcbiAgICAgICAgICBlbGVtZW50cyA9IFtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAuLi5kZXNjZW5kYW50RWxlbWVudHNcbiAgICAgICAgICBdO1xuXG4gICAgdGhpcy5hZGQoZWxlbWVudCk7XG5cbiAgICBlbGVtZW50cy5yZXZlcnNlKCk7IC8vL1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gKGVsZW1lbnQuZGlkTW91bnQgJiYgZWxlbWVudC5kaWRNb3VudCgpKSk7ICAvLy9cbiAgfVxuXG4gIHVubW91bnQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgICAgZWxlbWVudHMgPSBbXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgICAgXTtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50LndpbGxVbm1vdW50ICYmIGVsZW1lbnQud2lsbFVubW91bnQoKSkpOyAgLy8vXG5cbiAgICB0aGlzLnJlbW92ZShlbGVtZW50KTtcbiAgfVxuXG4gIHNob3coZGlzcGxheVN0eWxlID0gQkxPQ0spIHsgdGhpcy5kaXNwbGF5KGRpc3BsYXlTdHlsZSk7IH1cblxuICBoaWRlKCkgeyB0aGlzLnN0eWxlKERJU1BMQVksIE5PTkUpOyB9XG5cbiAgZGlzcGxheShkaXNwbGF5KSB7IHRoaXMuc3R5bGUoRElTUExBWSwgZGlzcGxheSk7IH1cblxuICBlbmFibGUoKSB7IHRoaXMuY2xlYXJBdHRyaWJ1dGUoRElTQUJMRUQpOyB9XG5cbiAgZGlzYWJsZSgpIHsgdGhpcy5zZXRBdHRyaWJ1dGUoRElTQUJMRUQsIERJU0FCTEVEKTsgfVxuXG4gIGlzRW5hYmxlZCgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpLFxuICAgICAgICAgIGVuYWJsZWQgPSAhZGlzYWJsZWQ7XG5cbiAgICByZXR1cm4gZW5hYmxlZDtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmhhc0F0dHJpYnV0ZShESVNBQkxFRCk7XG5cbiAgICByZXR1cm4gZGlzYWJsZWQ7XG4gIH1cbiAgXG4gIGlzRGlzcGxheWVkKCkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSB0aGlzLmNzcyhESVNQTEFZKSxcbiAgICAgICAgICBkaXNwbGF5ZWQgPSAoZGlzcGxheSAhPT0gTk9ORSk7XG4gICAgXG4gICAgcmV0dXJuIGRpc3BsYXllZDtcbiAgfVxuXG4gIGlzU2hvd2luZygpIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSB0aGlzLmlzRGlzcGxheWVkKCksXG4gICAgICAgICAgc2hvd2luZyA9IGRpc3BsYXllZDsgIC8vL1xuXG4gICAgcmV0dXJuIHNob3dpbmc7XG4gIH1cblxuICBpc0hpZGRlbigpIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSB0aGlzLmlzRGlzcGxheWVkKCksXG4gICAgICAgICAgaGlkZGVuID0gIWRpc3BsYXllZDtcblxuICAgIHJldHVybiBoaWRkZW47XG4gIH1cblxuICBzdHlsZShuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV07XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG4gIH1cblxuICBodG1sKGh0bWwpIHtcbiAgICBpZiAoaHRtbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSB0aGlzLmRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuXG4gICAgICBodG1sID0gaW5uZXJIVE1MOyAvLy9cblxuICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlubmVySFRNTCA9IGh0bWw7IC8vL1xuXG4gICAgICB0aGlzLmRvbUVsZW1lbnQuaW5uZXJIVE1MID0gaW5uZXJIVE1MXG4gICAgfVxuICB9XG5cbiAgY3NzKGNzcykge1xuICAgIGlmIChjc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5kb21FbGVtZW50KSxcbiAgICAgICAgICAgIGNzcyA9IHt9O1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29tcHV0ZWRTdHlsZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZmlyc3RDb21wdXRlZFN0eWxlID0gZmlyc3RbY29tcHV0ZWRTdHlsZV0sXG4gICAgICAgICAgICAgIG5hbWUgPSBmaXJzdENvbXB1dGVkU3R5bGUsICAvLy9cbiAgICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICAgIGNzc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNzcyA9PT0gU1RSSU5HKSB7XG4gICAgICBsZXQgbmFtZSA9IGNzczsgLy8vXG5cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsgLy8vXG5cbiAgICAgIGNzcyA9IHZhbHVlOyAgLy8vXG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoY3NzKTsgLy8vXG5cbiAgICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjc3NbbmFtZV07XG5cbiAgICAgICAgdGhpcy5zdHlsZShuYW1lLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIGJsdXIoKSB7IHRoaXMuZG9tRWxlbWVudC5ibHVyKCk7IH1cblxuICBmb2N1cygpIHsgdGhpcy5kb21FbGVtZW50LmZvY3VzKCk7IH1cblxuICBoYXNGb2N1cygpIHtcbiAgICBjb25zdCBmb2N1cyA9IChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnQpOyAgLy8vXG5cbiAgICByZXR1cm4gZm9jdXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCB7IHRhZ05hbWUgfSA9IENsYXNzLFxuICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50RnJvbVRhZ05hbWUoQ2xhc3MsIHRhZ05hbWUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyksXG4gICAgICAgICAgZGVmYXVsdFByb3BlcnRpZXMgPSBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcyksXG4gICAgICAgICAgaWdub3JlZFByb3BlcnRpZXMgPSBpZ25vcmVkUHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcyk7XG5cbiAgICBlbGVtZW50LmFwcGx5UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpO1xuXG4gICAgZWxlbWVudC5pbml0aWFsaXNlICYmIGVsZW1lbnQuaW5pdGlhbGlzZSgpOyAvLy9cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21UYWdOYW1lKHRhZ05hbWUsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IENsYXNzID0gRWxlbWVudCwgIC8vL1xuICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50RnJvbVRhZ05hbWUoQ2xhc3MsIHRhZ05hbWUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyksXG4gICAgICAgICAgZGVmYXVsdFByb3BlcnRpZXMgPSB7fSwgLy8vXG4gICAgICAgICAgaWdub3JlZFByb3BlcnRpZXMgPSBbXTsgLy8vXG5cbiAgICBlbGVtZW50LmFwcGx5UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpO1xuXG4gICAgZWxlbWVudC5pbml0aWFsaXNlICYmIGVsZW1lbnQuaW5pdGlhbGlzZSgpOyAvLy9cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGpzeE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBrZXlNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgY2xpY2tNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgc3RhdGVNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgbW91c2VNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgcmVzaXplTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHNjcm9sbE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBlbGVtZW50TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgRWxlbWVudDtcblxuZnVuY3Rpb24gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBudWxsLFxuICAgICAgICBlbGVtZW50ID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5jYWxsKENsYXNzLCBudWxsLCBzZWxlY3RvciwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSk7XG5cbiAgZWxlbWVudC5kb21FbGVtZW50ID0gaXNTVkdUYWdOYW1lKHRhZ05hbWUpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05BTUVTUEFDRV9VUkksIHRhZ05hbWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cbiAgZWxlbWVudC5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gZWxlbWVudDsgLy8vXG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzLCBkZWZhdWx0UHJvcGVydGllcyA9IHt9KSB7XG4gIGlmIChDbGFzcy5oYXNPd25Qcm9wZXJ0eShERUZBVUxUX1BST1BFUlRJRVMpKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXMgPSBjb21iaW5lKGRlZmF1bHRQcm9wZXJ0aWVzLCBDbGFzc1tERUZBVUxUX1BST1BFUlRJRVNdKTtcbiAgfVxuXG4gIGNvbnN0IHN1cGVyQ2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ2xhc3MpO1xuXG4gIGlmIChzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXMgPSBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhzdXBlckNsYXNzLCBkZWZhdWx0UHJvcGVydGllcyk7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzLCBpZ25vcmVkUHJvcGVydGllcyA9IFtdKSB7XG4gIGlmIChDbGFzcy5oYXNPd25Qcm9wZXJ0eShJR05PUkVEX1BST1BFUlRJRVMpKSB7XG4gICAgaWdub3JlZFByb3BlcnRpZXMgPSBhdWdtZW50KGlnbm9yZWRQcm9wZXJ0aWVzLCBDbGFzc1tJR05PUkVEX1BST1BFUlRJRVNdLCAoaWdub3JlZFByb3BlcnR5KSA9PiAhaWdub3JlZFByb3BlcnRpZXMuaW5jbHVkZXMoaWdub3JlZFByb3BlcnR5KSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTtcblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgaWdub3JlZFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGlnbm9yZWRQcm9wZXJ0aWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFNUUklORywgRlVOQ1RJT04gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHJlbW92ZUZhbHNleUVsZW1lbnRzLCByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZWxlbWVudHNcIjtcblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudChmaXJzdEFyZ3VtZW50LCBwcm9wZXJ0aWVzLCAuLi5jaGlsZEVsZW1lbnRzKSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICBpZiAoZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IHNhbml0aXNlQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIHByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGNoaWxkRWxlbWVudHNcbiAgICB9LCBwcm9wZXJ0aWVzKTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzT2YoZmlyc3RBcmd1bWVudCwgRWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IENsYXNzID0gZmlyc3RBcmd1bWVudDsgIC8vL1xuXG4gICAgICBlbGVtZW50ID0gQ2xhc3MuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSBmaXJzdEFyZ3VtZW50OyAvLy9cblxuICAgICAgZWxlbWVudCA9IEVsZW1lbnQuZnJvbVRhZ05hbWUodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gRlVOQ1RJT04pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRGdW5jdGlvbiA9IGZpcnN0QXJndW1lbnQ7ICAvLy9cblxuICAgICAgZWxlbWVudCA9IGVsZW1lbnRGdW5jdGlvbihwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuY29uc3QgUmVhY3QgPSB7XG4gIGNyZWF0ZUVsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0O1xuXG5mdW5jdGlvbiBzYW5pdGlzZUNoaWxkRWxlbWVudHMoY2hpbGRFbGVtZW50cykge1xuICBjaGlsZEVsZW1lbnRzID0gZmxhdHRlbihjaGlsZEVsZW1lbnRzKTtcblxuICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG5cbiAgY2hpbGRFbGVtZW50cyA9IHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuXG5mdW5jdGlvbiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKSB7XG4gIGNvbnN0IHN1YmNsYXNzT2YgPSAoYXJndW1lbnQucHJvdG90eXBlIGluc3RhbmNlb2YgQ2xhc3MpO1xuXG4gIHJldHVybiBzdWJjbGFzc09mO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBCT0RZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2R5IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yID0gQk9EWSkge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJib2R5XCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGluayBleHRlbmRzIEVsZW1lbnQge1xuICBnZXRIUmVmKCkgeyByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpOyB9XG5cbiAgc2V0SFJlZihocmVmKSB7IHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaHJlZik7IH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgY2hhbmdlTWl4aW5zID0ge1xuICBvbkNoYW5nZSxcbiAgb2ZmQ2hhbmdlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjaGFuZ2VNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NoYW5nZVwiO1xuXG5pbXBvcnQgeyBDSEFOR0VfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcblxuY2xhc3MgSW5wdXRFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAvLy9cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge30gIC8vL1xuXG4gIGdldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnZhbHVlOyB9XG5cbiAgZ2V0U2VsZWN0aW9uU3RhcnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7IH1cblxuICBnZXRTZWxlY3Rpb25FbmQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kOyB9XG4gIFxuICBpc1JlYWRPbmx5KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnJlYWRPbmx5OyB9XG5cbiAgc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuICBzZXRTZWxlY3Rpb25TdGFydChzZWxlY3Rpb25TdGFydCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsgfVxuXG4gIHNldFNlbGVjdGlvbkVuZChzZWxlY3Rpb25FbmQpIHsgdGhpcy5kb21FbGVtZW50LnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZDsgfVxuXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5KSB7IHRoaXMuZG9tRWxlbWVudC5yZWFkT25seSA9IHJlYWRPbmx5OyB9XG5cbiAgc2VsZWN0KCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0KCk7IH1cbn1cblxuT2JqZWN0LmFzc2lnbihJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBJbnB1dEVsZW1lbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiYnV0dG9uXCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4uL21peGlucy9jaGFuZ2VcIjtcblxuY2xhc3MgU2VsZWN0IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHt9IC8vL1xuXG4gIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAgLy8vXG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJzZWxlY3RcIjtcbn1cblxuT2JqZWN0LmFzc2lnbihTZWxlY3QucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvY2hhbmdlXCI7XG5cbmNsYXNzIENoZWNrYm94IGV4dGVuZHMgRWxlbWVudCB7XG4gIGlzQ2hlY2tlZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jaGVja2VkOyB9XG5cbiAgY2hlY2soY2hlY2tlZCA9IHRydWUpIHsgdGhpcy5kb21FbGVtZW50LmNoZWNrZWQgPSBjaGVja2VkOyB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImlucHV0XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHR5cGU6IFwiY2hlY2tib3hcIlxuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKENoZWNrYm94LnByb3RvdHlwZSwgY2hhbmdlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0YXJlYSBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IG9uUmVzaXplLCBvZmZSZXNpemUgfSBmcm9tIFwiLi4vbWl4aW5zL3Jlc2l6ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHdpbmRvd01peGlucyBmcm9tIFwiLi9taXhpbnMvd2luZG93XCI7XG5cbmltcG9ydCB7IFVOREVGSU5FRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jbGFzcyBXaW5kb3cge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSB3aW5kb3c7IC8vL1xuICB9XG5cbiAgYXNzaWduKC4uLnNvdXJjZXMpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRvbUVsZW1lbnQ7IC8vL1xuXG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpO1xuICB9XG5cbiAgYWRkUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgcmVtb3ZlUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgZ2V0V2lkdGgoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuaW5uZXJXaWR0aDsgfSAvLy9cbiAgXG4gIGdldEhlaWdodCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5pbm5lckhlaWdodDsgfSAvLy9cblxuICBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVlPZmZzZXQ7IH0gIC8vL1xuXG4gIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVhPZmZzZXQ7IH0gLy8vXG5cbiAgZ2V0U2VsZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldFNlbGVjdGlvbigpOyB9XG59XG5cbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgd2luZG93TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgKHR5cGVvZiB3aW5kb3cgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgV2luZG93KCk7ICAvLy9cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IExFRlRfTU9VU0VfQlVUVE9OID0gMDtcbmV4cG9ydCBjb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyO1xuZXhwb3J0IGNvbnN0IE1JRERMRV9NT1VTRV9CVVRUT04gPSAxO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIExFRlRfTU9VU0VfQlVUVE9OLFxuICBSSUdIVF9NT1VTRV9CVVRUT04sXG4gIE1JRERMRV9NT1VTRV9CVVRUT05cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuXG5pbXBvcnQgeyBVTkRFRklORUQgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY2xhc3MgRG9jdW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudDsgLy8vXG4gIH1cblxuICBjcmVhdGVSYW5nZSgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jcmVhdGVSYW5nZSgpOyB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlb2YgZG9jdW1lbnQgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgRG9jdW1lbnQoKTsgIC8vL1xuXG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFjdCB9IGZyb20gXCIuL3JlYWN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvdW5kcyB9IGZyb20gXCIuL2JvdW5kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBPZmZzZXQgfSBmcm9tIFwiLi9vZmZzZXRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb2R5IH0gZnJvbSBcIi4vZWxlbWVudC9ib2R5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpbmsgfSBmcm9tIFwiLi9lbGVtZW50L2xpbmtcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5wdXQgfSBmcm9tIFwiLi9pbnB1dEVsZW1lbnQvaW5wdXRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcIi4vZWxlbWVudC9idXR0b25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0IH0gZnJvbSBcIi4vZWxlbWVudC9zZWxlY3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9lbGVtZW50L2NoZWNrYm94XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHRhcmVhIH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50L3RleHRhcmVhXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHRFbGVtZW50IH0gZnJvbSBcIi4vdGV4dEVsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5wdXRFbGVtZW50IH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJ1dHRvbnMgfSBmcm9tIFwiLi9idXR0b25zXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRvY3VtZW50IH0gZnJvbSBcIi4vZG9jdW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlbnRUeXBlcyB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUmVhY3QsIHdpbmRvdyB9IGZyb20gXCJlYXN5XCI7XG5cbndpbmRvdy5hc3NpZ24oe1xuICBSZWFjdFxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBcIi4vanV4dGFwb3NlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHRhZ05hbWVzID0gW1xuICBcImFcIiwgXCJhYmJyXCIsIFwiYWRkcmVzc1wiLCBcImFzaWRlXCIsIFwiYXVkaW9cIixcbiAgXCJiXCIsIFwiYmFzZVwiLCBcImJkaVwiLCBcImJkb1wiLCBcImJsb2NrcXVvdGVcIiwgXCJib2R5XCIsIFwiYnJcIiwgXCJidXR0b25cIixcbiAgXCJjYW52YXNcIiwgXCJjYXB0aW9uXCIsIFwiY2l0ZVwiLCBcImNvZGVcIiwgXCJjb2xcIiwgXCJjb2xncm91cFwiLFxuICBcImRhdGFcIiwgXCJkYXRhbGlzdFwiLCBcImRkXCIsIFwiZGVsXCIsIFwiZGV0YWlsc1wiLCBcImRmblwiLCBcImRpYWxvZ1wiLCBcImRpdlwiLCBcImRsXCIsIFwiZHRcIiwgXCJlbVwiLCBcImVtYmVkXCIsIFwiZmllbGRzZXRcIiwgXCJmaWdjYXB0aW9uXCIsIFwiZmlndXJlXCIsIFwiZm9vdGVyXCIsIFwiZm9ybVwiLFxuICBcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJoNlwiLCBcImhlYWRcIiwgXCJoZWFkZXJcIiwgXCJoclwiLCBcImh0bWxcIixcbiAgXCJpXCIsIFwiaWZyYW1lXCIsIFwiaW1nXCIsIFwiaW5wdXRcIiwgXCJpbnNcIiwgXCJrYmRcIiwgXCJsYWJlbFwiLCBcImxlZ2VuZFwiLCBcImxpXCIsIFwibGlua1wiLFxuICBcIm1haW5cIiwgXCJtYXBcIiwgXCJtYXJrXCIsIFwibWV0YVwiLCBcIm1ldGVyXCIsIFwibmF2XCIsIFwibm9zY3JpcHRcIixcbiAgXCJvYmplY3RcIiwgXCJvbFwiLCBcIm9wdGdyb3VwXCIsIFwib3B0aW9uXCIsIFwib3V0cHV0XCIsXG4gIFwicFwiLCBcInBhcmFtXCIsIFwicGljdHVyZVwiLCBcInByZVwiLCBcInByb2dyZXNzXCIsXG4gIFwicVwiLCBcInJwXCIsIFwicnRcIiwgXCJydWJ5XCIsXG4gIFwic1wiLCBcInNhbXBcIiwgXCJzY3JpcHRcIiwgXCJzZWN0aW9uXCIsIFwic2VsZWN0XCIsIFwic21hbGxcIiwgXCJzb3VyY2VcIiwgXCJzcGFuXCIsIFwic3Ryb25nXCIsIFwic3R5bGVcIiwgXCJzdWJcIiwgXCJzdW1tYXJ5XCIsIFwic3VwXCIsIFwic3ZnXCIsXG4gIFwidGFibGVcIiwgXCJ0Ym9keVwiLCBcInRkXCIsIFwidGVtcGxhdGVcIiwgXCJ0ZXh0YXJlYVwiLCBcInRmb290XCIsIFwidGhcIiwgXCJ0aGVhZFwiLCBcInRpbWVcIiwgXCJ0aXRsZVwiLCBcInRyXCIsIFwidHJhY2tcIixcbiAgXCJ1XCIsIFwidWxcIixcbiAgXCJ2YXJcIiwgXCJ2aWRlb1wiLFxuICBcIndiclwiXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdOYW1lcztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRSQUNFX0xFVkVMID0gXCJ0cmFjZVwiO1xuZXhwb3J0IGNvbnN0IERFQlVHX0xFVkVMID0gXCJkZWJ1Z1wiO1xuZXhwb3J0IGNvbnN0IElORk9fTEVWRUwgPSBcImluZm9cIjtcbmV4cG9ydCBjb25zdCBXQVJOSU5HX0xFVkVMID0gXCJ3YXJuaW5nXCI7XG5leHBvcnQgY29uc3QgRVJST1JfTEVWRUwgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRkFUQUxfTEVWRUwgPSBcImZhdGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUxcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBHRVRfTUVUSE9EID0gXCJHRVRcIjtcbmV4cG9ydCBjb25zdCBQT1NUX01FVEhPRCA9IFwiUE9TVFwiO1xuZXhwb3J0IGNvbnN0IFBBVENIX01FVEhPRCA9IFwiUEFUQ0hcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBQQVRDSF9NRVRIT0QsXG4gIERFTEVURV9NRVRIT0QsXG4gIE9QVElPTlNfTUVUSE9EXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUFJBR01BX0hFQURFUiA9IFwicHJhZ21hXCI7XG5leHBvcnQgY29uc3QgQUNDRVBUX0hFQURFUiA9IFwiYWNjZXB0XCI7XG5leHBvcnQgY29uc3QgTE9DQVRJT05fSEVBREVSID0gXCJsb2NhdGlvblwiO1xuZXhwb3J0IGNvbnN0IFVTRVJfQUdFTlRfSEVBREVSID0gXCJ1c2VyLWFnZW50XCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9UWVBFX0hFQURFUiA9IFwiY29udGVudC10eXBlXCI7XG5leHBvcnQgY29uc3QgQVVUSE9SSVpBVElPTl9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbmV4cG9ydCBjb25zdCBDQUNIRV9DT05UUk9MX0hFQURFUiA9IFwiY2FjaGUtY29udHJvbFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfTEVOR1RIX0hFQURFUiA9IFwiY29udGVudC1sZW5ndGhcIjtcbmV4cG9ydCBjb25zdCBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIgPSBcInRyYW5zZmVyLWVuY29kaW5nXCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9ESVNQT1NJVElPTl9IRUFERVIgPSBcImNvbnRlbnQtZGlzcG9zaXRpb25cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfUkVRVUVTVF9NRVRIT0RfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFBSQUdNQV9IRUFERVIsXG4gIEFDQ0VQVF9IRUFERVIsXG4gIExPQ0FUSU9OX0hFQURFUixcbiAgVVNFUl9BR0VOVF9IRUFERVIsXG4gIENPTlRFTlRfVFlQRV9IRUFERVIsXG4gIEFVVEhPUklaQVRJT05fSEVBREVSLFxuICBDQUNIRV9DT05UUk9MX0hFQURFUixcbiAgQ09OVEVOVF9MRU5HVEhfSEVBREVSLFxuICBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIsXG4gIENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfSEVBREVSU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUlxufTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBTSElGVF9LRVlfQ09ERSA9IDE2O1xuZXhwb3J0IGNvbnN0IEVTQ0FQRV9LRVlfQ09ERSA9IDI3O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNISUZUX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5leHBvcnQgY29uc3QgVVRGXzhfRU5DT0RJTkcgPSBcInV0Zi04XCI7XG5leHBvcnQgY29uc3QgQkFTRTY0X0VOQ09ESU5HID0gXCJiYXNlNjRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVVEY4X0VOQ09ESU5HLFxuICBVVEZfOF9FTkNPRElORyxcbiAgQkFTRTY0X0VOQ09ESU5HXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVVBfQ0hBUkFDVEVSID0gXCJcdTAwMWJbQVwiO1xuZXhwb3J0IGNvbnN0IEVUWF9DSEFSQUNURVIgPSBcIlxcdTAwMDNcIjtcbmV4cG9ydCBjb25zdCBCQVJfQ0hBUkFDVEVSID0gXCJ8XCI7XG5leHBvcnQgY29uc3QgREFTSF9DSEFSQUNURVIgPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBET1dOX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0JcIjtcbmV4cG9ydCBjb25zdCBMRUZUX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0RcIjtcbmV4cG9ydCBjb25zdCBSSUdIVF9DSEFSQUNURVIgPSBcIlx1MDAxYltDXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IENUUkxfQ19DSEFSQUNURVIgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkRfQ0hBUkFDVEVSID0gXCIqXCI7XG5leHBvcnQgY29uc3QgQkFDS1RJQ0tfREVMSU1JVEVSID0gXCJgXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQ0hBUkFDVEVSID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiA9IFwiJmd0O1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgQ0FSUklBR0VfUkVUVVJOX0NIQVJBQ1RFUiA9IFwiXFxyXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgPSBcIiFcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVUF9DSEFSQUNURVIsXG4gIEVUWF9DSEFSQUNURVIsXG4gIEJBUl9DSEFSQUNURVIsXG4gIERBU0hfQ0hBUkFDVEVSLFxuICBET1dOX0NIQVJBQ1RFUixcbiAgTEVGVF9DSEFSQUNURVIsXG4gIFJJR0hUX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgV0lMRENBUkRfQ0hBUkFDVEVSLFxuICBCQUNLVElDS19ERUxJTUlURVIsXG4gIE5FV19MSU5FX0NIQVJBQ1RFUixcbiAgQU1QRVJTQU5EX0NIQVJBQ1RFUixcbiAgQkFDS1NQQUNFX0NIQVJBQ1RFUixcbiAgTEVTU19USEFOX0NIQVJBQ1RFUixcbiAgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19DT0RFID0gMDtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX0NPREUgPSAyMDA7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19DT0RFID0gMzAyO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19DT0RFID0gMjAxO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19DT0RFID0gNDA4O1xuZXhwb3J0IGNvbnN0IFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSA9IDQyOTtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfQ09ERSA9IDUwMztcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19DT0RFID0gNTAwO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFpFUk9fMF9TVEFUVVNfQ09ERSxcbiAgT0tfMjAwX1NUQVRVU19DT0RFLFxuICBGT1VORF8zMDJfU1RBVFVTX0NPREUsXG4gIENSRUFURURfMjAxX1NUQVRVU19DT0RFLFxuICBTRUVfT1RIRVJfMzAzX1NUQVRVU19DT0RFLFxuICBGT1JCSURERU5fNDAzX1NUQVRVU19DT0RFLFxuICBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFLFxuICBOT19DT05URU5UXzIwNF9TVEFUVVNfQ09ERSxcbiAgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19DT0RFLFxuICBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUsXG4gIFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX0NPREUsXG4gIFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX0NPREUsXG4gIFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSxcbiAgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9PQ1RFVF9TVFJFQU1fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9KU09OX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFpFUk9fMF9TVEFUVVNfTUVTU0FHRSA9IFwiXCI7XG5leHBvcnQgY29uc3QgT0tfMjAwX1NUQVRVU19NRVNTQUdFID0gXCJPS1wiO1xuZXhwb3J0IGNvbnN0IEZPVU5EXzMwMl9TVEFUVVNfTUVTU0FHRSA9IFwiRm91bmRcIjtcbmV4cG9ydCBjb25zdCBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSA9IFwiQ3JlYXRlZFwiO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlZSBvdGhlclwiO1xuZXhwb3J0IGNvbnN0IEZPUkJJRERFTl80MDNfU1RBVFVTX01FU1NBR0UgPSBcIkZvcmJpZGRlblwiO1xuZXhwb3J0IGNvbnN0IE5PVF9GT1VORF80MDRfU1RBVFVTX01FU1NBR0UgPSBcIk5vdCBmb3VuZFwiO1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19NRVNTQUdFID0gXCJObyBjb250ZW50XCI7XG5leHBvcnQgY29uc3QgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19NRVNTQUdFID0gXCJCYWQgZ2F0ZXdheVwiO1xuZXhwb3J0IGNvbnN0IEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIHJlcXVlc3RcIjtcbmV4cG9ydCBjb25zdCBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19NRVNTQUdFID0gXCJVbmF1dGhvcml6ZWRcIjtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFID0gXCJSZXF1ZXN0IHRpbWVvdXRcIjtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UgPSBcIlRvbyBtYW55IHJlcXVlc3RzXCI7XG5leHBvcnQgY29uc3QgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlcnZpY2UgdW5hdmFpbGFibGVcIjtcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFID0gXCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX01FU1NBR0UsXG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFLFxuICBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19NRVNTQUdFLFxuICBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19NRVNTQUdFLFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzBdO31cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZChhcnJheSkgeyByZXR1cm4gYXJyYXlbMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoaXJkKGFycmF5KSB7IHJldHVybiBhcnJheVsyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZm91cnRoKGFycmF5KSB7IHJldHVybiBhcnJheVszXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlmdGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDVdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAzXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMl07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0TGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWFkKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGFpbChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2soYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKGFycmF5Lmxlbmd0aCAtIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9udChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMCwgTWF0aC5tYXgoMSwgYXJyYXkubGVuZ3RoIC0gMSkpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoKGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zaGlmdChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdChhcnJheTEsIGVsZW1lbnRPckFycmF5Mikge1xuICBjb25zdCBhcnJheTIgPSAoZWxlbWVudE9yQXJyYXkyIGluc3RhbmNlb2YgQXJyYXkpID9cbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudE9yQXJyYXkyIDpcbiAgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50T3JBcnJheTJdO1xuICBcbiAgcHVzaChhcnJheTEsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhcihhcnJheSkge1xuICBjb25zdCBzdGFydCA9IDA7XG4gIFxuICByZXR1cm4gYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoYXJyYXkxLCBhcnJheTIpIHtcbiAgY29uc3Qgc3RhcnQgPSAwLFxuICAgICAgICBkZWxldGVDb3VudCA9IGFycmF5Mi5sZW5ndGg7ICAvLy9cbiAgXG4gIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCwgYXJyYXkyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaWNlKGFycmF5MSwgc3RhcnQsIGRlbGV0ZUNvdW50ID0gSW5maW5pdHksIGFycmF5MiA9IFtdKSB7XG4gIGNvbnN0IGFyZ3MgPSBbc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5hcnJheTJdLFxuICAgICAgICBkZWxldGVkSXRlbXNBcnJheSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYXJyYXkxLCBhcmdzKTtcblxuICByZXR1cm4gZGVsZXRlZEl0ZW1zQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlKGFycmF5LCBlbGVtZW50LCBjYWxsYmFjaykge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgc3RhcnQgPSBpbmRleDsgIC8vL1xuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgaWYgKGZvdW5kKSB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGZpbHRlcmVkRWxlbWVudHMgPSBbXTtcbiAgXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBlbGVtZW50cyA9IFtdO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lKGFycmF5LCBjYWxsYmFjaykge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG4gICAgICBcbiAgICAgIHBydW5lZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gcHJ1bmVkRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoKGFycmF5LCBlbGVtZW50LCBjYWxsYmFjaykge1xuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBhcnJheTIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGUoYXJyYXksIGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Mi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNGaW5kLFxuICBiYWNrd2FyZHNGaW5kLFxuICBmb3J3YXJkc1NvbWUsXG4gIGJhY2t3YXJkc1NvbWUsXG4gIGZvcndhcmRzRXZlcnksXG4gIGJhY2t3YXJkc0V2ZXJ5LFxuICBmb3J3YXJkc1JlZHVjZSxcbiAgYmFja3dhcmRzUmVkdWNlLFxuICBmb3J3YXJkc0ZvckVhY2gsXG4gIGJhY2t3YXJkc0ZvckVhY2hcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPID0gXCIwXCI7XG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENPTE9OX0NIQVJBQ1RFUiwgQU1QRVJTQU5EX0NIQVJBQ1RFUiB9IGZyb20gXCIuLi9jaGFyYWN0ZXJzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvdmVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZXhpc3RpbmdOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLCAgLy8vXG4gICAgICAgIGV4aXN0aW5nTmFtZSA9IGV4aXN0aW5nTmFtZXMuZmluZCgoZXhpc3RpbmdOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdMb3dlckNhc2VOYW1lID0gZXhpc3RpbmdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdMb3dlckNhc2VOYW1lID09PSBsb3dlckNhc2VOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGV4aXN0aW5nTmFtZSAhPT0gbnVsbCkge1xuICAgIGhlYWRlcnNbZXhpc3RpbmdOYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgPT09IG51bGwpIHtcbiAgICBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcnRGcm9tSG9zdChob3N0KSB7XG4gIGxldCBwb3J0O1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eaHR0cHM/OlxcL1xcLyhbXlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaW5kZXggPSBzZWNvbmRNYXRjaC5pbmRleE9mKENPTE9OX0NIQVJBQ1RFUik7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIGNvbnN0IHNlY3VyZSA9IHNlY3VyZUZyb21Ib3N0KGhvc3QpO1xuXG4gICAgcG9ydCA9IHNlY3VyZSA/IDQ0MyA6IDgwOyAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdGFydCA9IGluZGV4ICsgMSxcbiAgICAgICAgICBwb3J0U3RyaW5nID0gc2Vjb25kTWF0Y2guc3Vic3RyaW5nKHN0YXJ0KTtcblxuICAgIHBvcnQgPSBOdW1iZXIocG9ydFN0cmluZyk7XG4gIH1cblxuICByZXR1cm4gcG9ydDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3VyZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3Qgc2VjdXJlID0gL15odHRwczpcXC9cXC8vLnRlc3QoaG9zdCk7XG5cbiAgcmV0dXJuIHNlY3VyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lRnJvbUhvc3QoaG9zdCkge1xuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW146XFwvXSspLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBob3N0bmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gaG9zdG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSkge1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5KSxcbiAgICAgICAgbmFtZXNMZW5ndGggPSBuYW1lcy5sZW5ndGgsXG4gICAgICAgIGxhc3RJbmRleCA9IG5hbWVzTGVuZ3RoIC0gMSxcbiAgICAgICAgcXVlcnlTdHJpbmcgPSBuYW1lcy5yZWR1Y2UoKHF1ZXJ5U3RyaW5nLCBuYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlbbmFtZV0sXG4gICAgICAgICAgICAgICAgZW5jb2RlZE5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSksXG4gICAgICAgICAgICAgICAgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBhbXBlcnNhbmRPck5vdGhpbmcgPSAoaW5kZXggIT09IGxhc3RJbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1QRVJTQU5EX0NIQVJBQ1RFUiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcbiAgXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7ZW5jb2RlZE5hbWV9PSR7ZW5jb2RlZFZhbHVlfSR7YW1wZXJzYW5kT3JOb3RoaW5nfWA7XG4gIFxuICAgICAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gcXVlcnlTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpIHtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSksXG4gICAgICAgIHVybCA9IChxdWVyeVN0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgYCR7aG9zdH0ke3VyaX1gIDpcbiAgICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9PyR7cXVlcnlTdHJpbmd9YDtcblxuICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG92ZXJ3cml0ZSxcbiAgdW5kZXJ3cml0ZSxcbiAgcG9ydEZyb21Ib3N0LFxuICBzZWN1cmVGcm9tSG9zdCxcbiAgaG9zdG5hbWVGcm9tSG9zdCxcbiAgcXVlcnlTdHJpbmdGcm9tUXVlcnksXG4gIHVybEZyb21Ib3N0VVJJQW5kUXVlcnlcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEdFVF9NRVRIT0QsIFBPU1RfTUVUSE9EIH0gZnJvbSBcIi4uL21ldGhvZHNcIjtcbmltcG9ydCB7IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFIH0gZnJvbSBcIi4uL2NvbnRlbnRUeXBlc1wiO1xuaW1wb3J0IHsgQUNDRVBUX0hFQURFUiwgQ09OVEVOVF9UWVBFX0hFQURFUiB9IGZyb20gXCIuLi9oZWFkZXJzXCI7XG5pbXBvcnQgeyB1bmRlcndyaXRlLCB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9odHRwXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGhlYWRlcnM7IC8vL1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IEdFVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50ID0gbnVsbDtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3QoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGNvbnRlbnQ7XG4gICAgY29udGVudCA9IGhlYWRlcnM7XG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gUE9TVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50VHlwZSA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KTtcblxuICB1bmRlcndyaXRlQ29udGVudFR5cGVIZWFkZXIoaGVhZGVycywgY29udGVudFR5cGUpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgdXJsID0gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSxcbiAgICAgICAgYWNjZXB0ID0gaGVhZGVyc1tBQ0NFUFRfSEVBREVSXSB8fCBudWxsLFxuICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbQ09OVEVOVF9UWVBFX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgeG1sSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICBpZiAoY29udGVudFR5cGUgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgY29uc3QganNvbiA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG5cbiAgICBjb250ZW50ID0ganNvblN0cmluZzsgIC8vL1xuICB9XG5cbiAgeG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSwgc3RhdHVzLCByZXNwb25zZSB9ID0geG1sSHR0cFJlcXVlc3QsXG4gICAgICAgICAgc3RhdHVzQ29kZSA9IHN0YXR1cztcblxuICAgIGlmIChyZWFkeVN0YXRlID09IDQpIHtcbiAgICAgIGxldCBjb250ZW50ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChhY2NlcHQgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblN0cmluZyA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblxuICAgICAgICAgIGNvbnRlbnQgPSBqc29uOyAgLy8vXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soY29udGVudCwgc3RhdHVzQ29kZSk7XG4gICAgfVxuICB9O1xuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwpO1xuXG4gIGlmIChhY2NlcHQgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKEFDQ0VQVF9IRUFERVIsIGFjY2VwdCk7XG4gIH1cblxuICBpZiAoY29udGVudFR5cGUgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKENPTlRFTlRfVFlQRV9IRUFERVIsIGNvbnRlbnRUeXBlKTtcbiAgfVxuXG4gIChjb250ZW50ICE9PSBudWxsKSA/XG4gICAgeG1sSHR0cFJlcXVlc3Quc2VuZChjb250ZW50KSA6XG4gICAgICB4bWxIdHRwUmVxdWVzdC5zZW5kKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0LFxuICBwb3N0LFxuICByZXF1ZXN0XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KSB7XG4gIGNvbnN0IG5hbWUgPSBBQ0NFUFRfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gYWNjZXB0OyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUWXBlKSB7XG4gIGNvbnN0IG5hbWUgPSBDT05URU5UX1RZUEVfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gY29udGVudFRZcGU7IC8vL1xuXG4gIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbnN0IGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdoaWxzdChvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgdGVybWluYXRlID0gb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlKG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25zW2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBldmVudHVhbGx5KG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZGx5KG9wZXJhdGlvbiwgbGVuZ3RoLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSBsZW5ndGg7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudC0tO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gLTEpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHdoaWxzdCxcclxuICBmb3JFYWNoLFxyXG4gIHNlcXVlbmNlLFxyXG4gIGV2ZW50dWFsbHksXHJcbiAgcmVwZWF0ZWRseSxcclxuICBmb3J3YXJkc0ZvckVhY2gsXHJcbiAgYmFja3dhcmRzRm9yRWFjaFxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV2ZWxzIH0gZnJvbSBcIi4vbGV2ZWxzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1ldGhvZHMgfSBmcm9tIFwiLi9tZXRob2RzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhlYWRlcnMgfSBmcm9tIFwiLi9oZWFkZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtleUNvZGVzIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW5jb2RpbmdzIH0gZnJvbSBcIi4vZW5jb2RpbmdzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoYXJhY3RlcnMgfSBmcm9tIFwiLi9jaGFyYWN0ZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c0NvZGVzIH0gZnJvbSBcIi4vc3RhdHVzQ29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29udGVudFR5cGVzIH0gZnJvbSBcIi4vY29udGVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c01lc3NhZ2VzIH0gZnJvbSBcIi4vc3RhdHVzTWVzc2FnZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBhamF4VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FqYXhcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXRoVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhdGhcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaHR0cFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9odHRwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3luY2hyb25vdXNcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5jb25zdCB7IExFU1NfVEhBTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIsIEdSRUFURVJfVEhBTl9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcclxuICBjb25zdCBzYW5pdGlzZWRDb250ZW50ID0gY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvLCBBTVBFUlNBTkRfQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwvLCBMRVNTX1RIQU5fQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLz4vLCBHUkVBVEVSX1RIQU5fQ0hBUkFDVEVSKTtcclxuXHJcbiAgcmV0dXJuIHNhbml0aXNlZENvbnRlbnQ7XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZVR5cGUgPSBcInR5cGVcIjtcbmV4cG9ydCBjb25zdCBuYW1lVHlwZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IGNvbW1lbnRUeXBlID0gXCJjb21tZW50XCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lVHlwZSA9IFwiZW5kLW9mLWxpbmVcIjtcbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlVHlwZSA9IFwid2hpdGVzcGFjZVwiO1xuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxUeXBlID0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZUNvbW1lbnRUeXBlID0gYCR7ZW5kT2ZMaW5lVHlwZX0gJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25UeXBlID0gXCJyZWd1bGFyLWV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYGVuZC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgc3RhcnQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBtaWRkbGUtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHlwZVR5cGUsXG4gIG5hbWVUeXBlLFxuICBjb21tZW50VHlwZSxcbiAgZW5kT2ZMaW5lVHlwZSxcbiAgd2hpdGVzcGFjZVR5cGUsXG4gIHN0cmluZ0xpdGVyYWxUeXBlLFxuICBlbmRPZkxpbmVDb21tZW50VHlwZSxcbiAgc2luZ2xlTGluZUNvbW1lbnRUeXBlLFxuICByZWd1bGFyRXhwcmVzc2lvblR5cGUsXG4gIGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuL3V0aWxpdGllcy9jb250ZW50XCI7XG5pbXBvcnQgeyBjb21tZW50VHlwZSwgZW5kT2ZMaW5lVHlwZSwgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuaW5uZXJIVE1MID0gaW5uZXJIVE1MO1xuICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuICBcbiAgZ2V0SW5uZXJIVE1MKCkge1xuICAgIHJldHVybiB0aGlzLmlubmVySFRNTDtcbiAgfVxuXG4gIGdldENvbnRlbnRMZW5ndGgoKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG5cbiAgICByZXR1cm4gY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGlzU2lnbmlmaWNhbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnQ7XG4gIH1cbiAgXG4gIGlzQ29tbWVudFRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKGNvbW1lbnRUeXBlKSxcbiAgICAgICAgICBjb21tZW50VG9rZW4gPSB0eXBlSW5jbHVkZXNDb21tZW50VHlwZTsgLy8vXG5cbiAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICB9XG5cbiAgaXNFbmRPZkxpbmVUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlRW5kT2ZMaW5lVHlwZSA9ICh0aGlzLnR5cGUuaW5jbHVkZXMoZW5kT2ZMaW5lVHlwZSkpLFxuICAgICAgICAgIGVuZE9mTGluZVRva2VuID0gdHlwZUVuZE9mTGluZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICB9XG5cbiAgaXNXaGl0ZXNwYWNlVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZVdoaXRlc3BhY2VUeXBlID0gKHRoaXMudHlwZSA9PT0gd2hpdGVzcGFjZVR5cGUpLFxuICAgICAgICAgIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gd2hpdGVzcGFjZVRva2VuO1xuICB9XG5cbiAgaXNFcXVhbFRvKHRva2VuKSB7XG4gICAgY29uc3QgZXF1YWxUb1Rva2VuID0gKHRoaXMgPT09IHRva2VuKTtcblxuICAgIHJldHVybiBlcXVhbFRvVG9rZW47XG4gIH1cblxuICBtYXRjaCh0b2tlbikge1xuICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgY29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gKCh0aGlzLnR5cGUgPT09IHR5cGUpICYmICh0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQpICYmICh0aGlzLnNpZ25pZmljYW50ID09PSBzaWduaWZpY2FudCkpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlLCAgLy8vXG4gICAgICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPiR7dGhpcy5pbm5lckhUTUx9PC9zcGFuPmA7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBpZiAoc3RhcnRQb3NpdGlvbiAhPT0gZW5kUG9zaXRpb24pIHtcbiAgICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG5cbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7ICAvLy9cblxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpLFxuICAgICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuXG4gICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBDbGFzcyxcbiAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50OyAvLy9cblxuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IENsYXNzLFxuICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgaW5uZXJIVE1MID0gc2FuaXRpc2VkQ29udGVudCwgLy8vXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOyAgLy8vXG4gICAgICBzdGFydFBvc2l0aW9uID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSBjb250ZW50OyAvLy9cbiAgICAgIGNvbnRlbnQgPSBDbGFzczsgIC8vL1xuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgVSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcmVndWxhckV4cHJlc3Npb24pIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuICBcbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG4gIFxuICBnZXRSZWd1bGFyRXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIG1hdGNoKGNvbnRlbnQpIHtcbiAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKGNvbnRlbnQsIHRoaXMudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgYXNFbnRyeSgpIHtcbiAgICBjb25zdCBlbnRyeSA9IHt9LFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiA9IGAke3RoaXMucmVndWxhckV4cHJlc3Npb259YDtcblxuICAgIGVudHJ5W3RoaXMudHlwZV0gPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm47XG5cbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRva2VuKFRva2VuKSB7XG4gICAgY29uc3QgeyB0eXBlLCByZWd1bGFyRXhwcmVzc2lvbiB9ID0gVG9rZW4sXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21FbnRyeShlbnRyeSkge1xuICAgIGNvbnN0IGVudHJ5S2V5cyA9IE9iamVjdC5rZXlzKGVudHJ5KSxcbiAgICAgICAgICBmaXJzdEVudHJ5S2V5ID0gZmlyc3QoZW50cnlLZXlzKSxcbiAgICAgICAgICB0eXBlID0gZmlyc3RFbnRyeUtleSwgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gZW50cnlbdHlwZV0sXG4gICAgICAgICAgcnVsZSA9IFJ1bGUuZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKTtcbiAgICAgICAgXG4gICAgcmV0dXJuIHJ1bGU7IFxuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlQW5kUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICAgIGNvbnN0IHVuaWNvZGUgPSBpc1VuaWNvZGUocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSxcbiAgICAgICAgICBmbGFncyA9IHVuaWNvZGUgP1xuICAgICAgICAgICAgICAgICAgICBVIDpcbiAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgcmVnRXhwID0gbmV3IFJlZ0V4cChyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4sIGZsYWdzKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ0V4cCwgLy8vXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgY29uc3QgdW5pY29kZVJlZ3VsYXJFeHByZXNzaW9uID0gL3V7LywgLy8vXG4gICAgICAgIGluZGV4ID0gcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuLnNlYXJjaCh1bmljb2RlUmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICB1bmljb2RlID0gKGluZGV4ICE9PSAtMSk7XG5cbiAgcmV0dXJuIHVuaWNvZGU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgcGx1cyA9IFwiK1wiO1xyXG5leHBvcnQgY29uc3QgZXBzaWxvbiA9ICdcdTAzQjUnO1xyXG5leHBvcnQgY29uc3Qgd2lsZGNhcmQgPSBcIi5cIjtcclxuZXhwb3J0IGNvbnN0IGFzdGVyaXNrID0gXCIqXCI7XHJcbmV4cG9ydCBjb25zdCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbmV4cG9ydCBjb25zdCBzZXBhcmF0b3IgPSBcIjo6PVwiO1xyXG5leHBvcnQgY29uc3QgdGVybWluYXRvciA9IFwiO1wiO1xyXG5leHBvcnQgY29uc3QgdmVydGljYWxCYXIgPSBcInxcIjtcclxuZXhwb3J0IGNvbnN0IG9wZW5CcmFja2V0ID0gXCIoXCI7XHJcbmV4cG9ydCBjb25zdCBjbG9zZUJyYWNrZXQgPSBcIilcIjtcclxuZXhwb3J0IGNvbnN0IHF1ZXN0aW9uTWFyayA9IFwiP1wiO1xyXG5leHBvcnQgY29uc3QgZXhjbGFtYXRpb25NYXJrID0gXCIhXCI7XHJcbmV4cG9ydCBjb25zdCBOT19XSElURVNQQUNFID0gXCI8Tk9fV0hJVEVTUEFDRT5cIjtcclxuZXhwb3J0IGNvbnN0IEVORF9PRl9MSU5FID0gXCI8RU5EX09GX0xJTkU+XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgcGx1cyxcclxuICBlcHNpbG9uLFxyXG4gIHdpbGRjYXJkLFxyXG4gIGFzdGVyaXNrLFxyXG4gIGVsbGlwc2lzLFxyXG4gIHNlcGFyYXRvcixcclxuICB0ZXJtaW5hdG9yLFxyXG4gIHZlcnRpY2FsQmFyLFxyXG4gIG9wZW5CcmFja2V0LFxyXG4gIGNsb3NlQnJhY2tldCxcclxuICBxdWVzdGlvbk1hcmssXHJcbiAgZXhjbGFtYXRpb25NYXJrLFxyXG4gIE5PX1dISVRFU1BBQ0UsXHJcbiAgRU5EX09GX0xJTkVcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tRW50cmllcyhlbnRyaWVzKSB7XG4gIGNvbnN0IHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiB7XG4gICAgY29uc3QgcnVsZSA9IFJ1bGUuZnJvbUVudHJ5KGVudHJ5KTtcblxuICAgIHJldHVybiBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZXhlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgY29uc3QgSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxuICAgICAgICBOb3RJbkNvbW1lbnRDbGFzc2VzID0gTm90SW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXG4gICAgICAgIGxleGVyID0gbmV3IENsYXNzKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKTtcblxuICByZXR1cm4gbGV4ZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcnVsZXNGcm9tRW50cmllcyxcbiAgbGV4ZXJGcm9tUnVsZXNcbn07XG5cbmZ1bmN0aW9uIEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpIHtcbiAgY29uc3QgeyBFbmRPZkxpbmVDb21tZW50VG9rZW4sIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9ID0gQ2xhc3M7XG5cbiAgY29uc3QgSW5Db21tZW50Q2xhc3NlcyA9IFtcbiAgICBFbmRPZkxpbmVDb21tZW50VG9rZW4sXG4gICAgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXG4gICAgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW5cbiAgXTtcblxuICByZXR1cm4gSW5Db21tZW50Q2xhc3Nlcztcbn1cblxuZnVuY3Rpb24gTm90SW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcykge1xuICBjb25zdCB7IEVuZE9mTGluZVRva2VuLFxuICAgICAgICAgIFdoaXRlc3BhY2VUb2tlbixcbiAgICAgICAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxuICAgICAgICAgIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sXG4gICAgICAgICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcbiAgICAgICAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXG4gICAgICAgICAgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gPSBDbGFzcztcblxuICBjb25zdCBOb3RJbkNvbW1lbnRDbGFzc2VzID0gW1xuICAgIEVuZE9mTGluZVRva2VuLFxuICAgIFdoaXRlc3BhY2VUb2tlbixcbiAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxuICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXG4gICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcbiAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXG4gICAgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuXG4gIF07XG5cbiAgcmV0dXJuIE5vdEluQ29tbWVudENsYXNzZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzo6Oj18XFxcXHx8XFxcXCh8XFxcXCl8XFxcXD98XFxcXCF8XFxcXCp8XFxcXCt8XFxcXC5cXFxcLlxcXFwufFxcXFwufFx1MDNCNXw7fDxOT19XSElURVNQQUNFPnw8RU5EX09GX0xJTkU+KVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInR5cGVcIjogXCJeXFxcXFtbXlxcXFxdXStcXFxcXVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCJeW1xcXFx3fl0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCh0b2tlbiwgaW5Db21tZW50KSB7XG4gIGNvbnN0IHRva2VuQ29tbWVudFRva2VuID0gdG9rZW4uaXNDb21tZW50VG9rZW4oKTtcblxuICBpZiAodG9rZW5Db21tZW50VG9rZW4pIHtcbiAgICBjb25zdCBjb21tZW50VG9rZW4gPSB0b2tlbiwgLy8vXG4gICAgICAgICAgY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZyA9IGNvbW1lbnRUb2tlbi5pc0luQ29tbWVudFByZXNlcnZpbmcoKTtcblxuICAgIGluQ29tbWVudCA9IGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmc7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBpbkNvbW1lbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IHJ1bGVzRnJvbUVudHJpZXMsIGxleGVyRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9sZXhlclwiO1xyXG5pbXBvcnQgeyBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3Rva2VuXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25MZXhlciB7XHJcbiAgY29uc3RydWN0b3IocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpIHtcclxuICAgIHRoaXMucnVsZXMgPSBydWxlcztcclxuICAgIHRoaXMuSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXM7XHJcbiAgICB0aGlzLk5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuICBcclxuICBnZXRSdWxlcygpIHtcclxuICAgIHJldHVybiB0aGlzLnJ1bGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5Db21tZW50Q2xhc3NlcygpIHtcclxuICAgIHJldHVybiB0aGlzLkluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG5cclxuICBnZXROb3RJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIHRva2VuaXNlKGNvbnRlbnQsIGluQ29tbWVudCA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcclxuXHJcbiAgICB3aGlsZSAoY29udGVudCAhPT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIGxldCB0b2tlbiA9IG51bGw7XHJcblxyXG4gICAgICBjb25zdCBDbGFzc2VzID0gaW5Db21tZW50ID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLk5vdEluQ29tbWVudENsYXNzZXM7XHJcblxyXG4gICAgICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XHJcbiAgICAgICAgaWYgKENsYXNzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0b2tlbiA9IENsYXNzLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgIGlmICh0b2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHtcclxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBydWxlLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgY29udGVudCAnJHtjb250ZW50fScgY2Fubm90IGJlIHRva2VuaXNlZC5gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xyXG5cclxuICAgICAgaW5Db21tZW50ID0gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpO1xyXG5cclxuICAgICAgY29uc3QgdG9rZW5Db250ZW50TGVuZ3RoID0gdG9rZW4uZ2V0Q29udGVudExlbmd0aCgpLFxyXG4gICAgICAgICAgICBzdGFydCA9IHRva2VuQ29udGVudExlbmd0aDsgLy8vXHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcclxuICAgIGNvbnN0IHsgZW50cmllcyB9ID0gQ2xhc3MsXHJcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUVudHJpZXMoZW50cmllcyksXHJcbiAgICAgICAgICBsZXhlciA9IGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcclxuICAgIGNvbnN0IGxleGVyID0gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoQ2xhc3MsIGVudHJpZXMpIHtcclxuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tRW50cmllcyhlbnRyaWVzKSxcclxuICAgICAgICAgIGxleGVyID0gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlKSB7IHJldHVybiBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyB3aGl0ZXNwYWNlVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGl0ZXNwYWNlVG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoV2hpdGVzcGFjZVRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHdoaXRlc3BhY2VUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eW1xcdCBdKy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgcmVndWxhckV4cHJlc3Npb25UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyB0eXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvKD86XFxcXFteXFxzXXxbXlxcL1xcclxcbl0pKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICBzdGFydCA9IDEsXG4gICAgICAgICAgZW5kID0gY29udGVudExlbmd0aCAtIDEsXG4gICAgICAgICAgc3RyaW5nID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cIig/OlxcXFxbXlxcc118W15cIlxcXFxcXHJcXG5dKSpcIi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuaW1wb3J0IENvbW1vbkxleGVyIGZyb20gXCIuLi9jb21tb24vbGV4ZXJcIjtcclxuaW1wb3J0IFdoaXRlc3BhY2VUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xyXG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgdG9rZW5zRnJvbUJORihibmYpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBibmYsICAvLy9cclxuICAgICAgICAgIHRva2VucyA9IHN1cGVyLnRva2VuaXNlKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBSZWd1bGFyRXhwcmVzc2lvblRva2VuO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJORkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQk5GTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQk5GTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGlnaXRcIjogXCJeXFxcXGQrXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYnJhY2tldFwiOiBcIl4oPzpcXFxcKHxcXFxcKSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJvcGVyYXRvclwiOiBcIl4oPzpcXFxcK3xcXFxcLXxcXFxcKnxcXFxcLylcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eJyg/OlxcXFxbXlxcc118W14nXFxcXFxcclxcbl0pKicvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4uZnJvbUNvbnRlbnQoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzaW5nbGVMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHNpbmdsZUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eI1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXiMjIy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86W15cXHJcXG5dKz8oPz0jIyMpfFteXFxyXFxuXSspLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJhc2ljTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCYXNpY0xleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKEJhc2ljTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXC9bXlxcclxcbl0qLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcbl0rPyg/PVxcKlxcLyl8W15cXHJcXG5dKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIi4vc3BlY2lhbFN5bWJvbHNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBsZXhlclV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9sZXhlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORkxleGVyIH0gZnJvbSBcIi4vYm5mL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljTGV4ZXIgfSBmcm9tIFwiLi9iYXNpYy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tb25MZXhlciB9IGZyb20gXCIuL2NvbW1vbi9sZXhlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZVwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFdoaXRlc3BhY2VUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG5cclxuICB7IFwiY29sb3VyXCI6IFwiXiMoPzpbMC05YS1mQS1GXXs2fXxbMC05YS1mQS1GXXszfSlcIiB9LFxyXG5cclxuICB7IFwia2V5d29yZFwiOiBcIl4oPzohaW1wb3J0YW50fEBtZWRpYSlcIiB9LFxyXG5cclxuICB7IFwicGVyY2VudGFnZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspXFxcXCVcIiB9LFxyXG5cclxuICB7IFwiZnJlcXVlbmN5XCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpoenxraHopXCIgfSxcclxuXHJcbiAgeyBcImZyYWN0aW9uXCI6IFwiXlsxLTldWzAtOV0qP2ZyXCIgfSxcclxuXHJcbiAgeyBcImxlbmd0aFwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86cHh8Y218bW18aW58cHR8cGMpXCIgfSxcclxuXHJcbiAgeyBcImFuZ2xlXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpkZWd8cmFkfGdyYWQpXCIgfSxcclxuXHJcbiAgeyBcInRpbWVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnN8bXMpXCIgfSxcclxuXHJcbiAgeyBcInJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKXJlbVwiIH0sXHJcblxyXG4gIHsgXCJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKWVtXCIgfSxcclxuXHJcbiAgeyBcIm51bWJlclwiOiBcIl5bMC05XSt8WzAtOV0qXFxcXC5bMC05XStcIiB9LFxyXG5cclxuICB7IFwic3BlY2lhbFwiOiBcIl47fDo6fDp8XFxcXC58LHwvfFxcXFx8PXx+PXw9fD58XFxcXHt8XFxcXH18XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF1cIiB9LFxyXG5cclxuICB7IFwib3BlcmF0b3JcIjogXCJeXig/OmFuZHxub3R8b25seSkkXCIgfSxcclxuXHJcbiAgeyBcImlkZW50aWZpZXJcIjogXCJeW19hLXpBLVowLTktXStcIiB9LFxyXG5cclxuICB7IFwidW5hcnktb3BlcmF0b3JcIjogXCJeXFxcXCt8XFxcXC1cIiB9LFxyXG5cclxuICB7IFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIiB9XHJcblxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKENTU0xleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQ1NTTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQ1NTTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBhbWJpZ3VvdXNNb2RpZmllcj8gXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgIDo6PSAgcGFydCsgO1xuIFxuICAgICAgcGFydCAgICAgICAgICAgICAgICAgICAgIDo6PSAgbm9uVGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBub1doaXRlc3BhY2VQYXJ0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbm9uVGVybWluYWxQYXJ0ICAgICAgICAgIDo6PSAgY2hvaWNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzZXF1ZW5jZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcnVsZU5hbWUgbG9va0FoZWFkTW9kaWZpZXI/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgdGVybWluYWxQYXJ0ICAgICAgICAgICAgIDo6PSAgc2lnbmlmaWNhbnRUb2tlblR5cGVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByZWd1bGFyRXhwcmVzc2lvblxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxTeW1ib2xcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlbmRPZkxpbmVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB3aWxkY2FyZFxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGVwc2lsb25cbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIG5vV2hpdGVzcGFjZVBhcnQgICAgICAgICA6Oj0gIFwiPE5PX1dISVRFU1BBQ0U+XCIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICBjaG9pY2VPZlBhcnRzICAgICAgICAgICAgOjo9ICBcIihcIiBwYXJ0ICggXCJ8XCIgcGFydCApKyBcIilcIiA7XG5cbiAgICAgIHNlcXVlbmNlT2ZQYXJ0cyAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgcGFydCsgXCIpXCIgO1xuXG4gICAgICBydWxlTmFtZSAgICAgICAgICAgICAgICAgOjo9ICBbbmFtZV0gO1xuXG4gICAgICBzaWduaWZpY2FudFRva2VuVHlwZSAgICAgOjo9ICBbdHlwZV0gO1xuXG4gICAgICByZWd1bGFyRXhwcmVzc2lvbiAgICAgICAgOjo9ICBbcmVndWxhci1leHByZXNzaW9uXSA7XG5cbiAgICAgIHRlcm1pbmFsU3ltYm9sICAgICAgICAgICA6Oj0gIFtzdHJpbmctbGl0ZXJhbF0gO1xuXG4gICAgICBlbmRPZkxpbmUgICAgICAgICAgICAgICAgOjo9ICBcIjxFTkRfT0ZfTElORT5cIiA7XG5cbiAgICAgIHdpbGRjYXJkICAgICAgICAgICAgICAgICA6Oj0gIFwiLlwiIDtcblxuICAgICAgZXBzaWxvbiAgICAgICAgICAgICAgICAgIDo6PSAgXCJcdTAzQjVcIiA7XG5cbiAgICAgIHF1YW50aWZpZXIgICAgICAgICAgICAgICA6Oj0gIG9wdGlvbmFsUXVhbnRpZmllclxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgb25lT3JNb3JlUXVhbnRpZmllclxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHplcm9Pck1vcmVRdWFudGlmaWVyXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICBhbWJpZ3VvdXNNb2RpZmllciAgICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIiFcIiA7XG5cbiAgICAgIGxvb2tBaGVhZE1vZGlmaWVyICAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiLi4uXCIgO1xuXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXIgICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIj9cIiA7XG5cbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXIgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiK1wiIDtcblxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXIgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIqXCIgO1xuXG4gICAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChwYWRkaW5nTGVuZ3RoKSB7XG4gIGxldCBwYWRkaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBwYWRkaW5nTGVuZ3RoOyBwb3NpdGlvbisrKSB7XG4gICAgcGFkZGluZyArPSBTUEFDRV9DSEFSQUNURVI7XG4gIH1cblxuICByZXR1cm4gcGFkZGluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGggfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmNvbnN0IHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGV4Y2xhbWF0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuYW1iaWd1b3VzID0gYW1iaWd1b3VzO1xuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICB0aGlzLk5vblRlcm1pbmFsTm9kZSA9IE5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGlzQW1iaWd1b3VzKCkge1xuICAgIHJldHVybiB0aGlzLmFtYmlndW91cztcbiAgfVxuXG4gIGdldERlZmluaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb25zO1xuICB9XG5cbiAgZ2V0Tm9uVGVybWluYWxOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLk5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGFkZERlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgIHRoaXMuZGVmaW5pdGlvbnMucHVzaChkZWZpbml0aW9uKTtcbiAgfVxuXG4gIGFkZERlZmluaXRpb25zKGRlZmluaXRpb25zKSB7XG4gICAgcHVzaCh0aGlzLmRlZmluaXRpb25zLCBkZWZpbml0aW9ucyk7XG4gIH1cblxuICByZW1vdmVEZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZGVmaW5pdGlvbnMuaW5kZXhPZihkZWZpbml0aW9uKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7ICAvLy9cblxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVEZWZpbml0aW9ucyhkZWZpbml0aW9ucykge1xuICAgIGRlZmluaXRpb25zLmZvckVhY2goKGRlZmluaXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kZWZpbml0aW9ucy5pbmRleE9mKGRlZmluaXRpb24pO1xuXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVwbGFjZURlZmluaXRpb24ocmVwbGFjZURlZmluaXRpb24sIC4uLnJlcGxhY2VtZW50RGVmaW5pdGlvbnMpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZGVmaW5pdGlvbnMuaW5kZXhPZihyZXBsYWNlRGVmaW5pdGlvbiksXG4gICAgICAgICAgc3RhcnQgPSBpbmRleCwgLy8vXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5yZXBsYWNlbWVudERlZmluaXRpb25zKVxuICB9XG5cbiAgcmVtb3ZlQWxsRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3Qgc3RhcnQgPSAwLFxuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gSW5maW5pdHk7XG5cbiAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICB9XG5cbiAgcmVwbGFjZUFsbERlZmluaXRpb25zKC4uLnJlcGxhY2VtZW50RGVmaW5pdGlvbnMpIHtcbiAgICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgICAgbGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBsZW5ndGg7IC8vL1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5yZXBsYWNlbWVudERlZmluaXRpb25zKVxuICB9XG5cbiAgcGFyc2VEZWZpbml0aW9uKGRlZmluaXRpb24sIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKTtcblxuICAgIHBhcnNlZCA9IGRlZmluaXRpb24ucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBwYXJzZShzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkLFxuICAgICAgICBub2RlcztcblxuICAgIGxldCBydWxlTm9kZSA9IG51bGw7XG5cbiAgICB0aGlzLmRlZmluaXRpb25zLnNvbWUoKGRlZmluaXRpb24pID0+IHtcbiAgICAgIG5vZGVzID0gW107XG5cbiAgICAgIHBhcnNlZCA9IHRoaXMucGFyc2VEZWZpbml0aW9uKGRlZmluaXRpb24sIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChub2Rlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHBhcnNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9kZXMsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IHRoaXMuTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuXG4gICAgICBydWxlTm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVOb2RlO1xuICB9XG5cbiAgYXNTdHJpbmcobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBtdWx0aUxpbmUgPSB0cnVlKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgIG11bHRpTGluZSA9IG11bHRpTGluZSAmJiAoZGVmaW5pdGlvbnNMZW5ndGggPiAxKTsgIC8vL1xuXG4gICAgY29uc3QgbWF4aW11bVBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgobWF4aW11bVJ1bGVOYW1lTGVuZ3RoKSxcbiAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IHRoaXMuZGVmaW5pdGlvbnMucmVkdWNlKChkZWZpbml0aW9uc1N0cmluZywgZGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IGRlZmluaXRpb24uYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25zU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSBkZWZpbml0aW9uU3RyaW5nOyAvLy9cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gbXVsdGlMaW5lID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZGVmaW5pdGlvbnNTdHJpbmd9XG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgfCAke2RlZmluaXRpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZGVmaW5pdGlvbnNTdHJpbmd9IHwgJHtkZWZpbml0aW9uU3RyaW5nfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uc1N0cmluZztcbiAgICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5uYW1lLCAvLy9cbiAgICAgICAgICBydWxlTmFtZUxlbmd0aCA9IHJ1bGVOYW1lLmxlbmd0aCxcbiAgICAgICAgICBhbWJpZ3VvdXNTdHJpbmcgPSB0aGlzLmFtYmlndW91cyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsYW1hdGlvbk1hcmsgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgYW1iaWd1b3VzU3RyaW5nTGVuZ3RoID0gYW1iaWd1b3VzU3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nTGVuZ3RoID0gbWF4aW11bVJ1bGVOYW1lTGVuZ3RoIC0gcnVsZU5hbWVMZW5ndGggLSBhbWJpZ3VvdXNTdHJpbmdMZW5ndGgsXG4gICAgICAgICAgcGFkZGluZyA9IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChwYWRkaW5nTGVuZ3RoKTtcblxuICAgIGNvbnN0IHNlbWljb2xvblN0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcblxuJHttYXhpbXVtUGFkZGluZ30gICA7YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgO1wiLFxuICAgICAgICAgIHN0cmluZyA9IGBcblxuJHt0aGlzLm5hbWV9JHthbWJpZ3VvdXNTdHJpbmd9JHtwYWRkaW5nfSA6Oj0gJHtkZWZpbml0aW9uc1N0cmluZ30ke3NlbWljb2xvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlIHtcbiAgY29uc3RydWN0b3IocnVsZU1hcCwgdG9rZW5zLCBpbmRleCkge1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG5cdFx0dGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG5cdGdldEluZGV4KCkge1xuXHRcdHJldHVybiB0aGlzLmluZGV4O1xuXHR9XG5cblx0Z2V0U2F2ZWRJbmRleCgpIHtcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gdGhpcy5pbmRleDsgLy8vXG4gIFxuICAgIHJldHVybiBzYXZlZEluZGV4O1xuICB9XG5cbiAgZ2V0TmV4dFRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgdG9rZW5zTGVuZ3RoID0gdGhpcy50b2tlbnMubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuaW5kZXggPCB0b2tlbnNMZW5ndGgpIHtcbiAgICAgIG5leHRUb2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK107XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbjtcbiAgfVxuXG4gIGdldE5leHRTaWduaWZpY2FudFRva2VuKCkge1xuXHRcdGxldCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgXHRjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgXHR3aGlsZSAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICBcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4KytdLFxuXHRcdFx0XHRcdFx0dG9rZW5TaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKTtcblxuICBcdFx0aWYgKHRva2VuU2lnbmlmaWNhbnQpIHtcbiAgXHRcdCAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRva2VuOyAvLy9cblxuXHRcdFx0XHRuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XHQvLy9cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cbiAgXHR9XG5cblx0XHRyZXR1cm4gbmV4dFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBpc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpIHtcbiAgICBsZXQgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gZmFsc2U7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cbiAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IG5leHRUb2tlbi5pc1doaXRlc3BhY2VUb2tlbigpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW47XG4gIH1cblxuXHRiYWNrdHJhY2soc2F2ZWRJbmRleCkge1xuXHRcdHRoaXMuaW5kZXggPSBzYXZlZEluZGV4OyAgLy8vXG5cdH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHJ1bGVNYXApIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG5cdFx0XHRcdFx0c3RhdGUgPSBuZXcgU3RhdGUocnVsZU1hcCwgdG9rZW5zLCBpbmRleCk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgbGFzdCwgcHVzaCwgZmlsdGVyLCBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gZXZlbihhcnJheSkgeyByZXR1cm4gYXJyYXkuZmlsdGVyKChlbnRyeSwgaW5kZXgpID0+IGlzRXZlbihpbmRleCkpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxCdXRGaXJzdEFuZExhc3QoYXJyYXkpIHtcbiAgYXJyYXkgPSBhcnJheS5zbGljZSgpOyAgLy8vXG5cbiAgYXJyYXkuc2hpZnQoKTtcblxuICBhcnJheS5wb3AoKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGlzRXZlbihpbmRleCkge1xuICBjb25zdCBldmVuID0gKE1hdGguZmxvb3IoaW5kZXgvMikgPT09IGluZGV4LzIpO1xuXG4gIHJldHVybiBldmVuO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBsYXN0IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IE5FV19MSU5FX0NIQVJBQ1RFUiwgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJzZVRyZWUge1xuICBjb25zdHJ1Y3RvcihsaW5lcykge1xuICAgIHRoaXMubGluZXMgPSBsaW5lcztcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IGxpbmVzID0gdGhpcy5saW5lcy5zbGljZSgpLCAgLy8vXG4gICAgICAgICAgcGFyc2VUcmVlID0gbmV3IFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgbGV0IHdpZHRoO1xuXG4gICAgbGV0IGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBpZiAobGluZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHdpZHRoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGFzdExpbmUgPSBsYXN0KHRoaXMubGluZXMpLFxuICAgICAgICAgICAgbGFzdExpbmVMZW5ndGggPSBsYXN0TGluZS5sZW5ndGg7XG5cbiAgICAgIHdpZHRoID0gbGFzdExpbmVMZW5ndGg7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldERlcHRoKCkge1xuICAgIGNvbnN0IGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGgsXG4gICAgICAgICAgZGVwdGggPSBsaW5lc0xlbmd0aDsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcHRoO1xuICB9XG5cbiAgZm9yRWFjaExpbmUoY2FsbGJhY2spIHtcbiAgICB0aGlzLmxpbmVzLmZvckVhY2goY2FsbGJhY2spO1xuICB9XG5cbiAgYXBwZW5kVG9Ub3AocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzLnVuc2hpZnQobGluZSk7XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb0xlZnQocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSBsaW5lICsgdGhpcy5saW5lc1tpbmRleF07XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb1JpZ2h0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gdGhpcy5saW5lc1tpbmRleF0gKyBsaW5lO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9Cb3R0b20ocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzLnB1c2gobGluZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRUb3BNYXJnaW4odG9wTWFyZ2luRGVwdGgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB0b3BNYXJnaW5XaWR0aCA9IHdpZHRoLCAgLy8vXG4gICAgICAgICAgdG9wTWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKHRvcE1hcmdpbldpZHRoKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0b3BNYXJnaW5EZXB0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KHRvcE1hcmdpblN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCBsZWZ0TWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKGxlZnRNYXJnaW5XaWR0aCksXG4gICAgICAgICAgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lc0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSBsZWZ0TWFyZ2luU3RyaW5nICsgdGhpcy5saW5lc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCkge1xuICAgIGNvbnN0IHJpZ2h0TWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKHJpZ2h0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gdGhpcy5saW5lc1tpbmRleF0gKyByaWdodE1hcmdpblN0cmluZztcbiAgICB9XG4gIH1cblxuICBhZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICBib3R0b21NYXJnaW5XaWR0aCA9IHdpZHRoLCAgLy8vXG4gICAgICAgICAgYm90dG9tTWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKGJvdHRvbU1hcmdpbldpZHRoKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBib3R0b21NYXJnaW5EZXB0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGJvdHRvbU1hcmdpblN0cmluZyk7XG4gICAgfVxuICB9XG4gIFxuICBwb3BMaW5lKCkgeyByZXR1cm4gdGhpcy5saW5lcy5wb3AoKTsgfVxuICBcbiAgc2hpZnRMaW5lKCkgeyByZXR1cm4gdGhpcy5saW5lcy5zaGlmdCgpOyB9XG4gIFxuICBwdXNoTGluZShsaW5lKSB7IHRoaXMubGluZXMucHVzaChsaW5lKTsgfVxuICBcbiAgdW5zaGlmdExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnVuc2hpZnQobGluZSk7IH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmxpbmVzLnJlZHVjZSgoc3RyaW5nLCBsaW5lKSA9PiB7XG4gICAgICBzdHJpbmcgKz0gbGluZSArIE5FV19MSU5FX0NIQVJBQ1RFUjtcblxuICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobWFyZ2luV2lkdGgsIHNwYWNlQ2hhcmFjdGVyKSB7XG4gIHNwYWNlQ2hhcmFjdGVyID0gc3BhY2VDaGFyYWN0ZXIgfHwgU1BBQ0VfQ0hBUkFDVEVSO1xuXG4gIGxldCBtYXJnaW5TdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcmdpbldpZHRoOyBpbmRleCsrKSB7XG4gICAgbWFyZ2luU3RyaW5nICs9IHNwYWNlQ2hhcmFjdGVyO1xuICB9XG5cbiAgcmV0dXJuIG1hcmdpblN0cmluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBCQVJfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgc3VwZXIobGluZXMpO1xuICAgIFxuICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gIH1cbiAgXG4gIGdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgc3VwZXIuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxlZnRNYXJnaW5XaWR0aDsgLy8vXG4gIH1cblxuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gQkFSX0NIQVJBQ1RFUixcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gMCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pLFxuICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IE1hdGguZmxvb3Iod2lkdGgvMiksXG4gICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoIC0gMTtcblxuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBkZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIGNvbnN0IGxpbmVzID0gbGluZXNGcm9tRGVwdGgoZGVwdGgpLFxuICAgICAgICAgIGFyZ3MgPSBbIG51bGwsIGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uIF0sXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7ICAvLy9cblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHN0cmluZzsgIC8vL1xuICAgICAgc3RyaW5nID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBQYXJzZVRyZWU7ICAvLy9cbiAgICB9XG4gICAgXG4gICAgY29uc3QgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgYXJncyA9IFsgbnVsbCwgbGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gXSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ2xhc3MsIGFyZ3MpKTsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxpbmVzRnJvbURlcHRoKGRlcHRoKSB7XG4gIGNvbnN0IGxpbmVzID0gW107XG5cbiAgbGV0IGluZGV4ID0gMDtcblxuICB3aGlsZSAoaW5kZXggPCBkZXB0aCkge1xuICAgIGxpbmVzW2luZGV4KytdID0gRU1QVFlfU1RSSU5HO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RTaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICB0b2tlbkluZGV4ZXMgPSAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fS0ke2xhc3RTaWduaWZpY2FudFRva2VuSW5kZXh9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fWAsXG4gICAgICAgICAgc3RyaW5nID0gYWJyaWRnZWQgP1xuICAgICAgICAgICAgICAgICAgICAgYCR7cnVsZU5hbWV9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgIGAke3J1bGVOYW1lfSgke3Rva2VuSW5kZXhlc30pYCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgREFTSF9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aCh3aWR0aCwgREFTSF9DSEFSQUNURVIpLFxuICAgICAgICAgIGxpbmUgPSBzdHJpbmcsIC8vL1xuICAgICAgICAgIGxpbmVzID0gW2xpbmVdLFxuICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKGNoYXJhY3RlcnNXaWR0aCwgY2hhcmFjdGVyKSB7XG4gIGxldCBzdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJhY3RlcnNXaWR0aDsgaW5kZXgrKykge1xuICAgIHN0cmluZyArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcbmltcG9ydCBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL2hvcml6b250YWxCcmFuY2hcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoaWxkTm9kZXNQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tQ2hpbGROb2Rlc1Rva2Vuc0FuZEFicmlkZ2VkKGNoaWxkTm9kZXMsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBsZXQgY2hpbGROb2Rlc1BhcnNlVHJlZTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgoY2hpbGROb2RlUGFyc2VUcmVlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGUuYXNQYXJzZVRyZWUodG9rZW5zLCBhYnJpZGdlZCk7XG5cbiAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMucHVzaChjaGlsZE5vZGVQYXJzZVRyZWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2hpbGROb2RlUGFyc2VUcmVlcztcbiAgICAgICAgICB9LCBbXSksXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlID0gZmlyc3QoY2hpbGROb2RlUGFyc2VUcmVlcyk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZTsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdW5kZWZpbmVkLFxuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggPSAwLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCA9IDA7XG5cbiAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXREZXB0aCgpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLFxuICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICAgIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA9PT0gY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLFxuICAgICAgICAgICAgICAgIGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gY2hpbGROb2RlUGFyc2VUcmVlV2lkdGg7XG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gMTtcblxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoICs9IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoO1xuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSBNYXRoLm1heChjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgsIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB3aWR0aCA9IGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uIC0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICsgMSxcbiAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh3aWR0aCksXG4gICAgICAgICAgICBsZWZ0TWFyZ2luV2lkdGggPSBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24sXG4gICAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoIC0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGg7XG5cbiAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuXG4gICAgICBjb25zdCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbURlcHRoQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDaGlsZE5vZGVzUGFyc2VUcmVlLCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKGluZGV4IDwgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zdCByaWdodE1hcmdpbldpZHRoID0gMTtcblxuICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCkge1xuICAgICAgICAgIGNvbnN0IGJvdHRvbU1hcmdpbkRlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoIC0gY2hpbGROb2RlUGFyc2VUcmVlRGVwdGg7XG5cbiAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUuYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9Ub3AoaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSk7XG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGNoaWxkTm9kZXNQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJzZVRyZWUgZnJvbSBcIi4vcnVsZU5hbWVcIjtcbmltcG9ydCBDaGlsZE5vZGVzUGFyc2VUcmVlIGZyb20gXCIuL2NoaWxkTm9kZXNcIjtcbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBSdWxlTmFtZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSxcbiAgICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gQ2hpbGROb2Rlc1BhcnNlVHJlZS5mcm9tQ2hpbGROb2Rlc1Rva2Vuc0FuZEFicmlkZ2VkKGNoaWxkTm9kZXMsIHRva2VucywgYWJyaWRnZWQpO1xuICAgIFxuICAgIGxldCBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG4gICAgXG4gICAgY29uc3QgY2hpbGROb2Rlc1BhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBjaGlsZE5vZGVzUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICBcbiAgICBsZXQgbGVmdE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA8IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IC12ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9ICt2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVOYW1lUGFyc2VUcmVlV2lkdGggPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB3aWR0aHNEaWZmZXJlbmNlID0gcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCAtIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aDtcbiAgICBcbiAgICBsZXQgcmlnaHRNYXJnaW5XaWR0aCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICh3aWR0aHNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IC13aWR0aHNEaWZmZXJlbmNlO1xuICAgICAgXG4gICAgICBydWxlTmFtZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPiAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gK3dpZHRoc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZURlcHRoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQocnVsZU5hbWVQYXJzZVRyZWUpO1xuICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb0JvdHRvbShjaGlsZE5vZGVzUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlXCI7XG5cbmltcG9ydCB7IGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBnZXRDaGlsZE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBmb3J3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBjaGlsZE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGJhY2t3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBpZiAobGFzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cbiAgXG4gIHNldFJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuICBcbiAgYXNQYXJzZVRyZWUodG9rZW5zLCBhYnJpZGdlZCA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBjbG9uZShDbGFzcykge1xuICAgIGlmIChDbGFzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBDbGFzcyA9IE5vblRlcm1pbmFsTm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMucnVsZU5hbWUsXG4gICAgICAgICAgY2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2Rlcy5tYXAoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNsb25lKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE5vZGVzID0gcnVsZU5hbWU7ICAvLy9cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG5hbWUgPSB0ZXJtaW5hbE5vZGVDb250ZW50OyAvLy9cbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOYW1lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpO1xuXG4gIGlmIChwYXJ0UnVsZU5hbWVQYXJ0KSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IHJ1bGVOYW1lUGFydC5pc0xvb2tBaGVhZCgpO1xuXG4gICAgaWYgKGxvb2tBaGVhZCkge1xuICAgICAgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZDtcbn1cblxuZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0VGVybWluYWxQYXJ0ID0gcGFydC5pc1Rlcm1pbmFsUGFydCgpLFxuICAgICAgICBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gIXBhcnRUZXJtaW5hbFBhcnQ7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydC5pc1J1bGVOYW1lUGFydCgpO1xuXG4gICAgcGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgfSBmcm9tIFwiLi9wYXJ0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcnRzKHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICBwYXJzZWQgPSAoY2FsbGJhY2sgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpIDpcbiAgICAgICAgICAgICAgICAgIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2luZGV4XTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgY29uc3QgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgaW5kZXgrKztcblxuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBpc1BhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKHBhcnQpO1xuXG4gICAgaWYgKHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXTtcblxuICAgICAgaW5kZXgrKztcblxuICAgICAgcGFyc2VkID0gcnVsZU5hbWVQYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvbG9va0FoZWFkXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzKSB7XG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHM7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IGluZGV4ID0gMDtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydHModGhpcy5wYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7IC8vL1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHN0cmluZyA9IHBhcnRzU3RyaW5nOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnQge1xuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1Rlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFBhcnQgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVRlcm1pbmFsTm9kZVRva2Vuc0FuZEFicmlkZ2VkKHRlcm1pbmFsTm9kZSwgdG9rZW5zLCBhYnJpZGdlZCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKSxcbiAgICAgICAgICB0b2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2Yoc2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgICAgc3RyaW5nID0gYWJyaWRnZWQgP1xuICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH1bJHt0eXBlfV1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH1bJHt0eXBlfV0oJHt0b2tlbkluZGV4fSlgLFxuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihUZXJtaW5hbE5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuOyAgLy8vXG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgY29uc3QgbGFzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGlzRXBzaWxvbk5vZGUoKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7IHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpOyB9XG5cbiAgZ2V0Q29udGVudCgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7IH1cblxuICBzZXRTaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW4gPSBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zLCBhYnJpZGdlZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQodGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBtYXRjaChub2RlKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdGVybWluYWxOb2RlRXBzaWxvbk5vZGUgPSB0ZXJtaW5hbE5vZGUuaXNFcHNpbG9uTm9kZSgpLFxuICAgICAgICAgICAgdGVybWluYWxOb2RlTm9XaGl0ZXNwYWNlTm9kZSA9IHRlcm1pbmFsTm9kZS5pc05vV2hpdGVzcGFjZU5vZGUoKTtcblxuICAgICAgaWYgKCF0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSAmJiAhdGVybWluYWxOb2RlTm9XaGl0ZXNwYWNlTm9kZSkge1xuICAgICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgICBtYXRjaGVzID0gdGhpcy5zaWduaWZpY2FudFRva2VuLm1hdGNoKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgY2xvbmUoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgeyBjb25zdHJ1Y3RvciB9ID0gdGhpcztcblxuICAgICAgQ2xhc3MgPSBjb25zdHJ1Y3RvcjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldENvbnRlbnRMZW5ndGgoKSxcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IGNvbnRlbnRMZW5ndGgsICAvLy9cbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuLmNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBDbGFzcy5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuKTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7XG5cbiAgICAgIGlmIChzaWduaWZpY2FudFRva2VuVHlwZSA9PT0gdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBgWyR7dGhpcy5zaWduaWZpY2FudFRva2VuVHlwZX1dYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KHRoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGUpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmNvbnN0IHsgbmFtZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGUgPSBuYW1lVHlwZSwgIC8vL1xuICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IG5hbWVSdWxlTmFtZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IHBhcnRSdWxlTmFtZSA9IFwicGFydFwiO1xuZXhwb3J0IGNvbnN0IHJ1bGVSdWxlTmFtZSA9IFwicnVsZVwiO1xuZXhwb3J0IGNvbnN0IGVycm9yUnVsZU5hbWUgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgZXBzaWxvblJ1bGVOYW1lID0gXCJlcHNpbG9uXCI7XG5leHBvcnQgY29uc3QgcnVsZU5hbWVSdWxlTmFtZSA9IFwicnVsZU5hbWVcIjtcbmV4cG9ydCBjb25zdCBkb2N1bWVudFJ1bGVOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IGNvbnN0IHdpbGRjYXJkUnVsZU5hbWUgPSBcIndpbGRjYXJkXCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lUnVsZU5hbWUgPSBcImVuZE9mTGluZVwiO1xuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25SdWxlTmFtZSA9IFwiZGVmaW5pdGlvblwiO1xuZXhwb3J0IGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFwicXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25zUnVsZU5hbWUgPSBcImRlZmluaXRpb25zXCI7XG5leHBvcnQgY29uc3QgdGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcInRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IGNob2ljZU9mUGFydHNSdWxlTmFtZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgPSBcInRlcm1pbmFsU3ltYm9sXCI7XG5leHBvcnQgY29uc3QgYm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcIm5vblRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgPSBcIm5vV2hpdGVzcGFjZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gXCJsb29rQWhlYWRNb2RpZmllclwiO1xuZXhwb3J0IGNvbnN0IGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUgPSBcIkFtYmlndW91c01vZGlmaWVyXCI7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSA9IFwicmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IFwib3B0aW9uYWxRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3Qgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvbmVPck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwiemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lID0gXCJzaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL25hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IG5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gbmFtZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTsgIFxuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUnVsZU5hbWVQYXJ0VHlwZSA9IFwicnVsZU5hbWVQYXJ0XCI7XG5leHBvcnQgY29uc3QgT3B0aW9uYWxQYXJ0UGFydFR5cGUgPSBcIm9wdGlvbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IENob2ljZU9mUGFydHNQYXJ0VHlwZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgPSBcIm9uZU9yTW9yZVBhcnRzXCI7XG5leHBvcnQgY29uc3QgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgPSBcInplcm9Pck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBSdWxlTmFtZVBhcnRUeXBlLFxuICBPcHRpb25hbFBhcnRQYXJ0VHlwZSxcbiAgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlLFxuICBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlLFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBPcHRpb25hbFBhcnRQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFBhcnRQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPcHRpb25hbFBhcnRQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLFxuICAgICAgICAgIHN0cmluZyA9IGAke3BhcnRTdHJpbmd9JHtxdWVzdGlvbk1hcmt9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5wYXJ0LmNsb25lKCksXG4gICAgICAgICAgb3B0aW9uYWxQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KHBhcnQpO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGFydFBhcnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBwYXJzZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVBhcnRzUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gT25lT3JNb3JlUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke3BsdXN9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydC5jbG9uZSgpLFxuICAgICAgICAgIG9uZU9yTW9yZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICByZXR1cm4gb25lT3JNb3JlUGFydHNQYXJ0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsICgpID0+IHtcbiAgICAgIGxldCBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7YXN0ZXJpc2t9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydC5jbG9uZSgpLFxuICAgICAgICAgIHplcm9Pck1vcmVQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChwYXJ0KTtcblxuICAgIHJldHVybiB6ZXJvT3JNb3JlUGFydHNQYXJ0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLCBxdWFudGlmaWVyUnVsZU5hbWUsIHJ1bGVOYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVDaG9pY2VOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVOb0Nob2ljZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgbm9kZU5vQ2hvaWNlTm9kZSA9ICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBcInxcIik7XG4gIH1cblxuICByZXR1cm4gbm9kZU5vQ2hvaWNlTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVJ1bGVOYW1lTm9kZShub2RlKSB7XG4gIGxldCBub2RlUnVsZU5hbWVOb2RlID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIG5vZGVSdWxlTmFtZU5vZGUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lUnVsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVSdWxlTmFtZU5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVRdWFudGlmaWVyTm9kZShub2RlKSB7XG4gIGxldCBub2RlUXVhbnRpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVF1YW50aWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gcXVhbnRpZmllclJ1bGVOYW1lKTtcblxuICAgIG5vZGVRdWFudGlmaWVyTm9kZSA9IHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZUxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGU7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGU7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gcXVhbnRpZmllck5vZGU7IC8vL1xuXG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlOyAgLy8vXG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2Rlcykge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcyk7XG5cbiAgICBpZiAobGFzdE5vZGVRdWFudGlmaWVyTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgICAgcXVhbnRpZmllck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZShxdWFudGlmaWVyTm9kZSksXG4gICAgICAgICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKTtcblxuICAgICAgcGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydDsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnNoaWZ0KCk7XG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cblxuZnVuY3Rpb24gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKSB7XG4gIGNvbnN0IGxhc3ROb2RlID0gbGFzdChub2RlcyksXG4gICAgICAgIGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc05vZGVRdWFudGlmaWVyTm9kZShsYXN0Tm9kZSk7XG5cbiAgcmV0dXJuIGxhc3ROb2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpIHtcbiAgbGV0IGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcblxuICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgY2FzZSBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0OyAgLy8vXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJ1bGVOYW1lUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgZWxsaXBzaXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVBhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihydWxlTmFtZSwgbG9va0FoZWFkID0gZmFsc2UpIHtcbiAgICBjb25zdCB0eXBlID0gUnVsZU5hbWVQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcblxuICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICB9XG4gIFxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGlzTG9va0FoZWFkKCkge1xuICAgIHJldHVybiB0aGlzLmxvb2tBaGVhZDtcbiAgfVxuXG4gIGlzUnVsZU5hbWVQYXJ0KCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgc2V0TG9va0FoZWFkKGxvb2tBaGVhZCkge1xuICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICB9XG5cbiAgZmluZFJ1bGUoc3RhdGUpIHtcbiAgICBjb25zdCBydWxlTWFwID0gc3RhdGUuZ2V0UnVsZU1hcCgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3RoaXMucnVsZU5hbWVdIHx8IG51bGw7ICAvLy9cblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBydWxlID0gdGhpcy5maW5kUnVsZShzdGF0ZSk7XG5cbiAgICBpZiAocnVsZSA9PT0gbnVsbCkge1xuICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBwYXJzZWQgPSAocnVsZU5vZGUgIT09IG51bGwpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIG5vZGVzLnB1c2gocnVsZU5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBsb29rQWhlYWRTdHJpbmcgPSB0aGlzLmxvb2tBaGVhZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBzdHJpbmcgPSBgJHt0aGlzLnJ1bGVOYW1lfSR7bG9va0FoZWFkU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLnJ1bGVOYW1lLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IHRoaXMubG9va0FoZWFkLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCB0ZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSwgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gcGFydFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlKFJ1bGUpIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gdGhpcy5pc0FtYmlndW91cygpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsTm9kZSxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGlzQW1iaWd1b3VzKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBzZWNvbmRDaGlsZE5vZGUgPSBzZWNvbmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgc2Vjb25kQ2hpbGROb2RlVGVybWluYWxOb2RlID0gc2Vjb25kQ2hpbGROb2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gIXNlY29uZENoaWxkTm9kZVRlcm1pbmFsTm9kZTtcblxuICAgIHJldHVybiBhbWJpZ3VvdXM7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5hbWVCTkZOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZUJORk5vZGUuZ2V0TmFtZSgpO1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIFxuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgdGhpcmRDaGlsZE5vZGUgPSB0aGlyZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBmb3VydGhDaGlsZE5vZGUgPSBmb3VydGgoY2hpbGROb2RlcyksXG4gICAgICAgICAgZGVmaW5pdGlvbnNCTkZOb2RlID0gKGNoaWxkTm9kZXNMZW5ndGggPT09IDQpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXJkQ2hpbGROb2RlIDogIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VydGhDaGlsZE5vZGUsIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnNCTkZOb2RlLmdlbmVyYXRlRGVmaW5pdGlvbnMoKTtcbiAgICBcbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7XG5cbiAgICAgIGlmIChjb250ZW50ID09PSB0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIFxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLFxuICAgICAgICAgIHN0cmluZyA9IGBcIiR7Y29udGVudH1cImA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh0aGlzLmNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgbmFtZVJ1bGVOYW1lLCBkZWZpbml0aW9uc1J1bGVOYW1lLCBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHNlcGFyYXRvciwgdGVybWluYXRvciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHNlcGFyYXRvcixcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gdGVybWluYXRvcixcbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbEFtYmlndW91c1J1bGVOYW1lUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkZWZpbml0aW9uc1J1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5hbWVSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbEFtYmlndW91c1J1bGVOYW1lUGFydFBhcnQsXG4gICAgICAgICAgICBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZVwiO1xuaW1wb3J0IFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVcIjtcblxuaW1wb3J0IHsgcnVsZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBydWxlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFcnJvckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gd2lsZGNhcmQ7ICAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIG5ldyBXaWxkY2FyZFBhcnQoKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVycm9yQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZXJyb3JcIjtcbmltcG9ydCBFcnJvckRlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZXJyb3JcIjtcblxuaW1wb3J0IHsgZXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVycm9yRGVmaW5pdGlvbiA9IG5ldyBFcnJvckRlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gZXJyb3JSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlcnJvckRlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBFcnJvckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuY2xhc3MgRXBzaWxvbk5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBlcHNpbG9uLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRXBzaWxvbk5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlUGFyc2VUcmVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRXBzaWxvbk5vZGVQYXJzZVRyZWU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2Vwc2lsb25Ob2RlXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgaXNFcHNpbG9uTm9kZSgpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGU7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIGNvbnN0IHR5cGUgPSBudWxsOyAgLy8vXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGVwc2lsb247ICAvLy9cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSBFcHNpbG9uTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVwc2lsb25Ob2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZUVwc2lsb25Ob2RlID0gdGVybWluYWxOb2RlLmlzRXBzaWxvbk5vZGUoKTtcblxuICAgICAgaWYgKHRlcm1pbmFsTm9kZUVwc2lsb25Ob2RlKSB7XG4gICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBFcHNpbG9uTm9kZS5mcm9tTm90aGluZygpO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIGVwc2lsb25Ob2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKEVwc2lsb25Ob2RlLCBzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRXBzaWxvbkJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvZXBzaWxvblwiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBlcHNpbG9uQk5GTm9kZSA9IEVwc2lsb25CTkZOb2RlLmZyb21Ob3RoaW5nKCk7XG5cbiAgICBwYXJzZWQgPSAoZXBzaWxvbkJORk5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChlcHNpbG9uQk5GTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBlcHNpbG9uOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIG5ldyBFcHNpbG9uUGFydCgpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVwc2lsb25QYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvbkJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZXBzaWxvblBhcnQgPSBuZXcgRXBzaWxvblBhcnQoKTtcblxuICAgIHJldHVybiBlcHNpbG9uUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFcHNpbG9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVwc2lsb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9lcHNpbG9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IGVwc2lsb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZXBzaWxvblRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGVwc2lsb24sIC8vL1xuICAgICAgICAgIGVwc2lsb25UZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKGVwc2lsb25UZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBlcHNpbG9uUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVwc2lsb25CTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbVwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZXMoUnVsZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTm9kZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgocnVsZU5vZGVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IGNoaWxkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZVJ1bGVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gcnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5vZGUgPSBydWxlTmFtZVJ1bGVSdWxlTmFtZTsgIC8vL1xuXG4gICAgICAgICAgICAgIGlmIChub25UZXJtaW5hbE5vZGVSdWxlTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgICAgICAgICAgICAgIHJ1bGVOb2Rlcy5wdXNoKHJ1bGVOb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcnVsZU5vZGVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVOb2Rlcy5tYXAoKHJ1bGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZU5vZGUuZ2VuZXJhdGVSdWxlKFJ1bGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRG9jdW1lbnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IENob2ljZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcbmltcG9ydCB7IGV2ZW4sIGFsbEJ1dEZpcnN0QW5kTGFzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBDaG9pY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG4gICAgXG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG4gIFxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgdGhpcy5wYXJ0cy5zb21lKChwYXJ0KSA9PiB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuICAgIFxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9IHwgJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgbnVsbCksXG4gICAgICAgICAgc3RyaW5nID0gYCggJHtwYXJ0c1N0cmluZ30gKWA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5wYXJ0cy5tYXAoKHBhcnQpID0+IHBhcnQuY2xvbmUoKSksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1BhcnQocGFydHMpO1xuXG4gICAgcmV0dXJuIGNob2ljZU9mUGFydHNQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcblxuICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7ICAvLy9cbiAgICBcbiAgICBjb25zdCBldmVuTm9kZXMgPSBldmVuKG5vZGVzKTtcblxuICAgIG5vZGVzID0gZXZlbk5vZGVzOyAgLy8vXG5cbiAgICBjb25zdCBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBwYXJ0cyA9IG5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNQYXJ0ID0gbmV3IENob2ljZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUsIGVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChlcnJvclJ1bGVOYW1lKSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEb2N1bWVudEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RvY3VtZW50XCI7XG5pbXBvcnQgRG9jdW1lbnREZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RvY3VtZW50XCI7XG5cbmltcG9ydCB7IGRvY3VtZW50UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkb2N1bWVudERlZmluaXRpb24gPSBuZXcgRG9jdW1lbnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IGRvY3VtZW50UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERvY3VtZW50Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBydWxlTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlTmFtZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gbmV3IE5hbWVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IHJ1bGVOYW1lUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uICAvLy9cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSdWxlTmFtZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKTtcblxuICAgIHJldHVybiB3aWxkY2FyZFBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoV2lsZGNhcmRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBXaWxkY2FyZEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3dpbGRjYXJkXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IHdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB3aWxkY2FyZCwgLy8vXG4gICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKHdpbGRjYXJkVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gd2lsZGNhcmRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBXaWxkY2FyZEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEVORF9PRl9MSU5FLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZU5vZGUpOyB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihFbmRPZkxpbmVOb2RlLCBzaWduaWZpY2FudFRva2VuKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBlbmRPZkxpbmVOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbiA9IHNpZ25pZmljYW50VG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuKSB7XG4gICAgICAgIGVuZE9mTGluZU5vZGUgPSBFbmRPZkxpbmVOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9IChlbmRPZkxpbmVOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZW5kT2ZMaW5lTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBuZXcgRW5kT2ZMaW5lUGFydCgpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IG5ldyBFbmRPZkxpbmVQYXJ0KCk7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFbmRPZkxpbmVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFbmRPZkxpbmVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sQ29udGVudCA9IEVORF9PRl9MSU5FLFxuICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24oZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gZW5kT2ZMaW5lUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRW5kT2ZMaW5lQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IHF1YW50aWZpZXJSdWxlTmFtZSwgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IHF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ob3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSwgIC8vL1xuICAgICAgICAgIHBhcnRzID0gcGFydE5vZGVzLm1hcCgocGFydE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Tm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRGVmaW5pdGlvbkJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydFJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbkJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IGRlZmluaXRpb25SdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25EZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGV2ZW4gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGV2ZW5DaGlsZE5vZGVzID0gZXZlbihjaGlsZE5vZGVzKSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25CTkZOb2RlcyA9IGV2ZW5DaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25CTkZOb2Rlcy5tYXAoKGRlZmluaXRpb25CTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uc0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2xvb2tBaGVhZFwiO1xuaW1wb3J0IHsgYWxsQnV0Rmlyc3RBbmRMYXN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXSxcbiAgICAgICAgICBpbmRleCA9IDA7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5wYXJ0cy5tYXAoKHBhcnQpID0+IHBhcnQuY2xvbmUoKSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBzZXF1ZW5jZU9mUGFydHNQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcblxuICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7ICAvLy9cblxuICAgIGNvbnN0IGxvb2tBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIHBhcnRzID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBzZXF1ZW5jZU9mUGFydHNQYXJ0O1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBkZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhcixcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkZWZpbml0aW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5EZWZpbml0aW9uUnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uc0JORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25zXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0RlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbnNEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IGRlZmluaXRpb25zUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbnNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbnNCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IGVwc2lsb25SdWxlTmFtZSxcbiAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSB0ZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBlcHNpbG9uUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihlcHNpbG9uUnVsZU5hbWUpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih3aWxkY2FyZFJ1bGVOYW1lKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKGVuZE9mTGluZVJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24odGVybWluYWxTeW1ib2xSdWxlTmFtZSksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENob2ljZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIsIG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlblBhcnRSdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvbmVPck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCAvLy9cbiAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiA9IG5ldyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBDaG9pY2VPZlBhcnRzQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoKD86XFxcXC58W15cIlxcXFxdKSopXCIkLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCk7XG5cbiAgICByZXR1cm4gdGVybWluYWxTeW1ib2xQYXJ0O1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIGNvbnRlbnQgPSBzZWNvbmRNYXRjaC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIikucmVwbGFjZSgvXFxcXFwiL2csIFwiXFxcIlwiKTtcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlID0gc3RyaW5nTGl0ZXJhbFR5cGUsICAvLy9cbiAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gVGVybWluYWxTeW1ib2xCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb25UZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCk7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBub2Rlcy5wb3AoKTtcblxuICAgIGxvb2tBaGVhZCA9IHRydWU7XG5cbiAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lUnVsZU5hbWUsIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnQvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLCBjaG9pY2VPZlBhcnRzUnVsZU5hbWUsIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9uVGVybWluYWxQYXJ0Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0LmZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTZXF1ZW5jZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZU5vV2hpdGVzcGFjZU5vZGUgPSB0ZXJtaW5hbE5vZGUuaXNOb1doaXRlc3BhY2VOb2RlKCk7XG5cbiAgICAgIGlmICh0ZXJtaW5hbE5vZGVOb1doaXRlc3BhY2VOb2RlKSB7XG4gICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IE5vV2hpdGVzcGFjZU5vZGUuZnJvbU5vdGhpbmcoKTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oTm9XaGl0ZXNwYWNlTm9kZSwgc2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGlzTm9XaGl0ZXNwYWNlUGFydCgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgbm9XaGl0ZXNwYWNlTm9kZSA9IG51bGw7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IHN0YXRlLmlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCk7XG5cbiAgICBpZiAoIW5leHRUb2tlbldoaXRlc3BhY2VUb2tlbikge1xuICAgICAgbm9XaGl0ZXNwYWNlTm9kZSA9IE5vV2hpdGVzcGFjZU5vZGUuZnJvbU5vdGhpbmcoKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAobm9XaGl0ZXNwYWNlTm9kZSAhPT0gbnVsbClcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9XaGl0ZXNwYWNlTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBOT19XSElURVNQQUNFOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIG5ldyBOb1doaXRlc3BhY2VQYXJ0KCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBOT19XSElURVNQQUNFLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydFwiO1xuXG5pbXBvcnQgeyBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uID0gbmV3IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZGlmaWVyQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhNb2RpZmllckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZWxsaXBzaXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBlbGxpcHNpcywgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL21vZGlmaWVyXCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9sb29rQWhlYWRNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBNb2RpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXhjbGFtYXRpb25NYXJrLCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE1vZGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbW9kaWZpZXJcIjtcbmltcG9ydCBBbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2FtYmlndW91c01vZGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbWJpZ3VvdXNNb2RpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgQW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE1vZGlmaWVyQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25QYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocmVndWxhckV4cHJlc3Npb24pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgaWYgKGZpcnN0TWF0Y2ggPT09IGNvbnRlbnQpIHtcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nID0gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbi50b1N0cmluZygpLFxuXHRcdCAgICAgIHN0cmluZyA9IHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIG5ldyBSZWd1bGFyRXhwcmVzc2lvblBhcnQodGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oKD86XFxcXC58W15cXC9dKSopXFwvJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uID0gdGhpcy5nZXRSZWd1bGFyRXhwcmVzc2lvbigpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGFydCA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvblBhcnQocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uUGFydDtcbiAgfVxuXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgcGF0dGVybiA9IHNlY29uZE1hdGNoLCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAocGF0dGVybik7ICAvLy9cblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlLCAgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUmVndWxhckV4cHJlc3Npb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1YW50aWZpZXJCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFF1YW50aWZpZXJCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3Rvcih0ZXJtaW5hbFN5bWJvbENvbnRlbnQpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGVybWluYWxTeW1ib2xDb250ZW50LCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHF1ZXN0aW9uTWFyaywgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBwbHVzLCAvLy9cbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKG9uZU9yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUXVhbnRpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9xdWFudGlmaWVyXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGFzdGVyaXNrLCAvLy9cbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbih6ZXJvT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUXVhbnRpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcWyhbXlxcXV0rKV0kLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0aGlzLmdldFNpZ25pZmljYW50VG9rZW5UeXBlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcblxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB0eXBlVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0eXBlVHlwZSwgIC8vL1xuICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHR5cGVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpcnN0LCBmaWx0ZXIgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0FzU3RyaW5nKHJ1bGVzLCBtdWx0aUxpbmUpIHtcbiAgY29uc3QgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gcnVsZXMucmVkdWNlKChtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGg7XG5cbiAgICAgICAgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gTWF0aC5tYXgobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBydWxlTmFtZUxlbmd0aCk7XG5cbiAgICAgICAgcmV0dXJuIG1heGltdW1SdWxlTmFtZUxlbmd0aDtcbiAgICAgIH0sIDApLFxuICAgICAgcnVsZXNTdHJpbmcgPSBydWxlcy5yZWR1Y2UoKHJ1bGVzU3RyaW5nLCBydWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSBydWxlLmFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lKTtcblxuICAgICAgICBydWxlc1N0cmluZyArPSBydWxlU3RyaW5nO1xuXG4gICAgICAgIHJldHVybiBydWxlc1N0cmluZztcbiAgICAgIH0sIEVNUFRZX1NUUklORykucmVwbGFjZSgvXlxcblxcbi8sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHJ1bGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU1hcEZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBydWxlTWFwID0ge307XG5cbiAgcnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBydWxlTWFwW3J1bGVOYW1lXSA9IHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlTWFwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSB7XG4gIGNvbnN0IGZpcnN0UnVsZSA9IGZpcnN0KHJ1bGVzKSxcbiAgICAgICAgc3RhcnRSdWxlID0gZmlyc3RSdWxlOyAgLy8vXG5cbiAgcmV0dXJuIHN0YXJ0UnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbVN0YXJ0UnVsZUFuZFJ1bGVNYXAoc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gIGNvbnN0IHJ1bGVzID0gT2JqZWN0LnZhbHVlcyhydWxlTWFwKSxcbiAgICAgICAgc3RhcnRSdWxlTmFtZSA9IHN0YXJ0UnVsZS5nZXROYW1lKCk7XG5cbiAgZmlsdGVyKHJ1bGVzLCAocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBpZiAocnVsZU5hbWUgIT09IHN0YXJ0UnVsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcnVsZXMudW5zaGlmdChzdGFydFJ1bGUpO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUocnVsZXMsIHN0YXJ0UnVsZU5hbWUpIHtcbiAgbGV0IHN0YXJ0UnVsZSA9IHJ1bGVzLmZpbmQoKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgaWYgKHJ1bGVOYW1lID09PSBzdGFydFJ1bGVOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pIHx8IG51bGw7IC8vL1xuXG4gIGlmIChzdGFydFJ1bGUgPT09IG51bGwpIHtcbiAgICBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0UnVsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0FzU3RyaW5nLFxuICBydWxlTWFwRnJvbVJ1bGVzLFxuICBzdGFydFJ1bGVGcm9tUnVsZXMsXG4gIHJ1bGVzRnJvbVN0YXJ0UnVsZUFuZFJ1bGVNYXAsXG4gIHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFN0YXRlIGZyb20gXCIuLi9zdGF0ZVwiO1xuaW1wb3J0IE5hbWVSdWxlIGZyb20gXCIuLi9ydWxlL25hbWVcIjtcbmltcG9ydCBQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcnVsZVwiO1xuaW1wb3J0IEVycm9yUnVsZSBmcm9tIFwiLi4vcnVsZS9lcnJvclwiO1xuaW1wb3J0IEVwc2lsb25SdWxlIGZyb20gXCIuLi9ydWxlL2Vwc2lsb25cIjtcbmltcG9ydCBEb2N1bWVudFJ1bGUgZnJvbSBcIi4uL3J1bGUvZG9jdW1lbnRcIjtcbmltcG9ydCBSdWxlTmFtZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcnVsZU5hbWVcIjtcbmltcG9ydCBXaWxkY2FyZFJ1bGUgZnJvbSBcIi4uL3J1bGUvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVSdWxlIGZyb20gXCIuLi9ydWxlL2VuZE9mTGluZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3F1YW50aWZpZXJcIjtcbmltcG9ydCBEZWZpbml0aW9uUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNSdWxlIGZyb20gXCIuLi9ydWxlL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS90ZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi4vcnVsZS9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xSdWxlIGZyb20gXCIuLi9ydWxlL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9ub25UZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNSdWxlIGZyb20gXCIuLi9ydWxlL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBMb29rQWhlYWRNb2RpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvbG9va0FoZWFkTW9kaWZpZXJcIjtcbmltcG9ydCBBbWJpZ3VvdXNNb2RpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvYW1iaWd1b3VzTW9kaWZpZXJcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZnJvbSBcIi4uL3J1bGUvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL29wdGlvbmFsUXVhbnRpZmllclwiO1xuaW1wb3J0IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZnJvbSBcIi4uL3J1bGUvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgcnVsZU1hcEZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBTdGF0ZS5mcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHRoaXMucnVsZU1hcCksXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spLFxuICAgICAgICAgIG5vZGUgPSBydWxlTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG5cdHJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpIHtcblx0ICBsZXQgcnVsZXM7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5wYXJzZSh0b2tlbnMpO1xuXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gbm9kZS5gKTtcbiAgICB9XG5cbiAgICBydWxlcyA9IG5vZGUuZ2VuZXJhdGVSdWxlcyhSdWxlKTtcblxuICAgIGNvbnN0IHJ1bGVzTGVuZ3RoID0gcnVsZXMubGVuZ3RoO1xuXG4gICAgaWYgKHJ1bGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBydWxlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lUnVsZSA9IG5ldyBOYW1lUnVsZSgpLFxuICAgICAgICAgIHBhcnRSdWxlID0gbmV3IFBhcnRSdWxlKCksXG4gICAgICAgICAgcnVsZVJ1bGUgPSBuZXcgUnVsZVJ1bGUoKSxcbiAgICAgICAgICBlcnJvclJ1bGUgPSBuZXcgRXJyb3JSdWxlKCksXG4gICAgICAgICAgZXBzaWxvblJ1bGUgPSBuZXcgRXBzaWxvblJ1bGUoKSxcbiAgICAgICAgICBkb2N1bWVudFJ1bGUgPSBuZXcgRG9jdW1lbnRSdWxlKCksXG4gICAgICAgICAgcnVsZU5hbWVSdWxlID0gbmV3IFJ1bGVOYW1lUnVsZSgpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZSA9IG5ldyBXaWxkY2FyZFJ1bGUoKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlID0gbmV3IEVuZE9mTGluZVJ1bGUoKSxcbiAgICAgICAgICBxdWFudGlmaWVyUnVsZSA9IG5ldyBRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25SdWxlID0gbmV3IERlZmluaXRpb25SdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlID0gbmV3IERlZmluaXRpb25zUnVsZSgpLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgVGVybWluYWxQYXJ0UnVsZSgpLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlID0gbmV3IENob2ljZU9mUGFydHNSdWxlKCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlID0gbmV3IFRlcm1pbmFsU3ltYm9sUnVsZSgpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgTm9uVGVybWluYWxQYXJ0UnVsZSgpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUnVsZSgpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlID0gbmV3IE5vV2hpdGVzcGFjZVBhcnRSdWxlKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uUnVsZSgpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZSA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGUoKSxcbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGUgPSBuZXcgQW1iaWd1b3VzTW9kaWZpZXJSdWxlKCksXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSA9IG5ldyBPcHRpb25hbFF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUgPSBuZXcgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgPSBuZXcgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSgpO1xuXG4gICAgbGV0IHJ1bGVzID0gW1xuICAgICAgZG9jdW1lbnRSdWxlLFxuICAgICAgcnVsZVJ1bGUsXG4gICAgICBuYW1lUnVsZSxcbiAgICAgIGRlZmluaXRpb25zUnVsZSxcbiAgICAgIGRlZmluaXRpb25SdWxlLFxuICAgICAgcGFydFJ1bGUsXG4gICAgICBub25UZXJtaW5hbFBhcnRSdWxlLFxuICAgICAgdGVybWluYWxQYXJ0UnVsZSxcbiAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlLFxuICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSxcbiAgICAgIGNob2ljZU9mUGFydHNSdWxlLFxuICAgICAgcnVsZU5hbWVSdWxlLFxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlLFxuICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlLFxuICAgICAgdGVybWluYWxTeW1ib2xSdWxlLFxuICAgICAgZW5kT2ZMaW5lUnVsZSxcbiAgICAgIHdpbGRjYXJkUnVsZSxcbiAgICAgIGVwc2lsb25SdWxlLFxuICAgICAgcXVhbnRpZmllclJ1bGUsXG4gICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGUsXG4gICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUsXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlLFxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICBlcnJvclJ1bGVcbiAgICBdO1xuXG4gICAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgYm5mUGFyc2VyID0gbmV3IEJORlBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuICAgIFxuICAgIHJldHVybiBibmZQYXJzZXI7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgZXhwcmVzc2lvbiAgIDo6PSBleHByZXNzaW9uXyBvcGVyYXRvciBleHByZXNzaW9uIGV4cHJlc3Npb25+KlxuXG4gICAgICAgICAgICAgICAgIHwgZXhwcmVzc2lvbl9cblxuICAgICAgICAgICAgICAgICA7XG5cbiAgb3BlcmF0b3IgICAgIDo6PSBcIitcIlxuXG4gICAgICAgICAgICAgICAgIHwgXCItXCJcblxuICAgICAgICAgICAgICAgICB8IFwiL1wiXG5cbiAgICAgICAgICAgICAgICAgfCBcIipcIlxuXG4gICAgICAgICAgICAgICAgIDtcblxuICB0ZXJtICAgICAgICAgOjo9IC9cXFxcZCsvIDtcblxuICBleHByZXNzaW9uXyAgOjo9IFwiKFwiIGV4cHJlc3Npb24gXCIpXCJcblxuICAgICAgICAgICAgICAgICB8IHRlcm1cblxuICAgICAgICAgICAgICAgICA7XG5cbiAgZXhwcmVzc2lvbn4gIDo6PSBvcGVyYXRvciBleHByZXNzaW9uIDtcbiAgXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJORkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQk5GUGFyc2VyIGZyb20gXCIuLi9ibmYvcGFyc2VyXCI7XG5cbmltcG9ydCB7IHJ1bGVNYXBGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuY29uc3QgYm5mTGV4ZXIgPSBCTkZMZXhlci5mcm9tTm90aGluZygpLFxuICAgICAgYm5mUGFyc2VyID0gQk5GUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21CTkYoYm5mKSB7XG4gIGNvbnN0IHRva2VucyA9IGJuZkxleGVyLnRva2Vuc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgcnVsZXMgPSBibmZQYXJzZXIucnVsZXNGcm9tVG9rZW5zKHRva2Vucyk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICBjb25zdCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHBhcnNlciA9IG5ldyBDbGFzcyhzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gIHJldHVybiBwYXJzZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZXJGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lKENsYXNzLCBydWxlcywgc3RhcnRSdWxlTmFtZSkge1xuICBjb25zdCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lKHJ1bGVzLCBzdGFydFJ1bGVOYW1lKSxcbiAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBwYXJzZXIgPSBuZXcgQ2xhc3Moc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICByZXR1cm4gcGFyc2VyO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJ1bGVzRnJvbUJORixcbiAgcGFyc2VyRnJvbVJ1bGVzLFxuICBwYXJzZXJGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhdGUgZnJvbSBcIi4uL3N0YXRlXCI7XG5cbmltcG9ydCB7IHJ1bGVzRnJvbUJORiwgcGFyc2VyRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbW9uUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSkge1xuICAgIGNvbnN0IHN0YXRlID0gU3RhdGUuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbCxcbiAgICAgICAgICBydWxlTm9kZSA9IHJ1bGUucGFyc2Uoc3RhdGUsIGNhbGxiYWNrKSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcbiAgICBjb25zdCB7IGJuZiB9ID0gQ2xhc3MsXG4gICAgICAgICAgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbUJORihDbGFzcywgYm5mKSB7XG4gICAgY29uc3QgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICAgIGNvbnN0IHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5pbXBvcnQgQ29tbW9uUGFyc2VyIGZyb20gXCIuLi9jb21tb24vcGFyc2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2ljUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQmFzaWNQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihCYXNpY1BhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQmFzaWNQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcHNpbG9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgRXBzaWxvblBhcnQsXG4gIFdpbGRjYXJkUGFydCxcbiAgRW5kT2ZMaW5lUGFydCxcbiAgVGVybWluYWxTeW1ib2xQYXJ0LFxuICBSZWd1bGFyRXhwcmVzc2lvblBhcnQsXG4gIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCxcbiAgUnVsZU5hbWVQYXJ0LFxuICBPcHRpb25hbFBhcnRQYXJ0LFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0LFxuICBPbmVPck1vcmVQYXJ0c1BhcnQsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gIENob2ljZU9mUGFydHNQYXJ0XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORlBhcnNlciB9IGZyb20gXCIuL2JuZi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzaWNQYXJzZXIgfSBmcm9tIFwiLi9iYXNpYy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHJ1bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnNlclV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL3BhcnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRUeXBlcyB9IGZyb20gXCIuL3BhcnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFcHNpbG9uTm9kZSB9IGZyb20gXCIuL25vZGUvdGVybWluYWwvZXBzaWxvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvbm9uVGVybWluYWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cblxuICAgIHN0eWxlc2hlZXQgICAgICAgICAgICAgICAgIDo6PSAoIG1lZGlhIHwgcnVsZVNldCB8IGRlY2xhcmF0aW9uIHwgZXJyb3IgKSsgO1xuXG5cblxuXG5cbiAgICBtZWRpYSAgICAgICAgICAgICAgICAgICAgICA6Oj0gXCJAbWVkaWFcIiBtZWRpYVF1ZXJpZXMgXCJ7XCIgKCBydWxlU2V0IHwgZGVjbGFyYXRpb24gKSogXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyaWVzICAgICAgICAgICAgICAgOjo9ICBtZWRpYVF1ZXJ5ICggXCIsXCIgbWVkaWFRdWVyeSApKiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJ5ICAgICAgICAgICAgICAgICA6Oj0gIFwibm90XCI/ICggXCJvbmx5XCI/IG1lZGlhVHlwZSBcImFuZFwiICk/IG1lZGlhRXhwcmVzc2lvbiAoIFwiYW5kXCIgbWVkaWFFeHByZXNzaW9uICkqIDtcblxuXG4gICAgbWVkaWFUeXBlICAgICAgICAgICAgICAgICAgOjo9ICBcImFsbFwiIHwgXCJwcmludFwiIHwgXCJzY3JlZW5cIiB8IFwic3BlZWNoXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFFeHByZXNzaW9uICAgICAgICAgICAgOjo9ICBcIihcIiBbaWRlbnRpZmllcl0gKCBcIjpcIiBleHByZXNzaW9uICk/IFwiKVwiIDtcblxuXG5cblxuXG4gICAgcnVsZVNldCAgICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvcnMgXCJ7XCIgZGVjbGFyYXRpb24qIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCIsXCIgc2VsZWN0b3IgKSogO1xuXG5cbiAgICBzZWxlY3RvciAgICAgICAgICAgICAgICAgICA6Oj0gICggY2xhc3MgfCBwc2V1ZG9DbGFzcyB8IHBzZXVkb0VsZW1lbnQgfCBhdHRyaWJ1dGUgKSsgO1xuXG5cblxuXG5cbiAgICBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5IFwiOlwiIGV4cHJlc3Npb24gKCBcIixcIiBleHByZXNzaW9uICkqIHByaW9yaXR5PyBcIjtcIiA7XG5cblxuICAgIGNsYXNzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0NsYXNzICAgICAgICAgICAgICAgIDo6PSAgXCI6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0VsZW1lbnQgICAgICAgICAgICAgIDo6PSAgXCI6OlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwYXJlbnRoZXNpc2VkU2VsZWN0b3IgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKFwiIHNlbGVjdG9yIDxOT19XSElURVNQQUNFPlwiKVwiIDtcblxuXG4gICAgYXR0cmlidXRlICAgICAgICAgICAgICAgICAgOjo9ICBcIltcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCI9XCIgfCBcIn49XCIgfCBcInw9XCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl0gO1xuXG5cbiAgICBleHByZXNzaW9uICAgICAgICAgICAgICAgICA6Oj0gIHRlcm0gKCBcIixcIj8gdGVybSApKiA7XG5cblxuICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgIDo6PSAgXCIhaW1wb3J0YW50XCIgO1xuXG5cblxuXG5cbiAgICB0ZXJtICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFt1bmFyeS1vcGVyYXRvcl0/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtwZXJjZW50YWdlXSB8IFtmcmVxdWVuY3ldIHwgW2ZyYWN0aW9uXSB8IFtsZW5ndGhdIHwgW2FuZ2xlXSB8IFtyZW1zXSB8IFtlbXNdIHwgW3RpbWVdIHwgW251bWJlcl0gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cmluZy1saXRlcmFsXStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvdXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICB1cmkgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwidXJsXCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBbc3RyaW5nLWxpdGVyYWxdIFwiKVwiIDtcblxuXG4gICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl08Tk9fV0hJVEVTUEFDRT5cIihcIiBleHByZXNzaW9uIFwiKVwiIDtcblxuXG5cblxuXG4gICAgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQ1NTUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQ1NTUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhDU1NQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgY2xlYXIsIHB1c2gsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyAvLy9cblxuICAgIHN0YXJ0SW5kZXggPSBsZW5ndGggKyBzdGFydEluZGV4OyAvLy9cblxuICAgIGVuZEluZGV4ID0gbGVuZ3RoICsgZW5kSW5kZXg7IC8vL1xuICB9XG5cbiAgaWYgKGVuZEluZGV4ICE9PSBJbmZpbml0eSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gZW5kSW5kZXggKyAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBzdGFydEluZGV4OyAvLy9cblxuICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCAuLi5lbGVtZW50cykge1xuICByZXR1cm4gZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gYXJyYXkuaW5jbHVkZXMoZWxlbWVudCkpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBjbGVhciwgdHJpbSwgc2Vjb25kLCB0aGlyZCwgZm91cnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwcmVhZCB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpIHtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICB0aGlzLnVuaXF1ZSA9IHVuaXF1ZTtcbiAgfVxuXG4gIGFkanVzdE5vZGVzKG5vZGVzKSB7XG4gICAgaWYgKHRoaXMudW5pcXVlKSB7XG4gICAgICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVzTGVuZ3RoID4gMSkge1xuICAgICAgICBjbGVhcihub2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyaW0obm9kZXMsIHRoaXMuc3RhcnRJbmRleCwgdGhpcy5lbmRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TcHJlYWRFeHByZXNzaW9uKHNwcmVhZEV4cHJlc3Npb24pIHtcbiAgICBsZXQgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgIGVuZEluZGV4ID0gSW5maW5pdHksXG4gICAgICAgIHVuaXF1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIGlmIChzcHJlYWRFeHByZXNzaW9uID09PSBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUikge1xuICAgICAgICB1bmlxdWUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVnRXhwID0gL1xcWygtP1xcZCspPyhcXC5cXC5cXC4pPygtP1xcZCspP10vLFxuICAgICAgICAgICAgICBtYXRjaGVzID0gc3ByZWFkRXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSB8fCBudWxsLFxuICAgICAgICAgICAgICB0aGlyZE1hdGNoID0gdGhpcmQobWF0Y2hlcykgfHwgbnVsbCxcbiAgICAgICAgICAgICAgZm91cnRoTWF0Y2ggPSBmb3VydGgobWF0Y2hlcykgfHwgbnVsbDtcblxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICBzdGFydEluZGV4ID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2gpO1xuXG4gICAgICAgICAgaWYgKHRoaXJkTWF0Y2ggPT09IG51bGwpIHtcbiAgICAgICAgICAgIGVuZEluZGV4ID0gc3RhcnRJbmRleDsgIC8vL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3VydGhNYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgIGVuZEluZGV4ID0gcGFyc2VJbnQoZm91cnRoTWF0Y2gpO1xuXG4gICAgICAgICAgaWYgKHRoaXJkTWF0Y2ggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBlbmRJbmRleDsgIC8vL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNwcmVhZCA9IG5ldyBTcHJlYWQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHVuaXF1ZSk7XG5cbiAgICByZXR1cm4gc3ByZWFkO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNwcmVhZCBmcm9tIFwiLi9zcHJlYWRcIjtcblxuaW1wb3J0IHsgaW5jbHVkZXMsIHB1c2gsIGNsZWFyLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgQkFSX0NIQVJBQ1RFUiwgV0lMRENBUkRfQ0hBUkFDVEVSLCBGT1JXQVJEX1NMQVNIX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlcnkge1xuICBjb25zdHJ1Y3Rvcih0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgIHJ1bGVOYW1lcywgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKSB7XG4gICAgdGhpcy50eXBlcyA9IHR5cGVzO1xuICAgIHRoaXMuc3ByZWFkID0gc3ByZWFkO1xuICAgIHRoaXMuc3ViUXVlcnkgPSBzdWJRdWVyeTtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLm1heGltdW1EZXB0aCA9IG1heGltdW1EZXB0aDtcbiAgICB0aGlzLmluZmluaXRlRGVzY2VudCA9IGluZmluaXRlRGVzY2VudDtcbiAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzID0gaW50ZXJtZWRpYXRlTm9kZXM7XG4gIH1cblxuICBleGVjdXRlKG5vZGUsIGRlcHRoID0gMCwgbWF4aW11bURlcHRoID0gdGhpcy5tYXhpbXVtRGVwdGgpIHtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuXG4gICAgdGhpcy5jbGVhcigpO1xuXG4gICAgdGhpcy5maW5kKG5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuXG4gICAgdGhpcy5hcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICBjbGVhcih0aGlzLmludGVybWVkaWF0ZU5vZGVzKTtcbiAgfVxuXG4gIGZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIGlmIChkZXB0aCA+IG1heGltdW1EZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gICAgbGV0IGZvdW5kO1xuXG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHR5cGUgPSB0ZXJtaW5hbE5vZGUuZ2V0VHlwZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHRoaXMudHlwZXMsIHR5cGUsIFdJTERDQVJEX0NIQVJBQ1RFUik7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnJ1bGVOYW1lcywgcnVsZU5hbWUsIFdJTERDQVJEX0NIQVJBQ1RFUik7XG4gICAgfVxuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICBjb25zdCBpbnRlcm1lZGlhdGVOb2RlID0gbm9kZTsgLy8vXG5cbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMucHVzaChpbnRlcm1lZGlhdGVOb2RlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbmZpbml0ZURlc2NlbnQpIHtcbiAgICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgdGhpcy5maW5kKGNoaWxkTm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgdGhpcy5zcHJlYWQuYWRqdXN0Tm9kZXModGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG5cbiAgICBpZiAodGhpcy5zdWJRdWVyeSA9PT0gbnVsbCkge1xuICAgICAgcHVzaChub2RlcywgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMuZm9yRWFjaCgoaW50ZXJtZWRpYXRlTm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBpbnRlcm1lZGlhdGVOb2RlTm9uVGVybWluYWxOb2RlID0gaW50ZXJtZWRpYXRlTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgIGlmIChpbnRlcm1lZGlhdGVOb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgZGVwdGgrKztcblxuICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgICAgdGhpcy5zdWJRdWVyeS5jbGVhcigpO1xuXG4gICAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3ViUXVlcnkuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5zdWJRdWVyeS5hcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGxldCBxdWVyeSA9IG51bGw7XG5cbiAgICBpZiAoZXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVnRXhwID0gL15cXC8oXFwvKT8oW14vXFxbIV0rKShcXFtbXlxcXV0rXXwhKT8oXFwvLiopPyQvLFxuICAgICAgICAgICAgbWF0Y2hlcyA9IGV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpLFxuICAgICAgICAgICAgZm91cnRoTWF0Y2ggPSBmb3VydGgobWF0Y2hlcyksXG4gICAgICAgICAgICBmaWZ0aE1hdGNoID0gZmlmdGgobWF0Y2hlcyksXG4gICAgICAgICAgICBzZWxlY3RvcnMgPSB0aGlyZE1hdGNoLnNwbGl0KEJBUl9DSEFSQUNURVIpLFxuICAgICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IGZpZnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICAgIHNwcmVhZEV4cHJlc3Npb24gPSBmb3VydGhNYXRjaCB8fCBudWxsLFxuICAgICAgICAgICAgdHlwZXMgPSB0eXBlc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHNwcmVhZCA9IFNwcmVhZC5mcm9tU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSxcbiAgICAgICAgICAgIHN1YlF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oc3ViRXhwcmVzc2lvbiksXG4gICAgICAgICAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyksXG4gICAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSAoc2Vjb25kTWF0Y2ggPT09IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSKSxcbiAgICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW107XG5cbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHR5cGVzLCBzcHJlYWQsIHN1YlF1ZXJ5LCBydWxlTmFtZXMsIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG59XG5cbmZ1bmN0aW9uIHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHtcbiAgY29uc3QgdHlwZXMgPSBbXTtcblxuICBzZWxlY3RvcnMuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICBjb25zdCBzZWxlY3RvclR5cGVTZWxlY3RvciA9IGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgaWYgKHNlbGVjdG9yVHlwZVNlbGVjdG9yKSB7XG4gICAgICBjb25zdCB0eXBlID0gc2VsZWN0b3Iuc3Vic3RyaW5nKDEpO1xuXG4gICAgICB0eXBlcy5wdXNoKHR5cGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5mdW5jdGlvbiBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCBydWxlTmFtZXMgPSBbXTtcblxuICBzZWxlY3RvcnMuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICBjb25zdCBzZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IgPSBpc1NlbGVjdG9yUnVsZU5hbWVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKSB7XG4gICAgICBjb25zdCBydWxlTmFtZSA9IHNlbGVjdG9yOyAgLy8vXG5cbiAgICAgIHJ1bGVOYW1lcy5wdXNoKHJ1bGVOYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBydWxlTmFtZXM7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eQC8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eW15AXS8udGVzdChzZWxlY3Rvcik7IH1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFF1ZXJ5IGZyb20gXCIuLi9xdWVyeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzKG5vZGUsIENsYXNzLCBub2RlcyA9IFtdKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2xhc3MpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9XG5cbiAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiBxdWVyeUJ5Q2xhc3MoY2hpbGROb2RlLCBDbGFzcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlDbGFzc2VzKG5vZGUsIENsYXNzZXMsIG5vZGVzID0gW10pIHtcbiAgQ2xhc3Nlcy5zb21lKChDbGFzcykgPT4ge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2xhc3MpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiBxdWVyeUJ5Q2xhc3NlcyhjaGlsZE5vZGUsIENsYXNzZXMsIG5vZGVzKSk7XG4gIH1cblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5RXhwcmVzc2lvbihub2RlLCBleHByZXNzaW9uLCBtYXhpbXVtRGVwdGgpIHtcbiAgY29uc3QgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGgpLFxuICAgICAgICBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSk7XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHF1ZXJ5QnlDbGFzcyxcbiAgcXVlcnlCeUNsYXNzZXMsXG4gIHF1ZXJ5QnlFeHByZXNzaW9uXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFF1ZXJ5IH0gZnJvbSBcIi4vcXVlcnlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcXVlcnlVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEhFQUQgPSBcImhlYWRcIjtcbmV4cG9ydCBjb25zdCBTVFlMRSA9IFwic3R5bGVcIjtcbmV4cG9ydCBjb25zdCBDSEFSQUNURVJTID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXCI7XG5leHBvcnQgY29uc3QgVFdPX1NQQUNFUyA9IFwiICBcIjtcbmV4cG9ydCBjb25zdCBGT1VSX1NQQUNFUyA9IFwiICAgIFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRV9MRU5HVEggPSA2O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHF1ZXJ5LCBub2RlLCB0b2tlbnMpIHtcbiAgbGV0IGNvbnRlbnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICAgIG5vZGUgPSBmaXJzdE5vZGU7IC8vL1xuXG4gICAgY29udGVudCA9IGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBsYXN0VG9rZW4gPSBsYXN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGZpcnN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0VG9rZW4pLFxuICAgICAgICBsYXN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RUb2tlbik7XG5cbiAgbGV0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBmaXJzdFRva2VuSW5kZXg7IGluZGV4IDw9IGxhc3RUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwcmlvcml0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcmlvcml0eVwiKSxcbiAgICAgIHByb3BlcnR5UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3Byb3BlcnR5XCIpLFxuICAgICAgZXhwcmVzc2lvblF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9leHByZXNzaW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5LCBleHByZXNzaW9uLCBwcmlvcml0eSkge1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgIHRoaXMucHJpb3JpdHkgPSBwcmlvcml0eTtcbiAgfVxuXG4gIGdldFByb3BlcnR5KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5O1xuICB9XG5cbiAgZ2V0RXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UHJpb3JpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJpb3JpdHk7XG4gIH1cblxuICBjaGVja01hdGNoZXMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgcHJvcGVydGllc01hdGNoID0gKHByb3BlcnR5ID09PSB0aGlzLnByb3BlcnR5KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNDU1MoaW5kZW50LCBsYXN0KSB7XG4gICAgY29uc3QgY3NzID0gbGFzdCA/XG4gICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufSR7dGhpcy5wcmlvcml0eX07YCA6XG4gICAgICAgICAgICAgICAgICBgJHtpbmRlbnR9JHt0aGlzLnByb3BlcnR5fTogJHt0aGlzLmV4cHJlc3Npb259JHt0aGlzLnByaW9yaXR5fTtcXG5gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2Vucyhwcm9wZXJ0eVF1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGV4cHJlc3Npb25Db250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoZXhwcmVzc2lvblF1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHByaW9yaXR5Q29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHByaW9yaXR5UXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUNvbnRlbnQsIC8vL1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uQ29udGVudCwgLy8vXG4gICAgICAgICAgcHJpb3JpdHkgPSAocHJpb3JpdHlDb250ZW50ID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyA6XG4gICAgICAgICAgICAgICAgICAgICAgICBgICR7cHJpb3JpdHlDb250ZW50fWAsXG4gICAgICAgICAgZGVjbGFyYXRpb24gPSBuZXcgRGVjbGFyYXRpb24ocHJvcGVydHksIGV4cHJlc3Npb24sIHByaW9yaXR5KTtcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gXCIuL2RlY2xhcmF0aW9uXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgZGVjbGFyYXRpb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZGVjbGFyYXRpb25cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2xhcmF0aW9ucyB7XG4gIGNvbnN0cnVjdG9yKGFycmF5KSB7XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xuICB9XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gZmlyc3RJbmRleDsgaW5kZXggPD0gbGFzdEluZGV4OyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGJhY2t3YXJkc0ZvckVhY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBmaXJzdEluZGV4ID0gMCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSBsYXN0SW5kZXg7IGluZGV4ID49IGZpcnN0SW5kZXg7IGluZGV4LS0pIHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gdGhpcy5hcnJheVtpbmRleF07XG5cbiAgICAgIGNhbGxiYWNrKGRlY2xhcmF0aW9uLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMpIHtcbiAgICBkZWNsYXJhdGlvbnMuYmFja3dhcmRzRm9yRWFjaCgoZGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbi5jaGVja01hdGNoZXModGhpcy5hcnJheSk7IC8vL1xuXG4gICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgdGhpcy5hcnJheS51bnNoaWZ0KGRlY2xhcmF0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgaWYgKGluZGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRlbnQgPSBjbGFzc05hbWU7IC8vL1xuXG4gICAgICBjbGFzc05hbWUgPSBudWxsOyAvLy9cbiAgICB9XG5cbiAgICBsZXQgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuYXJyYXkucmVkdWNlKChkZWNsYXJhdGlvbnNDU1MsIGRlY2xhcmF0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBsYXN0ID0gKGluZGV4ID09PSBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbkNTUyA9IGRlY2xhcmF0aW9uLmFzQ1NTKGluZGVudCwgbGFzdCk7XG5cbiAgICAgICAgICAgICAgZGVjbGFyYXRpb25zQ1NTICs9IGRlY2xhcmF0aW9uQ1NTO1xuXG4gICAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbnNDU1M7XG4gICAgICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgICBpZiAoY2xhc3NOYW1lID09PSBudWxsKSB7XG4gICAgICAgIGNzcyA9IGRlY2xhcmF0aW9uc0NTUzsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3NzID0gYC4ke2NsYXNzTmFtZX0ge1xuJHtkZWNsYXJhdGlvbnNDU1N9XG59XG5cbmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbk5vZGVzID0gZGVjbGFyYXRpb25RdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0gZGVjbGFyYXRpb25Ob2Rlcy5tYXAoKGRlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9IERlY2xhcmF0aW9uLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbjtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBuZXcgRGVjbGFyYXRpb25zKGFycmF5KTtcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbnM7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHNlbGVjdG9yc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL3NlbGVjdG9yc1wiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKSB7XG4gICAgdGhpcy5zZWxlY3RvcnMgPSBzZWxlY3RvcnM7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRTZWxlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldCkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHJ1bGVTZXQuZ2V0RGVjbGFyYXRpb25zKCk7XG5cbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gIH1cblxuICBmaW5kTWF0Y2hpbmdSdWxlU2V0KHJ1bGVTZXRzKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldHMuZmluZCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3JzID0gcnVsZVNldC5nZXRTZWxlY3RvcnMoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yc01hdGNoID0gKHNlbGVjdG9ycyA9PT0gdGhpcy5zZWxlY3RvcnMpLFxuICAgICAgICAgICAgcnVsZVNldHNNYXRjaCA9IHNlbGVjdG9yc01hdGNoOyAvLy9cblxuICAgICAgaWYgKHJ1bGVTZXRzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgICByZXR1cm4gbWF0Y2hpbmdSdWxlU2V0O1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBsZXQgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoYCAgJHtpbmRlbnR9YCk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zQ1NTICE9PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICBjc3MgPSBgJHtpbmRlbnR9LiR7Y2xhc3NOYW1lfSR7dGhpcy5zZWxlY3RvcnN9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxuJHtpbmRlbnR9fVxuXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYSA9IG5ldyBSdWxlU2V0KHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKTtcblxuICAgIHJldHVybiBtZWRpYTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWxlY3RvcnNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgc2VsZWN0b3JzTm9kZUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhzZWxlY3RvcnNRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgc2VsZWN0b3JzID0gYCR7c2VsZWN0b3JzTm9kZUNvbnRlbnR9YDtcblxuICByZXR1cm4gc2VsZWN0b3JzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXQgZnJvbSBcIi4vcnVsZVNldFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHJ1bGVTZXRRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovcnVsZVNldFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldHMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldHMpIHtcbiAgICBydWxlU2V0cy5mb3JFYWNoKChydWxlU2V0KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1J1bGVTZXQgPSBydWxlU2V0LmZpbmRNYXRjaGluZ1J1bGVTZXQodGhpcy5hcnJheSk7IC8vL1xuXG4gICAgICAobWF0Y2hpbmdSdWxlU2V0ID09PSBudWxsKSA/XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChydWxlU2V0KSA6XG4gICAgICAgICAgbWF0Y2hpbmdSdWxlU2V0LnVuc2hpZnQocnVsZVNldCk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgY29uc3QgY3NzID0gdGhpcy5hcnJheS5yZWR1Y2UoKGNzcywgcnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgcnVsZVNldENTUyA9IHJ1bGVTZXQuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpO1xuXG4gICAgICBjc3MgKz0gcnVsZVNldENTUztcblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBydWxlU2V0Tm9kZXMgPSBydWxlU2V0UXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IHJ1bGVTZXROb2Rlcy5tYXAoKHJ1bGVTZXROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcnVsZVNldE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZVNldCA9IFJ1bGVTZXQuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVsZVNldHMgPSBuZXcgUnVsZVNldHMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIHJ1bGVTZXRzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XG5cbmltcG9ydCB7IFRXT19TUEFDRVMsIEZPVVJfU1BBQ0VTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcblxuY29uc3QgbWVkaWFRdWVyaWVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9tZWRpYS9tZWRpYVF1ZXJpZXNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lZGlhIHtcbiAgY29uc3RydWN0b3IobWVkaWFRdWVyaWVzLCBkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzKSB7XG4gICAgdGhpcy5tZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJpZXM7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFRdWVyaWVzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhUXVlcmllcztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRSdWxlU2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlU2V0cztcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSkge1xuICAgIGxldCBjc3MgPSBcIlwiO1xuXG4gICAgY29uc3QgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgVFdPX1NQQUNFUyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoY2xhc3NOYW1lLCBGT1VSX1NQQUNFUyk7XG5cbiAgICBpZiAoKHJ1bGVTZXRzQ1NTICE9PSBudWxsKSB8fCAoZGVjbGFyYXRpb25zQ1NTICE9PSBudWxsKSkge1xuICAgICAgY3NzID0gYEBtZWRpYSAke3RoaXMubWVkaWFRdWVyaWVzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU30ke3J1bGVTZXRzQ1NTfVxufVxuXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgTWVkaWEobWVkaWFRdWVyaWVzLCBkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzKTtcblxuICAgIHJldHVybiBtZWRpYTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZWRpYVF1ZXJpZXNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgbWVkaWFRdWVyaWVzTm9kZUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhtZWRpYVF1ZXJpZXNRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgbWVkaWFRdWVyaWVzID0gYCR7bWVkaWFRdWVyaWVzTm9kZUNvbnRlbnR9YDtcblxuICByZXR1cm4gbWVkaWFRdWVyaWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IE1lZGlhIGZyb20gXCIuL21lZGlhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgbWVkaWFRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiL3N0eWxlc2hlZXQvbWVkaWFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lZGlhcyB7XG4gIGNvbnN0cnVjdG9yKGFycmF5KSB7XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xuICB9XG5cbiAgdW5zaGlmdChtZWRpYXMpIHtcbiAgICBtZWRpYXMuZm9yRWFjaCgobWVkaWEpID0+IHtcbiAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChtZWRpYSk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIG1lZGlhKSA9PiB7XG4gICAgICBjb25zdCBtZWRpYUNTUyA9IG1lZGlhLmFzQ1NTKGNsYXNzTmFtZSk7XG5cbiAgICAgIGNzcyArPSBtZWRpYUNTUztcblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBtZWRpYU5vZGVzID0gbWVkaWFRdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0gbWVkaWFOb2Rlcy5tYXAoKG1lZGlhTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG1lZGlhTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBtZWRpYSA9IE1lZGlhLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBtZWRpYTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtZWRpYXMgPSBuZXcgTWVkaWFzKGFycmF5KTtcblxuICAgIHJldHVybiBtZWRpYXM7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lZGlhcyBmcm9tIFwiLi9zdHlsZS9tZWRpYXNcIjtcbmltcG9ydCBSdWxlU2V0cyBmcm9tIFwiLi9zdHlsZS9ydWxlU2V0c1wiO1xuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9zdHlsZS9kZWNsYXJhdGlvbnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3R5bGUge1xuICBjb25zdHJ1Y3RvcihkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgICB0aGlzLnJ1bGVTZXRzID0gcnVsZVNldHM7XG4gICAgdGhpcy5tZWRpYXMgPSBtZWRpYXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBnZXRNZWRpYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVkaWFzO1xuICB9XG5cbiAgZXh0ZW5kcyhzdXBlclN0eWxlKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gc3VwZXJTdHlsZS5nZXREZWNsYXJhdGlvbnMoKSxcbiAgICAgICAgICBydWxlU2V0cyA9IHN1cGVyU3R5bGUuZ2V0UnVsZVNldHMoKSxcbiAgICAgICAgICBtZWRpYXMgPSBzdXBlclN0eWxlLmdldE1lZGlhcygpO1xuXG4gICAgdGhpcy51bnNoaWZ0KGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIG1lZGlhcyk7XG4gIH1cblxuICB1bnNoaWZ0KGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIG1lZGlhcykge1xuICAgIHRoaXMuZGVjbGFyYXRpb25zLnVuc2hpZnQoZGVjbGFyYXRpb25zKTtcbiAgICB0aGlzLnJ1bGVTZXRzLnVuc2hpZnQocnVsZVNldHMpO1xuICAgIHRoaXMubWVkaWFzLnVuc2hpZnQobWVkaWFzKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgXCIgIFwiKSxcbiAgICAgICAgICBydWxlU2V0c0NTUyA9IHRoaXMucnVsZVNldHMuYXNDU1MoY2xhc3NOYW1lLCBcIlwiKSxcbiAgICAgICAgICBtZWRpYXNDU1MgPSB0aGlzLm1lZGlhcy5hc0NTUyhjbGFzc05hbWUpLFxuICAgICAgICAgIGNzcyA9IGAke2RlY2xhcmF0aW9uc0NTU30ke3J1bGVTZXRzQ1NTfSR7bWVkaWFzQ1NTfWA7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IERlY2xhcmF0aW9ucy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHJ1bGVTZXRzID0gUnVsZVNldHMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYXMgPSBNZWRpYXMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBzdHlsZSA9IG5ldyBTdHlsZShkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHlsZSBmcm9tIFwiLi4vc3R5bGVcIjtcbmltcG9ydCBDU1NMZXhlciBmcm9tIFwiLi4vY3NzL2xleGVyXCI7XG5pbXBvcnQgQ1NTUGFyc2VyIGZyb20gXCIuLi9jc3MvcGFyc2VyXCI7XG5cbmltcG9ydCB7IEhFQUQsIFNUWUxFLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGNzc0xleGVyID0gQ1NTTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGNzc1BhcnNlciA9IENTU1BhcnNlci5mcm9tTm90aGluZygpO1xuXG5pZiAoIWdsb2JhbFRoaXMuc3R5bGVNYXApIHtcbiAgZ2xvYmFsVGhpcy5zdHlsZU1hcCA9IHt9O1xufVxuXG5jb25zdCB7IHN0eWxlTWFwIH0gPSBnbG9iYWxUaGlzO1xuXG5mdW5jdGlvbiByZW5kZXJTdHlsZShzdHlsZSkge1xuICBjb25zdCBoZWFkRE9NRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoSEVBRCksXG4gICAgICAgIHN0eWxlRE9NRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoU1RZTEUpLFxuICAgICAgICBpbm5lckhUTUwgPSBgXG4gICAgICAgIFxuJHtzdHlsZX1gO1xuXG4gIE9iamVjdC5hc3NpZ24oc3R5bGVET01FbGVtZW50LCB7XG4gICAgaW5uZXJIVE1MXG4gIH0pO1xuXG4gIGhlYWRET01FbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlRE9NRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0eWxlcygpIHtcbiAgY29uc3Qgc3R5bGVzQ1NTID0gcmV0cmlldmVTdHlsZXNDU1MoKSxcbiAgICAgICAgc3R5bGUgPSBzdHlsZXNDU1M7ICAvLy9cblxuICByZW5kZXJTdHlsZShzdHlsZSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lLCBzdXBlclN0eWxlID0gbnVsbCkge1xuICBjb25zdCBzdHJpbmdzID0gYXJncy5zaGlmdCgpLFx0Ly8vXG4gICAgICAgIGNvbnRlbnQgPSBzdHJpbmdzLnJlZHVjZSgoY29udGVudCwgc3RyaW5nLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaW5kZXhdO1xuXG4gICAgICAgICAgY29udGVudCA9IChhcmcgIT09IHVuZGVmaW5lZCkgP1xuICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9JHtzdHJpbmd9JHthcmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfWA7XG5cbiAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgdG9rZW5zID0gY3NzTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgIG5vZGUgPSBjc3NQYXJzZXIucGFyc2UodG9rZW5zKSxcbiAgICAgICAgc3R5bGUgPSBTdHlsZS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgIGlmIChzdXBlclN0eWxlICE9PSBudWxsKSB7XG4gICAgICAgICAgc3R5bGUuZXh0ZW5kcyhzdXBlclN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlTWFwW2NsYXNzTmFtZV0gPSBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpIHtcbiAgY29uc3Qgc3R5bGUgPSBzdHlsZU1hcFtjbGFzc05hbWVdIHx8IG51bGw7XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlbmRlclN0eWxlLFxuICByZW5kZXJTdHlsZXMsXG4gIGdlbmVyYXRlU3R5bGUsXG4gIHJldHJpZXZlU3R5bGVcbn07XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGVzQ1NTKCkge1xuICBjb25zdCBjbGFzc05hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVNYXApLFxuICAgICAgICBzdHlsZXNDU1MgPSBjbGFzc05hbWVzLnJlZHVjZSgoc3R5bGVzQ1NTLCBjbGFzc05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSxcbiAgICAgICAgICAgICAgICBzdHlsZUNTUyA9IHN0eWxlLmFzQ1NTKGNsYXNzTmFtZSk7XG5cbiAgICAgICAgICBzdHlsZXNDU1MgKz0gc3R5bGVDU1M7XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzQ1NTO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBzdHlsZXNDU1M7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQVJBQ1RFUlMsIEVNUFRZX1NUUklORywgQ0xBU1NfTkFNRV9MRU5HVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGxlbmd0aCA9IENMQVNTX05BTUVfTEVOR1RILFxuICAgICAgY2hhcmFjdGVycyA9IENIQVJBQ1RFUlMsXG4gICAgICBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XG5cbmNvbnN0IGNsYXNzTmFtZXMgPSBbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ2xhc3NOYW1lKCkge1xuICBsZXQgY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGNvdW50ID0gMDsgY291bnQgPCBsZW5ndGg7IGNvdW50KyspIHtcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpLFxuICAgICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaW5kZXhdO1xuXG4gICAgY2xhc3NOYW1lICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIGNvbnN0IGNsYXNzTmFtZXNJbmNsdWRlc0NsYXNzTmFtZSA9IGNsYXNzTmFtZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcblxuICBpZiAoIWNsYXNzTmFtZXNJbmNsdWRlc0NsYXNzTmFtZSkge1xuICAgIGNsYXNzTmFtZXMucHVzaChjbGFzc05hbWUpO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG4gIH1cblxuICByZXR1cm4gY2xhc3NOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0cmlldmVDbGFzc05hbWUoZWxlbWVudCkge1xuICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gZWxlbWVudC5yZWFjdEZ1bmN0aW9uIHx8IGVsZW1lbnQucmVhY3RDb21wb25lbnQuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZW5lcmF0ZUNsYXNzTmFtZSxcbiAgcmV0cmlldmVDbGFzc05hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGFnTmFtZXMgfSBmcm9tIFwiLi90YWdOYW1lc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1NMZXhlciB9IGZyb20gXCIuL2Nzcy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1NQYXJzZXIgfSBmcm9tIFwiLi9jc3MvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0eWxlc1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHlsZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NOYW1lVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzTmFtZVwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NsYXNzKGFyZ3VtZW50KSB7IHJldHVybiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIEVsZW1lbnQpOyB9ICAvLy9cblxuZnVuY3Rpb24gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcykge1xuICBjb25zdCBzdWJjbGFzc09mID0gKGFyZ3VtZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIENsYXNzKTtcblxuICByZXR1cm4gc3ViY2xhc3NPZjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyB0YWdOYW1lcywgc3R5bGVzVXRpbGl0aWVzLCBjbGFzc05hbWVVdGlsaXRpZXMgfSBmcm9tIFwid2l0aC1zdHlsZVwiO1xuXG5pbXBvcnQgeyBpc0NsYXNzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzXCI7XG5pbXBvcnQgeyBDTEFTU19OQU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZ2VuZXJhdGVDbGFzc05hbWUgfSA9IGNsYXNzTmFtZVV0aWxpdGllcyxcbiAgICAgIHsgcmVuZGVyU3R5bGUsIHJlbmRlclN0eWxlcywgZ2VuZXJhdGVTdHlsZSwgcmV0cmlldmVTdHlsZSB9ID0gc3R5bGVzVXRpbGl0aWVzO1xuXG5mdW5jdGlvbiB3aXRoU3R5bGUoQ2xhc3NPckZ1bmN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBhcmdzID0gWyAuLi5hcmd1bWVudHMgXTsgIC8vL1xuXG4gICAgbGV0IHsgY2xhc3NOYW1lID0gbnVsbCB9ID0gQ2xhc3NPckZ1bmN0aW9uO1xuXG4gICAgY29uc3Qgc3VwZXJTdHlsZSA9IHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKTtcblxuICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG5cbiAgICBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSk7XG5cbiAgICBjb25zdCBDbGFzc09yRnVuY3Rpb25DbGFzcyA9IGlzQ2xhc3MoQ2xhc3NPckZ1bmN0aW9uKTtcblxuICAgIGlmIChDbGFzc09yRnVuY3Rpb25DbGFzcykge1xuICAgICAgY29uc3QgQ2xhc3MgPSBDbGFzc09yRnVuY3Rpb247ICAvLy9cblxuICAgICAgQ2xhc3NPckZ1bmN0aW9uID0gY2xhc3MgZXh0ZW5kcyBDbGFzcyB7XG4gICAgICAgIHN0YXRpYyBmcm9tQ2xhc3MoX0NsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgICByZXR1cm4gQ2xhc3MuZnJvbUNsYXNzKF9DbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBGdW5jdGlvbiA9IENsYXNzT3JGdW5jdGlvbjsgLy8vXG5cbiAgICAgIENsYXNzT3JGdW5jdGlvbiA9IChwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICByZXR1cm4gRnVuY3Rpb24ocHJvcGVydGllcyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24oQ2xhc3NPckZ1bmN0aW9uLCB7XG4gICAgICBjbGFzc05hbWVcbiAgICB9KTtcblxuICAgIHJldHVybiBDbGFzc09yRnVuY3Rpb247XG4gIH07XG59XG5cbk9iamVjdC5hc3NpZ24od2l0aFN0eWxlLCB7XG4gIHJlbmRlclN0eWxlLFxuICByZW5kZXJTdHlsZXNcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGU7XG5cbnRhZ05hbWVzLmZvckVhY2goKHRhZ05hbWUpID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpdGhTdHlsZSwgdGFnTmFtZSwge1xuICAgIGdldDogKCkgPT4gZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBhcmdzID0gWy4uLmFyZ3VtZW50c10sICAvLy9cbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG5cbiAgICAgIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lKTtcblxuICAgICAgY29uc3QgRnVuY3Rpb24gPSAocHJvcGVydGllcykgPT4ge1xuICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgICB9O1xuXG4gICAgICBPYmplY3QuYXNzaWduKEZ1bmN0aW9uLCB7XG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBGdW5jdGlvbjtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpIHtcbiAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoQ0xBU1NfTkFNRSkgPyBwcm9wZXJ0aWVzIDogeyAuLi5wcm9wZXJ0aWVzLCBjbGFzc05hbWUgfTsgLy8vXG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4vd2l0aFN0eWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENVUlNPUiA9IFwiY3Vyc29yXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBBVVRPX0NVUlNPUiA9IFwiYXV0b1wiO1xuZXhwb3J0IGNvbnN0IFBPSU5URVJfQ1VSU09SID0gXCJwb2ludGVyXCI7XG5leHBvcnQgY29uc3QgQ09MX1JFU0laRV9DVVJTT1IgPSBcImNvbC1yZXNpemVcIjtcbmV4cG9ydCBjb25zdCBST1dfUkVTSVpFX0NVUlNPUiA9IFwicm93LXJlc2l6ZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCb2R5IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IHsgQ1VSU09SIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBBVVRPX0NVUlNPUiwgUE9JTlRFUl9DVVJTT1IsIENPTF9SRVNJWkVfQ1VSU09SLCBST1dfUkVTSVpFX0NVUlNPUiB9IGZyb20gXCIuL2N1cnNvcnNcIjtcblxuY29uc3QgYm9keSA9IG5ldyBCb2R5KCk7XG5cbmxldCBwcmV2aW91c0N1cnNvcjsgIC8vL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDdXJzb3IoKSB7XG4gIHNldEN1cnNvcihwcmV2aW91c0N1cnNvcik7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRlckN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGdldEN1cnJlbnRDdXJzb3IoKTtcblxuICBpZiAoY3VycmVudEN1cnNvciAhPT0gUE9JTlRFUl9DVVJTT1IpIHtcbiAgICBwcmV2aW91c0N1cnNvciA9IGN1cnJlbnRDdXJzb3I7IC8vL1xuXG4gICAgc2V0Q3Vyc29yKFBPSU5URVJfQ1VSU09SKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm93UmVzaXplQ3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gZ2V0Q3VycmVudEN1cnNvcigpO1xuXG4gIGlmIChjdXJyZW50Q3Vyc29yICE9PSBST1dfUkVTSVpFX0NVUlNPUikge1xuICAgIHByZXZpb3VzQ3Vyc29yID0gY3VycmVudEN1cnNvcjsgLy8vXG5cbiAgICBzZXRDdXJzb3IoUk9XX1JFU0laRV9DVVJTT1IpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2x1bW5SZXNpemVDdXJzb3IoKSB7XG4gIGNvbnN0IGN1cnJlbnRDdXJzb3IgPSBnZXRDdXJyZW50Q3Vyc29yKCk7XG5cbiAgaWYgKGN1cnJlbnRDdXJzb3IgIT09IENPTF9SRVNJWkVfQ1VSU09SKSB7XG4gICAgcHJldmlvdXNDdXJzb3IgPSBjdXJyZW50Q3Vyc29yOyAvLy9cblxuICAgIHNldEN1cnNvcihDT0xfUkVTSVpFX0NVUlNPUik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZXNldEN1cnNvcixcbiAgcG9pbnRlckN1cnNvcixcbiAgcm93UmVzaXplQ3Vyc29yLFxuICBjb2x1bW5SZXNpemVDdXJzb3Jcbn1cblxuZnVuY3Rpb24gc2V0Q3Vyc29yKGN1cnNvcikge1xuICBjb25zdCBjc3MgPSB7XG4gICAgY3Vyc29yXG4gIH07XG5cbiAgYm9keS5jc3MoY3NzKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGJvZHkuY3NzKENVUlNPUikgfHwgQVVUT19DVVJTT1I7XG5cbiAgcmV0dXJuIGN1cnJlbnRDdXJzb3I7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBSb3dEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicm93XCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFJvd0RpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgUm93c0RpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyb3dzXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFJvd3NEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIENvbHVtbkRpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb2x1bW5cIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoQ29sdW1uRGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBDb2x1bW5zRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbHVtbnNcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoQ29sdW1uc0RpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRFJBR19FVkVOVF9UWVBFID0gXCJkcmFnXCI7XG5leHBvcnQgY29uc3QgRFJPUF9FVkVOVF9UWVBFID0gXCJkcm9wXCI7XG5leHBvcnQgY29uc3QgRFJBR19PVVRfRVZFTlRfVFlQRSA9IFwiZHJhZ291dFwiO1xuZXhwb3J0IGNvbnN0IERSQUdfT1ZFUl9FVkVOVF9UWVBFID0gXCJkcmFnb3ZlclwiO1xuZXhwb3J0IGNvbnN0IFNUT1BfRFJBR19FVkVOVF9UWVBFID0gXCJzdG9wZHJhZ1wiO1xuZXhwb3J0IGNvbnN0IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSA9IFwic3RhcnRkcmFnXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgRFJBR19FVkVOVF9UWVBFLFxuICBEUk9QX0VWRU5UX1RZUEUsXG4gIERSQUdfT1VUX0VWRU5UX1RZUEUsXG4gIERSQUdfT1ZFUl9FVkVOVF9UWVBFLFxuICBTVE9QX0RSQUdfRVZFTlRfVFlQRSxcbiAgU1RBUlRfRFJBR19FVkVOVF9UWVBFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgU1RBUlRfRFJBR0dJTkdfREVMQVkgPSAxNzU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3VzZVRvcEZyb21FdmVudChldmVudCkge1xuICBjb25zdCB7IHBhZ2VZIH0gPSBldmVudCxcbiAgICAgICAgbW91c2VUb3AgPSBwYWdlWTsgLy8vXG5cbiAgcmV0dXJuIG1vdXNlVG9wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW91c2VMZWZ0RnJvbUV2ZW50KGV2ZW50KSB7XG4gIGNvbnN0IHsgcGFnZVggfSA9IGV2ZW50LFxuICAgICAgICBtb3VzZUxlZnQgPSBwYWdlWDsgIC8vL1xuXG4gIHJldHVybiBtb3VzZUxlZnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHdpbmRvdywgYnV0dG9ucywgZXZlbnRUeXBlcyB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBrZXlDb2RlcywgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiIDtcblxuaW1wb3J0IHsgU1RBUlRfRFJBR0dJTkdfREVMQVkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtb3VzZVRvcEZyb21FdmVudCwgbW91c2VMZWZ0RnJvbUV2ZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ldmVudFwiO1xuaW1wb3J0IHsgRFJBR19FVkVOVF9UWVBFLCBTVE9QX0RSQUdfRVZFTlRfVFlQRSwgU1RBUlRfRFJBR19FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBhc3luY2hyb25vdXNVdGlsaXRpZXMsXG4gICAgICB7IEVTQ0FQRV9LRVlfQ09ERSB9ID0ga2V5Q29kZXMsXG4gICAgICB7IEJMVVJfRVZFTlRfVFlQRSB9ID0gZXZlbnRUeXBlcyxcbiAgICAgIHsgTEVGVF9NT1VTRV9CVVRUT04gfSA9IGJ1dHRvbnM7XG5cbmNvbnN0IGRyYWdFbGVtZW50ID0gbnVsbDtcblxuT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gIGRyYWdFbGVtZW50XG59KTtcblxuZnVuY3Rpb24gb25EcmFnKGRyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZkRyYWcoZHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb25TdG9wRHJhZyhzdG9wRHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gU1RPUF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzdG9wRHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmU3RvcERyYWcoc3RvcERyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IFNUT1BfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gc3RvcERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uU3RhcnREcmFnKHN0YXJ0RHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gU1RBUlRfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gc3RhcnREcmFnSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZTdGFydERyYWcoc3RhcnREcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzdGFydERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGVuYWJsZURyYWcoKSB7XG4gIGNvbnN0IHsgb25EcmFnLCBvblN0b3BEcmFnLCBvblN0YXJ0RHJhZyB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICBkcmFnSGFuZGxlciA9IG9uRHJhZywgLy8vXG4gICAgICAgIHN0b3BEcmFnSGFuZGxlciA9IG9uU3RvcERyYWcsIC8vL1xuICAgICAgICBzdGFydERyYWdIYW5kbGVyID0gb25TdGFydERyYWcsIC8vL1xuICAgICAgICB0aW1lb3V0ID0gbnVsbCxcbiAgICAgICAgdG9wT2Zmc2V0ID0gbnVsbCxcbiAgICAgICAgbGVmdE9mZnNldCA9IG51bGwsXG4gICAgICAgIHN0YXJ0TW91c2VUb3AgPSBudWxsLFxuICAgICAgICBzdGFydE1vdXNlTGVmdCA9IG51bGw7XG5cbiAgZHJhZ0hhbmRsZXIgJiYgdGhpcy5vbkRyYWcoZHJhZ0hhbmRsZXIpO1xuICBzdG9wRHJhZ0hhbmRsZXIgJiYgdGhpcy5vblN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlcik7XG4gIHN0YXJ0RHJhZ0hhbmRsZXIgJiYgdGhpcy5vblN0YXJ0RHJhZyhzdGFydERyYWdIYW5kbGVyKTtcblxuICB0aGlzLm9uTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIHRoaXMpO1xuXG4gIHRoaXMuc2V0U3RhdGUoe1xuICAgIHRpbWVvdXQsXG4gICAgdG9wT2Zmc2V0LFxuICAgIGxlZnRPZmZzZXQsXG4gICAgc3RhcnRNb3VzZVRvcCxcbiAgICBzdGFydE1vdXNlTGVmdFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGlzYWJsZURyYWcoKSB7XG4gIGNvbnN0IHsgb25EcmFnLCBvblN0b3BEcmFnLCBvblN0YXJ0RHJhZyB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICBkcmFnSGFuZGxlciA9IG9uRHJhZywgLy8vXG4gICAgICAgIHN0b3BEcmFnSGFuZGxlciA9IG9uU3RvcERyYWcsIC8vL1xuICAgICAgICBzdGFydERyYWdIYW5kbGVyID0gb25TdGFydERyYWc7IC8vL1xuXG4gIGRyYWdIYW5kbGVyICYmIHRoaXMub2ZmRHJhZyhkcmFnSGFuZGxlcik7XG4gIHN0b3BEcmFnSGFuZGxlciAmJiB0aGlzLm9mZlN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlcik7XG4gIHN0YXJ0RHJhZ0hhbmRsZXIgJiYgdGhpcy5vZmZTdGFydERyYWcoc3RhcnREcmFnSGFuZGxlcik7XG5cbiAgdGhpcy5vZmZNb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIGlzRHJhZ2dpbmcoKSB7XG4gIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5oYXNDbGFzcyhcImRyYWdnaW5nXCIpO1xuXG4gIHJldHVybiBkcmFnZ2luZztcbn1cblxuZnVuY3Rpb24gc3RhcnRXYWl0aW5nVG9EcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpIHtcbiAgbGV0IHRpbWVvdXQgPSB0aGlzLmdldFRpbWVvdXQoKTtcblxuICBpZiAodGltZW91dCA9PT0gbnVsbCkge1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRUaW1lb3V0KCk7XG5cbiAgICAgIHRoaXMuc3RhcnREcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpO1xuICAgIH0sIFNUQVJUX0RSQUdHSU5HX0RFTEFZKTtcblxuICAgIHRoaXMudXBkYXRlVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wV2FpdGluZ1RvRHJhZygpIHtcbiAgY29uc3QgdGltZW91dCA9IHRoaXMuZ2V0VGltZW91dCgpO1xuXG4gIGlmICh0aW1lb3V0ICE9PSBudWxsKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXG4gICAgdGhpcy5yZXNldFRpbWVvdXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydERyYWcobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEJvdW5kcygpLFxuICAgICAgICBldmVudFR5cGUgPSBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGJvdW5kc1RvcCA9IGJvdW5kcy5nZXRUb3AoKSxcbiAgICAgICAgYm91bmRzTGVmdCA9IGJvdW5kcy5nZXRMZWZ0KCksXG4gICAgICAgIGJvdW5kc1JpZ2h0ID0gYm91bmRzLmdldFJpZ2h0KCksXG4gICAgICAgIGJvdW5kc0JvdHRvbSA9IGJvdW5kcy5nZXRCb3R0b20oKSxcbiAgICAgICAgYm91bmRzV2lkdGggPSBib3VuZHNSaWdodCAtIGJvdW5kc0xlZnQsXG4gICAgICAgIGJvdW5kc0hlaWdodCA9IGJvdW5kc0JvdHRvbSAtIGJvdW5kc1RvcCxcbiAgICAgICAgdG9wT2Zmc2V0ID0gTWF0aC5mbG9vcihib3VuZHNIZWlnaHQgLyAyKSxcbiAgICAgICAgbGVmdE9mZnNldCA9IE1hdGguZmxvb3IoYm91bmRzV2lkdGggLyAyKSxcbiAgICAgICAgZHJhZ0VsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgc3RhcnRNb3VzZVRvcCA9IG1vdXNlVG9wLCAvLy9cbiAgICAgICAgc3RhcnRNb3VzZUxlZnQgPSBtb3VzZUxlZnQ7IC8vL1xuXG4gIHdpbmRvdy5vbktleURvd24oa2V5RG93bkhhbmRsZXIsIHRoaXMpO1xuXG4gIHdpbmRvdy5vbk1vdXNlTW92ZShtb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcblxuICB0aGlzLmFkZENsYXNzKFwiZHJhZ2dpbmdcIik7XG5cbiAgT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gICAgZHJhZ0VsZW1lbnRcbiAgfSk7XG5cbiAgdGhpcy5zZXRUb3BPZmZzZXQodG9wT2Zmc2V0KTtcblxuICB0aGlzLnNldExlZnRPZmZzZXQobGVmdE9mZnNldCk7XG5cbiAgdGhpcy5zZXRTdGFydE1vdXNlVG9wKHN0YXJ0TW91c2VUb3ApO1xuXG4gIHRoaXMuc2V0U3RhcnRNb3VzZUxlZnQoc3RhcnRNb3VzZUxlZnQpO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSk7XG5cbiAgdGhpcy5kcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpO1xufVxuXG5mdW5jdGlvbiBzdG9wRHJhZyhhYm9ydGVkKSB7XG4gIGNvbnN0IHsgZHJvcEVsZW1lbnQgfSA9IGdsb2JhbFRoaXMsXG4gICAgICAgIGV2ZW50VHlwZSA9IFNUT1BfRFJBR19FVkVOVF9UWVBFO1xuXG4gIHdpbmRvdy5vZmZLZXlEb3duKGtleURvd25IYW5kbGVyLCB0aGlzKTtcblxuICB3aW5kb3cub2ZmTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIHRoaXMpO1xuXG4gIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgdGhpcy5jYWxsSGFuZGxlcnNBc3luYyhldmVudFR5cGUsIGRyb3BFbGVtZW50LCBhYm9ydGVkLCAoKSA9PiB7XG4gICAgICBjb25zdCBkcmFnRWxlbWVudCA9IG51bGw7XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgICAgICBkcmFnRWxlbWVudFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJkcmFnZ2luZ1wiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChkcm9wRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGRyYWdFbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBkcm9wRWxlbWVudC5kcm9wKGRyYWdFbGVtZW50LCBhYm9ydGVkLCBkb25lKTtcbiAgfSBlbHNlIHtcbiAgICBkb25lKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZHJhZyhtb3VzZVRvcCwgbW91c2VMZWZ0KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgc2Nyb2xsVG9wID0gd2luZG93LmdldFNjcm9sbFRvcCgpLFxuICAgICAgICBzY3JvbGxMZWZ0ID0gd2luZG93LmdldFNjcm9sbExlZnQoKSxcbiAgICAgICAgdG9wT2Zmc2V0ID0gdGhpcy5nZXRUb3BPZmZzZXQoKSxcbiAgICAgICAgbGVmdE9mZnNldCA9IHRoaXMuZ2V0TGVmdE9mZnNldCgpLFxuICAgICAgICBzdGFydE1vdXNlVG9wID0gdGhpcy5nZXRTdGFydE1vdXNlVG9wKCksXG4gICAgICAgIHN0YXJ0TW91c2VMZWZ0ID0gdGhpcy5nZXRTdGFydE1vdXNlTGVmdCgpLFxuICAgICAgICByZWxhdGl2ZU1vdXNlVG9wID0gbW91c2VUb3AgLSBzdGFydE1vdXNlVG9wLFxuICAgICAgICByZWxhdGl2ZU1vdXNlTGVmdCA9IG1vdXNlTGVmdCAtIHN0YXJ0TW91c2VMZWZ0O1xuXG4gIGxldCB0b3AgPSBzdGFydE1vdXNlVG9wICsgcmVsYXRpdmVNb3VzZVRvcCAtIHRvcE9mZnNldCAtIHNjcm9sbFRvcCxcbiAgICAgIGxlZnQgPSBzdGFydE1vdXNlTGVmdCArIHJlbGF0aXZlTW91c2VMZWZ0IC0gbGVmdE9mZnNldCAtIHNjcm9sbExlZnQ7XG5cbiAgdG9wID0gYCR7dG9wfXB4YDsgLy8vXG4gIGxlZnQgPSBgJHtsZWZ0fXB4YDsgLy8vXG5cbiAgY29uc3QgY3NzID0ge1xuICAgIHRvcCxcbiAgICBsZWZ0XG4gIH07XG5cbiAgdGhpcy5jc3MoY3NzKTtcblxuICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIHJlbGF0aXZlTW91c2VUb3AsIHJlbGF0aXZlTW91c2VMZWZ0KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZW91dCgpIHtcbiAgY29uc3QgeyB0aW1lb3V0IH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgcmV0dXJuIHRpbWVvdXQ7XG59XG5cbmZ1bmN0aW9uIHJlc2V0VGltZW91dCgpIHtcbiAgY29uc3QgdGltZW91dCA9IG51bGw7XG5cbiAgdGhpcy51cGRhdGVUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUaW1lb3V0KHRpbWVvdXQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgdGltZW91dFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9wT2Zmc2V0KCkge1xuICBjb25zdCB7IHRvcE9mZnNldCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gIHJldHVybiB0b3BPZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIGdldExlZnRPZmZzZXQoKSB7XG4gIGNvbnN0IHsgbGVmdE9mZnNldCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gIHJldHVybiBsZWZ0T2Zmc2V0O1xufVxuXG5mdW5jdGlvbiBnZXRTdGFydE1vdXNlVG9wKCkge1xuICBjb25zdCB7IHN0YXJ0TW91c2VUb3AgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcblxuICByZXR1cm4gc3RhcnRNb3VzZVRvcDtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhcnRNb3VzZUxlZnQoKSB7XG4gIGNvbnN0IHsgc3RhcnRNb3VzZUxlZnQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcblxuICByZXR1cm4gc3RhcnRNb3VzZUxlZnQ7XG59XG5cbmZ1bmN0aW9uIHNldFRvcE9mZnNldCh0b3BPZmZzZXQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgdG9wT2Zmc2V0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRMZWZ0T2Zmc2V0KGxlZnRPZmZzZXQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgbGVmdE9mZnNldFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0U3RhcnRNb3VzZVRvcChzdGFydE1vdXNlVG9wKSB7XG4gIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgIHN0YXJ0TW91c2VUb3BcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldFN0YXJ0TW91c2VMZWZ0KHN0YXJ0TW91c2VMZWZ0KSB7XG4gIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgIHN0YXJ0TW91c2VMZWZ0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVyc0FzeW5jKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGRvbmUgPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCksICAvLy9cbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGZvckVhY2goZXZlbnRMaXN0ZW5lcnMsIChldmVudExpc3RlbmVyLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgeyBoYW5kbGVyLCBlbGVtZW50OiBoYW5kbGVyRWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcywgLy8vXG4gICAgICAgICAgZG9uZSA9IG5leHQ7ICAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50LCBkb25lKTtcbiAgfSwgZG9uZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25EcmFnLFxuICBvZmZEcmFnLFxuICBvblN0b3BEcmFnLFxuICBvZmZTdG9wRHJhZyxcbiAgb25TdGFydERyYWcsXG4gIG9mZlN0YXJ0RHJhZyxcbiAgZW5hYmxlRHJhZyxcbiAgZGlzYWJsZURyYWcsXG4gIGlzRHJhZ2dpbmcsXG4gIHN0YXJ0V2FpdGluZ1RvRHJhZyxcbiAgc3RvcFdhaXRpbmdUb0RyYWcsXG4gIHN0YXJ0RHJhZyxcbiAgc3RvcERyYWcsXG4gIGRyYWcsXG4gIGdldFRpbWVvdXQsXG4gIHJlc2V0VGltZW91dCxcbiAgdXBkYXRlVGltZW91dCxcbiAgZ2V0VG9wT2Zmc2V0LFxuICBnZXRMZWZ0T2Zmc2V0LFxuICBnZXRTdGFydE1vdXNlVG9wLFxuICBnZXRTdGFydE1vdXNlTGVmdCxcbiAgc2V0VG9wT2Zmc2V0LFxuICBzZXRMZWZ0T2Zmc2V0LFxuICBzZXRTdGFydE1vdXNlVG9wLFxuICBzZXRTdGFydE1vdXNlTGVmdCxcbiAgY2FsbEhhbmRsZXJzLFxuICBjYWxsSGFuZGxlcnNBc3luY1xufTtcblxuZnVuY3Rpb24ga2V5RG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgeyBrZXlDb2RlIH0gPSBldmVudCxcbiAgICAgICAgZXNjYXBlS2V5ID0gKGtleUNvZGUgPT09IEVTQ0FQRV9LRVlfQ09ERSksXG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuXG4gIGlmIChlc2NhcGVLZXkpIHtcbiAgICB0aGlzLnN0b3BEcmFnKGFib3J0ZWQpO1xuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91c2VVcEhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKSxcbiAgICAgICAgYWJvcnRlZCA9IGZhbHNlO1xuXG4gIGRyYWdnaW5nID9cbiAgICB0aGlzLnN0b3BEcmFnKGFib3J0ZWQpIDpcbiAgICAgIHRoaXMuc3RvcFdhaXRpbmdUb0RyYWcoKTtcblxuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICB3aW5kb3cub2ZmKEJMVVJfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIHRoaXMpOyAgLy8vXG5cbiAgd2luZG93Lm9mZk1vdXNlVXAobW91c2VVcEhhbmRsZXIsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBtb3VzZURvd25IYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IHsgYnV0dG9uIH0gPSBldmVudDtcblxuICBpZiAoYnV0dG9uID09PSBMRUZUX01PVVNFX0JVVFRPTikge1xuICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCk7XG5cbiAgICBpZiAoIWRyYWdnaW5nKSB7XG4gICAgICBjb25zdCBtb3VzZVRvcCA9IG1vdXNlVG9wRnJvbUV2ZW50KGV2ZW50KSxcbiAgICAgICAgICAgIG1vdXNlTGVmdCA9IG1vdXNlTGVmdEZyb21FdmVudChldmVudCk7XG5cbiAgICAgIHRoaXMuc3RhcnRXYWl0aW5nVG9EcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpO1xuICAgIH1cbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gIHdpbmRvdy5vbihCTFVSX0VWRU5UX1RZUEUsIG1vdXNlVXBIYW5kbGVyLCB0aGlzKTsgLy8vXG5cbiAgd2luZG93Lm9uTW91c2VVcChtb3VzZVVwSGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIG1vdXNlTW92ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKTtcblxuICBpZiAoZHJhZ2dpbmcpIHtcbiAgICBjb25zdCBtb3VzZVRvcCA9IG1vdXNlVG9wRnJvbUV2ZW50KGV2ZW50KSxcbiAgICAgICAgICBtb3VzZUxlZnQgPSBtb3VzZUxlZnRGcm9tRXZlbnQoZXZlbnQpO1xuXG4gICAgdGhpcy5kcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpO1xuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIiA7XG5cbmltcG9ydCB7IERST1BfRVZFTlRfVFlQRSwgRFJBR19PVVRfRVZFTlRfVFlQRSwgRFJBR19PVkVSX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5jb25zdCB7IGZvckVhY2ggfSA9IGFzeW5jaHJvbm91c1V0aWxpdGllcztcblxuY29uc3QgZHJvcEVsZW1lbnQgPSBudWxsO1xuXG5PYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgZHJvcEVsZW1lbnRcbn0pO1xuXG5mdW5jdGlvbiBkcm9wKGRyYWdFbGVtZW50LCBhYm9ydGVkLCBkb25lKSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERST1BfRVZFTlRfVFlQRTtcblxuICB0aGlzLmNhbGxIYW5kbGVyc0FzeW5jKGV2ZW50VHlwZSwgZHJhZ0VsZW1lbnQsIGFib3J0ZWQsIGRvbmUpO1xufVxuXG5mdW5jdGlvbiBkcmFnT3V0KGRyYWdFbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1VUX0VWRU5UX1RZUEU7XG5cbiAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBkcmFnRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRyYWdPdmVyKGRyYWdFbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1ZFUl9FVkVOVF9UWVBFO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZHJhZ0VsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvbkRyb3AoZHJvcEhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJPUF9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJvcEhhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJvcChkcm9wSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUk9QX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcm9wSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvbkRyYWdPdXQoZHJhZ091dEhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdPdXRIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZkRyYWdPdXQoZHJhZ091dEhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdPdXRIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uRHJhZ092ZXIoZHJhZ092ZXJIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1ZFUl9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ092ZXJIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZkRyYWdPdmVyKGRyYWdPdmVySGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX09WRVJfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdPdmVySGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBlbmFibGVEcm9wKCkge1xuICBjb25zdCB7IG9uRHJvcCwgb25EcmFnT3V0LCBvbkRyYWdPdmVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGRyb3BIYW5kbGVyID0gb25Ecm9wLCAvLy9cbiAgICAgICAgZHJhZ091dEhhbmRsZXIgPSBvbkRyYWdPdXQsIC8vL1xuICAgICAgICBkcmFnT3ZlckhhbmRsZXIgPSBvbkRyYWdPdmVyOyAvLy9cblxuICBkcm9wSGFuZGxlciAmJiB0aGlzLm9uRHJvcChkcm9wSGFuZGxlcik7XG4gIGRyYWdPdXRIYW5kbGVyICYmIHRoaXMub25EcmFnT3V0KGRyYWdPdXRIYW5kbGVyKTtcbiAgZHJhZ092ZXJIYW5kbGVyICYmIHRoaXMub25EcmFnT3ZlcihkcmFnT3ZlckhhbmRsZXIpO1xuXG4gIHRoaXMub25Nb3VzZU91dChtb3VzZU91dEhhbmRsZXIsIHRoaXMpO1xuICB0aGlzLm9uTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlRHJvcCgpIHtcbiAgY29uc3QgeyBvbkRyb3AsIG9uRHJhZ091dCwgb25EcmFnT3ZlciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICBkcm9wSGFuZGxlciA9IG9uRHJvcCwgLy8vXG4gICAgICAgIGRyYWdPdXRIYW5kbGVyID0gb25EcmFnT3V0LCAvLy9cbiAgICAgICAgZHJhZ092ZXJIYW5kbGVyID0gb25EcmFnT3ZlcjsgLy8vXG5cbiAgZHJvcEhhbmRsZXIgJiYgdGhpcy5vZmZEcm9wKGRyb3BIYW5kbGVyKTtcbiAgZHJhZ091dEhhbmRsZXIgJiYgdGhpcy5vZmZEcmFnT3V0KGRyYWdPdXRIYW5kbGVyKTtcbiAgZHJhZ092ZXJIYW5kbGVyICYmIHRoaXMub2ZmRHJhZ092ZXIoZHJhZ092ZXJIYW5kbGVyKTtcblxuICB0aGlzLm9mZk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgdGhpcyk7XG4gIHRoaXMub2ZmTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVyc0FzeW5jKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGRvbmUgPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCksICAvLy9cbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGZvckVhY2goZXZlbnRMaXN0ZW5lcnMsIChldmVudExpc3RlbmVyLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgeyBoYW5kbGVyLCBlbGVtZW50OiBoYW5kbGVyRWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcywgLy8vXG4gICAgICAgICAgZG9uZSA9IG5leHQ7ICAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50LCBkb25lKTtcbiAgfSwgZG9uZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJvcCxcbiAgZHJhZ091dCxcbiAgZHJhZ092ZXIsXG4gIG9uRHJvcCxcbiAgb2ZmRHJvcCxcbiAgb25EcmFnT3V0LFxuICBvZmZEcmFnT3V0LFxuICBvbkRyYWdPdmVyLFxuICBvZmZEcmFnT3ZlcixcbiAgZW5hYmxlRHJvcCxcbiAgZGlzYWJsZURyb3AsXG4gIGNhbGxIYW5kbGVycyxcbiAgY2FsbEhhbmRsZXJzQXN5bmNcbn1cblxuZnVuY3Rpb24gbW91c2VPdXRIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IHsgZHJhZ0VsZW1lbnQgfSA9IGdsb2JhbFRoaXM7XG5cbiAgaWYgKGRyYWdFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZHJvcEVsZW1lbnQgPSBudWxsOyAvLy9cblxuICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgICAgZHJvcEVsZW1lbnRcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ091dChkcmFnRWxlbWVudCk7XG4gIH1cblxuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuZnVuY3Rpb24gbW91c2VPdmVySGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCB7IGRyYWdFbGVtZW50IH0gPSBnbG9iYWxUaGlzO1xuXG4gIGlmIChkcmFnRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGRyb3BFbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBPYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgICAgIGRyb3BFbGVtZW50XG4gICAgfSk7XG5cbiAgICB0aGlzLmRyYWdPdmVyKGRyYWdFbGVtZW50KTtcbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCBkcmFnTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvZHJhZ1wiO1xuXG5jbGFzcyBEcmFnRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICBkaWRNb3VudCgpIHtcbiAgICB0aGlzLmVuYWJsZURyYWcoKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuZGlzYWJsZURyYWcoKTtcbiAgfVxuXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcbiAgICBcIm9uRHJhZ1wiLFxuICAgIFwib25TdGFydERyYWdcIixcbiAgICBcIm9mZlN0YXJ0RHJhZ1wiXG4gIF07XG59XG5cbk9iamVjdC5hc3NpZ24oRHJhZ0VsZW1lbnQucHJvdG90eXBlLCBkcmFnTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKERyYWdFbGVtZW50KWBcblxuICAuZHJhZ2dpbmcge1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCBkcm9wTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvZHJvcFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICBkaWRNb3VudCgpIHtcbiAgICB0aGlzLmVuYWJsZURyb3AoKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuZGlzYWJsZURyb3AoKTtcbiAgfVxuXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcbiAgICBcIm9uRHJvcFwiLFxuICAgIFwib25EcmFnT3V0XCIsXG4gICAgXCJvbkRyYWdPdmVyXCJcbiAgXTtcbn1cblxuT2JqZWN0LmFzc2lnbihEcm9wRWxlbWVudC5wcm90b3R5cGUsIGRyb3BNaXhpbnMpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJhZ01peGlucyB9IGZyb20gXCIuL21peGlucy9kcmFnXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRyb3BNaXhpbnMgfSBmcm9tIFwiLi9taXhpbnMvZHJvcFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmFnRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQvZHJhZ1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcm9wRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQvZHJvcFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgU2l6ZWFibGVEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwic2l6ZWFibGVcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoU2l6ZWFibGVEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBkcmFnTWl4aW5zIH0gZnJvbSBcImVhc3ktZHJhZy1hbmQtZHJvcFwiO1xuXG5pbXBvcnQgU2l6ZWFibGVEaXYgZnJvbSBcIi4uL2Rpdi9zaXplYWJsZVwiO1xuXG5pbXBvcnQgeyByZXNldEN1cnNvciB9IGZyb20gXCIuLi9jdXJzb3JcIjtcblxuY2xhc3MgU3BsaXR0ZXJEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RvcERyYWdIYW5kbGVyID0gKGRyb3BFbGVtZW50LCBhYm9ydGVkLCBlbGVtZW50LCBkb25lKSA9PiB7XG4gICAgcmVzZXRDdXJzb3IoKTtcblxuICAgIGRvbmUoKTtcbiAgfVxuXG4gIG1vdXNlT3V0SGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHJlc2V0Q3Vyc29yKCk7XG4gIH1cblxuICBnZXRTaXplYWJsZURpdigpIHtcbiAgICBsZXQgc2l6ZWFibGVEaXY7XG5cbiAgICBjb25zdCBuZXh0U2libGluZ0VsZW1lbnQgPSB0aGlzLmdldE5leHRTaWJsaW5nRWxlbWVudCgpLFxuICAgICAgICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSB0aGlzLmdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBuZXh0U2libGluZ0VsZW1lbnRTaXplYWJsZURpdiA9IChuZXh0U2libGluZ0VsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZURpdiksXG4gICAgICAgICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2ID0gKHByZXZpb3VzU2libGluZ0VsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZURpdik7XG5cbiAgICBpZiAobmV4dFNpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYpIHtcbiAgICAgIHNpemVhYmxlRGl2ID0gbmV4dFNpYmxpbmdFbGVtZW50OyAvLy9cbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2KSB7XG4gICAgICBzaXplYWJsZURpdiA9IHByZXZpb3VzU2libGluZ0VsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzaXplYWJsZURpdjtcbiAgfVxuXG4gIGdldERpcmVjdGlvbigpIHtcbiAgICBsZXQgZGlyZWN0aW9uO1xuXG4gICAgY29uc3QgbmV4dFNpYmxpbmdFbGVtZW50ID0gdGhpcy5nZXROZXh0U2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gdGhpcy5nZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50KCksXG4gICAgICAgICAgbmV4dFNpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYgPSAobmV4dFNpYmxpbmdFbGVtZW50IGluc3RhbmNlb2YgU2l6ZWFibGVEaXYpLFxuICAgICAgICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnRTaXplYWJsZURpdiA9IChwcmV2aW91c1NpYmxpbmdFbGVtZW50IGluc3RhbmNlb2YgU2l6ZWFibGVEaXYpO1xuXG4gICAgaWYgKG5leHRTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2KSB7XG4gICAgICBkaXJlY3Rpb24gPSArMTtcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2KSB7XG4gICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0aW9uO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKTtcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5hZGRDbGFzcyhcImRpc2FibGVkXCIpO1xuICB9XG5cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaGFzQ2xhc3MoXCJkaXNhYmxlZFwiKTtcblxuICAgIHJldHVybiBkaXNhYmxlZDtcbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMuZW5hYmxlRHJhZygpO1xuXG4gICAgdGhpcy5vbkRyYWcodGhpcy5kcmFnSGFuZGxlcik7XG5cbiAgICB0aGlzLm9uU3RvcERyYWcodGhpcy5zdG9wRHJhZ0hhbmRsZXIpO1xuXG4gICAgdGhpcy5vblN0YXJ0RHJhZyh0aGlzLnN0YXJ0RHJhZ0hhbmRsZXIpO1xuXG4gICAgdGhpcy5vbk1vdXNlT3Zlcih0aGlzLm1vdXNlT3ZlckhhbmRsZXIpO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0KHRoaXMubW91c2VPdXRIYW5kbGVyKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMub2ZmTW91c2VPdXQodGhpcy5tb3VzZU91dEhhbmRsZXIpO1xuXG4gICAgdGhpcy5vZmZNb3VzZU92ZXIodGhpcy5tb3VzZU92ZXJIYW5kbGVyKTtcblxuICAgIHRoaXMub2ZmU3RhcnREcmFnKHRoaXMuc3RhcnREcmFnSGFuZGxlcik7XG5cbiAgICB0aGlzLm9mZlN0b3BEcmFnKHRoaXMuc3RvcERyYWdIYW5kbGVyKTtcblxuICAgIHRoaXMub2ZmRHJhZyh0aGlzLmRyYWdIYW5kbGVyKTtcblxuICAgIHRoaXMuZGlzYWJsZURyYWcoKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJvbkRyYWdcIixcbiAgICBcImRpc2FibGVkXCIsXG4gICAgXCJvblN0b3BEcmFnXCIsXG4gICAgXCJvblN0YXJ0RHJhZ1wiXG4gIF07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzcGxpdHRlclwiXG4gIH07XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHNwbGl0dGVyRGl2ID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMpO1xuXG4gICAgcmV0dXJuIHNwbGl0dGVyRGl2O1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oU3BsaXR0ZXJEaXYucHJvdG90eXBlLCBkcmFnTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFNwbGl0dGVyRGl2KWBcblxuICBmbGV4LXNocmluazogMDtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNwbGl0dGVyIGZyb20gXCIuLi9zcGxpdHRlclwiO1xuXG5pbXBvcnQgeyBjb2x1bW5SZXNpemVDdXJzb3IgfSBmcm9tIFwiLi4vLi4vY3Vyc29yXCI7XG5cbmNsYXNzIFZlcnRpY2FsU3BsaXR0ZXIgZXh0ZW5kcyBTcGxpdHRlciB7XG4gIG1vdXNlT3ZlckhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcbiAgICB0aGlzLnNldEN1cnNvcigpO1xuICB9XG5cbiAgc3RhcnREcmFnSGFuZGxlciA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IHNpemVhYmxlRGl2ID0gdGhpcy5nZXRTaXplYWJsZURpdigpLFxuICAgICAgICAgICAgc2l6ZWFibGVEaXZXaWR0aCA9IHNpemVhYmxlRGl2LmdldFdpZHRoKCksXG4gICAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggPSBzaXplYWJsZURpdldpZHRoOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0UHJldmlvdXNTaXplYWJsZURpdldpZHRoKHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgfVxuXG4gIGRyYWdIYW5kbGVyID0gKHJlbGF0aXZlTW91c2VUb3AsIHJlbGF0aXZlTW91c2VMZWZ0KSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCksXG4gICAgICAgICAgICBzaXplYWJsZURpdiA9IHRoaXMuZ2V0U2l6ZWFibGVEaXYoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCA9IHRoaXMuZ2V0UHJldmlvdXNTaXplYWJsZURpdldpZHRoKCksXG4gICAgICAgICAgICBzaXplYWJsZURpdldpZHRoID0gcHJldmlvdXNTaXplYWJsZURpdldpZHRoIC0gZGlyZWN0aW9uICogcmVsYXRpdmVNb3VzZUxlZnQsXG4gICAgICAgICAgICB3aWR0aCA9IHNpemVhYmxlRGl2V2lkdGg7IC8vL1xuXG4gICAgICBzaXplYWJsZURpdi5zZXRXaWR0aCh3aWR0aCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Q3Vyc29yKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb2x1bW5SZXNpemVDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2aW91c1NpemVhYmxlRGl2V2lkdGgoKSB7XG4gICAgY29uc3QgeyBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggfSA9IHRoaXMuZ2V0U3RhdGUoKTtcblxuICAgIHJldHVybiBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGg7XG4gIH1cblxuICBzZXRQcmV2aW91c1NpemVhYmxlRGl2V2lkdGgocHJldmlvdXNTaXplYWJsZURpdldpZHRoKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGhcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggPSBudWxsO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGhcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidmVydGljYWxcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVmVydGljYWxTcGxpdHRlcilgXG5cbiAgd2lkdGg6IDFyZW07XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTcGxpdHRlciBmcm9tIFwiLi4vc3BsaXR0ZXJcIjtcblxuaW1wb3J0IHsgcm93UmVzaXplQ3Vyc29yIH0gZnJvbSBcIi4uLy4uL2N1cnNvclwiO1xuXG5jbGFzcyBIb3Jpem9udGFsU3BsaXR0ZXIgZXh0ZW5kcyBTcGxpdHRlciB7XG4gIG1vdXNlT3ZlckhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcbiAgICB0aGlzLnNldEN1cnNvcigpO1xuICB9XG5cbiAgc3RhcnREcmFnSGFuZGxlciA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IHNpemVhYmxlRGl2ID0gdGhpcy5nZXRTaXplYWJsZURpdigpLFxuICAgICAgICAgICAgc2l6ZWFibGVEaXZIZWlnaHQgPSBzaXplYWJsZURpdi5nZXRIZWlnaHQoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQgPSBzaXplYWJsZURpdkhlaWdodDsgIC8vL1xuXG4gICAgICB0aGlzLnNldFByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQocHJldmlvdXNTaXplYWJsZURpdkhlaWdodCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgfVxuXG4gIGRyYWdIYW5kbGVyID0gKHJlbGF0aXZlTW91c2VUb3AsIHJlbGF0aXZlTW91c2VMZWZ0KSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCksXG4gICAgICAgICAgICBzaXplYWJsZURpdiA9IHRoaXMuZ2V0U2l6ZWFibGVEaXYoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQgPSB0aGlzLmdldFByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQoKSxcbiAgICAgICAgICAgIHNpemVhYmxlRGl2SGVpZ2h0ID0gcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCAtIGRpcmVjdGlvbiAqIHJlbGF0aXZlTW91c2VUb3AsXG4gICAgICAgICAgICBoZWlnaHQgPSBzaXplYWJsZURpdkhlaWdodDsgLy8vXG5cbiAgICAgIHNpemVhYmxlRGl2LnNldEhlaWdodChoZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHNldEN1cnNvcigpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgcm93UmVzaXplQ3Vyc29yKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodCgpIHtcbiAgICBjb25zdCB7IHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcblxuICAgIHJldHVybiBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0O1xuICB9XG5cbiAgc2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodChwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0XG4gICAgfSk7XG4gIH1cblxuICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgY29uc3QgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiaG9yaXpvbnRhbFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShIb3Jpem9udGFsU3BsaXR0ZXIpYFxuXG4gIGhlaWdodDogMXJlbTtcblxuYDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3Vyc29yIH0gZnJvbSBcIi4vY3Vyc29yXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm93RGl2IH0gZnJvbSBcIi4vZGl2L3Jvd1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3dzRGl2IH0gZnJvbSBcIi4vZGl2L3Jvd3NcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sdW1uRGl2IH0gZnJvbSBcIi4vZGl2L2NvbHVtblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2x1bW5zRGl2IH0gZnJvbSBcIi4vZGl2L2NvbHVtbnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3BsaXR0ZXJEaXYgfSBmcm9tIFwiLi9kaXYvc3BsaXR0ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2l6ZWFibGVEaXYgfSBmcm9tIFwiLi9kaXYvc2l6ZWFibGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmVydGljYWxTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlci92ZXJ0aWNhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIb3Jpem9udGFsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiLi9kaXYvc3BsaXR0ZXIvaG9yaXpvbnRhbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DVVNUT01fR1JBTU1BUl9OQU1FID0gXCJEZWZhdWx0XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVJNX1JVTEVfTkFNRSA9IFwidGVybVwiO1xuZXhwb3J0IGNvbnN0IFNUQVRFTUVOVF9SVUxFX05BTUUgPSBcInN0YXRlbWVudFwiO1xuZXhwb3J0IGNvbnN0IE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FID0gXCJtZXRhc3RhdGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVSTV9SVUxFX05BTUUsXG4gIFNUQVRFTUVOVF9SVUxFX05BTUUsXG4gIE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVFlQRV9QQVRURVJOX05BTUUgPSBcInR5cGVcIjtcbmV4cG9ydCBjb25zdCBTWU1CT0xfUEFUVEVSTl9OQU1FID0gXCJzeW1ib2xcIjtcbmV4cG9ydCBjb25zdCBPUEVSQVRPUl9QQVRURVJOX05BTUUgPSBcIm9wZXJhdG9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVFlQRV9QQVRURVJOX05BTUUsXG4gIFNZTUJPTF9QQVRURVJOX05BTUUsXG4gIE9QRVJBVE9SX1BBVFRFUk5fTkFNRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgVkVSVElDQUxfQkFSID0gXCJ8XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgVEVSTV9SVUxFX05BTUUsIFNUQVRFTUVOVF9SVUxFX05BTUUsIE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FIH0gZnJvbSBcIi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBUWVBFX1BBVFRFUk5fTkFNRSwgU1lNQk9MX1BBVFRFUk5fTkFNRSwgT1BFUkFUT1JfUEFUVEVSTl9OQU1FIH0gZnJvbSBcIi4vcGF0dGVybk5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUdyYW1tYXIge1xuICBjb25zdHJ1Y3RvcihuYW1lLCB0ZXJtQk5GLCBzdGF0ZW1lbnRCTkYsIG1ldGFzdGF0ZW1lbnRCTkYsIHR5cGVQYXR0ZXJuLCBzeW1ib2xQYXR0ZXJuLCBvcGVyYXRvclBhdHRlcm4pIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudGVybUJORiA9IHRlcm1CTkY7XG4gICAgdGhpcy5zdGF0ZW1lbnRCTkYgPSBzdGF0ZW1lbnRCTkY7XG4gICAgdGhpcy5tZXRhc3RhdGVtZW50Qk5GID0gbWV0YXN0YXRlbWVudEJORjtcbiAgICB0aGlzLnR5cGVQYXR0ZXJuID0gdHlwZVBhdHRlcm47XG4gICAgdGhpcy5zeW1ib2xQYXR0ZXJuID0gc3ltYm9sUGF0dGVybjtcbiAgICB0aGlzLm9wZXJhdG9yUGF0dGVybiA9IG9wZXJhdG9yUGF0dGVybjtcbiAgfVxuICBcbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0Qk5GKHJ1bGVOYW1lID0gbnVsbCkge1xuICAgIGxldCBibmY7XG5cbiAgICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgICBjYXNlIFRFUk1fUlVMRV9OQU1FOiBibmYgPSB0aGlzLnRlcm1CTkY7IGJyZWFrO1xuICAgICAgY2FzZSBTVEFURU1FTlRfUlVMRV9OQU1FOiBibmYgPSB0aGlzLnN0YXRlbWVudEJORjsgYnJlYWs7XG4gICAgICBjYXNlIE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FOiBibmYgPSB0aGlzLm1ldGFzdGF0ZW1lbnRCTkY7IGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lcyA9IFtcbiAgICAgICAgICAgICAgICBURVJNX1JVTEVfTkFNRSxcbiAgICAgICAgICAgICAgICBTVEFURU1FTlRfUlVMRV9OQU1FLFxuICAgICAgICAgICAgICAgIE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNvbWJpbmVkQk5GID0gcnVsZU5hbWVzLnJlZHVjZSgoY29tYmluZWRCTkYsIHJ1bGVOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgYm5mID0gdGhpcy5nZXRCTkYocnVsZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKGJuZiAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICBjb21iaW5lZEJORiA9IGAke2NvbWJpbmVkQk5GfVxuICAgICAgICAgICAgXG4ke2JuZn1gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb21iaW5lZEJORjtcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgICBibmYgPSBjb21iaW5lZEJORjsgIC8vL1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBibmY7XG4gIH1cblxuICBnZXRQYXR0ZXJuKHBhdHRlcm5OYW1lKSB7XG4gICAgbGV0IHBhdHRlcm47XG5cbiAgICBzd2l0Y2ggKHBhdHRlcm5OYW1lKSB7XG4gICAgICBjYXNlIFRZUEVfUEFUVEVSTl9OQU1FOiBwYXR0ZXJuID0gdGhpcy50eXBlUGF0dGVybjsgYnJlYWs7XG4gICAgICBjYXNlIFNZTUJPTF9QQVRURVJOX05BTUU6IHBhdHRlcm4gPSB0aGlzLnN5bWJvbFBhdHRlcm47IGJyZWFrO1xuICAgICAgY2FzZSBPUEVSQVRPUl9QQVRURVJOX05BTUU6IHBhdHRlcm4gPSB0aGlzLm9wZXJhdG9yUGF0dGVybjsgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdHRlcm47XG4gIH1cblxuICBnZXRQYXR0ZXJucygpIHtcbiAgICBjb25zdCBwYXR0ZXJucyA9IFtcbiAgICAgIHRoaXMudHlwZVBhdHRlcm4sXG4gICAgICB0aGlzLnN5bWJvbFBhdHRlcm4sXG4gICAgICB0aGlzLm9wZXJhdG9yUGF0dGVyblxuICAgIF07XG5cbiAgICByZXR1cm4gcGF0dGVybnM7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0Qk5GKHJ1bGVOYW1lLCBibmYpIHtcbiAgICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgICBjYXNlIFRFUk1fUlVMRV9OQU1FOlxuICAgICAgICB0aGlzLnRlcm1CTkYgPSBibmY7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU1RBVEVNRU5UX1JVTEVfTkFNRTpcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRCTkYgPSBibmY7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTUVUQVNUQVRFTUVOVF9SVUxFX05BTUU6XG4gICAgICAgIHRoaXMubWV0YXN0YXRlbWVudEJORiA9IGJuZjtcblxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXRQYXR0ZXJuKHBhdHRlcm5OYW1lLCBwYXR0ZXJuKSB7XG4gICAgc3dpdGNoIChwYXR0ZXJuTmFtZSkge1xuICAgICAgY2FzZSBUWVBFX1BBVFRFUk5fTkFNRTpcbiAgICAgICAgdGhpcy50eXBlUGF0dGVybiA9IHBhdHRlcm47XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU1lNQk9MX1BBVFRFUk5fTkFNRTpcbiAgICAgICAgdGhpcy5zeW1ib2xQYXR0ZXJuID0gcGF0dGVybjtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBPUEVSQVRPUl9QQVRURVJOX05BTUU6XG4gICAgICAgIHRoaXMub3BlcmF0b3JQYXR0ZXJuID0gcGF0dGVybjtcblxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXNldEJORihydWxlTmFtZSkge1xuICAgIGNvbnN0IGJuZiA9IEVNUFRZX1NUUklORztcblxuICAgIHRoaXMuc2V0Qk5GKHJ1bGVOYW1lLCBibmYpO1xuICB9XG5cbiAgcmVzZXRQYXR0ZXJuKHBhdHRlcm5OYW1lKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IEVNUFRZX1NUUklORztcblxuICAgIHRoaXMuc2V0UGF0dGVybihwYXR0ZXJuTmFtZSwgcGF0dGVybik7XG4gIH1cblxuICB1cGRhdGUocnVsZU5hbWUsIGJuZiwgcGF0dGVybk5hbWUsIHBhdHRlcm4pIHtcbiAgICB0aGlzLnNldEJORihydWxlTmFtZSwgYm5mKTtcblxuICAgIHRoaXMuc2V0UGF0dGVybihwYXR0ZXJuTmFtZSwgcGF0dGVybik7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgICB0ZXJtQk5GID0gdGhpcy50ZXJtQk5GLFxuICAgICAgICAgIHN0YXRlbWVudEJORiA9IHRoaXMuc3RhdGVtZW50Qk5GLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnRCTkYgPSB0aGlzLm1ldGFzdGF0ZW1lbnRCTkYsXG4gICAgICAgICAgdHlwZVBhdHRlcm4gPSB0aGlzLnR5cGVQYXR0ZXJuLFxuICAgICAgICAgIHN5bWJvbFBhdHRlcm4gPSB0aGlzLnN5bWJvbFBhdHRlcm4sXG4gICAgICAgICAgb3BlcmF0b3JQYXR0ZXJuID0gdGhpcy5vcGVyYXRvclBhdHRlcm4sXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0ZXJtQk5GLFxuICAgICAgICAgICAgc3RhdGVtZW50Qk5GLFxuICAgICAgICAgICAgbWV0YXN0YXRlbWVudEJORixcbiAgICAgICAgICAgIHR5cGVQYXR0ZXJuLFxuICAgICAgICAgICAgc3ltYm9sUGF0dGVybixcbiAgICAgICAgICAgIG9wZXJhdG9yUGF0dGVyblxuICAgICAgICAgIH07XG4gICAgXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbikge1xuICAgIGNvbnN0IHsgbmFtZSwgdGVybUJORiwgc3RhdGVtZW50Qk5GLCBtZXRhc3RhdGVtZW50Qk5GLCB0eXBlUGF0dGVybiwgc3ltYm9sUGF0dGVybiwgb3BlcmF0b3JQYXR0ZXJuIH0gPSBqc29uLFxuICAgICAgICAgIGN1c3RvbUdyYW1tYXIgPSBuZXcgQ3VzdG9tR3JhbW1hcihuYW1lLCB0ZXJtQk5GLCBzdGF0ZW1lbnRCTkYsIG1ldGFzdGF0ZW1lbnRCTkYsIHR5cGVQYXR0ZXJuLCBzeW1ib2xQYXR0ZXJuLCBvcGVyYXRvclBhdHRlcm4pO1xuXG4gICAgcmV0dXJuIGN1c3RvbUdyYW1tYXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5hbWUobmFtZSkge1xuICAgIGNvbnN0IHRlcm1CTkYgPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgc3RhdGVtZW50Qk5GID0gRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnRCTkYgPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgdHlwZVBhdHRlcm4gPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgc3ltYm9sUGF0dGVybiA9IEVNUFRZX1NUUklORyxcbiAgICAgICAgICBvcGVyYXRvclBhdHRlcm4gPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgY3VzdG9tR3JhbW1hciA9IG5ldyBDdXN0b21HcmFtbWFyKG5hbWUsIHRlcm1CTkYsIHN0YXRlbWVudEJORiwgbWV0YXN0YXRlbWVudEJORiwgdHlwZVBhdHRlcm4sIHN5bWJvbFBhdHRlcm4sIG9wZXJhdG9yUGF0dGVybik7XG5cbiAgICByZXR1cm4gY3VzdG9tR3JhbW1hcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTmFtZVRlcm1CTkZTdGF0ZW1lbnRCTkZNZXRhc3RhdGVtZW50Qk5GVHlwZVBhdHRlcm5TeW1ib2xQYXR0ZXJuQW5kT3BlcmF0b3JQYXR0ZXJuKG5hbWUsIHRlcm1CTkYsIHN0YXRlbWVudEJORiwgbWV0YXN0YXRlbWVudEJORiwgdHlwZVBhdHRlcm4sIHN5bWJvbFBhdHRlcm4sIG9wZXJhdG9yUGF0dGVybikge1xuICAgIGNvbnN0IGN1c3RvbUdyYW1tYXIgPSBuZXcgQ3VzdG9tR3JhbW1hcihuYW1lLCB0ZXJtQk5GLCBzdGF0ZW1lbnRCTkYsIG1ldGFzdGF0ZW1lbnRCTkYsIHR5cGVQYXR0ZXJuLCBzeW1ib2xQYXR0ZXJuLCBvcGVyYXRvclBhdHRlcm4pO1xuXG4gICAgcmV0dXJuIGN1c3RvbUdyYW1tYXI7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86XFxcXCRcXFxcJHxcXFxcJHxcXFxcXFxcXFxcXFwofFxcXFxcXFxcXFxcXCl8XFxcXFxcXFxcXFxcW3xcXFxcXFxcXFxcXFxdKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeKD86Lis/KD89XFxcXCRcXFxcJHxcXFxcJHxcXFxcXFxcXFxcXFwofFxcXFxcXFxcXFxcXCl8XFxcXFxcXFxcXFxcW3xcXFxcXFxcXFxcXFxdKXwuKylcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcblxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVYTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuO1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhUZVhMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKFRlWExleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKFRlWExleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBkZWxpbWl0ZWRUZVggfCBldmVyeXRoaW5nRWxzZSApKyA7XG4gICAgXG4gICAgXG4gICAgXG4gICAgZGVsaW1pdGVkVGVYICAgICAgICAgICAgICAgICAgICA6Oj0gICBkb2xsYXJEZWxpbWl0ZXIgaW5saW5lVGVYIGRvbGxhckRlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGRvdWJsZURvbGxhckRlbGltaXRlciBkaXNwbGF5VGVYIGRvdWJsZURvbGxhckRlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZW5pbmdCcmFja2V0RGVsaW1pdGVyIGlubGluZVRlWCBjbG9zaW5nQnJhY2tldERlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZW5pbmdTcXVhcmVCcmFja2V0RGVsaW1pdGVyIGRpc3BsYXlUZVggY2xvc2luZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgXG5cbiAgICBcbiAgICBpbmxpbmVUZVggICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFt1bmFzc2lnbmVkXSogO1xuXG4gICAgZGlzcGxheVRlWCAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbdW5hc3NpZ25lZF0qIDtcblxuXG5cbiAgICBkb2xsYXJEZWxpbWl0ZXIgICAgICAgICAgICAgICAgIDo6PSAgIFwiJFwiIDtcbiBcbiAgICBkb3VibGVEb2xsYXJEZWxpbWl0ZXIgICAgICAgICAgIDo6PSAgIFwiJCRcIiA7XG4gICAgXG5cbiAgICBcbiAgICBvcGVuaW5nQnJhY2tldERlbGltaXRlciAgICAgICAgIDo6PSAgIFwiXFxcXChcIiA7XG5cbiAgICBjbG9zaW5nQnJhY2tldERlbGltaXRlciAgICAgICAgIDo6PSAgIFwiXFxcXClcIiA7XG5cbiAgICBvcGVuaW5nU3F1YXJlQnJhY2tldERlbGltaXRlciAgIDo6PSAgIFwiXFxcXFtcIiA7XG4gICAgXG4gICAgY2xvc2luZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgICA6Oj0gICBcIlxcXFxdXCIgO1xuICAgIFxuICAgIFxuICAgIFxuICAgIGV2ZXJ5dGhpbmdFbHNlICAgICAgICAgICAgICAgICAgOjo9ICAgLiA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZVhQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhUZVhQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihUZVhQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFRlWFBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuOyAgLy8uXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKFBsYWluTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhQbGFpbkxleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKFBsYWluTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuXG4gICAgZG9jdW1lbnQgICAgICAgOjo9ICAoIGxpbmUgfCB2ZXJ0aWNhbFNwYWNlICkrIDtcblxuXG4gICAgbGluZSAgICAgICAgICAgOjo9ICBbdW5hc3NpZ25lZF0rIDtcblxuXG4gICAgdmVydGljYWxTcGFjZSAgOjo9ICA8RU5EX09GX0xJTkU+KyA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbGFpblBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKFBsYWluUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoUGxhaW5QYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFBsYWluUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZG1lTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuO1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhSZWFkbWVMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKFJlYWRtZUxleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKFJlYWRtZUxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgIDo6PSAgKCBsaW5lIHwgdmVydGljYWxTcGFjZSApKyA7XG5cblxuICAgIGxpbmUgICAgICAgICAgIDo6PSAgW3VuYXNzaWduZWRdKyA7XG5cblxuICAgIHZlcnRpY2FsU3BhY2UgIDo6PSAgPEVORF9PRl9MSU5FPisgO1xuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZG1lUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoUmVhZG1lUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoUmVhZG1lUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhSZWFkbWVQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzosfDp8XFxcXFt8XFxcXF18XFxcXHt8XFxcXH0pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLFxyXG4gICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sXHJcbiAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFKU09OTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhNZXRhSlNPTkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoTWV0YUpTT05MZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhNZXRhSlNPTkxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICAgOjo9ICAoIG1ldGFKU09OIGVycm9yKiApIHwgZXJyb3IrIDtcblxuXG4gICAgbWV0YUpTT04gICAgICAgICAgICAgICAgICA6Oj0gIFwie1wiIFxuICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcXFxcInZlcnNpb25cXFxcXCJcIiBcIjpcIiB2ZXJzaW9uIFwiLFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxcXFwicmVwb3NpdG9yeVxcXFxcIlwiIFwiOlwiIHJlcG9zaXRvcnkgXCIsXCJcbiAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxcXFwiZGVwZW5kZW5jaWVzXFxcXFwiXCIgXCI6XCIgZGVwZW5kZW5jaWVzIFxuICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ9XCIgO1xuICAgICAgXG5cbiAgICB2ZXJzaW9uICAgICAgICAgICAgICAgICAgIDo6PSAgdmVyc2lvbk51bWJlciA7XG5cblxuICAgIHJlcG9zaXRvcnkgICAgICAgICAgICAgICAgOjo9ICBbc3RyaW5nLWxpdGVyYWxdIDtcblxuXG4gICAgZGVwZW5kZW5jeSAgICAgICAgICAgICAgICA6Oj0gIG5hbWUgXCI6XCIgc2hvcnRlbmVkVmVyc2lvbk51bWJlciA7XG5cblxuICAgIGRlcGVuZGVuY2llcyAgICAgICAgICAgICAgOjo9ICBcIntcIiBcbiAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGRlcGVuZGVuY3kgKCBcIixcIiBkZXBlbmRlbmN5ICkqICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ9XCIgO1xuICAgICAgXG5cbiAgICBuYW1lICAgICAgICAgICAgICAgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cblxuICAgIHZlcnNpb25OdW1iZXIgICAgICAgICAgICAgOjo9ICAvXCIoPzowfCg/OlsxLTldXFxcXGQqKSlcXFxcLig/OjB8KD86WzEtOV1cXFxcZCopKVxcXFwuKD86MHwoPzpbMS05XVxcXFxkKikpXFxcXFwiLyA7XG4gIFxuICBcbiAgICBzaG9ydGVuZWRWZXJzaW9uTnVtYmVyICAgIDo6PSAgL1wiKD86MHwoPzpbMS05XVxcXFxkKikpXFxcXC4oPzowfCg/OlsxLTldXFxcXGQqKSlcXFxcXCIvIDtcbiAgXG4gIFxuICAgIGVycm9yICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhSlNPTlBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKE1ldGFKU09OUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoTWV0YUpTT05QYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKE1ldGFKU09OUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86LHw6Onw6fFxcXFx8LXxcXFxcfD18XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF18XFxcXC5cXFxcLlxcXFwuKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImtleXdvcmRcIjogXCJeKD86UnVsZXxBeGlvbXxUaGVvcmVtfExlbW1hfENvbmplY3R1cmV8TWV0YWxlbW1hfE1ldGF0aGVvcmVtfFByZW1pc2VzfFByZW1pc2V8Q29uY2x1c2lvbnxQcm9vZnxUaGVyZWZvcmV8U3VwcG9zZXxIZW5jZXxUaGVufFR5cGV8VmFyaWFibGV8Q29uc3RydWN0b3J8Q29tYmluYXRvcnxEZXBlbmRlbnRUeXBlfERpc2pvaW50VHlwZXxNZXRhdmFyaWFibGV8ZnJvbXxieXx1bmRlZmluZWR8ZnJlZXxub3R8aW58aXMpXFxcXGJcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJtZXRhLXR5cGVcIjogXCJeKD86U3RhdGVtZW50fENvbnRleHQpXFxcXGJcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwiXltBLVphLXpcdTAzOTEtXHUwM0E5XHUwM0IxLVx1MDNDOV8wLTldK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlcixcclxuICAgICAgICAgV2hpdGVzcGFjZVRva2VuLFxyXG4gICAgICAgICBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLFxyXG4gICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXHJcbiAgICAgICAgIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuLFxyXG4gICAgICAgICBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3JlbmNlTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAgLy8vXHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47ICAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEZsb3JlbmNlTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhGbG9yZW5jZUxleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKEZsb3JlbmNlTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBkb2N1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCB0b3BMZXZlbERlY2xhcmF0aW9uIHwgdmVydGljYWxTcGFjZSB8IGVycm9yICkrIDtcblxuXG5cbnRvcExldmVsRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICA6Oj0gICB0eXBlRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgdmFyaWFibGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBjb21iaW5hdG9yRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBkaXNqb2ludFR5cGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBkZXBlbmRlbnRUeXBlRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgcnVsZSBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGF4aW9tIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbGVtbWEgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB0aGVvcmVtIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgY29uamVjdHVyZSBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG1ldGFsZW1tYSBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cblxudmVydGljYWxTcGFjZSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIDxFTkRfT0ZfTElORT4rIDtcblxuXG5cbmVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAuIDtcblxuXG5cbnR5cGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlR5cGVcIiB0eXBlICggXCI6XCIgdHlwZSApPyA8RU5EX09GX0xJTkU+IDtcbiBcbnZhcmlhYmxlRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICA6Oj0gICBcIlZhcmlhYmxlXCIgdmFyaWFibGUgKCBcIjpcIiB0eXBlICk/IDxFTkRfT0ZfTElORT4gO1xuIFxuY29tYmluYXRvckRlY2xhcmF0aW9uICAgICAgICAgICAgICAgIDo6PSAgIFwiQ29tYmluYXRvclwiIHN0YXRlbWVudC4uLiA8RU5EX09GX0xJTkU+IDtcbiBcbmNvbnN0cnVjdG9yRGVjbGFyYXRpb24gICAgICAgICAgICAgICA6Oj0gICBcIkNvbnN0cnVjdG9yXCIgdGVybS4uLiAoIFwiOlwiIHR5cGUgKT8gPEVORF9PRl9MSU5FPiA7XG4gXG5kaXNqb2ludFR5cGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgOjo9ICAgXCJEaXNqb2ludFR5cGVcIiBkaXNqb2ludFR5cGUgXCI6XCIgdHlwZSAoIFwiLFwiIHR5cGUgKSsgPEVORF9PRl9MSU5FPiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uICAgICAgICAgICAgICA6Oj0gICBcIk1ldGF2YXJpYWJsZVwiIG1ldGF2YXJpYWJsZSBcIjpcIiBtZXRhVHlwZSA8RU5EX09GX0xJTkU+IDtcbiBcbmRlcGVuZGVudFR5cGVEZWNsYXJhdGlvbiAgICAgICAgICAgICA6Oj0gICBcIkRlcGVuZGVudFR5cGVcIiBkZXBlbmRlbnRUeXBlIFwiOlwiIHR5cGUgPEVORF9PRl9MSU5FPiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gIFxucnVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiUnVsZVwiIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCJQcmVtaXNlc1wiIDxFTkRfT0ZfTElORT4gcHJlbWlzZSBwcmVtaXNlKyApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiUHJlbWlzZVwiIDxFTkRfT0ZfTElORT4gcHJlbWlzZSApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29uY2x1c2lvblwiIDxFTkRfT0ZfTElORT4gY29uY2x1c2lvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlUHJvb2Y/ICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbnJ1bGVQcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByb29mXCIgPEVORF9PRl9MSU5FPiBydWxlRGVyaXZhdGlvbiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbnJ1bGVTdWJwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiUHJlbWlzZXNcIiA8RU5EX09GX0xJTkU+IHByZW1pc2UgcHJlbWlzZSsgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIlByZW1pc2VcIiA8RU5EX09GX0xJTkU+IHByZW1pc2UgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZVN1YkRlcml2YXRpb24gOyBcblxucnVsZURlcml2YXRpb24gICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIChcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBydWxlU3VicHJvb2YgfCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ICkrICBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVyZWZvcmVcIiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCApIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbnJ1bGVTdWJEZXJpdmF0aW9uICAgICAgICAgICAgICAgICAgICA6Oj0gICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSGVuY2VcIiA8RU5EX09GX0xJTkU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcnVsZVN1YnByb29mIHwgcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCApKyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ICkgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuXG5cbm1ldGFsZW1tYSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIk1ldGFsZW1tYVwiICggXCIoXCIgbGFiZWwgKCBcIixcIiBsYWJlbCApKiBcIilcIiApPyA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IG1ldGFTdXBwb3NpdGlvbisgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVuXCIgPEVORF9PRl9MSU5FPiBtZXRhQ29uc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YUNvbnNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhcHJvb2YgO1xuXG5tZXRhdGhlb3JlbSAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJNZXRhdGhlb3JlbVwiIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBtZXRhU3VwcG9zaXRpb24rIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gbWV0YUNvbnNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFDb25zZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXByb29mIDtcblxuXG5cbm1ldGFwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByb29mXCIgPEVORF9PRl9MSU5FPiBtZXRhRGVyaXZhdGlvbiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbm1ldGFEZXJpdmF0aW9uICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCApKyAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlcmVmb3JlXCIgPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5heGlvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJBeGlvbVwiIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbmNlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgO1xuXG5sZW1tYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJMZW1tYVwiICggXCIoXCIgbGFiZWwgKCBcIixcIiBsYWJlbCApKiBcIilcIiApPyA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IHN1cHBvc2l0aW9uK1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gY29uc2VxdWVuY2UgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb29mIDtcblxudGhlb3JlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiVGhlb3JlbVwiIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbmNlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZiA7XG5cbmNvbmplY3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIkNvbmplY3R1cmVcIiBcIihcIiBsYWJlbCAoIFwiLFwiIGxhYmVsICkqIFwiKVwiIDxFTkRfT0ZfTElORT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbmNlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZj8gO1xuXG5cblxucHJvb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiUHJvb2ZcIiA8RU5EX09GX0xJTkU+IGRlcml2YXRpb24gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbnN1YnByb29mICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IHN1cHBvc2l0aW9uKyBzdWJEZXJpdmF0aW9uIDtcblxuZGVyaXZhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIChcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzdWJwcm9vZiB8IHF1YWxpZmllZFN0YXRlbWVudCB8IHVucXVhbGlmaWVkU3RhdGVtZW50ICkrIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZXJlZm9yZVwiIDxFTkRfT0ZfTElORT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkU3RhdGVtZW50IHwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgKSA7XG5cbnN1YkRlcml2YXRpb24gICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSGVuY2VcIiA8RU5EX09GX0xJTkU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3VicHJvb2YgfCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCB1bnF1YWxpZmllZFN0YXRlbWVudCApKyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCB1bnF1YWxpZmllZFN0YXRlbWVudCApIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cblxuXG5wcmVtaXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50IDtcblxuY29uY2x1c2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCA7XG5cblxuXG5tZXRhU3VwcG9zaXRpb24gICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50IDtcblxubWV0YUNvbnNlcXVlbmNlICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCA7XG5cblxuXG5zdXBwb3NpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgO1xuXG5jb25zZXF1ZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgO1xuXG5cblxudW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ISAgICAgICAgICAgIDo6PSAgIG1ldGFzdGF0ZW1lbnQuLi4gPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG5vbnNlbnNlLi4uIDxFTkRfT0ZfTElORT4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxucXVhbGlmaWVkTWV0YXN0YXRlbWVudCEgICAgICAgICAgICAgIDo6PSAgIG1ldGFzdGF0ZW1lbnQuLi4gcXVhbGlmaWNhdGlvbiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbm9uc2Vuc2UuLi4gcXVhbGlmaWNhdGlvbiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxudW5xdWFsaWZpZWRTdGF0ZW1lbnQhICAgICAgICAgICAgICAgIDo6PSAgIHN0YXRlbWVudC4uLiA8RU5EX09GX0xJTkU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBub25zZW5zZS4uLiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbnF1YWxpZmllZFN0YXRlbWVudCEgICAgICAgICAgICAgICAgICA6Oj0gICBzdGF0ZW1lbnQuLi4gcXVhbGlmaWNhdGlvbiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbm9uc2Vuc2UuLi4gcXVhbGlmaWNhdGlvbiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuXG5xdWFsaWZpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBcImJ5XCIgfCBcImZyb21cIiApIHJlZmVyZW5jZSA7XG5cblxuXG5ub25zZW5zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBcImJ5XCIgfCBcImZyb21cIiB8IFt0eXBlXSB8IFtvcGVyYXRvcl0gfCBbc3BlY2lhbF0gfCBbcmVzZXJ2ZWRdIHwgW25hbWVdIHwgW3VuYXNzaWduZWRdICkrIDtcblxuXG5cbm1ldGFBcmd1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBzdGF0ZW1lbnQgfCBtZXRhVHlwZSA7XG5cbmFyZ3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICB0ZXJtIHwgdHlwZSA7XG5cblxuXG5kZXBlbmRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW3R5cGVdPE5PX1dISVRFU1BBQ0U+XCIoXCIgYXJndW1lbnQgXCIpXCIgO1xuXG5kaXNqb2ludFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW3R5cGVdIDtcblxubWV0YVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFttZXRhLXR5cGVdIDtcblxudHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFt0eXBlXSA7XG5cblxuXG5tZXRhdmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgYXJndW1lbnQgXCIpXCIgKT8gO1xuXG5yZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgdGVybS4uLiBcIilcIiApPyA7XG5cbmNvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbbmFtZV0gKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiB0ZXJtLi4uIFwiKVwiICk/IDtcblxubGFiZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFtuYW1lXSAoIDxOT19XSElURVNQQUNFPlwiKFwiIHRlcm0uLi4gXCIpXCIgKT8gO1xuXG52YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdIDtgO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3JlbmNlUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hckJORkxleGVyIGV4dGVuZHMgQk5GTGV4ZXIge31cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZQYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyQk5GUGFyc2VyIGV4dGVuZHMgQk5GUGFyc2VyIHt9XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXi5cIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyUGF0dGVybkxleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XG5cbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcblxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xuXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xuXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQ3VzdG9tR3JhbW1hclBhdHRlcm5MZXhlcik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQ3VzdG9tR3JhbW1hclBhdHRlcm5MZXhlciwgcnVsZXMpOyB9XG5cbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKEN1c3RvbUdyYW1tYXJQYXR0ZXJuTGV4ZXIsIGVudHJpZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICA6Oj0gIHBhdHRlcm4gKCB2ZXJ0aWNhbFNwYWNlIHwgZXJyb3IgKSogfCAoIHZlcnRpY2FsU3BhY2UgfCBlcnJvciApKyA7XG5cblxuICAgIHBhdHRlcm4gICAgICAgIDo6PSAgW3VuYXNzaWduZWRdKyA7XG5cblxuICAgIHZlcnRpY2FsU3BhY2UgIDo6PSAgPEVORF9PRl9MSU5FPisgO1xuXG5cbiAgICBlcnJvciAgICAgICAgICA6Oj0gIC4gO1xuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hclBhdHRlcm5QYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhDdXN0b21HcmFtbWFyUGF0dGVyblBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEN1c3RvbUdyYW1tYXJQYXR0ZXJuUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhDdXN0b21HcmFtbWFyUGF0dGVyblBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZVhMZXhlciB9IGZyb20gXCIuL3RlWC9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZVhQYXJzZXIgfSBmcm9tIFwiLi90ZVgvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBsYWluTGV4ZXIgfSBmcm9tIFwiLi9wbGFpbi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbGFpblBhcnNlciB9IGZyb20gXCIuL3BsYWluL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFkbWVMZXhlciB9IGZyb20gXCIuL3JlYWRtZS9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFkbWVQYXJzZXIgfSBmcm9tIFwiLi9yZWFkbWUvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1ldGFKU09OTGV4ZXIgfSBmcm9tIFwiLi9tZXRhSlNPTi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZXRhSlNPTlBhcnNlciB9IGZyb20gXCIuL21ldGFKU09OL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9yZW5jZUxleGVyIH0gZnJvbSBcIi4vZmxvcmVuY2UvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvcmVuY2VQYXJzZXIgfSBmcm9tIFwiLi9mbG9yZW5jZS9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3VzdG9tR3JhbW1hckJORkxleGVyIH0gZnJvbSBcIi4vY3VzdG9tR3JhbW1hckJORi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21HcmFtbWFyQk5GUGFyc2VyIH0gZnJvbSBcIi4vY3VzdG9tR3JhbW1hckJORi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3VzdG9tR3JhbW1hclBhdHRlcm5MZXhlciB9IGZyb20gXCIuL2N1c3RvbUdyYW1tYXJQYXR0ZXJuL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEN1c3RvbUdyYW1tYXJQYXR0ZXJuUGFyc2VyIH0gZnJvbSBcIi4vY3VzdG9tR3JhbW1hclBhdHRlcm4vcGFyc2VyXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBDdXN0b21HcmFtbWFyIGZyb20gXCIuL2N1c3RvbUdyYW1tYXJcIjtcblxuaW1wb3J0IHsgREVGQVVMVF9DVVNUT01fR1JBTU1BUl9OQU1FIH0gZnJvbSBcIi4vZ3JhbW1hck5hbWVzXCI7XG5cbmV4cG9ydCBjb25zdCB0eXBlUGF0dGVybiA9IFwiT2JqZWN0XCI7XG5cbmV4cG9ydCBjb25zdCBzeW1ib2xQYXR0ZXJuID0gXCJcIjtcblxuZXhwb3J0IGNvbnN0IG9wZXJhdG9yUGF0dGVybiA9IFwiPVwiO1xuXG5leHBvcnQgY29uc3QgdGVybUJORiA9IGB0ZXJtISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdmFyaWFibGUgO2A7XG5cbmV4cG9ydCBjb25zdCBzdGF0ZW1lbnRCTkYgPSBgc3RhdGVtZW50ISAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiKFwiIG1ldGFBcmd1bWVudCBcIilcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgYXJndW1lbnQgXCI9XCIgYXJndW1lbnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHR5cGVJbmZlcmVuY2VcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHR5cGVBc3NlcnRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG50eXBlSW5mZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgc3RhdGVtZW50IFwifC1cIiB0eXBlQXNzZXJ0aW9uIDtcblxudHlwZUFzc2VydGlvbiAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHRlcm0gXCI6XCIgdHlwZSA7YDtcblxuZXhwb3J0IGNvbnN0IG1ldGFzdGF0ZW1lbnRCTkYgPSBgbWV0YXN0YXRlbWVudCEgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiKFwiIG1ldGFzdGF0ZW1lbnQgXCIpXCIgXG4gICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHJ1bGVTdWJwcm9vZkFzc2VydGlvbiAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGNvbnRleHREZWZpbml0aW9uIFxuICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBwcm9vZkFzc2VydGlvblxuICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG1ldGF2YXJpYWJsZSBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5ydWxlU3VicHJvb2ZBc3NlcnRpb24gICAgICAgICAgICAgICAgOjo9ICAgXCJbXCIgbWV0YXN0YXRlbWVudCAoIFwiLFwiIG1ldGFzdGF0ZW1lbnQgKSogXCJdXCIgXCIuLi5cIiBtZXRhc3RhdGVtZW50IDtcblxuY29udGV4dERlZmluaXRpb24gICAgICAgICAgICAgICAgICAgIDo6PSAgIGNvbnRleHQgXCI9XCIgKCBqdWRnZW1lbnQgfCBjb250ZXh0ICkgKCBcIixcIiAoIGp1ZGdlbWVudCB8IGNvbnRleHQgKSApKiA7XG5cbnByb29mQXNzZXJ0aW9uICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBjb250ZXh0IFwifD1cIiBqdWRnZW1lbnQgO1xuIFxuanVkZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHJlZmVyZW5jZSBcIjo6XCIgbWV0YXN0YXRlbWVudCA7YDtcblxuY29uc3QgbmFtZSA9IERFRkFVTFRfQ1VTVE9NX0dSQU1NQVJfTkFNRSxcbiAgICAgIGpzb24gPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHRlcm1CTkYsXG4gICAgICAgIHN0YXRlbWVudEJORixcbiAgICAgICAgbWV0YXN0YXRlbWVudEJORixcbiAgICAgICAgdHlwZVBhdHRlcm4sXG4gICAgICAgIHN5bWJvbFBhdHRlcm4sXG4gICAgICAgIG9wZXJhdG9yUGF0dGVyblxuICAgICAgfTtcblxuY29uc3QgZGVmYXVsdEN1c3RvbUdyYW1tYXIgPSBDdXN0b21HcmFtbWFyLmZyb21KU09OKGpzb24pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0Q3VzdG9tR3JhbW1hcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcGFyc2VyVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGRlZmF1bHRDdXN0b21HcmFtbWFyIGZyb20gXCIuL2RlZmF1bHRDdXN0b21HcmFtbWFyXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORywgVkVSVElDQUxfQkFSIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBUWVBFX1BBVFRFUk5fTkFNRSwgU1lNQk9MX1BBVFRFUk5fTkFNRSwgT1BFUkFUT1JfUEFUVEVSTl9OQU1FIH0gZnJvbSBcIi4vcGF0dGVybk5hbWVzXCI7XG5cbmNvbnN0IHsgcnVsZXNGcm9tQk5GIH0gPSBwYXJzZXJVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbWJpbmVkQ3VzdG9tR3JhbW1hciB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVzLCBlbnRyaWVzKSB7XG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xuICAgIHRoaXMuZW50cmllcyA9IGVudHJpZXM7XG4gIH1cbiAgXG4gIGdldFJ1bGVzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVzO1xuICB9XG5cbiAgZ2V0RW50cmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGluY2x1ZGVEZWZhdWx0ID0gdHJ1ZSkge1xuICAgIGxldCBjdXN0b21HcmFtbWFycyA9IFtdO1xuXG4gICAgaWYgKGluY2x1ZGVEZWZhdWx0KSB7XG4gICAgICBjdXN0b21HcmFtbWFycyA9IFsgZGVmYXVsdEN1c3RvbUdyYW1tYXIsIC4uLmN1c3RvbUdyYW1tYXJzIF07IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQ3VzdG9tR3JhbW1hcnNBbmREZWZhdWx0Qk5GKGN1c3RvbUdyYW1tYXJzKSxcbiAgICAgICAgICBlbnRyaWVzID0gZW50cmllc0Zyb21DdXN0b21HcmFtbWFycyhjdXN0b21HcmFtbWFycyksXG4gICAgICAgICAgY29tYmluZWRDdXN0b21HcmFtbWFyID0gbmV3IENvbWJpbmVkQ3VzdG9tR3JhbW1hcihydWxlcywgZW50cmllcyk7XG5cbiAgICByZXR1cm4gY29tYmluZWRDdXN0b21HcmFtbWFyO1xuICB9XG5cbiAgc3RhdGljIGZyb21DdXN0b21HcmFtbWFycyhjdXN0b21HcmFtbWFycywgaW5jbHVkZURlZmF1bHQgPSB0cnVlKSB7XG4gICAgaWYgKGluY2x1ZGVEZWZhdWx0KSB7XG4gICAgICBjdXN0b21HcmFtbWFycyA9IFsgZGVmYXVsdEN1c3RvbUdyYW1tYXIsIC4uLmN1c3RvbUdyYW1tYXJzIF07IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQ3VzdG9tR3JhbW1hcnNBbmREZWZhdWx0Qk5GKGN1c3RvbUdyYW1tYXJzKSxcbiAgICAgICAgICBlbnRyaWVzID0gZW50cmllc0Zyb21DdXN0b21HcmFtbWFycyhjdXN0b21HcmFtbWFycyksXG4gICAgICAgICAgY29tYmluZWRDdXN0b21HcmFtbWFyID0gbmV3IENvbWJpbmVkQ3VzdG9tR3JhbW1hcihydWxlcywgZW50cmllcyk7XG4gICAgXG4gICAgcmV0dXJuIGNvbWJpbmVkQ3VzdG9tR3JhbW1hcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBydWxlc0Zyb21DdXN0b21HcmFtbWFyc0FuZERlZmF1bHRCTkYoY3VzdG9tR3JhbW1hcnMpIHtcbiAgY29uc3QgYm5mcyA9IGN1c3RvbUdyYW1tYXJzLm1hcCgoY3VzdG9tR3JhbW1hcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGJuZiA9IGN1c3RvbUdyYW1tYXIuZ2V0Qk5GKCk7XG5cbiAgICAgICAgICByZXR1cm4gYm5mO1xuICAgICAgICB9KSxcbiAgICAgICAgYm5mID0gYm5mcy5qb2luKEVNUFRZX1NUUklORyksXG4gICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZik7XG5cbiAgY29tYmluZVJ1bGVzKHJ1bGVzKVxuXG4gIHJldHVybiBydWxlcztcbn1cblxuZnVuY3Rpb24gZW50cmllc0Zyb21DdXN0b21HcmFtbWFycyhjdXN0b21HcmFtbWFycykge1xuICBjb25zdCBwYXR0ZXJuTmFtZXMgPSBbXG4gICAgICAgICAgVFlQRV9QQVRURVJOX05BTUUsXG4gICAgICAgICAgU1lNQk9MX1BBVFRFUk5fTkFNRSxcbiAgICAgICAgICBPUEVSQVRPUl9QQVRURVJOX05BTUVcbiAgICAgICAgXSxcbiAgICAgICAgZW50cmllcyA9IHBhdHRlcm5OYW1lcy5tYXAoKHBhdHRlcm5OYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyeUZyb21DdXN0b21HcmFtbWFycyhjdXN0b21HcmFtbWFycywgcGF0dGVybk5hbWUpO1xuXG4gICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gZW50cmllcztcbn1cblxuZnVuY3Rpb24gZW50cnlGcm9tQ3VzdG9tR3JhbW1hcnMoY3VzdG9tR3JhbW1hcnMsIHBhdHRlcm5OYW1lKSB7XG4gIGNvbnN0IHBhdHRlcm5zID0gY3VzdG9tR3JhbW1hcnMucmVkdWNlKChwYXR0ZXJucywgY3VzdG9tR3JhbW1hcikgPT4ge1xuICAgIGNvbnN0IHBhdHRlcm4gPSBjdXN0b21HcmFtbWFyLmdldFBhdHRlcm4ocGF0dGVybk5hbWUpO1xuXG4gICAgaWYgKHBhdHRlcm4pIHsgIC8vL1xuICAgICAgcGF0dGVybnMucHVzaChwYXR0ZXJuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0dGVybnM7XG4gIH0sIFtdKTtcblxuICBwYXR0ZXJucy5yZXZlcnNlKCk7XG5cbiAgY29uc3QgcGF0dGVybnNTdHJpbmcgPSBwYXR0ZXJucy5qb2luKFZFUlRJQ0FMX0JBUiksIC8vL1xuICAgICAgICBwYXR0ZXJuID0gKChwYXR0ZXJuTmFtZSA9PT0gVFlQRV9QQVRURVJOX05BTUUpIHx8IChwYXR0ZXJuTmFtZSA9PT0gU1lNQk9MX1BBVFRFUk5fTkFNRSkpP1xuICAgICAgICAgICAgICAgICAgIGBeKD86JHtwYXR0ZXJuc1N0cmluZ30pXFxcXGJgIDpcbiAgICAgICAgICAgICAgICAgICAgIGBeKD86JHtwYXR0ZXJuc1N0cmluZ30pYDtcblxuICBjb25zdCBlbnRyeSA9IHt9O1xuXG4gIGVudHJ5W3BhdHRlcm5OYW1lXSA9IHBhdHRlcm47XG5cbiAgcmV0dXJuIGVudHJ5O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lUnVsZXMocnVsZXMpIHtcbiAgbGV0IG91dGVySW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcnVsZXMubGVuZ3RoO1xuXG4gIHdoaWxlIChvdXRlckluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY29uc3Qgb3V0ZXJSdWxlID0gcnVsZXNbb3V0ZXJJbmRleF0sXG4gICAgICAgICAgb3V0ZXJSdWxlTmFtZSA9IG91dGVyUnVsZS5nZXROYW1lKCk7XG5cbiAgICBsZXQgb3V0ZXJSdWxlRGVmaW5pdGlvbnMgPSBvdXRlclJ1bGUuZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgIGxldCBpbm5lckluZGV4ID0gb3V0ZXJJbmRleCArIDE7XG5cbiAgICB3aGlsZSAoaW5uZXJJbmRleCA8IGxlbmd0aCkge1xuICAgICAgY29uc3QgaW5uZXJSdWxlID0gcnVsZXNbaW5uZXJJbmRleF0sXG4gICAgICAgICAgICBpbm5lclJ1bGVOYW1lID0gaW5uZXJSdWxlLmdldE5hbWUoKTtcblxuICAgICAgaWYgKGlubmVyUnVsZU5hbWUgPT09IG91dGVyUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgaW5uZXJSdWxlRGVmaW5pdGlvbnMgPSBpbm5lclJ1bGUuZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgICAgICBvdXRlclJ1bGVEZWZpbml0aW9ucyA9IFsgIC8vL1xuICAgICAgICAgIC4uLmlubmVyUnVsZURlZmluaXRpb25zLFxuICAgICAgICAgIC4uLm91dGVyUnVsZURlZmluaXRpb25zXG4gICAgICAgIF07XG5cbiAgICAgICAgb3V0ZXJSdWxlLnJlcGxhY2VBbGxEZWZpbml0aW9ucyguLi5vdXRlclJ1bGVEZWZpbml0aW9ucyk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbm5lckluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIHJ1bGVzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIGxlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlubmVySW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvdXRlckluZGV4Kys7XG5cbiAgICBsZW5ndGggPSBydWxlcy5sZW5ndGg7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbGV4ZXJVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5pbXBvcnQgeyBGbG9yZW5jZUxleGVyIH0gZnJvbSBcIm9jY2FtLWdyYW1tYXJzXCI7XG5cbmltcG9ydCBDb21iaW5lZEN1c3RvbUdyYW1tYXIgZnJvbSBcIi4uL2NvbWJpbmVkQ3VzdG9tR3JhbW1hclwiO1xuXG5jb25zdCB7IHJ1bGVzRnJvbUVudHJpZXMgfSA9IGxleGVyVXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvcmVuY2VMZXhlckZyb21Ob3RoaW5nKCkge1xuICBjb25zdCB7IGVudHJpZXMgfSA9IEZsb3JlbmNlTGV4ZXIsXG4gICAgICAgIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciA9IENvbWJpbmVkQ3VzdG9tR3JhbW1hci5mcm9tTm90aGluZygpLFxuICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUVudHJpZXNBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXIoZW50cmllcywgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgZmxvcmVuY2VMZXhlciA9IEZsb3JlbmNlTGV4ZXIuZnJvbVJ1bGVzKHJ1bGVzKTtcblxuICByZXR1cm4gZmxvcmVuY2VMZXhlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3JlbmNlTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyKGNvbWJpbmVkQ3VzdG9tR3JhbW1hcikge1xuICBjb25zdCB7IGVudHJpZXMgfSA9IEZsb3JlbmNlTGV4ZXIsXG4gICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tRW50cmllc0FuZENvbWJpbmVkQ3VzdG9tR3JhbW1hcihlbnRyaWVzLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICBmbG9yZW5jZUxleGVyID0gRmxvcmVuY2VMZXhlci5mcm9tUnVsZXMocnVsZXMpO1xuXG4gIHJldHVybiBmbG9yZW5jZUxleGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvcmVuY2VMZXhlckZyb21FbnRyaWVzQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyKGVudHJpZXMsIGNvbWJpbmVkQ3VzdG9tR3JhbW1hcikge1xuICBjb25zdCBydWxlcyA9IHJ1bGVzRnJvbUVudHJpZXNBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXIoZW50cmllcywgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgZmxvcmVuY2VMZXhlciA9IEZsb3JlbmNlTGV4ZXIuZnJvbVJ1bGVzKHJ1bGVzKTtcblxuICByZXR1cm4gZmxvcmVuY2VMZXhlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmbG9yZW5jZUxleGVyRnJvbU5vdGhpbmcsXG4gIGZsb3JlbmNlTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyLFxuICBmbG9yZW5jZUxleGVyRnJvbUVudHJpZXNBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXJcbn07XG5cbmZ1bmN0aW9uIHJ1bGVzRnJvbUVudHJpZXNBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXIoZW50cmllcywgY29tYmluZWRDdXN0b21HcmFtbWFyKSB7XG4gIGNvbnN0IGN1c3RvbUdyYW1tYXJFbnRyaWVzID0gY29tYmluZWRDdXN0b21HcmFtbWFyLmdldEVudHJpZXMoKTtcblxuICBlbnRyaWVzID0gWyAvLy9cbiAgICAuLi5jdXN0b21HcmFtbWFyRW50cmllcyxcbiAgICAuLi5lbnRyaWVzXG4gIF07XG5cbiAgY29uc3QgcnVsZXMgPSBydWxlc0Zyb21FbnRyaWVzKGVudHJpZXMpO1xuXG4gIHJldHVybiBydWxlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVJlZHVjZWRSdWxlTmFtZShyZWR1Y2VkUnVsZU5hbWUpIHtcbiAgY29uc3QgcnVsZU5hbWUgPSByZWR1Y2VkUnVsZU5hbWUucmVwbGFjZSgvKF9ffF8pJC9nLCBcIlwiKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlTmFtZUZyb21SZXBlYXRlZFJ1bGVOYW1lKHJlcGVhdGVkUnVsZU5hbWUpIHtcbiAgY29uc3QgcnVsZU5hbWUgPSByZXBlYXRlZFJ1bGVOYW1lLnJlcGxhY2UoL35bXn5dK358fiQvLCBcIlwiKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSkge1xuICBjb25zdCBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZSA9IGAke3J1bGVOYW1lfV9gO1xuXG4gIHJldHVybiBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSkge1xuICBjb25zdCBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBgJHtydWxlTmFtZX1+YDtcblxuICByZXR1cm4gZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSkge1xuICBjb25zdCBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lID0gYCR7cnVsZU5hbWV9X19gO1xuXG4gIHJldHVybiBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkge1xuICBjb25zdCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZSA9IGAke3J1bGVOYW1lfX4ke2xlZnRSZWN1cnNpdmVSdWxlTmFtZX1+YDtcblxuICByZXR1cm4gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lRnJvbVJlZHVjZWRSdWxlTmFtZSwgcnVsZU5hbWVGcm9tUmVwZWF0ZWRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmV3cml0dGVuTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoUmV3cml0dGVuTm9kZSk7IH1cblxuICBzdGF0aWMgZnJvbVJlZHVjZWROb2RlKHJlZHVjZWROb2RlKSB7XG4gICAgY29uc3QgcmVkdWNlZE5vZGVSdWxlTmFtZSA9IHJlZHVjZWROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgcmVkdWNlZFJ1bGVOYW1lID0gcmVkdWNlZE5vZGVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVGcm9tUmVkdWNlZFJ1bGVOYW1lKHJlZHVjZWRSdWxlTmFtZSksXG4gICAgICAgICAgY2hpbGROb2RlcyA9IHJlZHVjZWROb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlID0gbmV3IFJld3JpdHRlbk5vZGUocnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbk5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlcGVhdGVkTm9kZShyZXBlYXRlZE5vZGUpIHtcbiAgICBjb25zdCByZXBlYXRlZE5vZGVSdWxlTmFtZSA9IHJlcGVhdGVkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJlcGVhdGVkUnVsZU5hbWUgPSByZXBlYXRlZE5vZGVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVGcm9tUmVwZWF0ZWRSdWxlTmFtZShyZXBlYXRlZFJ1bGVOYW1lKSxcbiAgICAgICAgICBjaGlsZE5vZGVzID0gcmVwZWF0ZWROb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlID0gbmV3IFJld3JpdHRlbk5vZGUocnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbk5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUmV3cml0dGVuTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVkdWNlZE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJlZHVjZWROb2RlKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENsYXNzLCBydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2xhc3MsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSZWR1Y2VkTm9kZSBmcm9tIFwiLi4vcmVkdWNlZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseVJlZHVjZWROb2RlIGV4dGVuZHMgUmVkdWNlZE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gUmVkdWNlZE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEaXJlY3RseVJlZHVjZWROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBlYXRlZE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJlcGVhdGVkTm9kZSk7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENsYXNzLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVwZWF0ZWROb2RlIGZyb20gXCIuLi9yZXBlYXRlZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseVJlcGVhdGVkTm9kZSBleHRlbmRzIFJlcGVhdGVkTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBSZXBlYXRlZE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEaXJlY3RseVJlcGVhdGVkTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlZHVjZWROb2RlIGZyb20gXCIuLi9yZWR1Y2VkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGlyZWN0bHlSZWR1Y2VkTm9kZSBleHRlbmRzIFJlZHVjZWROb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIFJlZHVjZWROb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoSW5kaXJlY3RseVJlZHVjZWROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVwZWF0ZWROb2RlIGZyb20gXCIuLi9yZXBlYXRlZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRpcmVjdGx5UmVwZWF0ZWROb2RlIGV4dGVuZHMgUmVwZWF0ZWROb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIFJlcGVhdGVkTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEluZGlyZWN0bHlSZXBlYXRlZE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5leHBvcnQgY29uc3QgeyBmaXJzdCwgbGFzdCwgZmlsdGVyLCBmcm9udCwgaGVhZCwgdGFpbCwgcHVzaCwgdW5zaGlmdCwgYmFja3dhcmRzU29tZSwgYmFja3dhcmRzRmluZCwgYmFja3dhcmRzRXZlcnkgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gbGVmdERpZmZlcmVuY2UoYXJyYXlBLCBhcnJheUIpIHtcbiAgZmlsdGVyKGFycmF5QSwgKGVsZW1lbnRBKSA9PiB7XG4gICAgY29uc3QgYXJyYXlCSW5jbHVkZXNFbGVtZW50QSA9IGFycmF5Qi5pbmNsdWRlcyhlbGVtZW50QSk7XG5cbiAgICBpZiAoIWFycmF5QkluY2x1ZGVzRWxlbWVudEEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVwc2lsb25Ob2RlIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IFJld3JpdHRlbk5vZGUgZnJvbSBcIi4vbm9kZS9yZXdyaXR0ZW5cIjtcbmltcG9ydCBEaXJlY3RseVJlZHVjZWROb2RlIGZyb20gXCIuL25vZGUvcmVkdWNlZC9kaXJlY3RseVwiO1xuaW1wb3J0IERpcmVjdGx5UmVwZWF0ZWROb2RlIGZyb20gXCIuL25vZGUvcmVwZWF0ZWQvZGlyZWN0bHlcIjtcbmltcG9ydCBJbmRpcmVjdGx5UmVkdWNlZE5vZGUgZnJvbSBcIi4vbm9kZS9yZWR1Y2VkL2luZGlyZWN0bHlcIjtcbmltcG9ydCBJbmRpcmVjdGx5UmVwZWF0ZWROb2RlIGZyb20gXCIuL25vZGUvcmVwZWF0ZWQvaW5kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgbGFzdCwgZmlsdGVyLCB1bnNoaWZ0LCBiYWNrd2FyZHNTb21lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJld3JpdGVOb2Rlcyhub2RlKSB7ICAvLy9cbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZTsgLy8vXG5cbiAgcmV3cml0ZShub25UZXJtaW5hbE5vZGUpO1xuXG4gIHJlbW92ZUVwc2lsb25zKG5vblRlcm1pbmFsTm9kZSk7XG5cbiAgcmVtb3ZlSW50ZXJtZWRpYXJpZXMobm9uVGVybWluYWxOb2RlKTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZShub25UZXJtaW5hbE5vZGUpIHtcbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgcmV3cml0ZUluZGlyZWN0UmVwZXRpdGlvbihub25UZXJtaW5hbE5vZGUpO1xuXG4gIHJld3JpdGVEaXJlY3RSZXBldGl0aW9uKG5vblRlcm1pbmFsTm9kZSk7XG5cbiAgcmV3cml0ZURpcmVjdFJlZHVjdGlvbihub25UZXJtaW5hbE5vZGUpO1xuXG4gIHJld3JpdGVJbmRpcmVjdFJlZHVjdGlvbihub25UZXJtaW5hbE5vZGUpO1xuXG4gIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGU7ICAvLy9cblxuICAgICAgcmV3cml0ZShub25UZXJtaW5hbE5vZGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUVwc2lsb25zKG5vblRlcm1pbmFsTm9kZSkge1xuICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICBmaWx0ZXIoY2hpbGROb2RlcywgKGNoaWxkTm9kZSkgPT4ge1xuICAgIGNvbnN0IGNoaWxkTm9kZUVwc2lsb25Ob2RlID0gKGNoaWxkTm9kZSBpbnN0YW5jZW9mIEVwc2lsb25Ob2RlKTtcblxuICAgIGlmICghY2hpbGROb2RlRXBzaWxvbk5vZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZTsgIC8vL1xuXG4gICAgICByZW1vdmVFcHNpbG9ucyhub25UZXJtaW5hbE5vZGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUludGVybWVkaWFyaWVzKG5vblRlcm1pbmFsTm9kZSkge1xuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgc2luZ3VsYXJOb25UZXJtaW5hbE5vZGVzID0gW107XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGNoaWxkTm9kZXNMZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aDtcblxuICAgIGlmIChjaGlsZE5vZGVzTGVuZ3RoID4gMSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZVRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAoZmlyc3RDaGlsZE5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IHNpbmd1bGFyTm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7IC8vL1xuXG4gICAgc2luZ3VsYXJOb25UZXJtaW5hbE5vZGVzLnB1c2goc2luZ3VsYXJOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgbm9uVGVybWluYWxOb2RlID0gc2luZ3VsYXJOb25UZXJtaW5hbE5vZGU7IC8vL1xuICB9XG5cbiAgbm9uVGVybWluYWxOb2RlID0gbnVsbDtcblxuICBiYWNrd2FyZHNTb21lKHNpbmd1bGFyTm9uVGVybWluYWxOb2RlcywgKHNpbmd1bGFyTm9uVGVybWluYWxOb2RlKSA9PiB7XG4gICAgY29uc3Qgc2luZ3VsYXJOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IHNpbmd1bGFyTm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICBpZiAoc2luZ3VsYXJOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gcnVsZU5hbWUpIHtcbiAgICAgIG5vblRlcm1pbmFsTm9kZSA9IHNpbmd1bGFyTm9uVGVybWluYWxOb2RlOyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKG5vblRlcm1pbmFsTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHN0YXJ0ID0gMCxcbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBjaGlsZE5vZGVzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIC4uLm5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMpO1xuICB9XG5cbiAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZTsgIC8vL1xuXG4gICAgICByZW1vdmVJbnRlcm1lZGlhcmllcyhub25UZXJtaW5hbE5vZGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVEaXJlY3RSZWR1Y3Rpb24obm9uVGVybWluYWxOb2RlKSB7XG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBkaXJlY3RseVJlZHVjZWROb2RlID0gY2hpbGROb2Rlcy5maW5kKChjaGlsZE5vZGUpID0+IChjaGlsZE5vZGUgaW5zdGFuY2VvZiBEaXJlY3RseVJlZHVjZWROb2RlKSkgfHwgbnVsbDtcblxuICBpZiAoZGlyZWN0bHlSZWR1Y2VkTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKGRpcmVjdGx5UmVkdWNlZE5vZGUpLFxuICAgICAgICAgIHJlZHVjZWROb2RlID0gZGlyZWN0bHlSZWR1Y2VkTm9kZSwgIC8vL1xuICAgICAgICAgIHJld3JpdHRlbk5vZGUgPSBSZXdyaXR0ZW5Ob2RlLmZyb21SZWR1Y2VkTm9kZShyZWR1Y2VkTm9kZSksXG4gICAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIGNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgcmV3cml0dGVuTm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV3cml0ZURpcmVjdFJlcGV0aXRpb24obm9uVGVybWluYWxOb2RlKSB7XG4gIGxldCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICBjb25zdCBkaXJlY3RseVJlcGVhdGVkTm9kZXMgPSBjaGlsZE5vZGVzLmZpbHRlcigoY2hpbGROb2RlKSA9PiAoY2hpbGROb2RlIGluc3RhbmNlb2YgRGlyZWN0bHlSZXBlYXRlZE5vZGUpKSxcbiAgICAgICAgZGlyZWN0bHlSZXBlYXRlZE5vZGVzTGVuZ3RoID0gZGlyZWN0bHlSZXBlYXRlZE5vZGVzLmxlbmd0aDtcblxuICBpZiAoZGlyZWN0bHlSZXBlYXRlZE5vZGVzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhc3REaXJlY3RseVJlcGVhdGVkTm9kZSA9IGxhc3QoZGlyZWN0bHlSZXBlYXRlZE5vZGVzKSxcbiAgICAgICAgICBpbmRleCA9IGNoaWxkTm9kZXMuaW5kZXhPZihsYXN0RGlyZWN0bHlSZXBlYXRlZE5vZGUpLFxuICAgICAgICAgIHN0YXJ0ID0gMCxcbiAgICAgICAgICBkZWxldGVDb3VudCA9IGluZGV4ICsgMSxcbiAgICAgICAgICByZXBlYXRlZE5vZGUgPSBsYXN0RGlyZWN0bHlSZXBlYXRlZE5vZGUsICAvLy9cbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlID0gUmV3cml0dGVuTm9kZS5mcm9tUmVwZWF0ZWROb2RlKHJlcGVhdGVkTm9kZSksXG4gICAgICAgICAgZGVsZXRlZENoaWxkTm9kZXMgPSBjaGlsZE5vZGVzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIHJld3JpdHRlbk5vZGUpO1xuXG4gICAgbm9uVGVybWluYWxOb2RlID0gcmV3cml0dGVuTm9kZTsgIC8vL1xuXG4gICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7IC8vL1xuXG4gICAgZGVsZXRlZENoaWxkTm9kZXMucG9wKCk7XG5cbiAgICB1bnNoaWZ0KGNoaWxkTm9kZXMsIGRlbGV0ZWRDaGlsZE5vZGVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXdyaXRlSW5kaXJlY3RSZWR1Y3Rpb24obm9uVGVybWluYWxOb2RlKSB7XG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBpbmRpcmVjdGx5UmVkdWNlZE5vZGUgPSBjaGlsZE5vZGVzLmZpbmQoKGNoaWxkTm9kZSkgPT4gKGNoaWxkTm9kZSBpbnN0YW5jZW9mIEluZGlyZWN0bHlSZWR1Y2VkTm9kZSkpIHx8IG51bGw7XG5cbiAgaWYgKGluZGlyZWN0bHlSZWR1Y2VkTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKGluZGlyZWN0bHlSZWR1Y2VkTm9kZSksXG4gICAgICAgICAgcmVkdWNlZE5vZGUgPSBpbmRpcmVjdGx5UmVkdWNlZE5vZGUsICAvLy9cbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlID0gUmV3cml0dGVuTm9kZS5mcm9tUmVkdWNlZE5vZGUocmVkdWNlZE5vZGUpLFxuICAgICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBjaGlsZE5vZGVzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIHJld3JpdHRlbk5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVJbmRpcmVjdFJlcGV0aXRpb24obm9uVGVybWluYWxOb2RlKSB7XG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBpbmRpcmVjdGx5UmVwZWF0ZWROb2RlID0gY2hpbGROb2Rlcy5maW5kKChjaGlsZE5vZGUpID0+IChjaGlsZE5vZGUgaW5zdGFuY2VvZiBJbmRpcmVjdGx5UmVwZWF0ZWROb2RlKSkgfHwgbnVsbDtcblxuICBpZiAoaW5kaXJlY3RseVJlcGVhdGVkTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGluZGlyZWN0bHlSZXBlYXRlZE5vZGVDaGlsZE5vZGVzID0gaW5kaXJlY3RseVJlcGVhdGVkTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZGlyZWN0bHlSZXBlYXRlZE5vZGUgPSBpbmRpcmVjdGx5UmVwZWF0ZWROb2RlQ2hpbGROb2Rlcy5maW5kKChpbmRpcmVjdGx5UmVwZWF0ZWROb2RlQ2hpbGROb2RlKSA9PiAoaW5kaXJlY3RseVJlcGVhdGVkTm9kZUNoaWxkTm9kZSBpbnN0YW5jZW9mIERpcmVjdGx5UmVwZWF0ZWROb2RlKSkgfHwgbnVsbDtcblxuICAgIGlmIChkaXJlY3RseVJlcGVhdGVkTm9kZSAhPT0gbnVsbCkge1xuICAgICAgbGV0IGluZGV4ID0gaW5kaXJlY3RseVJlcGVhdGVkTm9kZUNoaWxkTm9kZXMuaW5kZXhPZihkaXJlY3RseVJlcGVhdGVkTm9kZSksXG4gICAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gSW5maW5pdHk7XG5cbiAgICAgIGNvbnN0IGRpcmVjdGx5UmVwZWF0ZWROb2RlcyA9IGluZGlyZWN0bHlSZXBlYXRlZE5vZGVDaGlsZE5vZGVzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICBpbmRleCA9IGNoaWxkTm9kZXMuaW5kZXhPZihpbmRpcmVjdGx5UmVwZWF0ZWROb2RlKTtcblxuICAgICAgc3RhcnQgPSBpbmRleCArIDE7XG5cbiAgICAgIGRlbGV0ZUNvdW50ID0gMDtcblxuICAgICAgY2hpbGROb2Rlcy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5kaXJlY3RseVJlcGVhdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcGVhdGVkTm9kZSA9IGluZGlyZWN0bHlSZXBlYXRlZE5vZGUsICAvLy9cbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlID0gUmV3cml0dGVuTm9kZS5mcm9tUmVwZWF0ZWROb2RlKHJlcGVhdGVkTm9kZSk7XG5cbiAgICBsZXQgaW5kZXggPSBjaGlsZE5vZGVzLmluZGV4T2YoaW5kaXJlY3RseVJlcGVhdGVkTm9kZSksXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIGNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgcmV3cml0dGVuTm9kZSk7XG5cbiAgICBzdGFydCA9IDA7XG5cbiAgICBkZWxldGVDb3VudCA9IGluZGV4OyAgLy8vXG5cbiAgICBjb25zdCBkZWxldGVDaGlsZE5vZGVzID0gY2hpbGROb2Rlcy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlQ2hpbGROb2RlcyA9IHJld3JpdHRlbk5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgdW5zaGlmdChyZXdyaXR0ZW5Ob2RlQ2hpbGROb2RlcywgZGVsZXRlQ2hpbGROb2Rlcyk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3BlcmF0aW9uIHtcbiAgaXNFcXVhbFRvKG9wZXJhdGlvbikge1xuICAgIGxldCBlcXVhbFRvID0gZmFsc2U7XG5cbiAgICBjb25zdCB7IGNvbnN0cnVjdG9yIH0gPSB0aGlzO1xuXG4gICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgICBjb25zdCBjb21wYXJlc1RvID0gdGhpcy5jb21wYXJlKG9wZXJhdGlvbik7XG5cbiAgICAgIGVxdWFsVG8gPSBjb21wYXJlc1RvOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGV4ZWN1dGUoLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICAgIGxldCByZXN1bHQ7XG5cbiAgICBjb25zdCB7IG9wZXJhdGlvbnMgfSA9IGNvbnRleHQ7XG5cbiAgICBsZXQgb3BlcmF0aW9uID0gdGhpcy5maW5kKGNvbnRleHQpO1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gbnVsbCkge1xuICAgICAgb3BlcmF0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKTtcblxuICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uLmFwcGx5KC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IG9wZXJhdGlvbi5yZXRyaWV2ZSguLi5yZW1haW5pbmdBcmd1bWVudHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmaW5kKGNvbnRleHQpIHtcbiAgICBjb25zdCB7IG9wZXJhdGlvbnMgfSA9IGNvbnRleHQsXG4gICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9ucy5maW5kKChvcGVyYXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsVG8gPSB0aGlzLmlzRXF1YWxUbyhvcGVyYXRpb24pO1xuXG4gICAgICAgICAgICBpZiAoZXF1YWxUbykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG9wZXJhdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPcGVyYXRpb24gZnJvbSBcIi4uL29wZXJhdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlT3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnJ1bGUgPSBydWxlO1xuICB9XG5cbiAgZ2V0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlO1xuICB9XG5cbiAgY29tcGFyZShydWxlT3BlcmF0aW9uKSB7XG4gICAgY29uc3QgcnVsZSA9IHJ1bGVPcGVyYXRpb24uZ2V0UnVsZSgpLFxuICAgICAgICAgIGNvbXBhcmVzVG8gPSAodGhpcy5ydWxlID09PSBydWxlKTtcblxuICAgIHJldHVybiBjb21wYXJlc1RvO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBEaXJlY3RseVJlZHVjZWROb2RlIGZyb20gXCIuLi8uLi9ub2RlL3JlZHVjZWQvZGlyZWN0bHlcIjtcblxuaW1wb3J0IHsgZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpcmVjdGx5UmVkdWNlZFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21SdWxlQW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgYWxsb3dJc29sYXRlZCkge1xuICAgIGxldCBkaXJlY3RseVJlZHVjZWRSdWxlID0gbnVsbDtcblxuICAgIGxldCBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnMuc2xpY2UoMCk7ICAvLy9cblxuICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5mb3JFYWNoKChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldERlZmluaXRpb24oKSxcbiAgICAgICAgICAgIGluZGV4ID0gZGVmaW5pdGlvbnMuaW5kZXhPZihkZWZpbml0aW9uKTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgICAgZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZpbml0aW9uc0xlbmd0aCA9IGRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChkZWZpbml0aW9uc0xlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKCFhbGxvd0lzb2xhdGVkKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbnMgb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBhcmUgaXNvbGF0ZWQgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZSA9IGRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICAgIG5hbWUgPSBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IERpcmVjdGx5UmVkdWNlZE5vZGU7ICAvLy9cblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IG5ldyBEaXJlY3RseVJlZHVjZWRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpcmVjdGx5UmVkdWNlZFJ1bGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBQYXJ0cywgcGFydFR5cGVzIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuY29uc3QgeyBSdWxlTmFtZVBhcnQsIE9wdGlvbmFsUGFydFBhcnQsIE9uZU9yTW9yZVBhcnRzUGFydCwgWmVyb09yTW9yZVBhcnRzUGFydCB9ID0gUGFydHMsXG4gICAgICB7IFJ1bGVOYW1lUGFydFR5cGUsXG4gICAgICAgIE9wdGlvbmFsUGFydFBhcnRUeXBlLFxuICAgICAgICBDaG9pY2VPZlBhcnRzUGFydFR5cGUsXG4gICAgICAgIE9uZU9yTW9yZVBhcnRzUGFydFR5cGUsXG4gICAgICAgIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlLFxuICAgICAgICBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSB9ID0gcGFydFR5cGVzO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hQYXJ0cyhwYXJ0QSwgcGFydEIpIHtcbiAgY29uc3QgcGFydEFTdHJpbmcgPSBwYXJ0QS5hc1N0cmluZygpLFxuICAgICAgICBwYXJ0QlN0cmluZyA9IHBhcnRCLmFzU3RyaW5nKCksXG4gICAgICAgIG1hdGNoZXMgPSAocGFydEFTdHJpbmcgPT09IHBhcnRCU3RyaW5nKTtcblxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFVuYXJ5KHBhcnQpIHtcbiAgbGV0IHBhcnRVbmFyeSA9IGZhbHNlO1xuXG4gIGNvbnN0IHBhcnROb25UZXJtaW5hbFBhcnQgPSBwYXJ0LmlzTm9uVGVybWluYWxQYXJ0KCk7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgICB0eXBlID0gbm9uVGVybWluYWxQYXJ0LmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSdWxlTmFtZVBhcnRUeXBlOlxuICAgICAgICBwYXJ0VW5hcnkgPSB0cnVlO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE9wdGlvbmFsUGFydFBhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBub25UZXJtaW5hbFBhcnQsIC8vL1xuICAgICAgICAgICAgICBwYXJ0ID0gb3B0aW9uYWxQYXJ0UGFydC5nZXRQYXJ0KCk7XG5cbiAgICAgICAgcGFydFVuYXJ5ID0gaXNQYXJ0VW5hcnkocGFydCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgT25lT3JNb3JlUGFydHNQYXJ0VHlwZToge1xuICAgICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBub25UZXJtaW5hbFBhcnQsICAvLy9cbiAgICAgICAgICAgICAgcGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydC5nZXRQYXJ0KCk7XG5cbiAgICAgICAgcGFydFVuYXJ5ID0gaXNQYXJ0VW5hcnkocGFydCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgWmVyb09yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5vblRlcm1pbmFsUGFydCwgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTsgIC8vL1xuXG4gICAgICAgIHBhcnRVbmFyeSA9IGlzUGFydFVuYXJ5KHBhcnQpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIENob2ljZU9mUGFydHNQYXJ0VHlwZTpcbiAgICAgIGNhc2UgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGU6XG4gICAgICAgIHBhcnRVbmFyeSA9IGZhbHNlO1xuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0VW5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcnRDb21wbGV4KHBhcnQpIHtcbiAgbGV0IHBhcnRDb21wbGV4ID0gdHJ1ZTtcblxuICBjb25zdCBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gcGFydC5pc05vblRlcm1pbmFsUGFydCgpO1xuXG4gIGlmIChwYXJ0Tm9uVGVybWluYWxQYXJ0KSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxQYXJ0ID0gcGFydCwgLy8vXG4gICAgICAgICAgdHlwZSA9IG5vblRlcm1pbmFsUGFydC5nZXRUeXBlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUnVsZU5hbWVQYXJ0VHlwZTpcbiAgICAgICAgcGFydENvbXBsZXggPSBmYWxzZTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBPcHRpb25hbFBhcnRQYXJ0VHlwZToge1xuICAgICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAvLy9cbiAgICAgICAgICAgICAgcGFydCA9IG9wdGlvbmFsUGFydFBhcnQuZ2V0UGFydCgpO1xuXG4gICAgICAgIHBhcnRDb21wbGV4ID0gaXNQYXJ0Q29tcGxleChwYXJ0KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IG5vblRlcm1pbmFsUGFydCwgIC8vL1xuICAgICAgICAgICAgICBwYXJ0ID0gb25lT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgICBwYXJ0Q29tcGxleCA9IGlzUGFydENvbXBsZXgocGFydCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgWmVyb09yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5vblRlcm1pbmFsUGFydCwgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTsgIC8vL1xuXG4gICAgICAgIHBhcnRDb21wbGV4ID0gaXNQYXJ0Q29tcGxleChwYXJ0KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBDaG9pY2VPZlBhcnRzUGFydFR5cGU6XG4gICAgICBjYXNlIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlOlxuICAgICAgICBwYXJ0Q29tcGxleCA9IHRydWU7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRDb21wbGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gIGNvbnN0IHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUpO1xuXG4gIHJldHVybiBydWxlTmFtZVBhcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCByZWN1cnNpdmVSdWxlTmFtZXMpIHtcbiAgY29uc3QgcGFydE5vblRlcm1pbmFsUGFydCA9IHBhcnQuaXNOb25UZXJtaW5hbFBhcnQoKTtcblxuICBpZiAocGFydE5vblRlcm1pbmFsUGFydCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsUGFydCA9IHBhcnQsIC8vL1xuICAgICAgICAgIHR5cGUgPSBub25UZXJtaW5hbFBhcnQuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJ1bGVOYW1lUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAgLy8vXG4gICAgICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVQYXJ0LmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUnVsZU5hbWUgPSByZWN1cnNpdmVSdWxlTmFtZXMuaW5jbHVkZXMocnVsZU5hbWUpO1xuXG4gICAgICAgIGlmICghcmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSdWxlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lID0gcnVsZU5hbWU7IC8vL1xuXG4gICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzLnB1c2gocmVjdXJzaXZlUnVsZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgT3B0aW9uYWxQYXJ0UGFydFR5cGU6IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uYWxQYXJ0UGFydCA9IG5vblRlcm1pbmFsUGFydCwgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSBvcHRpb25hbFBhcnRQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCByZWN1cnNpdmVSdWxlTmFtZXMpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIE9uZU9yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3Qgb25lT3JNb3JlUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQuZ2V0UGFydCgpO1xuXG4gICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgWmVyb09yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5vblRlcm1pbmFsUGFydCwgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTsgIC8vL1xuXG4gICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IGNob2ljZU9mUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAvLy9cbiAgICAgICAgICAgICAgcGFydHMgPSBjaG9pY2VPZlBhcnRzUGFydC5nZXRQYXJ0cygpO1xuXG4gICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcykpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBub25UZXJtaW5hbFBhcnQsICAvLy9cbiAgICAgICAgICAgICAgcGFydHMgPSBzZXF1ZW5jZU9mUGFydHNQYXJ0LmdldFBhcnRzKCk7XG5cbiAgICAgICAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgcmVjdXJzaXZlUnVsZU5hbWVzKSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RseVJlZHVjZWRQYXJ0RnJvbVBhcnQocGFydCkge1xuICBsZXQgZGlyZWN0bHlSZWR1Y2VkUGFydDtcblxuICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgdHlwZSA9IG5vblRlcm1pbmFsUGFydC5nZXRUeXBlKCk7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSdWxlTmFtZVBhcnRUeXBlOiB7XG4gICAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBub25UZXJtaW5hbFBhcnQsICAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVQYXJ0LmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBsb29rQWhlYWQgPSBydWxlTmFtZVBhcnQuaXNMb29rQWhlYWQoKSxcbiAgICAgICAgICAgIGRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lID0gZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICAgICAgZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkaXJlY3RseVJlZHVjZWRSdWxlTmFtZSwgbG9va0FoZWFkKTtcblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUGFydCA9IGRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lUGFydDsgIC8vL1xuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIE9wdGlvbmFsUGFydFBhcnRUeXBlOiB7XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAvLy9cbiAgICAgICAgICAgIHBhcnQgPSBvcHRpb25hbFBhcnRQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUGFydCA9IGRpcmVjdGx5UmVkdWNlZFBhcnRGcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29uc3QgZGlyZWN0bHlSZWR1Y2VkT3B0aW9uYWxQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KGRpcmVjdGx5UmVkdWNlZFBhcnQpO1xuXG4gICAgICBkaXJlY3RseVJlZHVjZWRQYXJ0ID0gZGlyZWN0bHlSZWR1Y2VkT3B0aW9uYWxQYXJ0UGFydDsgIC8vL1xuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIE9uZU9yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IG5vblRlcm1pbmFsUGFydCwgLy8vXG4gICAgICAgICAgICBwYXJ0ID0gb25lT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUGFydCA9IGRpcmVjdGx5UmVkdWNlZFBhcnRGcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29uc3QgZGlyZWN0bHlSZWR1Y2VkT25lT3JNb3JlUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChkaXJlY3RseVJlZHVjZWRQYXJ0KTtcblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUGFydCA9IGRpcmVjdGx5UmVkdWNlZE9uZU9yTW9yZVBhcnRzUGFydDsgIC8vL1xuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlOiB7XG4gICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAvLy9cbiAgICAgICAgICAgIHBhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUGFydCA9IGRpcmVjdGx5UmVkdWNlZFBhcnRGcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29uc3QgZGlyZWN0bHlSZWR1Y2VkWmVyb09yTW9yZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KGRpcmVjdGx5UmVkdWNlZFBhcnQpO1xuXG4gICAgICBkaXJlY3RseVJlZHVjZWRQYXJ0ID0gZGlyZWN0bHlSZWR1Y2VkWmVyb09yTW9yZVBhcnRzUGFydDsgIC8vL1xuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlyZWN0bHlSZWR1Y2VkUGFydDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKSB7XG4gIGNvbnN0IHBhcnROb25UZXJtaW5hbFBhcnQgPSBwYXJ0LmlzTm9uVGVybWluYWxQYXJ0KCk7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgICB0eXBlID0gbm9uVGVybWluYWxQYXJ0LmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSdWxlTmFtZVBhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydCwgIC8vL1xuICAgICAgICAgICAgICBydWxlTmFtZSA9IHJ1bGVOYW1lUGFydC5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSdWxlTmFtZSA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMuaW5jbHVkZXMocnVsZU5hbWUpO1xuXG4gICAgICAgIGlmICghbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUnVsZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBydWxlTmFtZTsgLy8vXG5cbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzLnB1c2gobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIE9wdGlvbmFsUGFydFBhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBub25UZXJtaW5hbFBhcnQsIC8vL1xuICAgICAgICAgICAgICBwYXJ0ID0gb3B0aW9uYWxQYXJ0UGFydC5nZXRQYXJ0KCk7XG5cbiAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIE9uZU9yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3Qgb25lT3JNb3JlUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQuZ2V0UGFydCgpO1xuXG4gICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZToge1xuICAgICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAvLy9cbiAgICAgICAgICAgICAgcGFydCA9IHplcm9Pck1vcmVQYXJ0c1BhcnQuZ2V0UGFydCgpO1xuXG4gICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBDaG9pY2VPZlBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3QgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBub25UZXJtaW5hbFBhcnQsIC8vL1xuICAgICAgICAgICAgICBwYXJ0cyA9IGNob2ljZU9mUGFydHNQYXJ0LmdldFBhcnRzKCk7XG5cbiAgICAgICAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZToge1xuICAgICAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAgLy8vXG4gICAgICAgICAgICAgIHBhcnRzID0gc2VxdWVuY2VPZlBhcnRzUGFydC5nZXRQYXJ0cygpLFxuICAgICAgICAgICAgICBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyksXG4gICAgICAgICAgICAgIHBhcnQgPSBmaXJzdFBhcnQ7IC8vL1xuXG4gICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUGFydHMgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQgfSBmcm9tIFwiLi9wYXJ0XCI7XG5cbmNvbnN0IHsgU2VxdWVuY2VPZlBhcnRzUGFydCwgWmVyb09yTW9yZVBhcnRzUGFydCB9ID0gUGFydHM7XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZVBhcnRzKHBhcnRzKSB7XG4gIHBhcnRzID0gcGFydHMubWFwKChwYXJ0KSA9PiBwYXJ0LmNsb25lKCkpOyAgLy8vXG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJlUGFydHNSZWN1cnNpdmUocGFydHMpIHtcbiAgY29uc3QgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnRzKHBhcnRzKSxcbiAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID0gcmVjdXJzaXZlUnVsZU5hbWVzLmxlbmd0aCxcbiAgICAgICAgcGFydHNSZWN1cnNpdmUgPSAocmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID4gMCk7XG5cbiAgcmV0dXJuIHBhcnRzUmVjdXJzaXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2luZ2xlUGFydEZyb21QYXJ0cyhwYXJ0cykge1xuICBsZXQgc2luZ2xlUGFydDtcblxuICBjb25zdCBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcblxuICBpZiAocGFydHNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyk7XG5cbiAgICBzaW5nbGVQYXJ0ID0gZmlyc3RQYXJ0OyAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQocGFydHMpO1xuXG4gICAgc2luZ2xlUGFydCA9IHNlcXVlbmNlT2ZQYXJ0c1BhcnQ7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHNpbmdsZVBhcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmVQYXJ0c0xlZnRSZWN1cnNpdmUocGFydHMpIHtcbiAgY29uc3QgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydHMocGFydHMpLFxuICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcy5sZW5ndGgsXG4gICAgICAgIHBhcnRzTGVmdFJlY3Vyc2l2ZSA9IChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID4gMCk7XG5cbiAgcmV0dXJuIHBhcnRzTGVmdFJlY3Vyc2l2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkUGFydEZyb21QYXJ0cyhwYXJ0cykge1xuICBjb25zdCBzaW5nbGVQYXJ0ID0gc2luZ2xlUGFydEZyb21QYXJ0cyhwYXJ0cyksXG4gICAgICAgIHBhcnQgPSBzaW5nbGVQYXJ0LFxuICAgICAgICB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCksXG4gICAgICAgIHJlcGVhdGVkUGFydCA9IHplcm9Pck1vcmVQYXJ0c1BhcnQ7ICAvLy9cblxuICByZXR1cm4gcmVwZWF0ZWRQYXJ0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnRzKHBhcnRzKSB7XG4gIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IFtdO1xuXG4gIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcykpO1xuXG4gIHJldHVybiByZWN1cnNpdmVSdWxlTmFtZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnRzKHBhcnRzKSB7XG4gIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBbXSxcbiAgICAgICAgZmlyc3RQYXJ0ID0gZmlyc3QocGFydHMpLFxuICAgICAgICBwYXJ0ID0gZmlyc3RQYXJ0OyAvLy9cblxuICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgcmV0dXJuIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNQYXJ0VW5hcnksIGlzUGFydENvbXBsZXggfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnRcIjtcbmltcG9ydCB7IGFyZVBhcnRzUmVjdXJzaXZlLCBhcmVQYXJ0c0xlZnRSZWN1cnNpdmUsIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0cywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFydHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5pdGlvblVuYXJ5KGRlZmluaXRpb24pIHtcbiAgbGV0IGRlZmluaXRpb25VbmFyeSA9IGZhbHNlO1xuXG4gIGNvbnN0IHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcblxuICBpZiAocGFydHNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyksXG4gICAgICAgICAgcGFydCA9IGZpcnN0UGFydCwgLy8vXG4gICAgICAgICAgcGFydFVuYXJ5ID0gaXNQYXJ0VW5hcnkocGFydCk7XG5cbiAgICBkZWZpbml0aW9uVW5hcnkgPSBwYXJ0VW5hcnk7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBkZWZpbml0aW9uVW5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluaXRpb25Db21wbGV4KGRlZmluaXRpb24pIHtcbiAgY29uc3QgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgIGZpcnN0UGFydCA9IGZpcnN0KHBhcnRzKSxcbiAgICAgICAgZmlyc3RQYXJ0Q29tcGxleCA9IGlzUGFydENvbXBsZXgoZmlyc3RQYXJ0KSxcbiAgICAgICAgZGVmaW5pdGlvbkNvbXBsZXggPSBmaXJzdFBhcnRDb21wbGV4OyAvLy9cblxuICByZXR1cm4gZGVmaW5pdGlvbkNvbXBsZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluaXRpb25SZWN1cnNpdmUoZGVmaW5pdGlvbikge1xuICBjb25zdCBwYXJ0cyA9IGRlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgcGFydHNSZWN1cnNpdmUgPSBhcmVQYXJ0c1JlY3Vyc2l2ZShwYXJ0cyksXG4gICAgICAgIGRlZmluaXRpb25SZWN1cnNpdmUgPSBwYXJ0c1JlY3Vyc2l2ZTsgLy8vXG5cbiAgcmV0dXJuIGRlZmluaXRpb25SZWN1cnNpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlKGRlZmluaXRpb24pIHtcbiAgY29uc3QgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgIHBhcnRzTGVmdFJlY3Vyc2l2ZSA9IGFyZVBhcnRzTGVmdFJlY3Vyc2l2ZShwYXJ0cyksXG4gICAgICAgIGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlID0gcGFydHNMZWZ0UmVjdXJzaXZlOyAvLy9cblxuICByZXR1cm4gZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gIGNvbnN0IHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXMgPSByZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydHMocGFydHMpO1xuXG4gIHJldHVybiByZWN1cnNpdmVSdWxlTmFtZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICBjb25zdCBwYXJ0cyA9IGRlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydHMocGFydHMpO1xuXG4gIHJldHVybiBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBpc0RlZmluaXRpb25SZWN1cnNpdmUsIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2RlZmluaXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVjdXJzaXZlRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcykge1xuICAgIHRoaXMucnVsZSA9IHJ1bGU7XG4gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcbiAgICB0aGlzLnJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHJlY3Vyc2l2ZVJ1bGVOYW1lcztcbiAgfVxuXG4gIGdldFJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZTtcbiAgfVxuXG4gIGdldERlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbjtcbiAgfVxuXG4gIGdldFJlY3Vyc2l2ZVJ1bGVOYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZWN1cnNpdmVSdWxlTmFtZXM7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMucnVsZS5nZXROYW1lKCk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWU7XG4gIH1cblxuICBnZXRQYXJ0cygpIHsgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbi5nZXRQYXJ0cygpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlQW5kRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uKSB7XG4gICAgbGV0IHJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvblJlY3Vyc2l2ZSA9IGlzRGVmaW5pdGlvblJlY3Vyc2l2ZShkZWZpbml0aW9uKTtcblxuICAgIGlmIChkZWZpbml0aW9uUmVjdXJzaXZlKSB7XG4gICAgICBjb25zdCByZWN1cnNpdmVSdWxlTmFtZXMgPSByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbihkZWZpbml0aW9uKTtcblxuICAgICAgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vcmVjdXJzaXZlRGVmaW5pdGlvblwiO1xuXG5pbXBvcnQgeyBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlLCByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kZWZpbml0aW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGV4dGVuZHMgUmVjdXJzaXZlRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcykge1xuICAgIHN1cGVyKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgICB0aGlzLmxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzO1xuICB9XG5cbiAgZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWVzO1xuICB9XG5cbiAgaWRFcXVhbFRvKGxMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBsTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0RGVmaW5pdGlvbigpLFxuICAgICAgICAgIGVxdWFsVG8gPSAoZGVmaW5pdGlvbiA9PT0gdGhpcy5kZWZpbml0aW9uKTtcblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlQW5kRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uKSB7XG4gICAgbGV0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlID0gaXNEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZShkZWZpbml0aW9uKTtcblxuICAgIGlmIChkZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZSkge1xuICAgICAgY29uc3QgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vcmVjdXJzaXZlRGVmaW5pdGlvbi9sZWZ0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNEZWZpbml0aW9uQ29tcGxleCwgaXNEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZSwgcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZGVmaW5pdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGV4dGVuZHMgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ge1xuICBnZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUoKSB7XG4gICAgY29uc3QgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHRoaXMuZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcygpLFxuICAgICAgICAgIGZpcnN0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gZmlyc3QobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gZmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWU7IC8vL1xuXG4gICAgcmV0dXJuIGxlZnRSZWN1cnNpdmVSdWxlTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZUFuZERlZmluaXRpb24ocnVsZSwgZGVmaW5pdGlvbikge1xuICAgIGxldCBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUgPSBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlKSB7XG4gICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pLFxuICAgICAgICAgICAgZmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBmaXJzdChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKSxcbiAgICAgICAgICAgIHJ1bGVOYW1lRmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IGZpcnN0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKTtcblxuICAgICAgaWYgKHJ1bGVOYW1lRmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbkNvbXBsZXggPSBpc0RlZmluaXRpb25Db21wbGV4KGRlZmluaXRpb24pO1xuXG4gICAgICAgIGlmIChkZWZpbml0aW9uQ29tcGxleCkge1xuICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtkZWZpbml0aW9uU3RyaW5nfScgZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7cnVsZU5hbWV9JyBydWxlIGlzIGNvbXBsZXggYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdFwiO1xuXG5pbXBvcnQgeyBsYXN0LCBmcm9udCwgZmlyc3QsIGJhY2t3YXJkc0ZpbmQsIGJhY2t3YXJkc0V2ZXJ5IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNEZWZpbml0aW9uVW5hcnksIGlzRGVmaW5pdGlvbkNvbXBsZXgsIGlzRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUsIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2RlZmluaXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGV4dGVuZHMgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIHN1cGVyKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgICB0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnM7XG4gIH1cblxuICBnZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpIHtcbiAgICBjb25zdCBsYXN0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsYXN0KHRoaXMubGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxhc3RMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSB0aGlzLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZXMoKSxcbiAgICAgICAgICBmaXJzdExlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGZpcnN0KGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGZpcnN0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lOyAvLy9cblxuICAgIHJldHVybiBsZWZ0UmVjdXJzaXZlUnVsZU5hbWU7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBkZWZpbml0aW9ucyA9IHRoaXMubGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLm1hcCgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmdldERlZmluaXRpb24oKTtcblxuICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfSk7XG5cbiAgICBkZWZpbml0aW9ucy5wdXNoKHRoaXMuZGVmaW5pdGlvbik7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZGVwdGggPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNMZW5ndGggLSAxOyAgLy8vXG5cbiAgICByZXR1cm4gZGVwdGg7XG4gIH1cblxuICBpc0xlYXN0KCkge1xuICAgIGNvbnN0IGRlcHRoID0gdGhpcy5nZXREZXB0aCgpLFxuICAgICAgICAgIGxlYXN0ID0gKGRlcHRoID09PSAwKTtcblxuICAgIHJldHVybiBsZWFzdDtcbiAgfVxuXG4gIGlzR3JlYXRlclRoYW4oaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVwdGggPSB0aGlzLmdldERlcHRoKCksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uRGVwdGggPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0RGVwdGgoKSxcbiAgICAgICAgICBncmVhdGVyVGhhbkluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IChkZXB0aCA+IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkRlcHRoKTtcblxuICAgIHJldHVybiBncmVhdGVyVGhhbkluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxuXG4gIGlzRXF1aXZhbGVudFRvKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IGRlZmluaXRpb25zID0gdGhpcy5nZXREZWZpbml0aW9ucygpLFxuICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkRlZmluaXRpb25zID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldERlZmluaXRpb25zKCksXG4gICAgICAgICAgZXF1aXZhbGVudFRvID0gY29tcGFyZURlZmluaXRpb25zKGRlZmluaXRpb25zLCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25EZWZpbml0aW9ucyk7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbnRUbztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZURlZmluaXRpb25BbmRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGxldCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZSA9IGlzRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUoZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUpIHtcbiAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBmaXJzdExlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGZpcnN0KGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpLFxuICAgICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gZmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIC8vL1xuICAgICAgICAgICAgcnVsZU5hbWVMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IGxlZnRSZWN1cnNpdmVSdWxlTmFtZSk7XG5cbiAgICAgIGlmICghcnVsZU5hbWVMZWZ0UmVjdXJzaXZlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5mcm9tUnVsZUFuZERlZmluaXRpb24ocnVsZSwgZGVmaW5pdGlvbik7XG5cbiAgICAgICAgcmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBbIC4uLnJlY3Vyc2l2ZURlZmluaXRpb25zLCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBdOyAgLy8vXG5cbiAgICAgICAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gZmluZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhyZWN1cnNpdmVEZWZpbml0aW9ucyk7XG5cbiAgICAgICAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25VbmFyeSA9IGlzRGVmaW5pdGlvblVuYXJ5KGRlZmluaXRpb24pLFxuICAgICAgICAgICAgICAgIGRlZmluaXRpb25Db21wbGV4ID0gaXNEZWZpbml0aW9uQ29tcGxleChkZWZpbml0aW9uKTtcblxuICAgICAgICAgIGlmIChkZWZpbml0aW9uVW5hcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1VuYXJ5ID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmV2ZXJ5KChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0RGVmaW5pdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uVW5hcnkxID0gaXNEZWZpbml0aW9uVW5hcnkoZGVmaW5pdGlvbik7XG5cbiAgICAgICAgICAgICAgaWYgKGRlZmluaXRpb25VbmFyeTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNVbmFyeSkge1xuICAgICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gZGVmaW5pdGlvbi5hc1N0cmluZygpO1xuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke2RlZmluaXRpb25TdHJpbmd9JyBpbmRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBhbmQgYWxsIG9mIGl0cyBpbnRlcm1lZGlhdGUgZGVmaW5pdGlvbnMgYXJlIHVuYXJ5IGFuZCB0aGVyZWZvcmUgaXQgY2Fubm90IGJlIHJld3JpdHRlbi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGVmaW5pdGlvbkNvbXBsZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke2RlZmluaXRpb25TdHJpbmd9JyBpbmRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBpcyBjb21wbGV4IGFuZCB0aGVyZWZvcmUgaXQgY2Fubm90IGJlIHJld3JpdHRlbi5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuZm9yRWFjaCgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgICAgICAgICBkZWZpbml0aW9uQ29tcGxleCA9IGlzRGVmaW5pdGlvbkNvbXBsZXgoZGVmaW5pdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uQ29tcGxleCkge1xuICAgICAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGluZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7cnVsZU5hbWV9JyBydWxlIGlzIGNvbXBsZXggYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBuZXcgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbURlZmluaXRpb25BbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKSB7XG4gICAgY29uc3QgbGFzdExlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbGFzdChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc0Zyb250ID0gZnJvbnQobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgIGNvbnN0IHJ1bGUgPSBsYXN0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpO1xuXG4gICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zRnJvbnQ7ICAvLy9cblxuICAgIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbmV3IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7ICAvLy9cblxuICAgIHJldHVybiBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVEZWZpbml0aW9uQW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbmV3IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7ICAvLy9cblxuICAgIHJldHVybiBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGFyZURlZmluaXRpb25zKGRlZmluaXRpb25zQSwgZGVmaW5pdGlvbnNCKSB7XG4gIGxldCBlcXVhbFRvID0gZmFsc2U7XG5cbiAgY29uc3QgZGVmaW5pdGlvbnNBTGVuZ3RoID0gZGVmaW5pdGlvbnNBLmxlbmd0aCxcbiAgICAgICAgZGVmaW5pdGlvbnNCTGVuZ3RoID0gZGVmaW5pdGlvbnNCLmxlbmd0aDtcblxuICBpZiAoZGVmaW5pdGlvbnNBTGVuZ3RoID09PSBkZWZpbml0aW9uc0JMZW5ndGgpIHtcbiAgICBjb25zdCBmaXJzdERlZmluaXRpb25CID0gZmlyc3QoZGVmaW5pdGlvbnNCKSxcbiAgICAgICAgICBvZmZzZXQgPSBkZWZpbml0aW9uc0EuaW5kZXhPZihmaXJzdERlZmluaXRpb25CKTtcblxuICAgIGlmIChvZmZzZXQgPiAtMSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gZGVmaW5pdGlvbnNBTGVuZ3RoOyAgLy8vXG5cbiAgICAgIGVxdWFsVG8gPSBkZWZpbml0aW9uc0EuZXZlcnkoKGRlZmluaXRpb25BLCBpbmRleCkgPT4ge1xuICAgICAgICBpbmRleCA9IChsZW5ndGggKyBpbmRleCAtIG9mZnNldCkgJSBsZW5ndGg7XG5cbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbkIgPSBkZWZpbml0aW9uc0JbaW5kZXhdO1xuXG4gICAgICAgIGlmIChkZWZpbml0aW9uQSA9PT0gZGVmaW5pdGlvbkIpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVxdWFsVG87XG59XG5cbmZ1bmN0aW9uIGZpbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpIHtcbiAgY29uc3QgbGFzdExlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbGFzdChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpLFxuICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGFzdExlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZXMoKSxcbiAgICAgICAgZmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBmaXJzdChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKSxcbiAgICAgICAgbExlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGZpcnN0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gYmFja3dhcmRzRmluZChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgICAgIGlmIChydWxlTmFtZSA9PT0gbExlZnRSZWN1cnNpdmVSdWxlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIHJldHVybiBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbn1cblxuZnVuY3Rpb24gbWF0Y2hMZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICBjb25zdCBydWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMubWFwKChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgICAgIHJldHVybiBydWxlTmFtZTtcbiAgICAgICAgfSksXG4gICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVzLnNoaWZ0KCk7XG5cbiAgcnVsZU5hbWVzLnB1c2gocnVsZU5hbWUpO1xuXG4gIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNNYXRjaCA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5ldmVyeSgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZXNbaW5kZXhdLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUnVsZU5hbWUgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzLmluY2x1ZGVzKHJ1bGVOYW1lKTtcblxuICAgIGlmIChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc01hdGNoO1xufVxuXG5mdW5jdGlvbiBmaW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJlY3Vyc2l2ZURlZmluaXRpb25zKSB7XG4gIGxldCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNGcm9tUmVjdXJzaXZlRGVmaW5pdGlvbnMocmVjdXJzaXZlRGVmaW5pdGlvbnMpO1xuXG4gIGlmIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgIT09IG51bGwpIHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGZpbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpO1xuXG4gICAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICB0cnVuY2F0ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgICAgY29uc3QgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc01hdGNoID0gbWF0Y2hMZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7XG5cbiAgICAgIGlmIChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzTWF0Y2gpIHtcbiAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zO1xufVxuXG5mdW5jdGlvbiB0cnVuY2F0ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gIGNvbnN0IGluZGV4ID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmluZGV4T2YobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pLFxuICAgICAgc3RhcnQgPSAwLFxuICAgICAgZGVsZXRlQ291bnQgPSBpbmRleDsgIC8vL1xuXG4gIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbn1cblxuZnVuY3Rpb24gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zRnJvbVJlY3Vyc2l2ZURlZmluaXRpb25zKHJlY3Vyc2l2ZURlZmluaXRpb25zKSB7XG4gIGxldCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBbXTtcblxuICBiYWNrd2FyZHNFdmVyeShyZWN1cnNpdmVEZWZpbml0aW9ucywgKHJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICBjb25zdCByZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSAocmVjdXJzaXZlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gcmVjdXJzaXZlRGVmaW5pdGlvbjsgIC8vL1xuXG4gICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMudW5zaGlmdChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zTGVuZ3RoID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmxlbmd0aDtcblxuICBpZiAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zTGVuZ3RoIDwgMikge1xuICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vcmVjdXJzaXZlRGVmaW5pdGlvbi9sZWZ0L2RpcmVjdGx5XCI7XG5pbXBvcnQgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuLi9yZWN1cnNpdmVEZWZpbml0aW9uL2xlZnQvaW5kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBwdXNoLCBsZWZ0RGlmZmVyZW5jZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKGFkZGVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSA9IGNvbnRleHQ7XG5cbiAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLnB1c2goYWRkZWRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMoYWRkZWRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSA9IGNvbnRleHQ7XG5cbiAgcHVzaChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIGFkZGVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgY29udGV4dCkge1xuICBsZXQgeyBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSA9IGNvbnRleHQ7XG5cbiAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmZpbHRlcigobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHsgIC8vL1xuICAgIGlmIChydWxlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNSdWxlID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpO1xuXG4gICAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1J1bGUgPT09IHJ1bGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhyZW1vdmVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zIH0gPSBjb250ZXh0O1xuXG4gIGxlZnREaWZmZXJlbmNlKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgcmVtb3ZlZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihydWxlLCBjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICBjb250ZXh0ID0gcnVsZTsgLy8vXG4gICAgcnVsZSA9IG51bGw7XG4gIH1cblxuICBjb25zdCB7IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9ID0gY29udGV4dCxcbiAgICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5maW5kKChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuXG4gICAgICAgICAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgICAgICAgICAgaWYgKHJ1bGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgIC8vL1xuICAgICAgICAgICAgICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKTtcblxuICAgICAgICAgICAgaWYgKHJ1bGUgPT09IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25SdWxlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICByZXR1cm4gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zIH0gPSBjb250ZXh0LFxuICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuZmlsdGVyKChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gaW5zdGFuY2VvZiBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgICAgICBpZiAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25EaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgICAgICAgaWYgKHJ1bGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgIC8vL1xuICAgICAgICAgICAgICBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1J1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKTtcblxuICAgICAgICAgIGlmIChkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1J1bGUgPT09IHJ1bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgcmV0dXJuIGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnRleHQgPSBjYWxsYmFjaztcbiAgICBjYWxsYmFjayA9IChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHRydWVcbiAgfVxuXG4gIGNvbnN0IHsgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zIH0gPSBjb250ZXh0LFxuICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmZpbHRlcigobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG5cbiAgICAgICAgICBpZiAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICAgICAgICAgIGlmIChydWxlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgIC8vL1xuICAgICAgICAgICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCk7XG5cbiAgICAgICAgICAgIGlmIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25SdWxlID09PSBydWxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2FsbGJhY2soaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXRyaWV2ZUdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKGNvbnRleHQpIHtcbiAgbGV0IGdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbnVsbDtcblxuICBjb25zdCB7IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9ID0gY29udGV4dDtcblxuICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuZm9yRWFjaCgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG5cbiAgICBpZiAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uOyAgLy8vXG5cbiAgICAgIGlmIChncmVhdGVzdEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICBncmVhdGVzdEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjsgLy8vXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25HcmVhdGVyVGhhbkdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmlzR3JlYXRlclRoYW4oZ3JlYXRlc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuXG4gICAgICAgIGlmIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25HcmVhdGVyVGhhbkdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgICAgICAgZ3JlYXRlc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247IC8vL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZ3JlYXRlc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9vcGVyYXRpb24vcnVsZVwiO1xuaW1wb3J0IERpcmVjdGx5UmVkdWNlZFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGUvcmVkdWNlZC9kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBmaW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbiBleHRlbmRzIFJ1bGVPcGVyYXRpb24ge1xuICBhcHBseShkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBhbGxvd0lzb2xhdGVkLCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyBydWxlTWFwIH0gPSBjb250ZXh0LFxuICAgICAgICAgIHJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBmaW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQpLFxuICAgICAgICAgIGRpcmVjdGx5UmVkdWNlZFJ1bGUgPSBEaXJlY3RseVJlZHVjZWRSdWxlLmZyb21SdWxlQW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgYWxsb3dJc29sYXRlZCk7XG5cbiAgICBpZiAoZGlyZWN0bHlSZWR1Y2VkUnVsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWUgPSBkaXJlY3RseVJlZHVjZWRSdWxlLmdldE5hbWUoKTtcblxuICAgICAgcnVsZU1hcFtkaXJlY3RseVJlZHVjZWRSdWxlTmFtZV0gPSBkaXJlY3RseVJlZHVjZWRSdWxlO1xuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3RseVJlZHVjZWRSdWxlO1xuICB9XG5cbiAgcmV0cmlldmUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgYWxsb3dJc29sYXRlZCwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgcnVsZU1hcCB9ID0gY29udGV4dCxcbiAgICAgICAgICBydWxlID0gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZSA9IGRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlID0gcnVsZU1hcFtkaXJlY3RseVJlZHVjZWRSdWxlTmFtZV0gfHwgbnVsbDtcblxuICAgIHJldHVybiBkaXJlY3RseVJlZHVjZWRSdWxlO1xuICB9XG5cbiAgc3RhdGljIGV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgYWxsb3dJc29sYXRlZCwgY29udGV4dCkge1xuICAgIGNvbnN0IHJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlT3BlcmF0aW9uID0gbmV3IERpcmVjdGx5UmVkdWNlZFJ1bGVPcGVyYXRpb24ocnVsZSksXG4gICAgICAgICAgZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IGRpcmVjdGx5UmVkdWNlZFJ1bGVPcGVyYXRpb24uZXhlY3V0ZShkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBhbGxvd0lzb2xhdGVkLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBkaXJlY3RseVJlZHVjZWRSdWxlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSwgRGVmaW5pdGlvbiB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBEaXJlY3RseVJlcGVhdGVkTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9yZXBlYXRlZC9kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBtYXRjaFBhcnRzIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9wYXJ0XCI7XG5pbXBvcnQgeyBjbG9uZVBhcnRzIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9wYXJ0c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHRhaWwgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc0RlZmluaXRpb25VbmFyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseVJlcGVhdGVkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbVJ1bGVBbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBsZXQgZGVmaW5pdGlvbnMgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5yZWR1Y2UoKGRlZmluaXRpb25zLCBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgICBkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbiA9IGRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgICBpZiAoIWRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICAgIGRlZmluaXRpb25zLnB1c2goZGVmaW5pdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBmaXJzdERlZmluaXRpb24gPSBmaXJzdChkZWZpbml0aW9ucyksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IGZpcnN0RGVmaW5pdGlvbiwgLy8vXG4gICAgICAgICAgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgICAgZmlyc3RQYXJ0ID0gZmlyc3QocGFydHMpLFxuICAgICAgICAgIHByZXZpb3VzRmlyc3RQYXJ0ID0gZmlyc3RQYXJ0OyAgLy8vXG5cbiAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25zLm1hcCgoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgbGV0IHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpO1xuXG4gICAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyksXG4gICAgICAgICAgICBwYXJ0c1RhaWwgPSB0YWlsKHBhcnRzKTtcblxuICAgICAgY29uc3QgbWF0Y2hlcyA9IG1hdGNoUGFydHMoZmlyc3RQYXJ0LCBwcmV2aW91c0ZpcnN0UGFydCksXG4gICAgICAgICAgICBkZWZpbml0aW9uVW5hcnkgPSBpc0RlZmluaXRpb25VbmFyeShkZWZpbml0aW9uKTtcblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBkb2VzIG5vdCBtYXRjaCBvbmUgb2YgaXRzIHNpYmxpbmcgZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbnMgYW5kIHRoZXJlZm9yZSB0aGUgcnVsZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmaW5pdGlvblVuYXJ5KSB7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBpcyB1bmFyeSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSByZXdyaXR0ZW4uYCk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzID0gcGFydHNUYWlsOyAgLy8vXG5cbiAgICAgIHBhcnRzID0gY2xvbmVQYXJ0cyhwYXJ0cyk7ICAvLy9cblxuICAgICAgZGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uKHBhcnRzKTtcblxuICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfSk7XG5cbiAgICBjb25zdCBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICAgIG5hbWUgPSBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IERpcmVjdGx5UmVwZWF0ZWROb2RlLCAgLy8vXG4gICAgICAgICAgZGlyZWN0bHlSZXBlYXRlZFJ1bGUgPSBuZXcgRGlyZWN0bHlSZXBlYXRlZFJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBkaXJlY3RseVJlcGVhdGVkUnVsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9vcGVyYXRpb24vcnVsZVwiO1xuaW1wb3J0IERpcmVjdGx5UmVwZWF0ZWRSdWxlIGZyb20gXCIuLi8uLi9ydWxlL3JlcGVhdGVkL2RpcmVjdGx5XCI7XG5cbmltcG9ydCB7IGZpbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbiBleHRlbmRzIFJ1bGVPcGVyYXRpb24ge1xuICBhcHBseShkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyBydWxlTWFwIH0gPSBjb250ZXh0LFxuICAgICAgICAgIHJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGZpbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBjb250ZXh0KSxcbiAgICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZSA9IERpcmVjdGx5UmVwZWF0ZWRSdWxlLmZyb21SdWxlQW5kRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpO1xuXG4gICAgaWYgKGRpcmVjdGx5UmVwZWF0ZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBkaXJlY3RseVJlcGVhdGVkUnVsZS5nZXROYW1lKCk7XG5cbiAgICAgIHJ1bGVNYXBbZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lXSA9IGRpcmVjdGx5UmVwZWF0ZWRSdWxlO1xuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3RseVJlcGVhdGVkUnVsZTtcbiAgfVxuXG4gIHJldHJpZXZlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJ1bGVNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgICAgcnVsZSA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZSA9IHJ1bGVNYXBbZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lXSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRpcmVjdGx5UmVwZWF0ZWRSdWxlO1xuICB9XG5cbiAgc3RhdGljIGV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IHJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbiA9IG5ldyBEaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbihydWxlKSxcbiAgICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZSA9IGRpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uLmV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZGlyZWN0bHlSZXBlYXRlZFJ1bGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCIuLi9vcGVyYXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbk9wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGUsIGRlZmluaXRpb24pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5ydWxlID0gcnVsZTtcbiAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuICB9XG5cbiAgZ2V0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlO1xuICB9XG5cbiAgZ2V0RGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uO1xuICB9XG5cbiAgY29tcGFyZShkZWZpbml0aW9uT3BlcmF0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25PcGVyYXRpb24uZ2V0RGVmaW5pdGlvbigpLFxuICAgICAgICAgIGNvbXBhcmVzVG8gPSAodGhpcy5kZWZpbml0aW9uID09PSBkZWZpbml0aW9uKTtcblxuICAgIHJldHVybiBjb21wYXJlc1RvO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUGFydHMsIERlZmluaXRpb24gfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgeyBjbG9uZVBhcnRzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJ0c1wiO1xuaW1wb3J0IHsgZmlyc3QsIGhlYWQsIHRhaWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBydWxlTmFtZVBhcnRGcm9tUnVsZU5hbWUsIGRpcmVjdGx5UmVkdWNlZFBhcnRGcm9tUGFydCB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFydFwiO1xuaW1wb3J0IHsgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lLCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuY29uc3QgeyBaZXJvT3JNb3JlUGFydHNQYXJ0IH0gPSBQYXJ0cztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwbGFjZW1lbnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGlzUHJlc2VudChydWxlKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5hc1N0cmluZygpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gcnVsZS5nZXREZWZpbml0aW9ucygpLFxuICAgICAgICAgIHJlcGxhY2VtZW50RGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucy5maWx0ZXIoKGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25SZXBsYWNlbWVudERlZmluaXRpb24gPSAoZGVmaW5pdGlvbiBpbnN0YW5jZW9mIFJlcGxhY2VtZW50RGVmaW5pdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uUmVwbGFjZW1lbnREZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHByZXNlbnQgPSByZXBsYWNlbWVudERlZmluaXRpb25zLnNvbWUoKHJlcGxhY2VtZW50RGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnREZWZpbml0aW9uU3RyaW5nID0gcmVwbGFjZW1lbnREZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudERlZmluaXRpb25TdHJpbmcgPT09IHN0cmluZykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBwcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgcnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lUGFydCA9IHJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZShsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0ID0gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lKTtcblxuICAgIGxldCBwYXJ0cyA9IFtcbiAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZVBhcnQsXG4gICAgICBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnRcbiAgICBdO1xuXG4gICAgcGFydHMgPSBjbG9uZVBhcnRzKHBhcnRzKTsgIC8vL1xuXG4gICAgbGV0IHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IG5ldyBSZXBsYWNlbWVudERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgY29uc3QgcHJlc2VudCA9IHJlcGxhY2VtZW50RGVmaW5pdGlvbi5pc1ByZXNlbnQocnVsZSk7XG5cbiAgICBpZiAocHJlc2VudCkge1xuICAgICAgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnREZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkFuZEluZGlyZWN0bHlSZWR1Y2VkUnVsZShsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseVJlZHVjZWRSdWxlKSB7XG4gICAgbGV0IHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgICBpZiAoaW5kaXJlY3RseVJlZHVjZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlZHVjZWRSdWxlLmdldE5hbWUoKSxcbiAgICAgICAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUGFydHMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0c1RhaWwgPSB0YWlsKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUGFydHMpLFxuICAgICAgICAgICAgcmVkdWNlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgcmVkdWNlZFJ1bGVOYW1lUGFydCA9IHJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZShyZWR1Y2VkUnVsZU5hbWUpO1xuXG4gICAgICBsZXQgcGFydHMgPSBbXG4gICAgICAgIHJlZHVjZWRSdWxlTmFtZVBhcnQsXG4gICAgICAgIC4uLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUGFydHNUYWlsXG4gICAgICBdO1xuXG4gICAgICBwYXJ0cyA9IGNsb25lUGFydHMocGFydHMpOyAgLy8vXG5cbiAgICAgIHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IG5ldyBSZXBsYWNlbWVudERlZmluaXRpb24ocGFydHMpO1xuICAgIH1cblxuICAgIHJldHVybiByZXBsYWNlbWVudERlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbURpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25BbmREaXJlY3RseVJlZHVjZWRSdWxlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGRpcmVjdGx5UmVkdWNlZFJ1bGUpIHtcbiAgICBsZXQgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gbnVsbDtcblxuICAgIGlmIChkaXJlY3RseVJlZHVjZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBydWxlTmFtZSA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0cyA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgICAgIGZpcnN0RGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblBhcnRzID0gZmlyc3QoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblBhcnRzKSxcbiAgICAgICAgICAgIHBhcnQgPSBmaXJzdERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0cywgLy8vXG4gICAgICAgICAgICBkaXJlY3RseVJlZHVjZWRQYXJ0ID0gZGlyZWN0bHlSZWR1Y2VkUGFydEZyb21QYXJ0KHBhcnQpLFxuICAgICAgICAgICAgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICAgIGRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnQgPSBydWxlTmFtZVBhcnRGcm9tUnVsZU5hbWUoZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lKSxcbiAgICAgICAgICAgIHplcm9Pck1vcmVEaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0UGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KGRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnQpO1xuXG4gICAgICBsZXQgcGFydHMgPSBbXG4gICAgICAgIGRpcmVjdGx5UmVkdWNlZFBhcnQsXG4gICAgICAgIHplcm9Pck1vcmVEaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgXTtcblxuICAgICAgcGFydHMgPSBjbG9uZVBhcnRzKHBhcnRzKTsgIC8vL1xuXG4gICAgICByZXBsYWNlbWVudERlZmluaXRpb24gPSBuZXcgUmVwbGFjZW1lbnREZWZpbml0aW9uKHBhcnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnREZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25BbmREaXJlY3RseVJlcGVhdGVkUnVsZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGRpcmVjdGx5UmVwZWF0ZWRSdWxlKSB7XG4gICAgbGV0IHBhcnRzO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gZGlyZWN0bHlSZXBlYXRlZFJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIGRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnQgPSBydWxlTmFtZVBhcnRGcm9tUnVsZU5hbWUoZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlRGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQoZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydCk7ICAvLy9cblxuICAgIHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpO1xuXG4gICAgcGFydHMgPSBbIC8vL1xuICAgICAgLi4ucGFydHMsXG4gICAgICB6ZXJvT3JNb3JlRGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgXTtcblxuICAgIHBhcnRzID0gY2xvbmVQYXJ0cyhwYXJ0cyk7ICAvLy9cblxuICAgIGNvbnN0IHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IG5ldyBSZXBsYWNlbWVudERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50RGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uQW5kSW5kaXJlY3RseVJlcGVhdGVkUnVsZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUpIHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0cyA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0ID0gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblBhcnRzVGFpbCA9IHRhaWwobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0cyksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUGFydHMgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0c0hlYWQgPSBoZWFkKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblBhcnRzKTtcblxuICAgIGxldCBwYXJ0cyA9IFtcbiAgICAgIC4uLmluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblBhcnRzSGVhZCxcbiAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydCxcbiAgICAgIC4uLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUGFydHNUYWlsXG4gICAgXTtcblxuICAgIHBhcnRzID0gY2xvbmVQYXJ0cyhwYXJ0cyk7ICAvLy9cblxuICAgIGNvbnN0IHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IG5ldyBSZXBsYWNlbWVudERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50RGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9vcGVyYXRpb24vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJlcGxhY2VtZW50RGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9yZXBsYWNlbWVudFwiO1xuXG5pbXBvcnQgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9yZWN1cnNpdmVEZWZpbml0aW9uL2xlZnQvaW5kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBmaW5kSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbk9wZXJhdGlvbiB7XG4gIGFwcGx5KGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGRpcmVjdGx5UmVwZWF0ZWRSdWxlLCBkaXJlY3RseVJlZHVjZWRSdWxlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcnVsZSA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpO1xuXG4gICAgbGV0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBmaW5kSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBjb250ZXh0KTtcblxuICAgIHJ1bGUucmVtb3ZlQWxsRGVmaW5pdGlvbnMoKTtcblxuICAgIGNvbnN0IHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IFJlcGxhY2VtZW50RGVmaW5pdGlvbi5mcm9tRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkFuZERpcmVjdGx5UmVkdWNlZFJ1bGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgZGlyZWN0bHlSZWR1Y2VkUnVsZSk7XG5cbiAgICBpZiAocmVwbGFjZW1lbnREZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gcmVwbGFjZW1lbnREZWZpbml0aW9uOyAvLy9cblxuICAgICAgcnVsZS5hZGREZWZpbml0aW9uKGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLm1hcCgoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7ICAvLy9cbiAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICAgIHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IFJlcGxhY2VtZW50RGVmaW5pdGlvbi5mcm9tSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uQW5kRGlyZWN0bHlSZXBlYXRlZFJ1bGUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBkaXJlY3RseVJlcGVhdGVkUnVsZSksXG4gICAgICAgICAgICBkZWZpbml0aW9uID0gcmVwbGFjZW1lbnREZWZpbml0aW9uOyAvLy9cblxuICAgICAgcnVsZS5hZGREZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbVJ1bGVEZWZpbml0aW9uQW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7XG5cbiAgICAgIHJldHVybiBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucztcbiAgfVxuXG4gIHJldHJpZXZlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGRpcmVjdGx5UmVwZWF0ZWRSdWxlLCBkaXJlY3RseVJlZHVjZWRSdWxlLCBjb250ZXh0KSB7XG4gICAgLy8vXG4gIH1cblxuICBzdGF0aWMgZXhlY3V0ZShkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBkaXJlY3RseVJlcGVhdGVkUnVsZSwgZGlyZWN0bHlSZWR1Y2VkUnVsZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbiA9IG5ldyBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uKHJ1bGUsIGRlZmluaXRpb24pLFxuICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uLmV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgZGlyZWN0bHlSZXBlYXRlZFJ1bGUsIGRpcmVjdGx5UmVkdWNlZFJ1bGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnM7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vcnVsZS9kaXJlY3RseVJlZHVjZWRcIjtcbmltcG9ydCBEaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vcnVsZS9kaXJlY3RseVJlcGVhdGVkXCI7XG5pbXBvcnQgRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vZGVmaW5pdGlvbi9kaXJlY3RseUxlZnRSZWN1cnNpdmVcIjtcblxuaW1wb3J0IHsgcmVtb3ZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLFxuICAgICAgICAgZmluZERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sXG4gICAgICAgICBmaW5kRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbGltaW5hdGVEaXJlY3RMZWZ0UmVjdXJzaW9uKGNvbnRleHQpIHtcbiAgbGV0IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBmaW5kRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihjb250ZXh0KTtcblxuICB3aGlsZSAoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiAhPT0gbnVsbCkge1xuICAgIHJld3JpdGVEaXJlY3RMZWZ0UmVjdXJzaW9uKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpO1xuXG4gICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGZpbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKGNvbnRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVEaXJlY3RMZWZ0UmVjdXJzaW9uKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgYWxsb3dJc29sYXRlZCA9IGZhbHNlLFxuICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlID0gRGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbi5leGVjdXRlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGFsbG93SXNvbGF0ZWQsIGNvbnRleHQpLFxuICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZSA9IERpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uLmV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCk7XG5cbiAgRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbi5leGVjdXRlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGRpcmVjdGx5UmVwZWF0ZWRSdWxlLCBkaXJlY3RseVJlZHVjZWRSdWxlLCBjb250ZXh0KTtcblxuICBjb25zdCBydWxlID0gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgIGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gZmluZERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQpLFxuICAgICAgICByZW1vdmVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnM7IC8vL1xuXG4gIHJlbW92ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhyZW1vdmVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBjb250ZXh0KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBJbmRpcmVjdGx5UmVkdWNlZE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvcmVkdWNlZC9pbmRpcmVjdGx5XCI7XG5cbmltcG9ydCB7IGluZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGlyZWN0bHlSZWR1Y2VkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbVJ1bGVBbmRJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpIHtcbiAgICBsZXQgaW5kaXJlY3RseVJlZHVjZWRSdWxlID0gbnVsbDtcblxuICAgIGxldCBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnMuc2xpY2UoMCk7ICAvLy9cblxuICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuZm9yRWFjaCgoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldERlZmluaXRpb24oKSxcbiAgICAgICAgICAgIGluZGV4ID0gZGVmaW5pdGlvbnMuaW5kZXhPZihkZWZpbml0aW9uKTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgICAgZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZpbml0aW9uc0xlbmd0aCA9IGRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChkZWZpbml0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgICBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSksXG4gICAgICAgICAgICBuYW1lID0gaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IEluZGlyZWN0bHlSZWR1Y2VkTm9kZTsgIC8vL1xuXG4gICAgICBpbmRpcmVjdGx5UmVkdWNlZFJ1bGUgPSBuZXcgSW5kaXJlY3RseVJlZHVjZWRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGlyZWN0bHlSZWR1Y2VkUnVsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9vcGVyYXRpb24vcnVsZVwiO1xuaW1wb3J0IEluZGlyZWN0bHlSZWR1Y2VkUnVsZSBmcm9tIFwiLi4vLi4vcnVsZS9yZWR1Y2VkL2luZGlyZWN0bHlcIjtcblxuaW1wb3J0IHsgaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcbmltcG9ydCB7IGZpbmRJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbiBleHRlbmRzIFJ1bGVPcGVyYXRpb24ge1xuICBhcHBseShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJ1bGVNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgICAgcnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGZpbmRJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IEluZGlyZWN0bHlSZWR1Y2VkUnVsZS5mcm9tUnVsZUFuZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7XG5cbiAgICBpZiAoaW5kaXJlY3RseVJlZHVjZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlZHVjZWRSdWxlLmdldE5hbWUoKTtcblxuICAgICAgcnVsZU1hcFtpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lXSA9IGluZGlyZWN0bHlSZWR1Y2VkUnVsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaXJlY3RseVJlZHVjZWRSdWxlO1xuICB9XG5cbiAgcmV0cmlldmUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyBydWxlTWFwIH0gPSBjb250ZXh0LFxuICAgICAgICAgIHJ1bGUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZSA9IGluZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IHJ1bGVNYXBbaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZV0gfHwgbnVsbDtcblxuICAgIHJldHVybiBpbmRpcmVjdGx5UmVkdWNlZFJ1bGU7XG4gIH1cblxuICBzdGF0aWMgZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVPcGVyYXRpb24gPSBuZXcgSW5kaXJlY3RseVJlZHVjZWRSdWxlT3BlcmF0aW9uKHJ1bGUpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IGluZGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbi5leGVjdXRlKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaW5kaXJlY3RseVJlZHVjZWRSdWxlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSwgUGFydHMsIERlZmluaXRpb24gfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgSW5kaXJlY3RseVJlcGVhdGVkTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9yZXBlYXRlZC9pbmRpcmVjdGx5XCI7XG5cbmltcG9ydCB7IG1hdGNoUGFydHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3BhcnRcIjtcbmltcG9ydCB7IGNsb25lUGFydHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3BhcnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgdGFpbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5jb25zdCB7IEVwc2lsb25QYXJ0IH0gPSBQYXJ0cztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5kaXJlY3RseVJlcGVhdGVkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbVJ1bGVMZWZ0UmVjdXJzaXZlUnVsZU5hbWVBbmRJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGNvbnN0IGZpcnN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gZmlyc3QoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gZmlyc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247IC8vL1xuXG4gICAgbGV0IGRlZmluaXRpb25zID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5yZWR1Y2UoKGRlZmluaXRpb25zLCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0RGVmaW5pdGlvbigpLFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSBkZWZpbml0aW9ucy5pbmNsdWRlcyhkZWZpbml0aW9uKTtcblxuICAgICAgaWYgKCFkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbikge1xuICAgICAgICBkZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgZmlyc3REZWZpbml0aW9uID0gZmlyc3QoZGVmaW5pdGlvbnMpLFxuICAgICAgICAgIGRlZmluaXRpb24gPSBmaXJzdERlZmluaXRpb24sIC8vL1xuICAgICAgICAgIHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICAgIGZpcnN0UGFydCA9IGZpcnN0KHBhcnRzKSxcbiAgICAgICAgICBwcmV2aW91c0ZpcnN0UGFydCA9IGZpcnN0UGFydDsgIC8vL1xuXG4gICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucy5yZWR1Y2UoKGRlZmluaXRpb25zLCBkZWZpbml0aW9uKSA9PiB7XG4gICAgICBsZXQgcGFydHMgID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpO1xuXG4gICAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyksXG4gICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2hQYXJ0cyhmaXJzdFBhcnQsIHByZXZpb3VzRmlyc3RQYXJ0KTtcblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgIGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGluZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7cnVsZU5hbWV9JyBydWxlIGRvZXMgbm90IG1hdGNoIG9uZSBvZiBpdHMgc2libGluZyBpbmRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb25zIGFuZCB0aGVyZWZvcmUgdGhlIHJ1bGUgY2Fubm90IGJlIHJld3JpdHRlbi5gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFydHNMZW5ndGggPSBwYXJ0cy5sZW5ndGg7XG5cbiAgICAgIGlmIChwYXJ0c0xlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgcGFydHNUYWlsID0gdGFpbChwYXJ0cyk7XG5cbiAgICAgICAgcGFydHMgPSBwYXJ0c1RhaWw7ICAvLy9cblxuICAgICAgICBwYXJ0cyA9IGNsb25lUGFydHMocGFydHMpOyAgLy8vXG5cbiAgICAgICAgZGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uKHBhcnRzKTtcblxuICAgICAgICBkZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSBkZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoZGVmaW5pdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gbmV3IEVwc2lsb25QYXJ0KCksXG4gICAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgICAgZXBzaWxvblBhcnRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgICBkZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVOYW1lID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZShydWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSxcbiAgICAgICAgICBuYW1lID0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBJbmRpcmVjdGx5UmVwZWF0ZWROb2RlLCAgLy8vXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZSA9IG5ldyBJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gaW5kaXJlY3RseVJlcGVhdGVkUnVsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9vcGVyYXRpb24vcnVsZVwiO1xuaW1wb3J0IEluZGlyZWN0bHlSZXBlYXRlZFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGUvcmVwZWF0ZWQvaW5kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBmaW5kSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGlyZWN0bHlSZXBlYXRlZFJ1bGVPcGVyYXRpb24gZXh0ZW5kcyBSdWxlT3BlcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSB7XG4gICAgc3VwZXIocnVsZSk7XG5cbiAgICB0aGlzLmxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZTtcbiAgfVxuXG4gIGdldExlZnRSZWN1cnNpdmVSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWU7XG4gIH1cblxuICBhcHBseShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJ1bGVNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgICAgcnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZSgpLFxuICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBmaW5kSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCAoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCk7XG5cbiAgICAgICAgICAgIGlmIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPT09IGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBjb250ZXh0KSxcbiAgICAgICAgICBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlID0gSW5kaXJlY3RseVJlcGVhdGVkUnVsZS5mcm9tUnVsZUxlZnRSZWN1cnNpdmVSdWxlTmFtZUFuZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lLCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgIGlmIChpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZSA9IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgICBydWxlTWFwW2luZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lXSA9IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGU7XG4gIH1cblxuICByZXRyaWV2ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJ1bGVNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgICAgcnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZShydWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSxcbiAgICAgICAgICBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlID0gcnVsZU1hcFtpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZV0gfHwgbnVsbDtcblxuICAgIHJldHVybiBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlO1xuICB9XG5cbiAgY29tcGFyZShpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uKSB7XG4gICAgY29uc3QgcnVsZSA9IHRoaXMuZ2V0UnVsZSgpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVPcGVyYXRpb25SdWxlID0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbkxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVPcGVyYXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgY29tcGFyZXNUbyA9ICgocnVsZSA9PT0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvblJ1bGUpICYmICh0aGlzLmxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9PT0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbkxlZnRSZWN1cnNpdmVSdWxlTmFtZSkpO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG87XG4gIH1cblxuICBzdGF0aWMgZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbiA9IG5ldyBJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uKHJ1bGUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZSA9IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVPcGVyYXRpb24uZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbk9wZXJhdGlvbiBmcm9tIFwiLi4vLi4vb3BlcmF0aW9uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSZXBsYWNlbWVudERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcmVwbGFjZW1lbnRcIjtcblxuaW1wb3J0IERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdC9kaXJlY3RseVwiO1xuaW1wb3J0IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vcmVjdXJzaXZlRGVmaW5pdGlvbi9sZWZ0L2luZGlyZWN0bHlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uT3BlcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZSwgZGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lLCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgIHN1cGVyKHJ1bGUsIGRlZmluaXRpb24pO1xuXG4gICAgdGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWU7XG4gICAgdGhpcy5sZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnRSZWN1cnNpdmVSdWxlTmFtZTtcbiAgfVxuXG4gIGdldExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgYXBwbHkoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlLCBpbmRpcmVjdGx5UmVkdWNlZFJ1bGUsIGNvbnRleHQpIHtcbiAgICBsZXQgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKTtcblxuICAgIGNvbnN0IHJ1bGUgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCk7XG5cbiAgICBsZXQgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gUmVwbGFjZW1lbnREZWZpbml0aW9uLmZyb21MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkFuZEluZGlyZWN0bHlSZWR1Y2VkUnVsZShsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseVJlZHVjZWRSdWxlKTtcblxuICAgIGlmIChyZXBsYWNlbWVudERlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSByZXBsYWNlbWVudERlZmluaXRpb247IC8vL1xuXG4gICAgICBydWxlLmFkZERlZmluaXRpb24oZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgbGV0IGRlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCk7XG5cbiAgICBjb25zdCBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbiA9IGRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gUmVwbGFjZW1lbnREZWZpbml0aW9uLmZyb21JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25BbmRJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseVJlcGVhdGVkUnVsZSk7XG5cbiAgICBjb25zdCByZXBsYWNlZERlZmluaXRpb24gPSBkZWZpbml0aW9uOyAgLy8vXG5cbiAgICBkZWZpbml0aW9uID0gcmVwbGFjZW1lbnREZWZpbml0aW9uOyAvLy9cblxuICAgIGNvbnN0IGxlYXN0ID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmlzTGVhc3QoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKCk7XG5cbiAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlYXN0ID8gLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbVJ1bGVBbmREZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbURlZmluaXRpb25BbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgIGRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uID9cbiAgICAgIHJ1bGUucmVwbGFjZURlZmluaXRpb24ocmVwbGFjZWREZWZpbml0aW9uLCByZXBsYWNlbWVudERlZmluaXRpb24pIDpcbiAgICAgICAgcnVsZS5hZGREZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgcmV0dXJuIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgcmV0cmlldmUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlLCBpbmRpcmVjdGx5UmVkdWNlZFJ1bGUsIGNvbnRleHQpIHtcbiAgICAvLy9cbiAgfVxuXG4gIGNvbXBhcmUobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24pIHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbi5nZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uLmdldExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKCksXG4gICAgICAgICAgY29tcGFyZXNUbyA9ICgodGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPT09IGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkgJiYgKHRoaXMubGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPT09IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUbztcbiAgfVxuXG4gIHN0YXRpYyBleGVjdXRlKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseVJlcGVhdGVkUnVsZSwgaW5kaXJlY3RseVJlZHVjZWRSdWxlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZSgpO1xuXG4gICAgbGV0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKCk7XG5cbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbiA9IG5ldyBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbihydWxlLCBkZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24uZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUsIGluZGlyZWN0bHlSZWR1Y2VkUnVsZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbk9wZXJhdGlvbiBmcm9tIFwiLi4vLi4vb3BlcmF0aW9uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSZXBsYWNlbWVudERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcmVwbGFjZW1lbnRcIjtcblxuaW1wb3J0IHsgZmluZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbk9wZXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGUsIGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICBzdXBlcihydWxlLCBkZWZpbml0aW9uKTtcblxuICAgIHRoaXMubGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lO1xuICAgIHRoaXMubGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxuXG4gIGdldExlZnRSZWN1cnNpdmVSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWU7XG4gIH1cblxuICBnZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxuXG4gIGFwcGx5KGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IHJ1bGUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBmaW5kSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCAoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID09PSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgJiYgKGxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9PT0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBjb250ZXh0KSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMubWFwKChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0RGVmaW5pdGlvbigpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICB9KTtcblxuICAgIHJ1bGUucmVtb3ZlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpO1xuXG4gICAgY29uc3QgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gUmVwbGFjZW1lbnREZWZpbml0aW9uLmZyb21JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgIGlmIChyZXBsYWNlbWVudERlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSByZXBsYWNlbWVudERlZmluaXRpb247IC8vL1xuXG4gICAgICBydWxlLmFkZERlZmluaXRpb24oZGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmV0cmlldmUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gICAgLy8vXG4gIH1cblxuICBjb21wYXJlKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbikge1xuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmdldFJ1bGUoKSxcbiAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb25SdWxlID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKSxcbiAgICAgICAgICBjb21wYXJlc1RvID0gKChydWxlID09PSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb25SdWxlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID09PSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUpJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID09PSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikpO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG87XG4gIH1cblxuICBzdGF0aWMgZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldERlZmluaXRpb24oKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKSxcbiAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24gPSBuZXcgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uKHJ1bGUsIGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuXG4gICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uLmV4ZWN1dGUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEaXJlY3RseVJlZHVjZWRSdWxlT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9ydWxlL2RpcmVjdGx5UmVkdWNlZFwiO1xuaW1wb3J0IERpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9ydWxlL2RpcmVjdGx5UmVwZWF0ZWRcIjtcbmltcG9ydCBJbmRpcmVjdGx5UmVkdWNlZFJ1bGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL3J1bGUvaW5kaXJlY3RseVJlZHVjZWRcIjtcbmltcG9ydCBJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9ydWxlL2luZGlyZWN0bHlSZXBlYXRlZFwiO1xuaW1wb3J0IExlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmVcIjtcbmltcG9ydCBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9kZWZpbml0aW9uL2RpcmVjdGx5TGVmdFJlY3Vyc2l2ZVwiO1xuaW1wb3J0IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vZGVmaW5pdGlvbi9pbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZVwiO1xuXG5pbXBvcnQgeyBhZGRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbixcbiAgICAgICAgIGFkZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyxcbiAgICAgICAgIHJlbW92ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyxcbiAgICAgICAgIGZpbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLFxuICAgICAgICAgZmluZERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLFxuICAgICAgICAgZmluZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsXG4gICAgICAgICByZXRyaWV2ZUdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NvbnRleHRcIlxuXG5sZXQgY291bnQgPSAwO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbGltaW5hdGVJbmRpcmVjdExlZnRSZWN1cnNpb24oY29udGV4dCkge1xuICBsZXQgZ3JlYXRlc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSByZXRyaWV2ZUdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKGNvbnRleHQpO1xuXG4gIHdoaWxlIChncmVhdGVzdEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCAvLy9cbiAgICAgICAgICBydWxlID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gZmluZERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ocnVsZSwgY29udGV4dCk7XG5cbiAgICAoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiAhPT0gbnVsbCkgP1xuICAgICAgcmV3cml0ZURpcmVjdExlZnRSZWN1cnNpb24oZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSA6XG4gICAgICAgIHJld3JpdGVJbmRpcmVjdExlZnRSZWN1cnNpb24oaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KTtcblxuICAgIGdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gKytjb3VudCA+IEluZmluaXR5ID8gbnVsbCA6IHJldHJpZXZlR3JlYXRlc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oY29udGV4dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV3cml0ZURpcmVjdExlZnRSZWN1cnNpb24oZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFsbG93SXNvbGF0ZWQgPSB0cnVlLFxuICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlID0gRGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbi5leGVjdXRlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGFsbG93SXNvbGF0ZWQsIGNvbnRleHQpLFxuICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZSA9IERpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uLmV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCk7XG5cbiAgY29uc3QgcnVsZSA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpO1xuXG4gIGxldCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gZmluZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgY29udGV4dCk7XG5cbiAgY29uc3QgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBmaW5kRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgY29udGV4dCksXG4gICAgICAgIHJlbW92ZWRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgLi4uZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsXG4gICAgICAgICAgLi4uaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1xuICAgICAgICBdO1xuXG4gIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uLmV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgZGlyZWN0bHlSZXBlYXRlZFJ1bGUsIGRpcmVjdGx5UmVkdWNlZFJ1bGUsIGNvbnRleHQpO1xuXG4gIGNvbnN0IGFkZGVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uczsgLy8vXG5cbiAgcmVtb3ZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJlbW92ZWRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIGNvbnRleHQpO1xuXG4gIGFkZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhhZGRlZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgY29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVJbmRpcmVjdExlZnRSZWN1cnNpb24oaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGluZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IEluZGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbi5leGVjdXRlKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCksXG4gICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUgPSBJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uLmV4ZWN1dGUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KTtcblxuICBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24uZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpO1xuXG4gIGNvbnN0IHJ1bGUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpO1xuXG4gIGxldCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpO1xuXG4gIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUoKSxcbiAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGZpbmRJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKTtcblxuICAgICAgICAgIGlmICgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPT09IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSAmJiAobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID09PSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGNvbnRleHQpO1xuXG4gIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24uZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUsIGluZGlyZWN0bHlSZWR1Y2VkUnVsZSwgY29udGV4dCk7XG5cbiAgY29uc3QgYWRkZWRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCAvLy9cbiAgICAgICAgcmVtb3ZlZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnM7IC8vL1xuXG4gIHJlbW92ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhyZW1vdmVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBjb250ZXh0KTtcblxuICBhZGRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihhZGRlZExlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4vcmVjdXJzaXZlRGVmaW5pdGlvblwiO1xuaW1wb3J0IExlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdFwiO1xuaW1wb3J0IERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4vcmVjdXJzaXZlRGVmaW5pdGlvbi9sZWZ0L2RpcmVjdGx5XCI7XG5pbXBvcnQgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdC9pbmRpcmVjdGx5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJldHJpZXZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQsIHJlY3Vyc2l2ZURlZmluaXRpb25zID0gW10pIHtcbiAgY29uc3QgZGVmaW5pdGlvbnMgPSBydWxlLmdldERlZmluaXRpb25zKCk7XG5cbiAgZGVmaW5pdGlvbnMuZm9yRWFjaCgoZGVmaW5pdGlvbikgPT4ge1xuICAgIGNvbnN0IHJlY3Vyc2l2ZURlZmluaXRpb24gPSByZXRyaWV2ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24sIGNvbnRleHQsIHJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25zID0gWyAuLi5yZWN1cnNpdmVEZWZpbml0aW9ucywgcmVjdXJzaXZlRGVmaW5pdGlvbiBdLFxuICAgICAgICAgICAgcHJldmlvdXNSZWN1cnNpdmVSdWxlTmFtZXMgPSBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25zLm1hcCgocHJldmlvdXNSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUmVjdXJzaXZlRGVmaW5pdGlvblJ1bGVOYW1lID0gcHJldmlvdXNSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUmVjdXJzaXZlUnVsZU5hbWUgPSBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25SdWxlTmFtZTsgIC8vL1xuXG4gICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1JlY3Vyc2l2ZVJ1bGVOYW1lO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXMgPSByZWN1cnNpdmVEZWZpbml0aW9uLmdldFJlY3Vyc2l2ZVJ1bGVOYW1lcygpO1xuXG4gICAgICByZWN1cnNpdmVSdWxlTmFtZXMuZm9yRWFjaCgocmVjdXJzaXZlUnVsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNSZWN1cnNpdmVSdWxlTmFtZXNJbmNsdWRlc1JlY3Vyc2l2ZVJ1bGVOYW1lID0gcHJldmlvdXNSZWN1cnNpdmVSdWxlTmFtZXMuaW5jbHVkZXMocmVjdXJzaXZlUnVsZU5hbWUpO1xuXG4gICAgICAgIGlmICghcHJldmlvdXNSZWN1cnNpdmVSdWxlTmFtZXNJbmNsdWRlc1JlY3Vyc2l2ZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgeyBydWxlTWFwIH0gPSBjb250ZXh0LFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gcmVjdXJzaXZlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICAgICAgICBydWxlID0gcnVsZU1hcFtydWxlTmFtZV0gfHwgbnVsbDsgLy8vXG5cbiAgICAgICAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25zOyAgLy8vXG5cbiAgICAgICAgICAgIHJldHJpZXZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQsIHJlY3Vyc2l2ZURlZmluaXRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ocnVsZSwgZGVmaW5pdGlvbiwgY29udGV4dCwgcmVjdXJzaXZlRGVmaW5pdGlvbnMpIHtcbiAgbGV0IHJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uID09PSBudWxsKSB7XG4gICAgbGV0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5mcm9tUnVsZURlZmluaXRpb25BbmRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVEZWZpbml0aW9ucyk7XG5cbiAgICBpZiAoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9ID0gY29udGV4dDtcblxuICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLnNvbWUoKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgIGlmIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgICAgICAgIGNvbnN0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkEgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgLy8vXG4gICAgICAgICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uQiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgLy8vXG4gICAgICAgICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uQUVxdWl2YWxlbnRUb1JlY3Vyc2l2ZURlZmluaXRpb25CID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uQS5pc0VxdWl2YWxlbnRUbyhpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25CKTtcblxuICAgICAgICAgIGlmIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25BRXF1aXZhbGVudFRvUmVjdXJzaXZlRGVmaW5pdGlvbkIpIHtcbiAgICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247ICAvLy9cblxuICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMucHVzaChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjsgIC8vL1xuICB9XG5cbiAgaWYgKHJlY3Vyc2l2ZURlZmluaXRpb24gPT09IG51bGwpIHtcbiAgICBjb25zdCBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5mcm9tUnVsZUFuZERlZmluaXRpb24ocnVsZSwgZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSA9IGNvbnRleHQsXG4gICAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247ICAvLy9cblxuICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLnB1c2gobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHJlY3Vyc2l2ZURlZmluaXRpb24gPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uOyAgLy8vXG4gIH1cblxuICBpZiAocmVjdXJzaXZlRGVmaW5pdGlvbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbVJ1bGVBbmREZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24pO1xuXG4gICAgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uOyAgLy8vXG4gIH1cblxuICBpZiAocmVjdXJzaXZlRGVmaW5pdGlvbiA9PT0gbnVsbCkge1xuICAgIHJlY3Vyc2l2ZURlZmluaXRpb24gPSBSZWN1cnNpdmVEZWZpbml0aW9uLmZyb21SdWxlQW5kRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHJldHVybiByZWN1cnNpdmVEZWZpbml0aW9uO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBydWxlc1V0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBlbGltaW5hdGVEaXJlY3RMZWZ0UmVjdXJzaW9uIGZyb20gXCIuL2VsaW1pbmF0ZURpcmVjdExlZnRSZWN1cnNpb25cIjtcbmltcG9ydCBlbGltaW5hdGVJbmRpcmVjdExlZnRSZWN1cnNpb24gZnJvbSBcIi4vZWxpbWluYXRlSW5kaXJlY3RMZWZ0UmVjdXJzaW9uXCI7XG5pbXBvcnQgcmV0cmlldmVMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgZnJvbSBcIi4vcmV0cmlldmVMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNcIjtcblxuY29uc3QgeyBydWxlTWFwRnJvbVJ1bGVzLCBzdGFydFJ1bGVGcm9tUnVsZXMsIHJ1bGVzRnJvbVN0YXJ0UnVsZUFuZFJ1bGVNYXAgfSA9IHJ1bGVzVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbGltaW5hdGVMZWZ0UmVjdXJzaW9uKHJ1bGVzKSB7XG4gIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcnVsZSA9IHN0YXJ0UnVsZSwgLy8vXG4gICAgICAgIG9wZXJhdGlvbnMgPSBbXSxcbiAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gW10sXG4gICAgICAgIGNvbnRleHQgPSB7XG4gICAgICAgICAgcnVsZU1hcCxcbiAgICAgICAgICBvcGVyYXRpb25zLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1xuICAgICAgICB9O1xuXG4gIHJldHJpZXZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQpO1xuXG4gIGVsaW1pbmF0ZUluZGlyZWN0TGVmdFJlY3Vyc2lvbihjb250ZXh0KTtcblxuICBlbGltaW5hdGVEaXJlY3RMZWZ0UmVjdXJzaW9uKGNvbnRleHQpO1xuXG4gIHJ1bGVzID0gcnVsZXNGcm9tU3RhcnRSdWxlQW5kUnVsZU1hcChzdGFydFJ1bGUsIHJ1bGVNYXApOyAvLy9cblxuICByZXR1cm4gcnVsZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4YW1wbGVMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhFeGFtcGxlTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4YW1wbGVQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge31cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHJld3JpdGVOb2RlcyB9IGZyb20gXCIuL3Jld3JpdGVOb2Rlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbGltaW5hdGVMZWZ0UmVjdXJzaW9uIH0gZnJvbSBcIi4vZWxpbWluYXRlTGVmdFJlY3Vyc2lvblwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEV4YW1wbGVMZXhlciB9IGZyb20gXCIuL2xleGVyL2V4YW1wbGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXhhbXBsZVBhcnNlciB9IGZyb20gXCIuL3BhcnNlci9leGFtcGxlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEZsb3JlbmNlUGFyc2VyIH0gZnJvbSBcIm9jY2FtLWdyYW1tYXJzXCI7XG5pbXBvcnQgeyBwYXJzZXJVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuaW1wb3J0IHsgZWxpbWluYXRlTGVmdFJlY3Vyc2lvbiB9IGZyb20gXCJvY2NhbS1ncmFtbWFyLXV0aWxpdGllc1wiO1xuXG5pbXBvcnQgQ29tYmluZWRDdXN0b21HcmFtbWFyIGZyb20gXCIuLi9jb21iaW5lZEN1c3RvbUdyYW1tYXJcIjtcblxuY29uc3QgeyBydWxlc0Zyb21CTkYsIHBhcnNlckZyb21SdWxlcywgcGFyc2VyRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZSB9ID0gcGFyc2VyVXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvcmVuY2VQYXJzZXJGcm9tTm90aGluZygpIHtcbiAgY29uc3QgeyBibmYgfSA9IEZsb3JlbmNlUGFyc2VyLFxuICAgICAgICBjb21iaW5lZEN1c3RvbUdyYW1tYXIgPSBDb21iaW5lZEN1c3RvbUdyYW1tYXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgcnVsZXMgPSBydWxlc0Zyb21CTkZBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXIoYm5mLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICBmbG9yZW5jZVBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhGbG9yZW5jZVBhcnNlciwgcnVsZXMpO1xuXG4gIHJldHVybiBmbG9yZW5jZVBhcnNlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3JlbmNlUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihjb21iaW5lZEN1c3RvbUdyYW1tYXIpIHtcbiAgY29uc3QgeyBibmYgfSA9IEZsb3JlbmNlUGFyc2VyLFxuICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUJORkFuZENvbWJpbmVkQ3VzdG9tR3JhbW1hcihibmYsIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciksXG4gICAgICAgIGZsb3JlbmNlUGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKEZsb3JlbmNlUGFyc2VyLCBydWxlcyk7XG5cbiAgcmV0dXJuIGZsb3JlbmNlUGFyc2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvcmVuY2VQYXJzZXJGcm9tQk5GQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyKGJuZiwgY29tYmluZWRDdXN0b21HcmFtbWFyKSB7XG4gIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQk5GQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyKGJuZiwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgZmxvcmVuY2VQYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoRmxvcmVuY2VQYXJzZXIsIHJ1bGVzKTtcblxuICByZXR1cm4gZmxvcmVuY2VQYXJzZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9yZW5jZVBhcnNlckZyb21CTkZTdGFydFJ1bGVOYW1lQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyKGJuZiwgc3RhcnRSdWxlTmFtZSwgY29tYmluZWRDdXN0b21HcmFtbWFyKSB7XG4gIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQk5GQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyKGJuZiwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgZmxvcmVuY2VQYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lKEZsb3JlbmNlUGFyc2VyLCBydWxlcywgc3RhcnRSdWxlTmFtZSk7XG5cbiAgcmV0dXJuIGZsb3JlbmNlUGFyc2VyO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGZsb3JlbmNlUGFyc2VyRnJvbU5vdGhpbmcsXG4gIGZsb3JlbmNlUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcixcbiAgZmxvcmVuY2VQYXJzZXJGcm9tQk5GQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyLFxuICBmbG9yZW5jZVBhcnNlckZyb21CTkZTdGFydFJ1bGVOYW1lQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyXG59O1xuXG5mdW5jdGlvbiBydWxlc0Zyb21CTkZBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXIoYm5mLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpIHtcbiAgbGV0IHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZik7XG5cbiAgY29uc3QgY29tYmluZWRDdXN0b21HcmFtbWFyUnVsZXMgPSBjb21iaW5lZEN1c3RvbUdyYW1tYXIuZ2V0UnVsZXMoKTtcblxuICBydWxlcyA9IFsgLy8vXG4gICAgLi4ucnVsZXMsXG4gICAgLi4uY29tYmluZWRDdXN0b21HcmFtbWFyUnVsZXNcbiAgXTtcblxuICBydWxlcyA9IGVsaW1pbmF0ZUxlZnRSZWN1cnNpb24ocnVsZXMpOyAgLy8vXG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBERUZBVUxUX0NVU1RPTV9HUkFNTUFSX05BTUUgfSBmcm9tIFwiLi9ncmFtbWFyTmFtZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBydWxlTmFtZXMgfSBmcm9tIFwiLi9ydWxlTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0dGVybk5hbWVzIH0gZnJvbSBcIi4vcGF0dGVybk5hbWVzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3VzdG9tR3JhbW1hciB9IGZyb20gXCIuL2N1c3RvbUdyYW1tYXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV4ZXJzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2xleGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJzZXJzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhcnNlcnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGVmYXVsdEN1c3RvbUdyYW1tYXIgfSBmcm9tIFwiLi9kZWZhdWx0Q3VzdG9tR3JhbW1hclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21iaW5lZEN1c3RvbUdyYW1tYXIgfSBmcm9tIFwiLi9jb21iaW5lZEN1c3RvbUdyYW1tYXJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuY29uc3QgU3ViSGVhZGluZyA9IHdpdGhTdHlsZS5oMmBcblxuICBtYXJnaW46IDFyZW0gMCAwLjVyZW0gMDtcbiAgZm9udC1zaXplOiAycmVtO1xuICBcbiAgOmZpcnN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgU3ViSGVhZGluZztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFNlbGVjdClgXG5cbiAgYm9yZGVyOiAxcHggc29saWQgZGFya2dyZXk7XG4gIHBhZGRpbmc6IDAuMjVyZW07XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICBtYXJnaW4tYm90dG9tOiAwLjhyZW07XG4gIFxuICA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBERUZBVUxUX0NVU1RPTV9HUkFNTUFSX05BTUUgfSBmcm9tIFwiLi4vZ3JhbW1hck5hbWVzXCI7XG5cbmV4cG9ydCBjb25zdCBVU0VSX0RFRklORURfQ1VTVE9NX0dSQU1NQVJfTkFNRV8xID0gXCJVc2VyIGRlZmluZWQgMVwiO1xuZXhwb3J0IGNvbnN0IFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzIgPSBcIlVzZXIgZGVmaW5lZCAyXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTZWxlY3QgZnJvbSBcIi4uL3NlbGVjdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX0NVU1RPTV9HUkFNTUFSX05BTUUsIFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzEsIFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzIgfSBmcm9tIFwiLi4vZ3JhbW1hck5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVTZWxlY3QgZXh0ZW5kcyBTZWxlY3Qge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIG5hbWUgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBbXG4gICAgICAgICAgICBERUZBVUxUX0NVU1RPTV9HUkFNTUFSX05BTUUsXG4gICAgICAgICAgICBVU0VSX0RFRklORURfQ1VTVE9NX0dSQU1NQVJfTkFNRV8xLFxuICAgICAgICAgICAgVVNFUl9ERUZJTkVEX0NVU1RPTV9HUkFNTUFSX05BTUVfMlxuICAgICAgICAgIF0sXG4gICAgICAgICAgb3B0aW9ucyA9IG5hbWVzLm1hcCgobmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmFtZSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gKGluZGV4ID09PSAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIChcblxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXt2YWx1ZX0gc2VsZWN0ZWQ9e3NlbGVjdGVkfSA+XG4gICAgICAgICAgICAgICAge25hbWV9XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNoaWxkRWxlbWVudHMgPSBbXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgICAgXTtcblxuICAgIHJldHVybiBjaGlsZEVsZW1lbnRzO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXROYW1lID0gdGhpcy5nZXROYW1lLmJpbmQodGhpcyk7IC8vL1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXROYW1lXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm5hbWVcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFNpemVhYmxlRGl2IH0gZnJvbSBcImVhc3ktbGF5b3V0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTaXplYWJsZURpdilgXG5cbiAgd2lkdGg6IDY0cmVtO1xuICBtaW4td2lkdGg6IDI0cmVtO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFRleHRhcmVhIH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFRleHRhcmVhKWBcblxuICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTtcbiAgaGVpZ2h0OiAyNHJlbTtcbiAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIGdldEJORigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBibmYgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gYm5mO1xuICB9XG5cbiAgc2V0Qk5GKGJuZikge1xuICAgIGNvbnN0IHZhbHVlID0gYm5mO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldEJORiA9IHRoaXMuZ2V0Qk5GLmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0Qk5GID0gdGhpcy5zZXRCTkYuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0Qk5GLFxuICAgICAgc2V0Qk5GXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImJuZlwiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IElucHV0IH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKElucHV0KWBcblxuICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dCBmcm9tIFwiLi4vaW5wdXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGF0dGVybklucHV0IGV4dGVuZHMgSW5wdXQge1xuICBnZXRQYXR0ZXJuKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHBhdHRlcm4gPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gcGF0dGVybjtcbiAgfVxuXG4gIHNldFBhdHRlcm4ocGF0dGVybikge1xuICAgIGNvbnN0IHZhbHVlID0gcGF0dGVybjsgLy8vXG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0UGF0dGVybiA9IHRoaXMuZ2V0UGF0dGVybi5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldFBhdHRlcm4gPSB0aGlzLnNldFBhdHRlcm4uYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0UGF0dGVybixcbiAgICAgIHNldFBhdHRlcm5cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicGF0dGVyblwiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTZWxlY3QgZnJvbSBcIi4uL3NlbGVjdFwiO1xuXG5pbXBvcnQgeyBURVJNX1JVTEVfTkFNRSwgU1RBVEVNRU5UX1JVTEVfTkFNRSwgTUVUQVNUQVRFTUVOVF9SVUxFX05BTUUgfSAgZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVNlbGVjdCBleHRlbmRzIFNlbGVjdCB7XG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lO1xuICB9XG5cbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICBjb25zdCBydWxlTmFtZXMgPSBbXG4gICAgICAgICAgICBURVJNX1JVTEVfTkFNRSxcbiAgICAgICAgICAgIFNUQVRFTUVOVF9SVUxFX05BTUUsXG4gICAgICAgICAgICBNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRVxuICAgICAgICAgIF0sXG4gICAgICAgICAgb3B0aW9ucyA9IHJ1bGVOYW1lcy5tYXAoKHJ1bGVOYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBydWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gKGluZGV4ID09PSAyKTtcblxuICAgICAgICAgICAgcmV0dXJuIChcblxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXt2YWx1ZX0gc2VsZWN0ZWQ9e3NlbGVjdGVkfSA+XG4gICAgICAgICAgICAgICAge3J1bGVOYW1lfVxuICAgICAgICAgICAgICA8L29wdGlvbj5cblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjaGlsZEVsZW1lbnRzID0gW1xuICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICAgIF07XG5cbiAgICByZXR1cm4gY2hpbGRFbGVtZW50cztcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0UnVsZU5hbWUgPSB0aGlzLmdldFJ1bGVOYW1lLmJpbmQodGhpcyk7IC8vL1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRSdWxlTmFtZVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJydWxlLW5hbWVcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuY2xhc3MgQ29udGVudFRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHNldENvbnRlbnQoY29udGVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gY29udGVudDtcblxuICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRDb250ZW50ID0gdGhpcy5nZXRDb250ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0Q29udGVudCA9IHRoaXMuc2V0Q29udGVudC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRDb250ZW50LFxuICAgICAgc2V0Q29udGVudFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb250ZW50XCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb250ZW50VGV4dGFyZWEpYFxuXG4gIGhlaWdodDogMTJyZW07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNlbGVjdCBmcm9tIFwiLi4vc2VsZWN0XCI7XG5cbmltcG9ydCB7IFRZUEVfUEFUVEVSTl9OQU1FLCBTWU1CT0xfUEFUVEVSTl9OQU1FLCBPUEVSQVRPUl9QQVRURVJOX05BTUUgfSAgZnJvbSBcIi4uLy4uL3BhdHRlcm5OYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXR0ZXJuTmFtZVNlbGVjdCBleHRlbmRzIFNlbGVjdCB7XG4gIGdldFBhdHRlcm5OYW1lKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHBhdHRlcm5OYW1lID0gdmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIHBhdHRlcm5OYW1lO1xuICB9XG5cbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICBjb25zdCBwYXR0ZXJuTmFtZXMgPSBbXG4gICAgICAgICAgICBUWVBFX1BBVFRFUk5fTkFNRSxcbiAgICAgICAgICAgIFNZTUJPTF9QQVRURVJOX05BTUUsXG4gICAgICAgICAgICBPUEVSQVRPUl9QQVRURVJOX05BTUVcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9wdGlvbnMgID0gcGF0dGVybk5hbWVzLm1hcCgocGF0dGVybk5hbWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhdHRlcm5OYW1lLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSAoaW5kZXggPT09IDApO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9e3ZhbHVlfSBzZWxlY3RlZD17c2VsZWN0ZWR9ID5cbiAgICAgICAgICAgICAgICB7cGF0dGVybk5hbWV9XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNoaWxkRWxlbWVudHMgPSBbXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgICAgXTtcblxuXG4gICAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldFBhdHRlcm5OYW1lID0gdGhpcy5nZXRQYXR0ZXJuTmFtZS5iaW5kKHRoaXMpOyAvLy9cblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0UGF0dGVybk5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicnVsZS1uYW1lXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIHNldFBhcnNlVHJlZShwYXJzZVRyZWUpIHtcbiAgICBpZiAocGFyc2VUcmVlICE9PSBudWxsKSB7XG4gICAgICBwYXJzZVRyZWUuc2hpZnRMaW5lKCk7ICAvL1xuXG4gICAgICBjb25zdCBwYXJzZVRyZWVTdHJpbmcgPSBwYXJzZVRyZWUuYXNTdHJpbmcoKSxcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VUcmVlU3RyaW5nOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyUGFyc2VUcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJQYXJzZVRyZWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3Qgc2V0UGFyc2VUcmVlID0gdGhpcy5zZXRQYXJzZVRyZWUuYmluZCh0aGlzKSxcbiAgICAgICAgICBjbGVhclBhcnNlVHJlZSA9IHRoaXMuY2xlYXJQYXJzZVRyZWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgc2V0UGFyc2VUcmVlLFxuICAgICAgY2xlYXJQYXJzZVRyZWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9rZW5zXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IElucHV0IGZyb20gXCIuLi9pbnB1dFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydFJ1bGVOYW1lSW5wdXQgZXh0ZW5kcyBJbnB1dCB7XG4gIGdldFN0YXJ0UnVsZU5hbWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgICAgc3RhcnRSdWxlTmFtZSA9IHZhbHVlOyAvLy9cblxuICAgIHJldHVybiBzdGFydFJ1bGVOYW1lO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRTdGFydFJ1bGVOYW1lID0gdGhpcy5nZXRTdGFydFJ1bGVOYW1lLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldFN0YXJ0UnVsZU5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwic3RhcnQtcnVsZS1uYW1lXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIEZsb3JlbmNlQk5GVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIGdldEZsb3JlbmNlQk5GKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGZsb3JlbmNlQk5GID0gdmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIGZsb3JlbmNlQk5GO1xuICB9XG5cbiAgc2V0RmxvcmVuY2VCTkYoZmxvcmVuY2VCTkYpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGZsb3JlbmNlQk5GOyAgLy8vXG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyRmxvcmVuY2VCTkYoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0RmxvcmVuY2VCTkYgPSB0aGlzLmdldEZsb3JlbmNlQk5GLmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0RmxvcmVuY2VCTkYgPSB0aGlzLnNldEZsb3JlbmNlQk5GLmJpbmQodGhpcyksXG4gICAgICAgICAgY2xlYXJGbG9yZW5jZUJORiA9IHRoaXMuY2xlYXJGbG9yZW5jZUJORi5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRGbG9yZW5jZUJORixcbiAgICAgIHNldEZsb3JlbmNlQk5GLFxuICAgICAgY2xlYXJGbG9yZW5jZUJORlxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJmbG9yZW5jZS1ibmZcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEZsb3JlbmNlQk5GVGV4dGFyZWEpYFxuXG4gIGhlaWdodDogNDhyZW07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ3VzdG9tR3JhbW1hciB9IGZyb20gXCIuLi9pbmRleFwiOyAvLy9cblxuaW1wb3J0IHsgVVNFUl9ERUZJTkVEX0NVU1RPTV9HUkFNTUFSX05BTUVfMSB9IGZyb20gXCIuLi9ncmFtbWFyTmFtZXNcIjtcblxuY29uc3QgbmFtZSA9IFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzEsXG4gICAgICB0eXBlUGF0dGVybiA9IFwiSW50ZWdlclwiLFxuICAgICAgb3BlcmF0b3JQYXR0ZXJuID0gXCJcIixcbiAgICAgIHRlcm1CTkYgPSBgYCxcbiAgICAgIHN0YXRlbWVudEJORiA9IGBgLFxuICAgICAgbWV0YXN0YXRlbWVudEJORiA9IGBgLFxuICAgICAganNvbiA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZVBhdHRlcm4sXG4gICAgICAgIG9wZXJhdG9yUGF0dGVybixcbiAgICAgICAgdGVybUJORixcbiAgICAgICAgc3RhdGVtZW50Qk5GLFxuICAgICAgICBtZXRhc3RhdGVtZW50Qk5GXG4gICAgICB9LFxuICAgICAgdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMSA9IEN1c3RvbUdyYW1tYXIuZnJvbUpTT04oanNvbik7XG5cbmV4cG9ydCBkZWZhdWx0IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjE7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEN1c3RvbUdyYW1tYXIgfSBmcm9tIFwiLi4vaW5kZXhcIjsgLy8vXG5cbmltcG9ydCB7IFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzIgfSBmcm9tIFwiLi4vZ3JhbW1hck5hbWVzXCI7XG5cbmNvbnN0IG5hbWUgPSBVU0VSX0RFRklORURfQ1VTVE9NX0dSQU1NQVJfTkFNRV8yLFxuICAgICAgdHlwZVBhdHRlcm4gPSBcIlwiLFxuICAgICAgb3BlcmF0b3JQYXR0ZXJuID0gXCJcIixcbiAgICAgIHRlcm1CTkYgPSBgYCxcbiAgICAgIHN0YXRlbWVudEJORiA9IGBgLFxuICAgICAgbWV0YXN0YXRlbWVudEJORiA9IGBgLFxuICAgICAganNvbiA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZVBhdHRlcm4sXG4gICAgICAgIG9wZXJhdG9yUGF0dGVybixcbiAgICAgICAgdGVybUJORixcbiAgICAgICAgc3RhdGVtZW50Qk5GLFxuICAgICAgICBtZXRhc3RhdGVtZW50Qk5GXG4gICAgICB9LFxuICAgICAgdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMiA9IEN1c3RvbUdyYW1tYXIuZnJvbUpTT04oanNvbik7XG5cbmV4cG9ydCBkZWZhdWx0IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpbHRlciB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21QYXJzZXIocGFyc2VyKSB7XG4gIGNvbnN0IHJ1bGVNYXAgPSBwYXJzZXIuZ2V0UnVsZU1hcCgpLFxuICAgICAgICBzdGFydFJ1bGUgPSBwYXJzZXIuZ2V0U3RhcnRSdWxlKCksXG4gICAgICAgIHN0YXJ0UnVsZU5hbWUgPSBzdGFydFJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICBydWxlTWFwVmFsdWVzID0gT2JqZWN0LnZhbHVlcyhydWxlTWFwKSxcbiAgICAgICAgcnVsZXMgPSBydWxlTWFwVmFsdWVzOyAgLy8vXG5cbiAgZmlsdGVyKHJ1bGVzLCAocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBpZiAocnVsZU5hbWUgIT09IHN0YXJ0UnVsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcnVsZXMudW5zaGlmdChzdGFydFJ1bGUpO1xuXG4gIHJldHVybiBydWxlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBydWxlc1V0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5pbXBvcnQgeyBSb3dzRGl2LCBDb2x1bW5EaXYsIENvbHVtbnNEaXYsIFZlcnRpY2FsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiZWFzeS1sYXlvdXRcIjtcbmltcG9ydCB7IGRlZmF1bHRDdXN0b21HcmFtbWFyLCBDb21iaW5lZEN1c3RvbUdyYW1tYXIsIGxleGVyc1V0aWxpdGllcywgcGFyc2Vyc1V0aWxpdGllcyB9IGZyb20gXCIuLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCBTdWJIZWFkaW5nIGZyb20gXCIuL3N1YkhlYWRpbmdcIjtcbmltcG9ydCBOYW1lU2VsZWN0IGZyb20gXCIuL3NlbGVjdC9uYW1lXCI7XG5pbXBvcnQgU2l6ZWFibGVEaXYgZnJvbSBcIi4vZGl2L3NpemVhYmxlXCI7XG5pbXBvcnQgQk5GVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvYm5mXCI7XG5pbXBvcnQgUGF0dGVybklucHV0IGZyb20gXCIuL2lucHV0L3BhdHRlcm5cIjtcbmltcG9ydCBSdWxlTmFtZVNlbGVjdCBmcm9tIFwiLi9zZWxlY3QvcnVsZU5hbWVcIjtcbmltcG9ydCBDb250ZW50VGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvY29udGVudFwiO1xuaW1wb3J0IFBhdHRlcm5OYW1lU2VsZWN0IGZyb20gXCIuL3NlbGVjdC9wYXR0ZXJuTmFtZVwiO1xuaW1wb3J0IFBhcnNlVHJlZVRleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL3BhcnNlVHJlZVwiO1xuaW1wb3J0IFN0YXJ0UnVsZU5hbWVJbnB1dCBmcm9tIFwiLi9pbnB1dC9zdGFydFJ1bGVOYW1lXCI7XG5pbXBvcnQgRmxvcmVuY2VCTkZUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9mbG9yZW5jZUJORlwiO1xuaW1wb3J0IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjEgZnJvbSBcIi4vdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMVwiO1xuaW1wb3J0IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjIgZnJvbSBcIi4vdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMlwiO1xuXG5pbXBvcnQgeyBydWxlc0Zyb21QYXJzZXIgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0NVU1RPTV9HUkFNTUFSX05BTUUsIFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzEsIFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzIgfSBmcm9tIFwiLi4vZ3JhbW1hck5hbWVzXCI7XG5cbmNvbnN0IHsgcnVsZXNBc1N0cmluZyB9ID0gcnVsZXNVdGlsaXRpZXMsXG4gICAgICB7IGZsb3JlbmNlTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyIH0gPSBsZXhlcnNVdGlsaXRpZXMsXG4gICAgICB7IGZsb3JlbmNlUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciB9ID0gcGFyc2Vyc1V0aWxpdGllcztcblxuY2xhc3MgVmlldyBleHRlbmRzIEVsZW1lbnQge1xuICBrZXlVcEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgYm5mID0gdGhpcy5nZXRCTkYoKSxcbiAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzLmdldFBhdHRlcm4oKSxcbiAgICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgcGF0dGVybk5hbWUgPSB0aGlzLmdldFBhdHRlcm5OYW1lKCk7XG5cbiAgICAgIGlmIChuYW1lID09PSBVU0VSX0RFRklORURfQ1VTVE9NX0dSQU1NQVJfTkFNRV8xKSB7XG4gICAgICAgIHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjEuc2V0Qk5GKHJ1bGVOYW1lLCBibmYpO1xuICAgICAgICB1c2VyRGVmaW5lZEN1c3RvbUdyYW1tYXIxLnNldFBhdHRlcm4ocGF0dGVybk5hbWUsIHBhdHRlcm4pO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gVVNFUl9ERUZJTkVEX0NVU1RPTV9HUkFNTUFSX05BTUVfMikge1xuICAgICAgICB1c2VyRGVmaW5lZEN1c3RvbUdyYW1tYXIyLnNldEJORihydWxlTmFtZSwgYm5mKTtcbiAgICAgICAgdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMi5zZXRQYXR0ZXJuKHBhdHRlcm5OYW1lLCBwYXR0ZXJuKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VzdG9tR3JhbW1hcnMgPSBbXG4gICAgICAgICAgICAgIHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjEsXG4gICAgICAgICAgICAgIHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjb21iaW5lZEN1c3RvbUdyYW1tYXIgPSBDb21iaW5lZEN1c3RvbUdyYW1tYXIuZnJvbUN1c3RvbUdyYW1tYXJzKGN1c3RvbUdyYW1tYXJzKSxcbiAgICAgICAgICAgIGZsb3JlbmNlTGV4ZXIgPSBmbG9yZW5jZUxleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICAgICAgZmxvcmVuY2VQYXJzZXIgPSBmbG9yZW5jZVBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICAgIHJ1bGVNYXAgPSBmbG9yZW5jZVBhcnNlci5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgICBzdGFydFJ1bGVOYW1lID0gdGhpcy5nZXRTdGFydFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBzdGFydFJ1bGUgPSBydWxlTWFwW3N0YXJ0UnVsZU5hbWVdLCAvLy9cbiAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgIHRva2VucyA9IGZsb3JlbmNlTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgICAgICBub2RlID0gZmxvcmVuY2VQYXJzZXIucGFyc2UodG9rZW5zLCBzdGFydFJ1bGUpO1xuXG4gICAgICBsZXQgcGFyc2VUcmVlID0gbnVsbDtcblxuICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VUcmVlID0gbm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFBhcnNlVHJlZShwYXJzZVRyZWUpO1xuXG4gICAgICBjb25zdCBmbG9yZW5jZVJ1bGVzID0gcnVsZXNGcm9tUGFyc2VyKGZsb3JlbmNlUGFyc2VyKSxcbiAgICAgICAgICAgIG11bHRpTGluZSA9IHRydWUsXG4gICAgICAgICAgICBydWxlc1N0cmluZyA9IHJ1bGVzQXNTdHJpbmcoZmxvcmVuY2VSdWxlcywgbXVsdGlMaW5lKSxcbiAgICAgICAgICAgIGZsb3JlbmNlQk5GID0gcnVsZXNTdHJpbmc7ICAvLy9cblxuICAgICAgdGhpcy5zZXRGbG9yZW5jZUJORihmbG9yZW5jZUJORik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcblxuICAgICAgdGhpcy5jbGVhclBhcnNlVHJlZSgpO1xuXG4gICAgICB0aGlzLmNsZWFyRmxvcmVuY2VCTkYoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgbGV0IGN1c3RvbUdyYW1tYXI7XG5cbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0aGlzLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgcGF0dGVybk5hbWUgPSB0aGlzLmdldFBhdHRlcm5OYW1lKCk7XG5cbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgREVGQVVMVF9DVVNUT01fR1JBTU1BUl9OQU1FOlxuICAgICAgICBjdXN0b21HcmFtbWFyID0gZGVmYXVsdEN1c3RvbUdyYW1tYXI7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVVNFUl9ERUZJTkVEX0NVU1RPTV9HUkFNTUFSX05BTUVfMTpcbiAgICAgICAgY3VzdG9tR3JhbW1hciA9IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjE7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVVNFUl9ERUZJTkVEX0NVU1RPTV9HUkFNTUFSX05BTUVfMjpcbiAgICAgICAgY3VzdG9tR3JhbW1hciA9IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjI7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgYm5mID0gY3VzdG9tR3JhbW1hci5nZXRCTkYocnVsZU5hbWUpLFxuICAgICAgICAgIHBhdHRlcm4gPSBjdXN0b21HcmFtbWFyLmdldFBhdHRlcm4ocGF0dGVybk5hbWUpO1xuXG4gICAgdGhpcy5zZXRCTkYoYm5mKTtcblxuICAgIHRoaXMuc2V0UGF0dGVybihwYXR0ZXJuKTtcbiAgfVxuXG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgY29uc3Qga2V5VXBIYW5kbGVyID0gdGhpcy5rZXlVcEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gdGhpcy5jaGFuZ2VIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKFtcblxuICAgICAgPENvbHVtbnNEaXY+XG4gICAgICAgIDxTaXplYWJsZURpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBDdXN0b20gZ3JhbW1hclxuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPE5hbWVTZWxlY3Qgb25DaGFuZ2U9e2NoYW5nZUhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgQk5GXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8UnVsZU5hbWVTZWxlY3Qgb25DaGFuZ2U9e2NoYW5nZUhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8Qk5GVGV4dGFyZWEgb25LZXlVcD17a2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFBhdHRlcm5cbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxQYXR0ZXJuTmFtZVNlbGVjdCBvbkNoYW5nZT17Y2hhbmdlSGFuZGxlcn0gLz5cbiAgICAgICAgICAgIDxQYXR0ZXJuSW5wdXQgb25LZXlVcD17a2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFN0YXJ0IHJ1bGVcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxTdGFydFJ1bGVOYW1lSW5wdXQgb25LZXlVcD17a2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9TaXplYWJsZURpdj5cbiAgICAgICAgPFZlcnRpY2FsU3BsaXR0ZXJEaXYgLz5cbiAgICAgICAgPENvbHVtbkRpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBDb250ZW50XG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8Q29udGVudFRleHRhcmVhIG9uS2V5VXA9e2tleVVwSGFuZGxlcn0gLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBQYXJzZSB0cmVlXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8UGFyc2VUcmVlVGV4dGFyZWEgLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBGbG9yZW5jZSBCTkZcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxGbG9yZW5jZUJORlRleHRhcmVhIC8+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L0NvbHVtbkRpdj5cbiAgICAgIDwvQ29sdW1uc0Rpdj5cblxuICAgIF0pO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIGNvbnN0IHsgaW5pdGlhbENvbnRlbnQgfSA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICBjb25zdCBjb250ZW50ID0gaW5pdGlhbENvbnRlbnQ7IC8vL1xuXG4gICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQpO1xuXG4gICAgdGhpcy5jaGFuZ2VIYW5kbGVyKCk7XG5cbiAgICB0aGlzLmtleVVwSGFuZGxlcigpO1xuICB9XG5cbiAgc3RhdGljIGluaXRpYWxDb250ZW50ID0gYEludGVnZXJgO1xuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZpZXdcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVmlldylgXG5cbiAgcGFkZGluZzogMXJlbTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCJqdXh0YXBvc2VcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgQm9keSB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCBWaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlld1wiO1xuXG5jb25zdCB7IHJlbmRlclN0eWxlcyB9ID0gd2l0aFN0eWxlO1xuXG5jb25zdCBib2R5ID0gbmV3IEJvZHkoKTtcblxucmVuZGVyU3R5bGVzKCk7XG5cbmJvZHkubW91bnQoXG5cbiAgPFZpZXcvPlxuXG4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7OztBQUFBOzs7Ozs7OztlQUVxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sU0FBTiwyQkFBQTt1QkFDRCxLQUFLLE1BQUk7OEJBREY7QUFFakIsYUFBSyxNQUFNO0FBQ1gsYUFBSyxPQUFPOzttQkFISyxTQUFBOztVQU1uQixLQUFBO2lCQUFBLGtCQUFTO0FBQ1AsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsbUJBQVU7QUFDUixtQkFBTyxLQUFLOzs7O2FBWEs7Ozs7O0FFRnJCOzs7Ozs7OztlQUVxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sU0FBTiwyQkFBQTt1QkFDRCxLQUFLLE1BQU0sT0FBTyxRQUFNOzhCQURqQjtBQUVqQixhQUFLLE1BQU07QUFDWCxhQUFLLE9BQU87QUFDWixhQUFLLFFBQVE7QUFDYixhQUFLLFNBQVM7O21CQUxHLFNBQUE7O1VBUW5CLEtBQUE7aUJBQUEsa0JBQVM7QUFDUCxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxtQkFBVTtBQUNSLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEscUJBQVk7QUFDVixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLFFBQVMsS0FBSyxRQUFRLEtBQUs7QUFFakMsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsZ0JBQU0sU0FBVSxLQUFLLFNBQVMsS0FBSztBQUVuQyxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsZ0JBQU8sS0FBSztBQUNWLGlCQUFLLE1BQU07Ozs7VUFHYixLQUFBO2lCQUFBLGlCQUFRLE1BQU07QUFDWixpQkFBSyxPQUFPOzs7O1VBR2QsS0FBQTtpQkFBQSxrQkFBUyxPQUFPO0FBQ2QsaUJBQUssUUFBUTs7OztVQUdmLEtBQUE7aUJBQUEsbUJBQVUsUUFBUTtBQUNoQixpQkFBSyxTQUFTOzs7O1VBR2hCLEtBQUE7aUJBQUEsZUFBTSxrQkFBa0IsZ0JBQWdCO0FBQ3RDLGlCQUFLLE9BQU87QUFDWixpQkFBSyxRQUFRO0FBQ2IsaUJBQUssU0FBUztBQUNkLGlCQUFLLFVBQVU7Ozs7VUFHakIsS0FBQTtpQkFBQSw0QkFBbUIsVUFBVSxXQUFXO0FBQ3RDLG1CQUFXLEtBQUssT0FBTyxZQUNaLEtBQUssUUFBUSxhQUNiLEtBQUssUUFBUSxhQUNiLEtBQUssU0FBUzs7OztVQUczQixLQUFBO2lCQUFBLHdCQUFlLFFBQVE7QUFDckIsbUJBQVcsS0FBSyxNQUFNLE9BQU8sVUFDbEIsS0FBSyxPQUFPLE9BQU8sU0FDbkIsS0FBSyxRQUFRLE9BQU8sUUFDcEIsS0FBSyxTQUFTLE9BQU87Ozs7O1VBRzNCLEtBQUE7aUJBQVAsZ0NBQThCLG9CQUFvQjtBQUNoRCxnQkFBTSxrQkFBa0IsT0FBTyxhQUN6QixtQkFBbUIsT0FBTyxhQUMxQixNQUFNLG1CQUFtQixNQUFNLGlCQUMvQixPQUFPLG1CQUFtQixPQUFPLGtCQUNqQyxRQUFRLG1CQUFtQixRQUFRLGtCQUNuQyxTQUFTLG1CQUFtQixTQUFTLGlCQUNyQyxTQUFTLElBaEZFLFFBZ0ZTLEtBQUssTUFBTSxPQUFPO0FBRTVDLG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsS0FBSyxNQUFNLE9BQU8sUUFBUTtBQUN6RCxnQkFBTSxTQUFTLE1BQU0sUUFDZixRQUFRLE9BQU8sT0FDZixTQUFTLElBeEZFLFFBd0ZTLEtBQUssTUFBTSxPQUFPO0FBRTVDLG1CQUFPOzs7O2FBMUZVOzs7OztBRUZyQjs7Ozs7Ozs7Ozs7OztNQUVhLEtBQUcsV0FBQTtlQUFIOztNQUNBLE1BQUksV0FBQTtlQUFKOztNQUNBLE1BQUksV0FBQTtlQUFKOztNQUNBLE9BQUssV0FBQTtlQUFMOztNQUNBLE9BQUssV0FBQTtlQUFMOztNQUNBLE9BQUssV0FBQTtlQUFMOztNQUNBLE9BQUssV0FBQTtlQUFMOztNQUNBLFFBQU0sV0FBQTtlQUFOOztNQUNBLFFBQU0sV0FBQTtlQUFOOztNQUNBLFFBQU0sV0FBQTtlQUFOOztNQUNBLFNBQU8sV0FBQTtlQUFQOztNQUNBLFNBQU8sV0FBQTtlQUFQOztNQUNBLFVBQVEsV0FBQTtlQUFSOztNQUNBLFVBQVEsV0FBQTtlQUFSOztNQUNBLFVBQVEsV0FBQTtlQUFSOztNQUNBLFVBQVEsV0FBQTtlQUFSOztNQUNBLFdBQVMsV0FBQTtlQUFUOztNQUNBLFlBQVUsV0FBQTtlQUFWOztNQUNBLGFBQVcsV0FBQTtlQUFYOztNQUNBLGNBQVksV0FBQTtlQUFaOztNQUNBLG1CQUFpQixXQUFBO2VBQWpCOztNQUNBLG9CQUFrQixXQUFBO2VBQWxCOztNQUNBLG9CQUFrQixXQUFBO2VBQWxCOzs7QUF0Qk4sUUFBTSxNQUFNO0FBQ1osUUFBTSxPQUFPO0FBQ2IsUUFBTSxPQUFPO0FBQ2IsUUFBTSxRQUFRO0FBQ2QsUUFBTSxRQUFRO0FBQ2QsUUFBTSxRQUFRO0FBQ2QsUUFBTSxRQUFRO0FBQ2QsUUFBTSxTQUFTO0FBQ2YsUUFBTSxTQUFTO0FBQ2YsUUFBTSxTQUFTO0FBQ2YsUUFBTSxVQUFVO0FBQ2hCLFFBQU0sVUFBVTtBQUNoQixRQUFNLFdBQVc7QUFDakIsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sV0FBVztBQUNqQixRQUFNLFdBQVc7QUFDakIsUUFBTSxZQUFZO0FBQ2xCLFFBQU0sYUFBYTtBQUNuQixRQUFNLGNBQWM7QUFDcEIsUUFBTSxlQUFlO0FBQ3JCLFFBQU0sb0JBQW9CO0FBQzFCLFFBQU0scUJBQXFCO0FBQzNCLFFBQU0scUJBQXFCOzs7O0FDeEJsQzs7Ozs7Ozs7Ozs7OztNQUlnQixTQUFPLFdBQUE7ZUFBUDs7TUFrQkEsT0FBSyxXQUFBO2VBQUw7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWxCVCxxQkFBaUIsUUFBcUI7VUFBYixTQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBUztBQUN2QyxlQUFTLGNBQUEsSUFBSztBQUVkLFVBQU0sUUFBUSxPQUFPLEtBQUs7QUFFMUIsWUFBTSxRQUFRLFNBQUMsTUFBUztBQUN0QixZQUFNLGNBQWMsT0FBTyxPQUNyQixjQUFjLE9BQU8sT0FDckIsdUJBQXVCLE9BQU8sZUFBZTtBQUVuRCxlQUFPLFFBQVEsdUJBQ0UsY0FBYyxhQUFhLGVBQ3pCOztBQUdyQixhQUFPOztBQUdGLG1CQUFlLFFBQW9CO1VBQVosUUFBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQVE7QUFDcEMsZUFBUyxjQUFBLElBQUs7QUFFZCxZQUFNLFFBQVEsU0FBQyxNQUFTO0FBQ3RCLFlBQU0sdUJBQXVCLE9BQU8sZUFBZTtBQUVuRCxZQUFJLHNCQUFzQjtBQUN4QixpQkFBTyxPQUFPOzs7QUFJbEIsYUFBTzs7QUFHVCwyQkFBdUIsYUFBYSxhQUFhO0FBQy9DLFVBQU0scUJBQXFCLGVBQWUsY0FDcEMscUJBQXFCLGVBQWUsY0FDcEMsZ0JBQWlCLHNCQUFzQixxQkFDckIsY0FDRyxHQUFpQixPQUFmLGFBQVksS0FBZSxPQUFaO0FBRTVDLGFBQU87O0FBR1QsNEJBQXdCLE9BQU87QUFDN0IsVUFBTSxlQUFnQixRQUFPLFVBQUEsY0FBQSxjQUFQLFFBQU8sWUFBVSxXQUFBO0FBRXZDLGFBQU87Ozs7O0FDakRUOzs7Ozs7Ozs7Ozs7O01BRWdCLE9BQUssV0FBQTtlQUFMOztNQUVBLE1BQUksV0FBQTtlQUFKOztNQUVBLFNBQU8sV0FBQTtlQUFQOztNQWNBLFNBQU8sV0FBQTtlQUFQOztNQVFBLFdBQVMsV0FBQTtlQUFUOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTFCVCxtQkFBZSxPQUFPO0FBQUUsYUFBTyxNQUFNOztBQUVyQyxrQkFBYyxRQUFRLFFBQVE7QUFBRSxZQUFNLFVBQVUsS0FBSyxNQUFNLFFBQVE7O0FBRW5FLHFCQUFpQixRQUFRLFFBQVEsTUFBTTtBQUM1QyxlQUFXLG1CQUFHO0FBRWQsYUFBTyxRQUFRLFNBQUMsU0FBUyxPQUFVO0FBQ2pDLFlBQU0sU0FBUyxLQUFLLFNBQVM7QUFFN0IsWUFBSSxRQUFRO0FBQ1YsaUJBQU8sS0FBSzs7O0FBSWhCLGFBQU87O0FBR0YscUJBQWlCLE9BQU87QUFDN0IsYUFBTyxNQUFNLE9BQU8sU0FBQyxRQUFPLFNBQVk7QUFDdEMsaUJBQVEsT0FBTSxPQUFPO0FBRXJCLGVBQU87U0FDTjs7QUFHRSx1QkFBbUIsZ0JBQWdCO0FBQ3hDLHVCQUFpQixrQkFBa0I7QUFFbkMsYUFBc0IsWUFBZCxnQkFBMEIsU0FDeEIsaUJBQ0U7UUFBQzs7Ozs7O0FDakNmOzs7Ozs7Ozs7Ozs7O01BRWdCLGNBQVksV0FBQTtlQUFaOztNQUlBLG9CQUFrQixXQUFBO2VBQWxCOztNQUlBLHFCQUFtQixXQUFBO2VBQW5COzs7QUFSVCwwQkFBc0IsU0FBUztBQUNwQyxhQUFPLFlBQVksU0FBUzs7QUFHdkIsZ0NBQTRCLGVBQWU7QUFDaEQsYUFBTyxrQkFBa0IsU0FBUzs7QUFHN0IsaUNBQTZCLGVBQWU7QUFDakQsYUFBTyxtQkFBbUIsU0FBUzs7QUFHckMsUUFBTSxjQUFjO01BQ1o7TUFBWTtNQUFXO01BQWdCO01BQWlCO01BQW9CO01BQWE7TUFDekY7TUFBVTtNQUFZO01BQWlCO01BQ3ZDO01BQVE7TUFBUTtNQUNoQjtNQUNBO01BQVc7TUFBaUI7TUFBdUI7TUFBZTtNQUFvQjtNQUFxQjtNQUFxQjtNQUFrQjtNQUFnQjtNQUFXO01BQVc7TUFBVztNQUFXO01BQVc7TUFBa0I7TUFBVztNQUFXO01BQWU7TUFBZ0I7TUFBWTtNQUFnQjtNQUFzQjtNQUFlO01BQVU7TUFBZ0I7TUFBVTtNQUFRO01BQWE7TUFBb0I7TUFBa0I7TUFBaUI7TUFDamQ7TUFBSztNQUFTO01BQ2Q7TUFBVztNQUFTO01BQWE7TUFDakM7TUFBUztNQUFRO01BQ2pCO01BQ0E7TUFBVTtNQUFRO01BQVE7TUFBZ0I7TUFBYTtNQUFXO01BQVk7TUFBaUI7TUFDL0Y7TUFBUTtNQUFXO01BQVc7TUFBWTtNQUMxQztNQUFrQjtNQUNsQjtNQUFVO01BQU87TUFBYztNQUFRO01BQVM7TUFBTztNQUFVO01BQ2pFO01BQVU7TUFBUTtNQUFZO01BQVk7TUFBUztNQUFRO01BQzNEO01BQVc7TUFDWDtNQUFTO01BQVE7O0FBaEJ6QixRQWtCTSxvQkFBb0I7TUFDbEI7TUFBaUI7TUFBYztNQUFZO01BQXNCO01BQWM7TUFBYTtNQUFlO01BQVU7TUFBaUI7TUFBaUI7TUFDdko7TUFBYTtNQUFpQjtNQUFlO01BQWtCO01BQVE7TUFBUztNQUFRO01BQ3hGO01BQVk7TUFBYztNQUFRO01BQWE7TUFBYTtNQUFhO01BQWlCO01BQVM7TUFBdUI7TUFBK0I7TUFBaUI7TUFBbUI7TUFBcUI7TUFBb0I7TUFBZTtNQUFVO01BQU07TUFDclE7TUFBSztNQUFpQjtNQUFXO01BQW1CO01BQWE7TUFBVztNQUFXO01BQXFCO01BQVk7TUFBTztNQUFNO01BQ3JJO01BQVk7TUFBWTtNQUFhO01BQXFCO01BQU87TUFBUztNQUFZO01BQ3RGO01BQVE7TUFBZ0I7TUFBYTtNQUFVO01BQWE7TUFBZTtNQUFlO01BQWlCO01BQWtCO01BQWE7TUFBZTtNQUFhO01BQW9CO01BQWdCO01BQWM7TUFBZ0I7TUFBZTtNQUFVO01BQU07TUFBUTtNQUFNO01BQ3JSO01BQU07TUFBTTtNQUFjO01BQWdDO01BQThCO01BQVk7TUFBcUI7TUFDekg7TUFBVztNQUFXO01BQXFCO01BQWM7TUFBVTtNQUFlO01BQWtCO01BQWtCO01BQVE7TUFDOUg7TUFBTTtNQUFlO01BQW1CO01BQU07TUFBTztNQUFxQjtNQUMxRTtNQUFLO01BQU07TUFBTTtNQUFNO01BQU07TUFBZ0I7TUFBb0I7TUFBVztNQUFhO01BQWM7TUFDdkc7TUFBZ0I7TUFBa0I7TUFBa0I7TUFBcUI7TUFDekU7TUFBYztNQUFjO01BQWdCO01BQWdCO01BQWU7TUFBZTtNQUFRO01BQW9CO01BQWE7TUFBZ0I7TUFBTztNQUFTO01BQTBCO01BQXlCO01BQWE7TUFBYTtNQUFVO01BQU87TUFDalE7TUFBUTtNQUFZO01BQWlCO01BQWtCO01BQVk7TUFBWTtNQUFZO01BQWE7TUFBVTtNQUFlO01BQWdCO01BQ2pKO01BQVk7TUFBVTtNQUFXO01BQVk7TUFBUztNQUFVO01BQWU7TUFBVTtNQUFZO01BQVc7TUFBcUI7TUFDckk7TUFBWTtNQUFRO01BQWM7TUFBdUI7TUFBb0I7TUFBZ0I7TUFBUztNQUFTO01BQWlCO01BQWlCO01BQWtCO01BQVU7TUFBYTtNQUFhO01BQWE7TUFBaUI7TUFBdUI7TUFBa0I7TUFDOVE7TUFBSztNQUFVO01BQVE7TUFBUTtNQUFvQjtNQUFlO01BQWE7TUFBc0I7TUFBb0I7TUFBaUI7TUFBbUI7TUFBVztNQUFVO01BQVU7TUFBTTtNQUNsTTtNQUFTO01BQVE7TUFBbUI7TUFBUTtNQUFTO01BQWdCO01BQVc7TUFBb0I7TUFBb0I7TUFBZ0I7TUFBTztNQUFlO01BQWdCO01BQVM7TUFBUztNQUFlO01BQWM7TUFBZ0I7TUFBMEI7TUFBMkI7TUFBVTtNQUFVO01BQW9CO01BQXFCO01BQWtCO01BQW1CO01BQXFCO01BQWtCO01BQWdCO01BQVM7TUFBZ0I7TUFBZ0I7TUFBdUI7TUFBYztNQUFpQjtNQUF3QjtNQUNsakI7TUFBZTtNQUFVO01BQVc7TUFBVztNQUFlO01BQW1CO01BQWtCO01BQWM7TUFBaUI7TUFBaUI7TUFBUztNQUFNO01BQWE7TUFBcUI7TUFDcE07TUFBTTtNQUFNO01BQXNCO01BQXVCO01BQVc7TUFBZ0I7TUFBaUI7TUFDckc7TUFBZ0I7TUFBYTtNQUFpQjtNQUFrQjtNQUFVO01BQVc7TUFBYztNQUFpQjtNQUFpQjtNQUFXO01BQWM7TUFDOUo7TUFBUztNQUFVO01BQWdCO01BQ25DO01BQUs7TUFBWTtNQUFNO01BQU07TUFDN0I7TUFBSztNQUFNO01BQU07TUFDakI7TUFBSzs7QUExQ2IsUUE0Q00scUJBQXFCO01BQ25CO01BQVU7TUFBaUI7TUFBYTtNQUFVO01BQVM7TUFBbUI7TUFBcUI7TUFBTztNQUFTO01BQWdCO01BQWE7TUFDaEo7TUFBVztNQUFlO01BQWU7TUFBYTtNQUFXO01BQVc7TUFBUTtNQUFXO01BQWE7TUFBVztNQUFRO01BQVc7TUFBbUI7TUFBZTtNQUFZO01BQVU7TUFDbE07TUFBUTtNQUFZO01BQVc7TUFBUztNQUFPO01BQVk7TUFBWTtNQUN2RTtNQUNBO01BQVE7TUFBYztNQUFlO01BQWM7TUFBa0I7TUFBYztNQUNuRjtNQUFXO01BQVU7TUFBVTtNQUFRO01BQVE7TUFBWTtNQUFXO01BQ3RFO01BQVE7TUFBTTtNQUFhO01BQWE7TUFDeEM7TUFBYTtNQUFXO01BQ3hCO01BQVM7TUFBUTtNQUFRO01BQVE7TUFDakM7TUFBWTtNQUFnQjtNQUFlO01BQU87TUFBYTtNQUFTO01BQWM7TUFBVTtNQUFPO01BQWE7TUFBWTtNQUNoSTtNQUFRO01BQWM7TUFDdEI7TUFBUTtNQUNSO01BQVc7TUFBZTtNQUFVO01BQVc7TUFDL0M7TUFBYztNQUFZO01BQU87TUFBWTtNQUFZO01BQVE7TUFBVztNQUM1RTtNQUFXO01BQVM7TUFBVTtNQUFhO01BQVk7TUFBWTtNQUFTO01BQVE7TUFBUztNQUFRO01BQWM7TUFBTztNQUFVO01BQVc7TUFBVTtNQUFTO01BQVE7TUFBUztNQUNuTDtNQUFZO01BQVU7TUFBUztNQUMvQjtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7OztBQy9FUjs7Ozs7Ozs7Ozs7OztNQUtnQix5QkFBdUIsV0FBQTtlQUF2Qjs7TUFPQSw4QkFBNEIsV0FBQTtlQUE1Qjs7TUFnQkEsK0JBQTZCLFdBQUE7ZUFBN0I7O01BY0EsMEJBQXdCLFdBQUE7ZUFBeEI7O01BTUEsd0JBQXNCLFdBQUE7ZUFBdEI7O01Bb0JBLGdCQUFjLFdBQUE7ZUFBZDs7Ozs7QUEvRFQscUNBQWlDLGFBQWE7QUFDbkQsVUFBTSwwQkFBMEIsZUFBZSxhQUFhLFNBQUMsWUFBQTtlQUFnQixXQUFXLGdCQUFnQjtVQUNsRyxXQUFXLHdCQUF3QixJQUFJLFNBQUMsWUFBQTtlQUFlLFdBQVc7O0FBRXhFLGFBQU87O0FBR0YsMENBQXNDLFNBQVMsUUFBZ0M7VUFBeEIsb0JBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFvQjtBQUNoRixVQUFJLFNBQVMsR0FBRztBQUNkLFlBQU0sZ0JBQWdCLFFBQVE7QUFFOUIsWUFBSSxrQkFBa0IsTUFBTTtBQUMxQiw0QkFBa0IsS0FBSztBQUV2QjtBQUVBLHVDQUE2QixlQUFlLFFBQVE7OztBQUl4RCxhQUFPOztBQUdGLDJDQUF1QyxTQUFTLE9BQWdDO1VBQXpCLHFCQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBcUI7QUFDakYsVUFBSSxRQUFRLEdBQUc7QUFDYixZQUFNLGdCQUFnQixRQUFRO0FBRTlCLFFBQUEsSUFBQSxPQUFBLE1BQUssb0JBQW9CO0FBRXpCO0FBRUEsc0JBQWMsUUFBUSxTQUFDLGNBQUE7aUJBQWlCLDhCQUE4QixjQUFjLE9BQU87OztBQUc3RixhQUFPOztBQUdGLHNDQUFrQyxVQUFVLFVBQVU7QUFDM0QsVUFBTSxtQkFBbUIsZUFBZSxVQUFVLFNBQUMsU0FBQTtlQUFZLHVCQUF1QixTQUFTOztBQUUvRixhQUFPOztBQUdGLG9DQUFnQyxTQUFTLFVBQVU7QUFDeEQsVUFBTSxjQUFjLFFBQVE7QUFFNUIsY0FBUTthQUNELEtBQUssY0FBYztBQUN0QixjQUFNLGFBQWE7QUFFbkIsaUJBQU8sV0FBVyxRQUFROzthQUd2QixLQUFLLFdBQVc7QUFDbkIsY0FBSSxhQUFhLFdBQUEsVUFBVTtBQUN6QixtQkFBTzs7OztBQUtiLGFBQU87O0FBR0YsNEJBQXdCLFVBQVUsTUFBTTtBQUM3QyxVQUFNLG1CQUFtQixJQUNuQixpQkFBaUIsU0FBUztBQUVoQyxlQUFTLFFBQVEsR0FBRyxRQUFRLGdCQUFnQixTQUFTO0FBQ25ELFlBQU0sVUFBVSxTQUFTLFFBQ25CLFNBQVMsS0FBSztBQUVwQixZQUFJLFFBQVE7QUFDViwyQkFBaUIsS0FBSzs7O0FBSTFCLGFBQU87Ozs7O0FDakZUOzs7OzttQ0FxRkEsV0FBQTs7O2VBQUE7Ozs7OztBQS9FQSxnQ0FBK0M7VUFBckIsV0FBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQVcsV0FBQTtBQUNuQyxVQUFJLGdCQUFnQjtBQUVwQixVQUFNLG1CQUFtQixLQUFLLFdBQVc7QUFFekMsVUFBSSxxQkFBcUIsTUFBTTtBQUM3QixZQUFJLGlCQUFpQixRQUFRLFdBQVc7QUFDdEMsY0FBTSxvQkFBb0I7WUFBQzthQUNyQixpQkFBaUIsSUFBQSxLQUFBLHlCQUF3QixvQkFDekMscUJBQXFCLElBQUEsT0FBQSxPQUFNO0FBRWpDLDBCQUFnQixzQkFBc0I7OztBQUkxQyxhQUFPOztBQUdULGdDQUErQztVQUFyQixXQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBVyxXQUFBO0FBQ25DLFVBQU0sZ0JBQWdCLEtBQUssV0FBVyxZQUNoQyxtQkFBbUIsSUFBQSxLQUFBLDBCQUF5QixlQUFlLFdBQzNELGdCQUFnQixJQUFBLEtBQUEseUJBQXdCO0FBRTlDLGFBQU87O0FBR1Qsb0NBQTZFO1VBQS9DLFdBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFXLFdBQUEsVUFBVSxnQkFBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQWdCO0FBQ2pFLFVBQU0sU0FBUyxlQUNULFVBQVUsS0FBSyxZQUNmLG9CQUFvQixJQUFBLEtBQUEsOEJBQTZCLFNBQVMsU0FDMUQsdUJBQXVCLElBQUEsS0FBQSwwQkFBeUIsbUJBQW1CLFdBQ25FLG9CQUFvQixJQUFBLEtBQUEseUJBQXdCO0FBRWxELGFBQU87O0FBR1QscUNBQTZFO1VBQTlDLFdBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFXLFdBQUEsVUFBVSxlQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBZTtBQUNqRSxVQUFNLFFBQVEsY0FDUixVQUFVLEtBQUssWUFDZixxQkFBcUIsSUFBQSxLQUFBLCtCQUE4QixTQUFTLFFBQzVELHdCQUF3QixJQUFBLEtBQUEsMEJBQXlCLG9CQUFvQixXQUNyRSxxQkFBcUIsSUFBQSxLQUFBLHlCQUF3QjtBQUVuRCxhQUFPOztBQUdULHFDQUFvRDtVQUFyQixXQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBVyxXQUFBO0FBQ3hDLFVBQUkscUJBQXFCO0FBRXpCLFVBQU0scUJBQXFCLEtBQUssV0FBVztBQUUzQyxVQUFLLHVCQUF1QixRQUFTLElBQUEsS0FBQSx3QkFBdUIsb0JBQW9CLFdBQVc7QUFDekYsNkJBQXFCLG1CQUFtQixlQUFlOztBQUd6RCxhQUFPOztBQUdULHlDQUF3RDtVQUFyQixXQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBVyxXQUFBO0FBQzVDLFVBQUkseUJBQXlCO0FBRTdCLFVBQU0seUJBQXlCLEtBQUssV0FBVztBQUUvQyxVQUFLLDJCQUEyQixRQUFTLElBQUEsS0FBQSx3QkFBdUIsd0JBQXdCLFdBQVc7QUFDakcsaUNBQXlCLHVCQUF1QixlQUFlOztBQUdqRSxhQUFPOztBQUdULFFBQU0sZ0JBQWdCO01BQ3BCO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7UUFHRixXQUFlOzs7O0FDckZmOzs7OzttQ0FvRkEsV0FBQTs7O2VBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTlFQSxRQUFNLGNBQU4sMkJBQUE7NEJBQ2MsTUFBSTs4QkFEWjtBQUVGLGFBQUssYUFBYSxTQUFTLGVBQWU7QUFFMUMsYUFBSyxXQUFXLGNBQWM7O21CQUo1QixjQUFBOztVQU9KLEtBQUE7aUJBQUEsbUJBQVU7QUFDUixnQkFBTSxZQUFZLEtBQUssV0FBVyxXQUM1QixPQUFPO0FBRWIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRLE1BQU07QUFDWixnQkFBTSxZQUFZO0FBRWxCLGlCQUFLLFdBQVcsWUFBWTs7OztVQUc5QixLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsZ0JBQU0sTUFBTSxLQUFLLFdBQVcsV0FDdEIsT0FBTyxLQUFLLFdBQVcsWUFDdkIsU0FBUyxJQUFJLFFBQUEsUUFBTyxLQUFLO0FBRS9CLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxxQkFBWTtBQUNWLGdCQUFNLHFCQUFxQixLQUFLLFdBQVcseUJBQ3JDLFNBQVMsUUFBQSxRQUFPLHVCQUF1QjtBQUU3QyxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsb0JBQVc7QUFDVCxnQkFBTSxjQUFjLEtBQUssV0FBVyxhQUM5QixRQUFRO0FBRWQsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsZ0JBQU0sZUFBZSxLQUFLLFdBQVcsY0FDL0IsU0FBUztBQUVmLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxtQkFBVSxlQUFlO0FBQUUsMEJBQWMsUUFBUTs7OztVQUVqRCxLQUFBO2lCQUFBLGtCQUFTLGVBQWU7QUFBRSwwQkFBYyxPQUFPOzs7O1VBRS9DLEtBQUE7aUJBQUEsZUFBTSxlQUFlO0FBQUUsMEJBQWMsSUFBSTs7OztVQUV6QyxLQUFBO2lCQUFBLG9CQUFXLGVBQWU7QUFBRSwwQkFBYyxPQUFPOzs7O1VBRWpELEtBQUE7aUJBQUEsc0JBQWEsZ0JBQWdCO0FBQzNCLGdCQUFNLGdCQUFnQixlQUFlLFdBQVcsWUFDMUMsb0JBQW9CLGVBQWU7QUFFekMsMEJBQWMsYUFBYSxLQUFLLFlBQVk7Ozs7VUFHOUMsS0FBQTtpQkFBQSxxQkFBWSxnQkFBZ0I7QUFDMUIsZ0JBQU0sZ0JBQWdCLGVBQWUsV0FBVyxZQUMxQyxvQkFBb0IsZUFBZTtBQUV6QywwQkFBYyxhQUFhLEtBQUssWUFBWSxrQkFBa0I7Ozs7VUFHaEUsS0FBQTtpQkFBQSxrQkFBUztBQUNQLGlCQUFLLFdBQVc7Ozs7YUF4RWQ7O0FBNEVOLFdBQU8sT0FBTyxZQUFZLFdBQVcsU0FBQTtRQUVyQyxXQUFlOzs7O0FDcEZmOzs7Ozs7Ozs7Ozs7O01BTWdCLHNCQUFvQixXQUFBO2VBQXBCOztNQVlBLGdDQUE4QixXQUFBO2VBQTlCOzs7Ozs7Ozs7Ozs7OztBQVpULGtDQUE4QixVQUFVO0FBQzdDLGlCQUFXLFNBQVMsT0FBTyxTQUFDLFdBQVUsU0FBWTtBQUNoRCxZQUFJLFNBQVM7QUFDWCxvQkFBUyxLQUFLOztBQUdoQixlQUFPO1NBQ047QUFFSCxhQUFPOztBQUdGLDRDQUF3QyxVQUFVO0FBQ3ZELGlCQUFXLFNBQVMsSUFBSSxTQUFDLFNBQVk7QUFDbkMsWUFBSSxRQUFPLFlBQUEsY0FBQSxjQUFQLFFBQU8sY0FBWSxXQUFBLFFBQVE7QUFDN0IsY0FBTSxPQUFPLFNBQ1AsY0FBYyxJQUFJLGFBQUEsUUFBWTtBQUVwQyxvQkFBVTs7QUFHWixlQUFPOztBQUdULGFBQU87Ozs7O0FDOUJUOzs7OzttQ0FnR0EsV0FBQTs7O2VBQUE7Ozs7Ozs7Ozs7OztBQXhGQSw2QkFBeUIsWUFBWSxtQkFBbUIsbUJBQW1COztBQUN6RSxXQUFLLGFBQWEsSUFBQSxRQUFBLFNBQVEsWUFBWTtBQUV0QyxtQkFBYSxJQUFBLFFBQUEsT0FBTSxLQUFLLFlBQVk7QUFFcEMsVUFBUSxlQUFpQixLQUFLLFdBQXRCLGNBQ0YsTUFBTyxpQkFBaUIsV0FBQSxtQkFDeEIsaUJBQWlCLE9BQU8sS0FBSyxhQUM3QixRQUFRO0FBRWQsWUFBTSxRQUFRLFNBQUMsTUFBUztBQUN0QixZQUFNLFFBQVEsV0FBVyxPQUNuQixrQkFBa0Isa0JBQWtCO0FBRTFDLFlBQUksaUJBQWlCO0FBQ25CLHFCQUFBLE9BQWlCLE1BQU07ZUFDbEI7QUFDTCxjQUFNLG9CQUFvQixvQkFBb0IsTUFBTTtBQUVwRCxjQUFJLG1CQUFtQjtBQUNyQix5QkFBQSxPQUFtQixNQUFNOzs7O0FBSy9CLFVBQU0sZ0JBQWdCLHlCQUF5QixTQUFTLFdBQVcsZUFDN0QsVUFBVTtBQUVoQixvQkFBYyxRQUFRLFNBQUMsY0FBaUI7QUFDdEMsc0JBQWMsY0FBYztBQUU1QixjQUFLLElBQUk7O0FBR1gsV0FBSyxVQUFVOztBQUdqQiw2QkFBeUI7QUFDdkIsYUFBTyxLQUFLOztBQUdkLDBCQUFzQjtBQUNwQixhQUFPLEtBQUs7O0FBR2QsMkJBQXVCLE9BQU8sWUFBWTs7QUFDeEMsVUFBTSxrQkFBa0IsVUFBVTtBQUVsQyxVQUFJLG9CQUFvQixHQUFHO0FBQ3pCLFlBQU0sZ0JBQWdCLElBQUEsT0FBQSxPQUFNO0FBRTVCLFlBQUksUUFBTyxrQkFBQSxjQUFBLGNBQVAsUUFBTyxvQkFBa0IsV0FBQSxTQUFTO0FBQ3BDLGtCQUFRLE9BQU8sS0FBSyxLQUFLO0FBRXpCLHVCQUFhO2VBQ1I7QUFDTCx1QkFBYTs7O0FBSWpCLFVBQUksb0JBQW9CLEdBQUc7QUFDekIsZ0JBQVEsT0FBTyxLQUFLLEtBQUs7QUFFekIscUJBQWE7O0FBR2YsWUFBTSxRQUFRLFNBQUMsTUFBUztBQUN0QixZQUFNLFFBQVEsTUFBSyxRQUFRLE9BQ3JCLGVBQWUsTUFDZixhQUFhO1VBQ1g7O0FBR1IsZUFBTyxlQUFjLE9BQU8sY0FBYztBQUUxQyxZQUFJLFlBQVk7QUFDZCxpQkFBTyxNQUFLLFFBQVE7O1NBRXJCOztBQUdMLFFBQU0sWUFBWTtNQUNoQjtNQUNBO01BQ0E7TUFDQTs7UUFHRixXQUFlO0FBRWYsc0NBQWtDLFNBQVM7QUFDekMsVUFBSSxnQkFBZ0I7QUFFcEIsVUFBSSxRQUFPLFFBQVEsbUJBQWtCLFdBQUEsVUFBVTtBQUM3Qyx3QkFBZ0IsUUFBUSxjQUFjLEtBQUs7QUFFM0Msd0JBQWdCLElBQUEsT0FBQSxXQUFVO0FBRTFCLHdCQUFnQixJQUFBLFVBQUEsc0JBQXFCO0FBRXJDLHdCQUFnQixJQUFBLFVBQUEsZ0NBQStCOztBQUdqRCxhQUFPOztBQUdULDJCQUF1QixjQUFjLFNBQVM7QUFDNUMsVUFBTSxnQkFBaUIsUUFBTyxhQUFhLG1CQUFrQixXQUFBLFdBQ3JDLGFBQWEsa0JBQ1gsYUFBYTtBQUV2QyxhQUFPLE9BQU8sU0FBUzs7QUFHekIsd0JBQW9CLFNBQVMsTUFBTSxPQUFPO0FBQ3hDLFVBQU0sWUFBWSxLQUFLLE9BQU8sR0FBRyxlQUMzQixVQUFVO0FBRWhCLGNBQVEsR0FBRyxXQUFXOztBQUd4QiwwQkFBc0IsU0FBUyxNQUFNLE9BQU87QUFDMUMsVUFBSSxTQUFTLFdBQUEsWUFBWTtBQUN2QixlQUFPLFdBQUE7O0FBR1QsVUFBSSxTQUFTLFdBQUEsVUFBVTtBQUNyQixlQUFPLFdBQUE7O0FBR1QsVUFBSSxRQUFPLFVBQUEsY0FBQSxjQUFQLFFBQU8sWUFBVSxXQUFBLFFBQVE7QUFDM0IsWUFBTSxPQUFPLE9BQU8sS0FBSztBQUV6QixhQUFLLFFBQVEsU0FBQyxLQUFRO0FBQ3BCLGtCQUFRLFdBQVcsTUFBTSxPQUFPLE1BQU07O2lCQUUvQixRQUFPLFVBQUEsY0FBQSxjQUFQLFFBQU8sWUFBVSxXQUFBLFNBQVM7QUFDbkMsWUFBSSxPQUFPO0FBQ1Qsa0JBQVE7QUFFUixrQkFBUSxhQUFhLE1BQU07O2FBRXhCO0FBQ0wsZ0JBQVEsYUFBYSxNQUFNOzs7QUFJL0IsK0JBQTJCLE1BQU07QUFDL0IsYUFBTyxNQUFNLEtBQUs7O0FBR3BCLGlDQUE2QixNQUFNLEtBQUs7QUFDdEMsYUFBTyxNQUFNLElBQUEsTUFBQSxvQkFBbUIsUUFBUSxJQUFBLE1BQUEscUJBQW9COzs7OztBQ2hLOUQ7Ozs7Ozs7Ozs7Ozs7TUFFYSxpQkFBZSxXQUFBO2VBQWY7O01BQ0Esa0JBQWdCLFdBQUE7ZUFBaEI7O01BQ0Esa0JBQWdCLFdBQUE7ZUFBaEI7O01BQ0Esa0JBQWdCLFdBQUE7ZUFBaEI7O01BQ0Esa0JBQWdCLFdBQUE7ZUFBaEI7O01BQ0Esa0JBQWdCLFdBQUE7ZUFBaEI7O01BQ0EsbUJBQWlCLFdBQUE7ZUFBakI7O01BQ0EsbUJBQWlCLFdBQUE7ZUFBakI7O01BQ0EsbUJBQWlCLFdBQUE7ZUFBakI7O01BQ0Esb0JBQWtCLFdBQUE7ZUFBbEI7O01BQ0Esb0JBQWtCLFdBQUE7ZUFBbEI7O01BQ0EscUJBQW1CLFdBQUE7ZUFBbkI7O01BQ0EscUJBQW1CLFdBQUE7ZUFBbkI7O01BQ0EscUJBQW1CLFdBQUE7ZUFBbkI7O01BQ0Esc0JBQW9CLFdBQUE7ZUFBcEI7O01BQ0Esc0JBQW9CLFdBQUE7ZUFBcEI7O01BQ0Esc0JBQW9CLFdBQUE7ZUFBcEI7O01BQ0Esd0JBQXNCLFdBQUE7ZUFBdEI7O01BRWIsU0FtQkUsV0FBQTtlQW5CRjs7O0FBbkJPLFFBQU0sa0JBQWtCO0FBQ3hCLFFBQU0sbUJBQW1CO0FBQ3pCLFFBQU0sbUJBQW1CO0FBQ3pCLFFBQU0sbUJBQW1CO0FBQ3pCLFFBQU0sbUJBQW1CO0FBQ3pCLFFBQU0sbUJBQW1CO0FBQ3pCLFFBQU0sb0JBQW9CO0FBQzFCLFFBQU0sb0JBQW9CO0FBQzFCLFFBQU0sb0JBQW9CO0FBQzFCLFFBQU0scUJBQXFCO0FBQzNCLFFBQU0scUJBQXFCO0FBQzNCLFFBQU0sc0JBQXNCO0FBQzVCLFFBQU0sc0JBQXNCO0FBQzVCLFFBQU0sc0JBQXNCO0FBQzVCLFFBQU0sdUJBQXVCO0FBQzdCLFFBQU0sdUJBQXVCO0FBQzdCLFFBQU0sdUJBQXVCO0FBQzdCLFFBQU0seUJBQXlCO1FBRXRDLFdBQWU7TUFDYjtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7Ozs7O0FDdkNGOzs7OzttQ0FtQkEsV0FBQTs7O2VBQUE7Ozs7QUFmQSxxQkFBaUIsY0FBYyxTQUFTO0FBQUUsV0FBSyxHQUFHLFlBQUEsa0JBQWtCLGNBQWM7O0FBRWxGLHNCQUFrQixjQUFjLFNBQVM7QUFBRSxXQUFLLElBQUksWUFBQSxrQkFBa0IsY0FBYzs7QUFFcEYsdUJBQW1CLGdCQUFnQixTQUFTO0FBQUUsV0FBSyxHQUFHLFlBQUEsb0JBQW9CLGdCQUFnQjs7QUFFMUYsd0JBQW9CLGdCQUFnQixTQUFTO0FBQUUsV0FBSyxJQUFJLFlBQUEsb0JBQW9CLGdCQUFnQjs7QUFFNUYsUUFBTSxZQUFZO01BQ2hCO01BQ0E7TUFDQTtNQUNBOztRQUdGLFdBQWU7Ozs7QUNuQmY7Ozs7O21DQW1CQSxXQUFBOzs7ZUFBQTs7OztBQWZBLHFCQUFpQixjQUFjLFNBQVM7QUFBRSxXQUFLLEdBQUcsWUFBQSxrQkFBa0IsY0FBYzs7QUFFbEYsc0JBQWtCLGNBQWMsU0FBUztBQUFFLFdBQUssSUFBSSxZQUFBLGtCQUFrQixjQUFjOztBQUVwRiwyQkFBdUIsY0FBYyxTQUFTO0FBQUUsV0FBSyxHQUFHLFlBQUEscUJBQXFCLGNBQWM7O0FBRTNGLDRCQUF3QixjQUFjLFNBQVM7QUFBRSxXQUFLLElBQUksWUFBQSxxQkFBcUIsY0FBYzs7QUFFN0YsUUFBTSxjQUFjO01BQ2xCO01BQ0E7TUFDQTtNQUNBOztRQUdGLFdBQWU7Ozs7QUNuQmY7Ozs7O21DQW9CQSxXQUFBOzs7ZUFBQTs7O0FBbEJBLHdCQUFvQjtBQUNsQixhQUFPLEtBQUs7O0FBR2Qsc0JBQWtCLE9BQU87QUFDdkIsV0FBSyxRQUFROztBQUdmLHlCQUFxQixPQUFPO0FBQzFCLGFBQU8sT0FBTyxLQUFLLE9BQU87O0FBRzVCLFFBQU0sY0FBYztNQUNsQjtNQUNBO01BQ0E7O1FBR0YsV0FBZTs7OztBQ3BCZjs7Ozs7bUNBRWEsMEJBQUE7OztlQUFBOzs7QUFBTixRQUFNLHlCQUF5Qjs7OztBQ0Z0Qzs7Ozs7Ozs7Ozs7OztNQU1nQixVQUFRLFdBQUE7ZUFBUjs7TUFFQSxXQUFTLFdBQUE7ZUFBVDs7TUErQ2hCLFNBQTRCLFdBQUE7ZUFBNUI7Ozs7OztBQWpETyxzQkFBa0IsZUFBZSxTQUFTO0FBQUUsV0FBSyxHQUFHLFlBQUEsbUJBQW1CLGVBQWU7O0FBRXRGLHVCQUFtQixlQUFlLFNBQVM7QUFBRSxXQUFLLElBQUksWUFBQSxtQkFBbUIsZUFBZTs7QUFFL0YsK0JBQTJCOztBQUN6QixVQUFNLGVBQWUsU0FBUyxjQUFjLFdBQUEsU0FDdEMsUUFBUyxnU0FTVCxPQUFPLFdBQUEsYUFDUCxPQUFPLGNBQUE7QUFFYixtQkFBYSxhQUFhLFNBQVM7QUFFbkMsbUJBQWEsT0FBTztBQUVwQixtQkFBYSxPQUFPO0FBRXBCLFdBQUssbUJBQW1CO0FBRXhCLG1CQUFhLFNBQVMsV0FBQTtlQUFNLHdCQUFBOztBQUU1QixXQUFLLFdBQVcsWUFBWTs7QUFHOUIsa0NBQThCO0FBQzVCLFVBQU0sZUFBZSxLQUFLLGtCQUNwQixlQUFlLGFBQWEsZ0JBQWdCO0FBRWxELG1CQUFhLG9CQUFvQixZQUFBLG1CQUFtQjtBQUVwRCxXQUFLLFdBQVcsWUFBWTtBQUU1QixhQUFPLEtBQUs7O0FBR2QsUUFBTSxlQUFlO01BQ25CO01BQ0E7TUFDQTtNQUNBOztRQUdGLFdBQWU7QUFFZixxQ0FBaUMsU0FBUztBQUN4QyxVQUFNLGVBQWUsUUFBUSxrQkFDdkIscUJBQXFCLGFBQWEsZ0JBQWdCO0FBRXhELHlCQUFtQixpQkFBaUIsWUFBQSxtQkFBbUIsU0FBQyxPQUFVO0FBQ2hFLFlBQU0sdUJBQXVCLFFBQVEsbUJBQW1CLFlBQUE7QUFFeEQsNkJBQXFCLFFBQVEsU0FBQyxzQkFBQTtpQkFBd0IscUJBQW9COzs7Ozs7O0FDaEU5RTs7Ozs7bUNBK0hBLFdBQUE7OztlQUFBOzs7Ozs7QUF6SEEsZ0JBQVksWUFBWSxTQUF5QjtVQUFoQixVQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBVTs7QUFDekMsbUJBQWEsV0FBVyxNQUFNLFdBQUE7QUFFOUIsaUJBQVcsUUFBUSxTQUFDLFdBQWM7QUFDaEMsWUFBSSxjQUFjLFlBQUEsbUJBQW1CO0FBQ25DLGNBQU0sdUJBQXVCLE1BQUssbUJBQW1CLFlBQUEsb0JBQy9DLDZCQUE2QixxQkFBcUI7QUFFeEQsY0FBSSwrQkFBK0IsR0FBRztBQUNwQyxrQkFBSzs7O0FBSVQsWUFBTSxnQkFBZ0IsTUFBSyxpQkFBaUIsV0FBVyxTQUFTO0FBRWhFLGNBQUssV0FBVyxpQkFBaUIsV0FBVzs7O0FBSWhELGlCQUFhLFlBQVksU0FBeUI7VUFBaEIsVUFBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQVU7O0FBQzFDLG1CQUFhLFdBQVcsTUFBTSxXQUFBO0FBRTlCLGlCQUFXLFFBQVEsU0FBQyxXQUFjO0FBQ2hDLFlBQU0sZ0JBQWdCLE1BQUssb0JBQW9CLFdBQVcsU0FBUztBQUVuRSxjQUFLLFdBQVcsb0JBQW9CLFdBQVc7QUFFL0MsWUFBSSxjQUFjLFlBQUEsbUJBQW1CO0FBQ25DLGNBQU0sdUJBQXVCLE1BQUssbUJBQW1CLFlBQUEsb0JBQy9DLDZCQUE2QixxQkFBcUI7QUFFeEQsY0FBSSwrQkFBK0IsR0FBRztBQUNwQyxZQUFBLElBQUEsUUFBQSxvQkFBa0I7Ozs7O0FBTTFCLDhCQUEwQixXQUFXLFNBQVMsU0FBUztBQUNyRCxVQUFJLEtBQUssbUJBQW1CLFFBQVc7QUFDckMsYUFBSyxpQkFBaUI7O0FBR3hCLFVBQU0sZ0JBQWdCLEtBQUssb0JBQW9CLFdBQVcsU0FBUztBQUVuRSxXQUFLLGVBQWUsS0FBSztBQUV6QixhQUFPOztBQUdULGlDQUE2QixXQUFXLFNBQVMsU0FBUztBQUN4RCxVQUFNLGdCQUFnQixLQUFLLGtCQUFrQixXQUFXLFNBQVMsVUFDM0QsUUFBUSxLQUFLLGVBQWUsUUFBUSxnQkFDcEMsUUFBUSxPQUNSLGNBQWM7QUFFcEIsV0FBSyxlQUFlLE9BQU8sT0FBTztBQUVsQyxVQUFJLEtBQUssZUFBZSxXQUFXLEdBQUc7QUFDcEMsZUFBTyxLQUFLOztBQUdkLGFBQU87O0FBR1QsK0JBQTJCLFdBQVcsU0FBUyxTQUFTO0FBQ3RELFVBQU0sZ0JBQWdCLEtBQUssZUFBZSxLQUFLLFNBQUMsZ0JBQWtCO0FBQ2hFLFlBQUssZUFBYyxZQUFZLFdBQWEsZUFBYyxZQUFZLFdBQWEsZUFBYyxjQUFjLFdBQVk7QUFDekgsaUJBQU87OztBQUlYLGFBQU87O0FBR1QsZ0NBQTRCLFdBQVc7QUFDckMsVUFBTSxpQkFBaUI7QUFFdkIsVUFBSSxLQUFLLG1CQUFtQixRQUFXO0FBQ3JDLGFBQUssZUFBZSxRQUFRLFNBQUMsZUFBa0I7QUFDN0MsY0FBTSxRQUFTLGNBQWMsY0FBYztBQUUzQyxjQUFJLE9BQU87QUFDVCwyQkFBZSxLQUFLOzs7O0FBSzFCLGFBQU87O0FBR1QsaUNBQTZCLFdBQVcsU0FBUyxTQUFTOztBQUN4RCxVQUFJO0FBRUosVUFBTSxpQkFBaUI7QUFFdkIsc0JBQWdCLFNBQUMsT0FBVTtBQUN6QixZQUFNLFlBQUE7QUFFTixnQkFBUSxLQUFLLGdCQUFnQixPQUFPOztBQUd0QyxhQUFPLE9BQU8sZUFBZTtRQUMzQjtRQUNBO1FBQ0E7O0FBR0YsYUFBTzs7QUFHVCxRQUFNLGNBQWM7TUFDbEI7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7O1FBR0YsV0FBZTs7OztBQy9IZjs7Ozs7bUNBeUNBLFdBQUE7OztlQUFBOzs7O0FBakNBLHVCQUFtQixnQkFBZ0IsU0FBUztBQUFFLFdBQUssR0FBRyxZQUFBLG9CQUFvQixnQkFBZ0I7O0FBRTFGLHdCQUFvQixnQkFBZ0IsU0FBUztBQUFFLFdBQUssSUFBSSxZQUFBLG9CQUFvQixnQkFBZ0I7O0FBRTVGLHdCQUFvQixpQkFBaUIsU0FBUztBQUFFLFdBQUssR0FBRyxZQUFBLHFCQUFxQixpQkFBaUI7O0FBRTlGLHlCQUFxQixpQkFBaUIsU0FBUztBQUFFLFdBQUssSUFBSSxZQUFBLHFCQUFxQixpQkFBaUI7O0FBRWhHLHlCQUFxQixrQkFBa0IsU0FBUztBQUFFLFdBQUssR0FBRyxZQUFBLHNCQUFzQixrQkFBa0I7O0FBRWxHLDBCQUFzQixrQkFBa0IsU0FBUztBQUFFLFdBQUssSUFBSSxZQUFBLHNCQUFzQixrQkFBa0I7O0FBRXBHLHlCQUFxQixrQkFBa0IsU0FBUztBQUFFLFdBQUssR0FBRyxZQUFBLHNCQUFzQixrQkFBa0I7O0FBRWxHLDBCQUFzQixrQkFBa0IsU0FBUztBQUFFLFdBQUssSUFBSSxZQUFBLHNCQUFzQixrQkFBa0I7O0FBRXBHLHlCQUFxQixrQkFBa0IsU0FBUztBQUFFLFdBQUssR0FBRyxZQUFBLHNCQUFzQixrQkFBa0I7O0FBRWxHLDBCQUFzQixrQkFBa0IsU0FBUztBQUFFLFdBQUssSUFBSSxZQUFBLHNCQUFzQixrQkFBa0I7O0FBRXBHLFFBQU0sY0FBYztNQUNsQjtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7UUFHRixXQUFlOzs7O0FDekNmOzs7OzttQ0F5QkEsV0FBQTs7O2VBQUE7Ozs7QUFyQkEsc0JBQWtCLGVBQWUsU0FBUztBQUFFLFdBQUssR0FBRyxZQUFBLG1CQUFtQixlQUFlOztBQUV0Rix1QkFBbUIsZUFBZSxTQUFTO0FBQUUsV0FBSyxJQUFJLFlBQUEsbUJBQW1CLGVBQWU7O0FBRXhGLDRCQUF3QjtBQUFFLGFBQU8sS0FBSyxXQUFXOztBQUVqRCw2QkFBeUI7QUFBRSxhQUFPLEtBQUssV0FBVzs7QUFFbEQsMEJBQXNCLFdBQVc7QUFBRSxXQUFLLFdBQVcsWUFBWTs7QUFFL0QsMkJBQXVCLFlBQVk7QUFBRSxXQUFLLFdBQVcsYUFBYTs7QUFFbEUsUUFBTSxlQUFlO01BQ25CO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7UUFHRixXQUFlOzs7O0FDekJmOzs7OzttQ0EyVUEsV0FBQTs7O2VBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOVNBLFFBQU0sVUFBTiwyQkFBQTt3QkFDYyxVQUFROzhCQURoQjtBQUVGLFlBQUksVUFBVTtBQUNaLGVBQUssYUFBYSxTQUFTLGNBQWM7QUFFekMsZUFBSyxXQUFXLGNBQWM7OzttQkFMOUIsVUFBQTs7VUFTSixLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsZ0JBQU0sTUFBTSxLQUFLLFdBQVcsV0FDdEIsT0FBTyxLQUFLLFdBQVcsWUFDdkIsU0FBUyxJQUFJLFFBQUEsUUFBTyxLQUFLO0FBRS9CLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxxQkFBWTtBQUNWLGdCQUFNLHFCQUFxQixLQUFLLFdBQVcseUJBQ3JDLFNBQVMsUUFBQSxRQUFPLHVCQUF1QjtBQUU3QyxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsb0JBQStCO2dCQUF0QixnQkFBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQWdCO0FBQ3ZCLGdCQUFNLFFBQVEsZ0JBQ0UsS0FBSyxXQUFXLGNBQ2QsS0FBSyxXQUFXO0FBRWxDLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxrQkFBUyxPQUFPO0FBQ2Qsb0JBQVMsR0FBUSxPQUFOLE9BQU07QUFFakIsaUJBQUssTUFBTSxXQUFBLE9BQU87Ozs7VUFHcEIsS0FBQTtpQkFBQSxxQkFBZ0M7Z0JBQXRCLGdCQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBZ0I7QUFDeEIsZ0JBQU0sU0FBUyxnQkFDRSxLQUFLLFdBQVcsZUFDZCxLQUFLLFdBQVc7QUFFbkMsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG1CQUFVLFFBQVE7QUFDaEIscUJBQVUsR0FBUyxPQUFQLFFBQU87QUFFbkIsaUJBQUssTUFBTSxXQUFBLFFBQVE7Ozs7VUFHckIsS0FBQTtpQkFBQSxzQkFBYSxNQUFNO0FBQUUsbUJBQU8sS0FBSyxXQUFXLGFBQWE7Ozs7VUFFekQsS0FBQTtpQkFBQSxzQkFBYSxNQUFNO0FBQUUsbUJBQU8sS0FBSyxXQUFXLGFBQWE7Ozs7VUFFekQsS0FBQTtpQkFBQSxzQkFBYSxNQUFNLE9BQU87QUFBRSxpQkFBSyxXQUFXLGFBQWEsTUFBTTs7OztVQUUvRCxLQUFBO2lCQUFBLHdCQUFlLE1BQU07QUFBRSxpQkFBSyxXQUFXLGdCQUFnQjs7OztVQUV2RCxLQUFBO2lCQUFBLHNCQUFhLE1BQU0sT0FBTztBQUFFLGlCQUFLLGFBQWEsTUFBTTs7OztVQUVwRCxLQUFBO2lCQUFBLHlCQUFnQixNQUFNO0FBQUUsaUJBQUssZUFBZTs7OztVQUU1QyxLQUFBO2lCQUFBLGtCQUFTLFdBQVc7QUFBRSxpQkFBSyxXQUFXLFlBQVk7Ozs7VUFFbEQsS0FBQTtpQkFBQSxrQkFBUyxXQUFXO0FBQUUsaUJBQUssV0FBVyxVQUFVLElBQUk7Ozs7VUFFcEQsS0FBQTtpQkFBQSxxQkFBWSxXQUFXO0FBQUUsaUJBQUssV0FBVyxVQUFVLE9BQU87Ozs7VUFFMUQsS0FBQTtpQkFBQSxxQkFBWSxXQUFXO0FBQUUsaUJBQUssV0FBVyxVQUFVLE9BQU87Ozs7VUFFMUQsS0FBQTtpQkFBQSxrQkFBUyxXQUFXO0FBQUUsbUJBQU8sS0FBSyxXQUFXLFVBQVUsU0FBUzs7OztVQUVoRSxLQUFBO2lCQUFBLHdCQUFlO0FBQUUsaUJBQUssV0FBVyxZQUFZLFdBQUE7Ozs7VUFFN0MsS0FBQTtpQkFBQSxtQkFBVSxlQUFlO0FBQUUsMEJBQWMsUUFBUTs7OztVQUVqRCxLQUFBO2lCQUFBLGtCQUFTLGVBQWU7QUFBRSwwQkFBYyxPQUFPOzs7O1VBRS9DLEtBQUE7aUJBQUEsZUFBTSxlQUFlO0FBQUUsMEJBQWMsSUFBSTs7OztVQUV6QyxLQUFBO2lCQUFBLG9CQUFXLGVBQWU7QUFBRSwwQkFBYyxPQUFPOzs7O1VBRWpELEtBQUE7aUJBQUEsc0JBQWEsZ0JBQWdCO0FBQzNCLGdCQUFNLGdCQUFnQixlQUFlLFdBQVcsWUFDMUMsb0JBQW9CLGVBQWU7QUFFekMsMEJBQWMsYUFBYSxLQUFLLFlBQVk7Ozs7VUFHOUMsS0FBQTtpQkFBQSxxQkFBWSxnQkFBZ0I7QUFDMUIsZ0JBQU0sZ0JBQWdCLGVBQWUsV0FBVyxZQUMxQyxvQkFBb0IsZUFBZTtBQUV6QywwQkFBYyxhQUFhLEtBQUssWUFBWSxrQkFBa0I7Ozs7VUFHaEUsS0FBQTtpQkFBQSxpQkFBUSxTQUFTO0FBQ2YsZ0JBQU0sYUFBYSxRQUFRLFlBQ3JCLHVCQUF1QixLQUFLLFdBQVc7QUFFN0MsaUJBQUssV0FBVyxhQUFhLFlBQVk7Ozs7VUFHM0MsS0FBQTtpQkFBQSxnQkFBTyxTQUFTO0FBQ2QsZ0JBQU0sYUFBYSxRQUFRO0FBRTNCLGlCQUFLLFdBQVcsYUFBYSxZQUFZOzs7O1VBRzNDLEtBQUE7aUJBQUEsYUFBSSxTQUFTO0FBQUUsaUJBQUssT0FBTzs7OztVQUUzQixLQUFBO2lCQUFBLGdCQUFPLFNBQVM7QUFDZCxnQkFBSSxTQUFTO0FBQ1gsa0JBQU0sYUFBYSxRQUFRO0FBRTNCLG1CQUFLLFdBQVcsWUFBWTttQkFDdkI7QUFDTCxtQkFBSyxXQUFXOzs7OztVQUlwQixLQUFBO2lCQUFBLGVBQU0sU0FBUztBQUNiLGdCQUFNLHFCQUFxQixRQUFRLHlCQUM3QixXQUFXO2NBQ1Q7Y0FEUyxPQUVULG1CQUFHO0FBR1gsaUJBQUssSUFBSTtBQUVULHFCQUFTO0FBRVQscUJBQVMsUUFBUSxTQUFDLFVBQUE7cUJBQWEsU0FBUSxZQUFZLFNBQVE7Ozs7O1VBRzdELEtBQUE7aUJBQUEsaUJBQVEsU0FBUztBQUNmLGdCQUFNLHFCQUFxQixRQUFRLHlCQUM3QixXQUFXO2NBQ1Q7Y0FEUyxPQUVULG1CQUFHO0FBR1gscUJBQVMsUUFBUSxTQUFDLFVBQUE7cUJBQWEsU0FBUSxlQUFlLFNBQVE7O0FBRTlELGlCQUFLLE9BQU87Ozs7VUFHZCxLQUFBO2lCQUFBLGdCQUEyQjtnQkFBdEIsZUFBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQWUsV0FBQTtBQUFTLGlCQUFLLFFBQVE7Ozs7VUFFMUMsS0FBQTtpQkFBQSxnQkFBTztBQUFFLGlCQUFLLE1BQU0sV0FBQSxTQUFTLFdBQUE7Ozs7VUFFN0IsS0FBQTtpQkFBQSxpQkFBUSxTQUFTO0FBQUUsaUJBQUssTUFBTSxXQUFBLFNBQVM7Ozs7VUFFdkMsS0FBQTtpQkFBQSxrQkFBUztBQUFFLGlCQUFLLGVBQWUsV0FBQTs7OztVQUUvQixLQUFBO2lCQUFBLG1CQUFVO0FBQUUsaUJBQUssYUFBYSxXQUFBLFVBQVUsV0FBQTs7OztVQUV4QyxLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsZ0JBQU0sV0FBVyxLQUFLLGNBQ2hCLFVBQVUsQ0FBQztBQUVqQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsc0JBQWE7QUFDWCxnQkFBTSxXQUFXLEtBQUssYUFBYSxXQUFBO0FBRW5DLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSx1QkFBYztBQUNaLGdCQUFNLFVBQVUsS0FBSyxJQUFJLFdBQUEsVUFDbkIsWUFBYSxZQUFZLFdBQUE7QUFFL0IsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsZ0JBQU0sWUFBWSxLQUFLLGVBQ2pCLFVBQVU7QUFFaEIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsZ0JBQU0sWUFBWSxLQUFLLGVBQ2pCLFNBQVMsQ0FBQztBQUVoQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsZUFBTSxNQUFNLE9BQU87QUFDakIsZ0JBQUksVUFBVSxRQUFXO0FBQ3ZCLG1CQUFLLFdBQVcsTUFBTSxRQUFRO21CQUN6QjtBQUNMLGtCQUFNLFNBQVEsS0FBSyxXQUFXLE1BQU07QUFFcEMscUJBQU87Ozs7O1VBSVgsS0FBQTtpQkFBQSxjQUFLLE1BQU07QUFDVCxnQkFBSSxTQUFTLFFBQVc7QUFDdEIsa0JBQU0sWUFBWSxLQUFLLFdBQVc7QUFFbEMscUJBQU87QUFFUCxxQkFBTzttQkFDRjtBQUNMLGtCQUFNLGFBQVk7QUFFbEIsbUJBQUssV0FBVyxZQUFZOzs7OztVQUloQyxLQUFBO2lCQUFBLGFBQUksS0FBSzs7QUFDUCxnQkFBSSxRQUFRLFFBQVc7QUFDckIsa0JBQU0sZ0JBQWdCLGlCQUFpQixLQUFLLGFBQ3RDLFFBQU07QUFFWix1QkFBUyxRQUFRLEdBQUcsUUFBUSxjQUFjLFFBQVEsU0FBUztBQUN6RCxvQkFBTSxxQkFBcUIsT0FBQSxNQUFNLGdCQUMzQixPQUFPLG9CQUNQLFFBQVEsY0FBYyxpQkFBaUI7QUFFN0Msc0JBQUksUUFBUTs7QUFHZCxxQkFBTzt1QkFDRSxRQUFPLFFBQUEsY0FBQSxjQUFQLFFBQU8sVUFBUSxXQUFBLFFBQVE7QUFDaEMsa0JBQUksUUFBTztBQUVYLGtCQUFNLGlCQUFnQixpQkFBaUIsS0FBSyxhQUN0QyxTQUFRLGVBQWMsaUJBQWlCO0FBRTdDLG9CQUFNO0FBRU4scUJBQU87bUJBQ0Y7QUFDTCxrQkFBTSxRQUFRLE9BQU8sS0FBSztBQUUxQixvQkFBTSxRQUFRLFNBQUMsT0FBUztBQUN0QixvQkFBTSxTQUFRLElBQUk7QUFFbEIsc0JBQUssTUFBTSxPQUFNOzs7Ozs7VUFLdkIsS0FBQTtpQkFBQSxnQkFBTztBQUFFLGlCQUFLLFdBQVc7Ozs7VUFFekIsS0FBQTtpQkFBQSxpQkFBUTtBQUFFLGlCQUFLLFdBQVc7Ozs7VUFFMUIsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLFFBQVMsU0FBUyxrQkFBa0IsS0FBSztBQUUvQyxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1CQUFpQixPQUFPLFlBQW1DO0FBQXZCLHFCQUFBLE9BQUEsVUFBQSxRQUFHLHFCQUFILElBQUEsTUFBQSxPQUFBLElBQUEsT0FBQSxJQUFBLElBQUEsUUFBQSxHQUFBLFFBQUEsTUFBQSxTQUFBO0FBQUcsaUNBQUgsUUFBQSxLQUFBLFVBQUE7O0FBQ2xDLGdCQUFRLFVBQVksTUFBWixTQUNGLFVBQVUsbUJBQUEsTUFBQSxRQUFBO2NBQW1CO2NBQU87Y0FBMUIsT0FBbUMsbUJBQUcsdUJBQ2hELG9CQUFvQiwyQkFBMkIsUUFDL0Msb0JBQW9CLDJCQUEyQjtBQUVyRCxvQkFBUSxnQkFBZ0IsWUFBWSxtQkFBbUI7QUFFdkQsb0JBQVEsY0FBYyxRQUFRO0FBRTlCLG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUyxZQUFtQztBQUF2QixxQkFBQSxPQUFBLFVBQUEsUUFBRyxxQkFBSCxJQUFBLE1BQUEsT0FBQSxJQUFBLE9BQUEsSUFBQSxJQUFBLFFBQUEsR0FBQSxRQUFBLE1BQUEsU0FBQTtBQUFHLGlDQUFILFFBQUEsS0FBQSxVQUFBOztBQUN0QyxnQkFBTSxRQXZSSixVQXdSSSxVQUFVLG1CQUFBLE1BQUEsUUFBQTtjQUFtQjtjQUFPO2NBQTFCLE9BQW1DLG1CQUFHLHVCQUNoRCxvQkFBb0IsSUFDcEIsb0JBQW9CO0FBRTFCLG9CQUFRLGdCQUFnQixZQUFZLG1CQUFtQjtBQUV2RCxvQkFBUSxjQUFjLFFBQVE7QUFFOUIsbUJBQU87Ozs7YUFoU0w7O0FBb1NOLFdBQU8sT0FBTyxRQUFRLFdBQVcsS0FBQTtBQUNqQyxXQUFPLE9BQU8sUUFBUSxXQUFXLEtBQUE7QUFDakMsV0FBTyxPQUFPLFFBQVEsV0FBVyxPQUFBO0FBQ2pDLFdBQU8sT0FBTyxRQUFRLFdBQVcsT0FBQTtBQUNqQyxXQUFPLE9BQU8sUUFBUSxXQUFXLE9BQUE7QUFDakMsV0FBTyxPQUFPLFFBQVEsV0FBVyxPQUFBO0FBQ2pDLFdBQU8sT0FBTyxRQUFRLFdBQVcsUUFBQTtBQUNqQyxXQUFPLE9BQU8sUUFBUSxXQUFXLFFBQUE7QUFDakMsV0FBTyxPQUFPLFFBQVEsV0FBVyxTQUFBO1FBRWpDLFdBQWU7QUFFZixnQ0FBNEIsT0FBTyxTQUFnQztBQUF2QixlQUFBLE9BQUEsVUFBQSxRQUFHLHFCQUFILElBQUEsTUFBQSxPQUFBLElBQUEsT0FBQSxJQUFBLElBQUEsUUFBQSxHQUFBLFFBQUEsTUFBQSxTQUFBO0FBQUcsMkJBQUgsUUFBQSxLQUFBLFVBQUE7O1VBRXJCO0FBRHJCLFVBQU0sV0FBVyxNQUNYLFVBQVUsSUFBSyw2QkFBQSxTQUFTLFVBQVUsTUFBSyxLQUF4QixNQUFBLDBCQUFBO1FBQTZCO1FBQU87UUFBTTtRQUExQyxPQUFvRCxtQkFBRztBQUU1RSxjQUFRLGFBQWEsSUFBQSxNQUFBLGNBQWEsV0FDWCxTQUFTLGdCQUFnQixXQUFBLG1CQUFtQixXQUMxQyxTQUFTLGNBQWM7QUFFaEQsY0FBUSxXQUFXLGNBQWM7QUFFakMsYUFBTzs7QUFHVCx3Q0FBb0MsT0FBK0I7VUFBeEIsb0JBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFvQjtBQUM3RCxVQUFJLE1BQU0sZUFBZSxXQUFBLHFCQUFxQjtBQUM1Qyw0QkFBb0IsSUFBQSxRQUFBLFNBQVEsbUJBQW1CLE1BQU0sV0FBQTs7QUFHdkQsVUFBTSxhQUFhLE9BQU8sZUFBZTtBQUV6QyxVQUFJLGVBQWUsTUFBTTtBQUN2Qiw0QkFBb0IsMkJBQTJCLFlBQVk7O0FBRzdELGFBQU87O0FBR1Qsd0NBQW9DLE9BQStCO1VBQXhCLG9CQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBb0I7QUFDN0QsVUFBSSxNQUFNLGVBQWUsV0FBQSxxQkFBcUI7QUFDNUMsNEJBQW9CLElBQUEsT0FBQSxTQUFRLG1CQUFtQixNQUFNLFdBQUEscUJBQXFCLFNBQUMsaUJBQUE7aUJBQW9CLENBQUMsa0JBQWtCLFNBQVM7OztBQUc3SCxVQUFNLGFBQWEsT0FBTyxlQUFlO0FBRXpDLFVBQUksZUFBZSxNQUFNO0FBQ3ZCLDRCQUFvQiwyQkFBMkIsWUFBWTs7QUFHN0QsYUFBTzs7Ozs7QUNuWFQ7Ozs7O21DQTBDQSxXQUFBOzs7ZUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFsQ0EsMkJBQXVCLGVBQWUsWUFBOEI7QUFBbEIsZUFBQSxPQUFBLFVBQUEsUUFBRyxnQkFBSCxJQUFBLE1BQUEsT0FBQSxJQUFBLE9BQUEsSUFBQSxJQUFBLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLHNCQUFILE9BQUEsS0FBQSxVQUFBOztBQUNoRCxVQUFJLFVBQVU7QUFFZCxVQUFJLGtCQUFrQixRQUFXO0FBQy9CLHdCQUFnQixzQkFBc0I7QUFFdEMscUJBQWEsT0FBTyxPQUFPO1VBQ3pCO1dBQ0M7QUFFSCxZQUFJLE9BQU87bUJBRUEsYUFBYSxlQUFlLFNBQUEsVUFBVTtBQUMvQyxjQUFNLFFBQVE7QUFFZCxvQkFBVSxNQUFNLFVBQVUsT0FBTzttQkFDeEIsUUFBTyxrQkFBQSxjQUFBLGNBQVAsUUFBTyxvQkFBa0IsV0FBQSxRQUFRO0FBQzFDLGNBQU0sVUFBVTtBQUVoQixvQkFBVSxTQUFBLFFBQVEsWUFBWSxTQUFTO21CQUM5QixRQUFPLGtCQUFBLGNBQUEsY0FBUCxRQUFPLG9CQUFrQixXQUFBLFVBQVU7QUFDNUMsY0FBTSxrQkFBa0I7QUFFeEIsb0JBQVUsZ0JBQWdCOzs7QUFJOUIsYUFBTzs7QUFHVCxRQUFNLFNBQVE7TUFDWjs7UUFHRixXQUFlO0FBRWYsbUNBQStCLGVBQWU7QUFDNUMsc0JBQWdCLElBQUEsT0FBQSxTQUFRO0FBRXhCLHNCQUFnQixJQUFBLFVBQUEsc0JBQXFCO0FBRXJDLHNCQUFnQixJQUFBLFVBQUEsZ0NBQStCO0FBRS9DLGFBQU87O0FBSVQsMEJBQXNCLFVBQVUsT0FBTztBQUNyQyxVQUFNLGFBQWdDLFlBQWxCLFNBQVMsV0FBcUI7QUFFbEQsYUFBTzs7Ozs7QUMxRFQ7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxPQUFOLHlCQUFBLFNBQUE7Z0JBQU0sT0FBQTtnQ0FBQTt1QkFBQTtZQUNQLFdBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFXLFdBQUE7OEJBREo7aUNBRVg7O2FBRlc7dUJBQWEsU0FBQTtBQUtoQyxvQkFMbUIsTUFLWixXQUFVOzs7O0FFWG5COzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLE9BQU4seUJBQUEsU0FBQTtnQkFBTSxPQUFBO2dDQUFBO3VCQUFBOzhCQUFBOzs7bUJBQUEsT0FBQTs7VUFDbkIsS0FBQTtpQkFBQSxtQkFBVTtBQUFFLG1CQUFPLEtBQUssYUFBYTs7OztVQUVyQyxLQUFBO2lCQUFBLGlCQUFRLE1BQU07QUFBRSxtQkFBTyxLQUFLLGFBQWEsUUFBUTs7OzthQUg5Qjt1QkFBYSxTQUFBO0FBS2hDLG9CQUxtQixNQUtaLFdBQVU7Ozs7QUVUbkI7Ozs7O21DQWFBLFdBQUE7OztlQUFBOzs7O0FBVEEsc0JBQWtCLGVBQWUsU0FBUztBQUFFLFdBQUssR0FBRyxZQUFBLG1CQUFtQixlQUFlOztBQUV0Rix1QkFBbUIsZUFBZSxTQUFTO0FBQUUsV0FBSyxJQUFJLFlBQUEsbUJBQW1CLGVBQWU7O0FBRXhGLFFBQU0sZUFBZTtNQUNuQjtNQUNBOztRQUdGLFdBQWU7Ozs7QUNiZjs7Ozs7bUNBcUNBLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE5QkEsUUFBTSxlQUFOLHlCQUFBLFNBQUE7Z0JBQU0sZUFBQTtnQ0FBQTsrQkFBQTs4QkFBQTs7O21CQUFBLGVBQUE7O1VBQ0osS0FBQTtpQkFBQSxrQkFBUyxlQUFlLFNBQVM7QUFBRSxpQkFBSyxHQUFHLFlBQUEsbUJBQW1CLGVBQWU7Ozs7VUFFN0UsS0FBQTtpQkFBQSxtQkFBVSxlQUFlLFNBQVM7QUFBRSxpQkFBSyxJQUFJLFlBQUEsbUJBQW1CLGVBQWU7Ozs7VUFFL0UsS0FBQTtpQkFBQSxrQkFBUyxlQUFlLFNBQVM7Ozs7VUFFakMsS0FBQTtpQkFBQSxtQkFBVSxlQUFlLFNBQVM7Ozs7VUFFbEMsS0FBQTtpQkFBQSxvQkFBVztBQUFFLG1CQUFPLEtBQUssV0FBVzs7OztVQUVwQyxLQUFBO2lCQUFBLDZCQUFvQjtBQUFFLG1CQUFPLEtBQUssV0FBVzs7OztVQUU3QyxLQUFBO2lCQUFBLDJCQUFrQjtBQUFFLG1CQUFPLEtBQUssV0FBVzs7OztVQUUzQyxLQUFBO2lCQUFBLHNCQUFhO0FBQUUsbUJBQU8sS0FBSyxXQUFXOzs7O1VBRXRDLEtBQUE7aUJBQUEsa0JBQVMsT0FBTztBQUFFLGlCQUFLLFdBQVcsUUFBUTs7OztVQUUxQyxLQUFBO2lCQUFBLDJCQUFrQixnQkFBZ0I7QUFBRSxpQkFBSyxXQUFXLGlCQUFpQjs7OztVQUVyRSxLQUFBO2lCQUFBLHlCQUFnQixjQUFjO0FBQUUsaUJBQUssV0FBVyxlQUFlOzs7O1VBRS9ELEtBQUE7aUJBQUEscUJBQVksVUFBVTtBQUFFLGlCQUFLLFdBQVcsV0FBVzs7OztVQUVuRCxLQUFBO2lCQUFBLGtCQUFTO0FBQUUsaUJBQUssV0FBVzs7OzthQXpCdkI7dUJBQXFCLFNBQUE7QUE0QjNCLFdBQU8sT0FBTyxhQUFhLFdBQVcsUUFBQTtRQUV0QyxXQUFlOzs7O0FDckNmOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLFFBQU4seUJBQUEsY0FBQTtnQkFBTSxRQUFBO2dDQUFBO3dCQUFBOzhCQUFBOzs7YUFBQTtNQUFjLGNBQUE7QUFDakMsb0JBRG1CLE9BQ1osV0FBVTs7OztBRUxuQjs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sU0FBTix5QkFBQSxTQUFBO2dCQUFNLFNBQUE7Z0NBQUE7eUJBQUE7OEJBQUE7OzthQUFBO3VCQUFlLFNBQUE7QUFDbEMsb0JBRG1CLFFBQ1osV0FBVTs7OztBRUxuQjs7Ozs7bUNBbUJBLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFkQSxRQUFNLFNBQU4seUJBQUEsU0FBQTtnQkFBTSxTQUFBO2dDQUFBO3lCQUFBOzhCQUFBOzs7bUJBQUEsU0FBQTs7VUFDSixLQUFBO2lCQUFBLGtCQUFTLGVBQWUsU0FBUzs7OztVQUVqQyxLQUFBO2lCQUFBLG1CQUFVLGVBQWUsU0FBUzs7OztVQUVsQyxLQUFBO2lCQUFBLG9CQUFXO0FBQUUsbUJBQU8sS0FBSyxXQUFXOzs7O1VBRXBDLEtBQUE7aUJBQUEsa0JBQVMsT0FBTztBQUFFLGlCQUFLLFdBQVcsUUFBUTs7OzthQVB0Qzt1QkFBZSxTQUFBO0FBU25CLG9CQVRJLFFBU0csV0FBVTtBQUduQixXQUFPLE9BQU8sT0FBTyxXQUFXLFFBQUE7UUFFaEMsV0FBZTs7OztBQ25CZjs7Ozs7bUNBbUJBLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFkQSxRQUFNLFdBQU4seUJBQUEsU0FBQTtnQkFBTSxXQUFBO2dDQUFBOzJCQUFBOzhCQUFBOzs7bUJBQUEsV0FBQTs7VUFDSixLQUFBO2lCQUFBLHFCQUFZO0FBQUUsbUJBQU8sS0FBSyxXQUFXOzs7O1VBRXJDLEtBQUE7aUJBQUEsaUJBQXNCO2dCQUFoQixVQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBVTtBQUFRLGlCQUFLLFdBQVcsVUFBVTs7OzthQUg5Qzt1QkFBaUIsU0FBQTtBQUtyQixvQkFMSSxVQUtHLFdBQVU7QUFFakIsb0JBUEksVUFPRyxxQkFBb0I7TUFDekIsTUFBTTs7QUFJVixXQUFPLE9BQU8sU0FBUyxXQUFXLFFBQUE7UUFFbEMsV0FBZTs7OztBQ25CZjs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxXQUFOLHlCQUFBLGNBQUE7Z0JBQU0sV0FBQTtnQ0FBQTsyQkFBQTs4QkFBQTs7O2FBQUE7TUFBaUIsY0FBQTtBQUNwQyxvQkFEbUIsVUFDWixXQUFVOzs7O0FFTG5COzs7OzttQ0FJQSxXQUFBOzs7ZUFBQTs7OztRQUFBLFdBQWU7TUFDYixVQUFBLFFBQUE7TUFDQSxXQUFBLFFBQUE7Ozs7O0FDTkY7Ozs7O21DQTBDQTs7O2VBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaENBLFFBQU0sU0FBTiwyQkFBQTt5QkFBTTs4QkFBQTtBQUVGLGFBQUssYUFBYTs7bUJBRmhCLFNBQUE7O1VBS0osS0FBQTtpQkFBQSxrQkFBbUI7QUFBWixxQkFBQSxPQUFBLFVBQUEsUUFBRyxVQUFILElBQUEsTUFBQSxPQUFBLFFBQUEsR0FBQSxRQUFBLE1BQUEsU0FBQTtBQUFHLHNCQUFILFNBQUEsVUFBQTs7Z0JBR0w7QUFGQSxnQkFBTSxTQUFTLEtBQUs7QUFFcEIsWUFBQSxXQUFBLFFBQU8sT0FBUCxNQUFBLFNBQUE7Y0FBYztjQUFkLE9BQXNCLG1CQUFHOzs7O1VBRzNCLEtBQUE7aUJBQUEsMkJBQWtCOzs7O1VBRWxCLEtBQUE7aUJBQUEsOEJBQXFCOzs7O1VBRXJCLEtBQUE7aUJBQUEsb0JBQVc7QUFBRSxtQkFBTyxLQUFLLFdBQVc7Ozs7VUFFcEMsS0FBQTtpQkFBQSxxQkFBWTtBQUFFLG1CQUFPLEtBQUssV0FBVzs7OztVQUVyQyxLQUFBO2lCQUFBLHdCQUFlO0FBQUUsbUJBQU8sS0FBSyxXQUFXOzs7O1VBRXhDLEtBQUE7aUJBQUEseUJBQWdCO0FBQUUsbUJBQU8sS0FBSyxXQUFXOzs7O1VBRXpDLEtBQUE7aUJBQUEsd0JBQWU7QUFBRSxtQkFBTyxLQUFLLFdBQVc7Ozs7YUF2QnBDOztBQTBCTixXQUFPLE9BQU8sT0FBTyxXQUFXLEtBQUE7QUFDaEMsV0FBTyxPQUFPLE9BQU8sV0FBVyxPQUFBO0FBQ2hDLFdBQU8sT0FBTyxPQUFPLFdBQVcsT0FBQTtBQUNoQyxXQUFPLE9BQU8sT0FBTyxXQUFXLE9BQUE7QUFDaEMsV0FBTyxPQUFPLE9BQU8sV0FBVyxRQUFBO1FBRWhDLFdBQWdCLFFBQU8sV0FBQSxjQUFBLGNBQVAsUUFBTyxhQUFXLFdBQUEsWUFBYSxTQUFZLElBQUk7Ozs7QUMxQy9EOzs7Ozs7Ozs7Ozs7O01BRWEsbUJBQWlCLFdBQUE7ZUFBakI7O01BQ0Esb0JBQWtCLFdBQUE7ZUFBbEI7O01BQ0EscUJBQW1CLFdBQUE7ZUFBbkI7O01BRWIsU0FJRSxXQUFBO2VBSkY7OztBQUpPLFFBQU0sb0JBQW9CO0FBQzFCLFFBQU0scUJBQXFCO0FBQzNCLFFBQU0sc0JBQXNCO1FBRW5DLFdBQWU7TUFDYjtNQUNBO01BQ0E7Ozs7O0FDVEY7Ozs7O21DQWlCQTs7O2VBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVJBLFFBQU0sV0FBTiwyQkFBQTsyQkFBTTs4QkFBQTtBQUVGLGFBQUssYUFBYTs7bUJBRmhCLFdBQUE7O1VBS0osS0FBQTtpQkFBQSx1QkFBYztBQUFFLG1CQUFPLEtBQUssV0FBVzs7OzthQUxuQzs7UUFRTixXQUFnQixRQUFPLGFBQUEsY0FBQSxjQUFQLFFBQU8sZUFBYSxXQUFBLFlBQWEsU0FBWSxJQUFJO0FBRWpFLFdBQU8sT0FBTyxTQUFTLFdBQVcsS0FBQTtBQUNsQyxXQUFPLE9BQU8sU0FBUyxXQUFXLE9BQUE7QUFDbEMsV0FBTyxPQUFPLFNBQVMsV0FBVyxPQUFBO0FBQ2xDLFdBQU8sT0FBTyxTQUFTLFdBQVcsT0FBQTs7OztBQ3RCbEM7Ozs7Ozs7Ozs7Ozs7TUFFb0IsT0FBSyxXQUFBO2VBQUwsT0FBQTs7TUFDQSxRQUFNLFdBQUE7ZUFBTixRQUFBOztNQUNBLFFBQU0sV0FBQTtlQUFOLFFBQUE7O01BRUEsTUFBSSxXQUFBO2VBQUosTUFBQTs7TUFDQSxNQUFJLFdBQUE7ZUFBSixNQUFBOztNQUNBLE9BQUssV0FBQTtlQUFMLE9BQUE7O01BQ0EsUUFBTSxXQUFBO2VBQU4sUUFBQTs7TUFDQSxRQUFNLFdBQUE7ZUFBTixRQUFBOztNQUNBLFNBQU8sV0FBQTtlQUFQLFNBQUE7O01BQ0EsVUFBUSxXQUFBO2VBQVIsVUFBQTs7TUFDQSxVQUFRLFdBQUE7ZUFBUixVQUFBOztNQUNBLGFBQVcsV0FBQTtlQUFYLGFBQUE7O01BQ0EsY0FBWSxXQUFBO2VBQVosY0FBQTs7TUFFQSxRQUFNLFdBQUE7ZUFBTixRQUFBOztNQUNBLFNBQU8sV0FBQTtlQUFQLFNBQUE7O01BQ0EsVUFBUSxXQUFBO2VBQVIsVUFBQTs7TUFDQSxZQUFVLFdBQUE7ZUFBVixZQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEJwQjs7Ozs7O0FBSUEsVUFBQSxPQUFPLE9BQU87TUFDWixPQUFBLE1BQUE7Ozs7O0FDTEY7Ozs7Ozs7OztBQ0FBOzs7Ozs7QUFFQSxRQUFNLFdBQVc7TUFDZjtNQUFLO01BQVE7TUFBVztNQUFTO01BQ2pDO01BQUs7TUFBUTtNQUFPO01BQU87TUFBYztNQUFRO01BQU07TUFDdkQ7TUFBVTtNQUFXO01BQVE7TUFBUTtNQUFPO01BQzVDO01BQVE7TUFBWTtNQUFNO01BQU87TUFBVztNQUFPO01BQVU7TUFBTztNQUFNO01BQU07TUFBTTtNQUFTO01BQVk7TUFBYztNQUFVO01BQVU7TUFDN0k7TUFBTTtNQUFNO01BQU07TUFBTTtNQUFNO01BQU07TUFBUTtNQUFVO01BQU07TUFDNUQ7TUFBSztNQUFVO01BQU87TUFBUztNQUFPO01BQU87TUFBUztNQUFVO01BQU07TUFDdEU7TUFBUTtNQUFPO01BQVE7TUFBUTtNQUFTO01BQU87TUFDL0M7TUFBVTtNQUFNO01BQVk7TUFBVTtNQUN0QztNQUFLO01BQVM7TUFBVztNQUFPO01BQ2hDO01BQUs7TUFBTTtNQUFNO01BQ2pCO01BQUs7TUFBUTtNQUFVO01BQVc7TUFBVTtNQUFTO01BQVU7TUFBUTtNQUFVO01BQVM7TUFBTztNQUFXO01BQU87TUFDbkg7TUFBUztNQUFTO01BQU07TUFBWTtNQUFZO01BQVM7TUFBTTtNQUFTO01BQVE7TUFBUztNQUFNO01BQy9GO01BQUs7TUFDTDtNQUFPO01BQ1A7O21CQUdhOzs7OztBQ3BCZjs7Ozs7O0FBRU8sUUFBTSxjQUFjO1lBQWQsY0FBQTtBQUNOLFFBQU0sY0FBYztZQUFkLGNBQUE7QUFDTixRQUFNLGFBQWE7WUFBYixhQUFBO0FBQ04sUUFBTSxnQkFBZ0I7WUFBaEIsZ0JBQUE7QUFDTixRQUFNLGNBQWM7WUFBZCxjQUFBO0FBQ04sUUFBTSxjQUFjO1lBQWQsY0FBQTttQkFFRTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7Ozs7O0FDZkY7Ozs7OztBQUVPLFFBQU0sYUFBYTtZQUFiLGFBQUE7QUFDTixRQUFNLGNBQWM7WUFBZCxjQUFBO0FBQ04sUUFBTSxlQUFlO1lBQWYsZUFBQTtBQUNOLFFBQU0sZ0JBQWdCO1lBQWhCLGdCQUFBO0FBQ04sUUFBTSxpQkFBaUI7WUFBakIsaUJBQUE7bUJBRUU7TUFDYjtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUNiRjs7Ozs7O0FBRU8sUUFBTSxnQkFBZ0I7WUFBaEIsZ0JBQUE7QUFDTixRQUFNLGdCQUFnQjtZQUFoQixnQkFBQTtBQUNOLFFBQU0sa0JBQWtCO1lBQWxCLGtCQUFBO0FBQ04sUUFBTSxvQkFBb0I7WUFBcEIsb0JBQUE7QUFDTixRQUFNLHNCQUFzQjtZQUF0QixzQkFBQTtBQUNOLFFBQU0sdUJBQXVCO1lBQXZCLHVCQUFBO0FBQ04sUUFBTSx1QkFBdUI7WUFBdkIsdUJBQUE7QUFDTixRQUFNLHdCQUF3QjtZQUF4Qix3QkFBQTtBQUNOLFFBQU0sMkJBQTJCO1lBQTNCLDJCQUFBO0FBQ04sUUFBTSw2QkFBNkI7WUFBN0IsNkJBQUE7QUFDTixRQUFNLHFDQUFxQztZQUFyQyxxQ0FBQTtBQUNOLFFBQU0sc0NBQXNDO1lBQXRDLHNDQUFBO0FBQ04sUUFBTSxzQ0FBc0M7WUFBdEMsc0NBQUE7QUFDTixRQUFNLHVDQUF1QztZQUF2Qyx1Q0FBQTttQkFFRTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7Ozs7OztBQy9CRjs7Ozs7O0FBRU8sUUFBTSxpQkFBaUI7WUFBakIsaUJBQUE7QUFDTixRQUFNLGtCQUFrQjtZQUFsQixrQkFBQTttQkFFRTtNQUNiO01BQ0E7Ozs7OztBQ1BGOzs7Ozs7QUFFTyxRQUFNLGdCQUFnQjtZQUFoQixnQkFBQTtBQUNOLFFBQU0saUJBQWlCO1lBQWpCLGlCQUFBO0FBQ04sUUFBTSxrQkFBa0I7WUFBbEIsa0JBQUE7bUJBRUU7TUFDYjtNQUNBO01BQ0E7Ozs7OztBQ1RGOzs7Ozs7QUFFTyxRQUFNLGVBQWU7WUFBZixlQUFBO0FBQ04sUUFBTSxnQkFBZ0I7WUFBaEIsZ0JBQUE7QUFDTixRQUFNLGdCQUFnQjtZQUFoQixnQkFBQTtBQUNOLFFBQU0saUJBQWlCO1lBQWpCLGlCQUFBO0FBQ04sUUFBTSxpQkFBaUI7WUFBakIsaUJBQUE7QUFDTixRQUFNLGlCQUFpQjtZQUFqQixpQkFBQTtBQUNOLFFBQU0sa0JBQWtCO1lBQWxCLGtCQUFBO0FBQ04sUUFBTSxrQkFBa0I7WUFBbEIsa0JBQUE7QUFDTixRQUFNLGtCQUFrQjtZQUFsQixrQkFBQTtBQUNOLFFBQU0sa0JBQWtCO1lBQWxCLGtCQUFBO0FBQ04sUUFBTSxtQkFBbUI7WUFBbkIsbUJBQUE7QUFDTixRQUFNLG1CQUFtQjtZQUFuQixtQkFBQTtBQUNOLFFBQU0scUJBQXFCO1lBQXJCLHFCQUFBO0FBQ04sUUFBTSxxQkFBcUI7WUFBckIscUJBQUE7QUFDTixRQUFNLHFCQUFxQjtZQUFyQixxQkFBQTtBQUNOLFFBQU0sc0JBQXNCLE9BQU8sYUFBYTtZQUExQyxzQkFBQTtBQUNOLFFBQU0sc0JBQXNCO1lBQXRCLHNCQUFBO0FBQ04sUUFBTSxzQkFBc0I7WUFBdEIsc0JBQUE7QUFDTixRQUFNLHlCQUF5QjtZQUF6Qix5QkFBQTtBQUNOLFFBQU0sMEJBQTBCO1lBQTFCLDBCQUFBO0FBQ04sUUFBTSw0QkFBNEI7WUFBNUIsNEJBQUE7QUFDTixRQUFNLDZCQUE2QjtZQUE3Qiw2QkFBQTttQkFFRTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUMvQ0Y7Ozs7OztBQUVPLFFBQU0scUJBQXFCO1lBQXJCLHFCQUFBO0FBQ04sUUFBTSxxQkFBcUI7WUFBckIscUJBQUE7QUFDTixRQUFNLHdCQUF3QjtZQUF4Qix3QkFBQTtBQUNOLFFBQU0sMEJBQTBCO1lBQTFCLDBCQUFBO0FBQ04sUUFBTSw0QkFBNEI7WUFBNUIsNEJBQUE7QUFDTixRQUFNLDRCQUE0QjtZQUE1Qiw0QkFBQTtBQUNOLFFBQU0sNEJBQTRCO1lBQTVCLDRCQUFBO0FBQ04sUUFBTSw2QkFBNkI7WUFBN0IsNkJBQUE7QUFDTixRQUFNLDhCQUE4QjtZQUE5Qiw4QkFBQTtBQUNOLFFBQU0sOEJBQThCO1lBQTlCLDhCQUFBO0FBQ04sUUFBTSwrQkFBK0I7WUFBL0IsK0JBQUE7QUFDTixRQUFNLGtDQUFrQztZQUFsQyxrQ0FBQTtBQUNOLFFBQU0sb0NBQW9DO1lBQXBDLG9DQUFBO0FBQ04sUUFBTSxzQ0FBc0M7WUFBdEMsc0NBQUE7QUFDTixRQUFNLHdDQUF3QztZQUF4Qyx3Q0FBQTttQkFFRTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7Ozs7O0FDakNGOzs7Ozs7QUFFTyxRQUFNLHlCQUF5QjtZQUF6Qix5QkFBQTtBQUNOLFFBQU0sMEJBQTBCO1lBQTFCLDBCQUFBO0FBQ04sUUFBTSxnQ0FBZ0M7WUFBaEMsZ0NBQUE7QUFDTixRQUFNLHdDQUF3QztZQUF4Qyx3Q0FBQTtBQUNOLFFBQU0sOENBQThDO1lBQTlDLDhDQUFBO0FBQ04sUUFBTSx1Q0FBdUM7WUFBdkMsdUNBQUE7QUFDTixRQUFNLHdDQUF3QztZQUF4Qyx3Q0FBQTtBQUNOLFFBQU0sOENBQThDO1lBQTlDLDhDQUFBO0FBQ04sUUFBTSw0REFBNEQ7WUFBNUQsNERBQUE7bUJBRUU7TUFDYjtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7Ozs7OztBQ3JCRjs7Ozs7O0FBRU8sUUFBTSx3QkFBd0I7WUFBeEIsd0JBQUE7QUFDTixRQUFNLHdCQUF3QjtZQUF4Qix3QkFBQTtBQUNOLFFBQU0sMkJBQTJCO1lBQTNCLDJCQUFBO0FBQ04sUUFBTSw2QkFBNkI7WUFBN0IsNkJBQUE7QUFDTixRQUFNLCtCQUErQjtZQUEvQiwrQkFBQTtBQUNOLFFBQU0sK0JBQStCO1lBQS9CLCtCQUFBO0FBQ04sUUFBTSwrQkFBK0I7WUFBL0IsK0JBQUE7QUFDTixRQUFNLGdDQUFnQztZQUFoQyxnQ0FBQTtBQUNOLFFBQU0saUNBQWlDO1lBQWpDLGlDQUFBO0FBQ04sUUFBTSxpQ0FBaUM7WUFBakMsaUNBQUE7QUFDTixRQUFNLGtDQUFrQztZQUFsQyxrQ0FBQTtBQUNOLFFBQU0scUNBQXFDO1lBQXJDLHFDQUFBO0FBQ04sUUFBTSx1Q0FBdUM7WUFBdkMsdUNBQUE7QUFDTixRQUFNLHlDQUF5QztZQUF6Qyx5Q0FBQTtBQUNOLFFBQU0sMkNBQTJDO1lBQTNDLDJDQUFBO21CQUVFO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUNqQ0Y7Ozs7O1lBRWdCLFFBQUE7WUFFQSxTQUFBO1lBRUEsUUFBQTtZQUVBLFNBQUE7WUFFQSxRQUFBO1lBRUEsWUFBQTtZQUVBLGFBQUE7WUFFQSxZQUFBO1lBRUEsYUFBQTtZQUVBLFlBQUE7WUFFQSxPQUFBO1lBRUEsT0FBQTtZQUVBLE9BQUE7WUFFQSxPQUFBO1lBRUEsUUFBQTtZQUVBLE9BQUE7WUFFQSxVQUFBO1lBRUEsU0FBQTtZQVFBLFFBQUE7WUFNQSxPQUFBO1lBT0EsUUFBQTtZQUVBLFNBQUE7WUFPQSxVQUFBO1lBc0JBLFNBQUE7WUFtQkEsT0FBQTtZQWNBLFFBQUE7WUFxQkEsUUFBQTtZQWlCQSxVQUFBO1lBVUEsV0FBQTtZQVVBLGVBQUE7WUFlQSxnQkFBQTtZQWVBLGVBQUE7WUFlQSxnQkFBQTtZQWVBLGdCQUFBO1lBZUEsaUJBQUE7WUFlQSxpQkFBQTtZQWNBLGtCQUFBO1lBY0Esa0JBQUE7WUFVQSxtQkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkFqVE0sT0FBTztBQUFFLGFBQU8sTUFBTTs7b0JBRXJCLE9BQU87QUFBRSxhQUFPLE1BQU07O21CQUV2QixPQUFPO0FBQUUsYUFBTyxNQUFNOztvQkFFckIsT0FBTztBQUFFLGFBQU8sTUFBTTs7bUJBRXZCLE9BQU87QUFBRSxhQUFPLE1BQU07O3VCQUVsQixPQUFPO0FBQUUsYUFBTyxNQUFNLE1BQU0sU0FBUzs7d0JBRXBDLE9BQU87QUFBRSxhQUFPLE1BQU0sTUFBTSxTQUFTOzt1QkFFdEMsT0FBTztBQUFFLGFBQU8sTUFBTSxNQUFNLFNBQVM7O3dCQUVwQyxPQUFPO0FBQUUsYUFBTyxNQUFNLE1BQU0sU0FBUzs7dUJBRXRDLE9BQU87QUFBRSxhQUFPLE1BQU0sTUFBTSxTQUFTOztrQkFFMUMsT0FBTztBQUFFLGFBQU8sTUFBTSxNQUFNLFNBQVM7O2tCQUVyQyxPQUFPO0FBQUUsYUFBTyxNQUFNLE1BQU0sR0FBRzs7a0JBRS9CLE9BQU87QUFBRSxhQUFPLE1BQU0sTUFBTTs7a0JBRTVCLE9BQU87QUFBRSxhQUFPLE1BQU0sTUFBTSxNQUFNLFNBQVM7O21CQUUxQyxPQUFPO0FBQUUsYUFBTyxNQUFNLE1BQU0sR0FBRyxLQUFLLElBQUksR0FBRyxNQUFNLFNBQVM7O2tCQUUzRCxRQUFRLFFBQVE7QUFBRSxZQUFNLFVBQVUsS0FBSyxNQUFNLFFBQVE7O3FCQUVsRCxRQUFRLFFBQVE7QUFBRSxZQUFNLFVBQVUsUUFBUSxNQUFNLFFBQVE7O29CQUV6RCxRQUFRLGlCQUFpQjtBQUM5QyxVQUFNLFNBQVUsWUFBQSxpQkFBMkIsU0FDekIsa0JBQ0M7UUFBQzs7QUFFcEIsV0FBSyxRQUFROzttQkFHTyxPQUFPO0FBQzNCLFVBQU0sUUFBUTtBQUVkLGFBQU8sTUFBTSxPQUFPOztrQkFHRCxRQUFRLFFBQVE7QUFDbkMsVUFBTSxRQUFRLEdBQ1IsY0FBYyxPQUFPO0FBRTNCLGFBQU8sUUFBUSxPQUFPLGFBQWE7O21CQUdmLFFBQVEsUUFBUTtBQUFFLFlBQU0sVUFBVSxLQUFLLE1BQU0sUUFBUTs7b0JBRXBELFFBQVEsT0FBNEM7VUFBckMsY0FBVyxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQUcsVUFBVSxTQUFNLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBRztBQUNyRSxVQUFNLE9BQU87UUFBQztRQUFPO1FBQVIsT0FBK0IsbUJBQVAsVUFDL0Isb0JBQW9CLE1BQU0sVUFBVSxPQUFPLE1BQU0sUUFBUTtBQUUvRCxhQUFPOztxQkFHZSxPQUFPLFVBQVMsVUFBVTtBQUNoRCxVQUFJO0FBRUosVUFBTSxRQUFRLE1BQU0sS0FBSyxTQUFDLFNBQVMsT0FBVTtBQUMzQyxZQUFNLFNBQVMsU0FBUyxTQUFTO0FBRWpDLFlBQUksUUFBUTtBQUNWLGtCQUFRO0FBRVIsaUJBQU87OztBQUlYLFVBQUksT0FBTztBQUNULFlBQU0sY0FBYztBQUVwQixjQUFNLE9BQU8sT0FBTyxhQUFhOztBQUduQyxhQUFPOztvQkFHYyxPQUFPLFVBQVU7QUFDdEMsVUFBTSxtQkFBbUI7QUFFekIsdUJBQWlCLE9BQU8sU0FBQyxTQUFTLE9BQVU7QUFDMUMsWUFBTSxTQUFTLFNBQVMsU0FBUztBQUVqQyxZQUFFLENBQUcsUUFBUTtBQUNYLGNBQU0sUUFBUSxPQUNSLGNBQWMsR0FDZCxrQkFBa0IsTUFBTSxPQUFPLE9BQU8sY0FDdEMsc0JBQXNCLE1BQU07QUFFbEMsMkJBQWlCLFFBQVE7OztBQUk3QixhQUFPOztrQkFHWSxPQUFPLFVBQVU7QUFDcEMsVUFBTSxXQUFXO0FBRWpCLHNCQUFnQixPQUFPLFNBQUMsU0FBUyxPQUFVO0FBQ3pDLFlBQU0sU0FBUyxTQUFTLFNBQVM7QUFFakMsWUFBSSxRQUFRO0FBQ1YsbUJBQVMsS0FBSzs7O0FBSWxCLGFBQU87O21CQUdhLE9BQU8sVUFBVTtBQUNyQyxVQUFJLGdCQUFnQjtBQUVwQixZQUFNLEtBQUssU0FBQyxTQUFTLE9BQVU7QUFDN0IsWUFBTSxTQUFTLFNBQVMsU0FBUztBQUVqQyxZQUFFLENBQUcsUUFBUTtBQUNYLGNBQU0sUUFBUSxPQUNSLGNBQWMsR0FDZCxrQkFBa0IsTUFBTSxPQUFPLE9BQU8sY0FDdEMsc0JBQXNCLE1BQU07QUFFbEMsMEJBQWdCO0FBRWhCLGlCQUFPOzs7QUFJWCxhQUFPOzttQkFHYSxPQUFPLFVBQVMsVUFBVTtBQUM5QyxVQUFNLFFBQVEsTUFBTSxLQUFLLFNBQUMsU0FBUyxPQUFVO0FBQzNDLFlBQU0sU0FBUyxTQUFTLFNBQVM7QUFFakMsWUFBSSxRQUFRO0FBQ1YsaUJBQU87OztBQUtYLFVBQUksT0FBTztBQUNULGNBQU0sS0FBSzs7QUFHYixhQUFPOztxQkFHZSxRQUFRLFFBQVEsVUFBVTtBQUNoRCxhQUFPLFFBQVEsU0FBQyxTQUFTLE9BQVU7QUFDakMsWUFBTSxTQUFTLFNBQVMsU0FBUztBQUVqQyxZQUFJLFFBQVE7QUFDVixpQkFBTyxLQUFLOzs7O3NCQUtPLE9BQU8sUUFBUSxRQUFRLFVBQVU7QUFDeEQsWUFBTSxRQUFRLFNBQUMsU0FBUyxPQUFVO0FBQ2hDLFlBQU0sU0FBUyxTQUFTLFNBQVM7QUFFakMsaUJBQ0UsT0FBTyxLQUFLLFdBQ1YsT0FBTyxLQUFLOzs7MEJBSVMsT0FBTyxVQUFVO0FBQzVDLFVBQU0sY0FBYyxNQUFNO0FBRTFCLGVBQVMsUUFBUSxHQUFHLFFBQVEsYUFBYSxTQUFTO0FBQ2hELFlBQU0sVUFBVSxNQUFNLFFBQ2hCLFNBQVMsU0FBUyxTQUFTO0FBRWpDLFlBQUksUUFBUTtBQUNWLGlCQUFPOzs7QUFJWCxhQUFPOzsyQkFHcUIsT0FBTyxVQUFVO0FBQzdDLFVBQU0sY0FBYyxNQUFNO0FBRTFCLGVBQVMsUUFBUSxjQUFjLEdBQUcsU0FBUyxHQUFHLFNBQVM7QUFDckQsWUFBTSxVQUFVLE1BQU0sUUFDaEIsU0FBUyxTQUFTLFNBQVM7QUFFakMsWUFBSSxRQUFRO0FBQ1YsaUJBQU87OztBQUlYLGFBQU87OzBCQUdvQixPQUFPLFVBQVU7QUFDNUMsVUFBTSxjQUFjLE1BQU07QUFFMUIsZUFBUyxRQUFRLEdBQUcsUUFBUSxhQUFhLFNBQVM7QUFDaEQsWUFBTSxVQUFVLE1BQU0sUUFDaEIsU0FBUyxTQUFTLFNBQVM7QUFFakMsWUFBSSxRQUFRO0FBQ1YsaUJBQU87OztBQUlYLGFBQU87OzJCQUdxQixPQUFPLFVBQVU7QUFDN0MsVUFBTSxjQUFjLE1BQU07QUFFMUIsZUFBUyxRQUFRLGNBQWMsR0FBRyxTQUFTLEdBQUcsU0FBUztBQUNyRCxZQUFNLFVBQVUsTUFBTSxRQUNoQixTQUFTLFNBQVMsU0FBUztBQUVqQyxZQUFJLFFBQVE7QUFDVixpQkFBTzs7O0FBSVgsYUFBTzs7MkJBR3FCLE9BQU8sVUFBVTtBQUM3QyxVQUFNLGNBQWMsTUFBTTtBQUUxQixlQUFTLFFBQVEsR0FBRyxRQUFRLGFBQWEsU0FBUztBQUNoRCxZQUFNLFVBQVUsTUFBTSxRQUNoQixTQUFTLFNBQVMsU0FBUztBQUVqQyxZQUFFLENBQUcsUUFBUTtBQUNYLGlCQUFPOzs7QUFJWCxhQUFPOzs0QkFHc0IsT0FBTyxVQUFVO0FBQzlDLFVBQU0sY0FBYyxNQUFNO0FBRTFCLGVBQVMsUUFBUSxjQUFjLEdBQUcsU0FBUyxHQUFHLFNBQVM7QUFDckQsWUFBTSxVQUFVLE1BQU0sUUFDaEIsU0FBUyxTQUFTLFNBQVM7QUFFakMsWUFBRSxDQUFHLFFBQVE7QUFDWCxpQkFBTzs7O0FBSVgsYUFBTzs7NEJBR3NCLE9BQU8sVUFBVSxjQUFjO0FBQzVELFVBQUksUUFBUTtBQUVaLFVBQU0sY0FBYyxNQUFNO0FBRTFCLGVBQVMsUUFBUSxHQUFHLFFBQVEsYUFBYSxTQUFTO0FBQ2hELFlBQU0sVUFBVSxNQUFNO0FBRXRCLGdCQUFRLFNBQVMsT0FBTyxTQUFTOztBQUduQyxhQUFPOzs2QkFHdUIsT0FBTyxVQUFVLGNBQWM7QUFDN0QsVUFBSSxRQUFRO0FBRVosVUFBTSxjQUFjLE1BQU07QUFFMUIsZUFBUyxRQUFRLGNBQWMsR0FBRyxTQUFTLEdBQUcsU0FBUztBQUNyRCxZQUFNLFVBQVUsTUFBTTtBQUV0QixnQkFBUSxTQUFTLE9BQU8sU0FBUzs7QUFHbkMsYUFBTzs7NkJBR3VCLE9BQU8sVUFBVTtBQUMvQyxVQUFNLGNBQWMsTUFBTTtBQUUxQixlQUFTLFFBQVEsR0FBRyxRQUFRLGFBQWEsU0FBUztBQUNoRCxZQUFNLFVBQVUsTUFBTTtBQUV0QixpQkFBUyxTQUFTOzs7OEJBSVcsT0FBTyxVQUFVO0FBQ2hELFVBQU0sY0FBYyxNQUFNO0FBRTFCLGVBQVMsUUFBUSxjQUFjLEdBQUcsU0FBUyxHQUFHLFNBQVM7QUFDckQsWUFBTSxVQUFVLE1BQU07QUFFdEIsaUJBQVMsU0FBUzs7O21CQUlQO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUNwV0Y7Ozs7OztBQUVPLFFBQU0sT0FBTztZQUFQLE9BQUE7QUFDTixRQUFNLE9BQU87WUFBUCxPQUFBO0FBQ04sUUFBTSxRQUFRO1lBQVIsUUFBQTtBQUNOLFFBQU0sU0FBUztZQUFULFNBQUE7QUFDTixRQUFNLFNBQVM7WUFBVCxTQUFBO0FBQ04sUUFBTSxVQUFVO1lBQVYsVUFBQTtBQUNOLFFBQU0sVUFBVTtZQUFWLFVBQUE7QUFDTixRQUFNLGNBQWM7WUFBZCxjQUFBO0FBQ04sUUFBTSxlQUFlO1lBQWYsZUFBQTs7OztBQ1ZiOzs7OztZQU1nQixZQUFBO1lBZ0JBLGFBQUE7WUFnQkEsZUFBQTtZQXFCQSxpQkFBQTtZQU1BLG1CQUFBO1lBUUEsdUJBQUE7WUFvQkEseUJBQUE7O0FBM0ZPLFFBQUEsU0FBb0I7QUFDZCxRQUFBLGFBQWM7QUFDVSxRQUFBLGNBQWU7dUJBRTFDLFNBQVMsTUFBTSxPQUFPO0FBQzlDLFVBQU0sZ0JBQWdCLEtBQUssZUFDckIsZ0JBQWdCLE9BQU8sb0JBQW9CLFVBQzNDLGdCQUFlLGNBQWMsS0FBSyxTQUFDLGNBQWlCO0FBQ2xELFlBQU0sd0JBQXdCLGFBQWE7QUFFM0MsWUFBSSwwQkFBMEIsZUFBZTtBQUMzQyxpQkFBTzs7WUFFTDtBQUVaLFVBQUksa0JBQWlCLE1BQU07QUFDekIsZ0JBQVEsaUJBQWdCOzs7d0JBSUQsU0FBUyxNQUFNLE9BQU87QUFDL0MsVUFBTSxnQkFBZ0IsS0FBSyxlQUNyQixnQkFBZ0IsT0FBTyxvQkFBb0IsVUFDM0MsZ0JBQWUsY0FBYyxLQUFLLFNBQUMsY0FBaUI7QUFDbEQsWUFBTSx3QkFBd0IsYUFBYTtBQUUzQyxZQUFJLDBCQUEwQixlQUFlO0FBQzNDLGlCQUFPOztZQUVMO0FBRVosVUFBSSxrQkFBaUIsTUFBTTtBQUN6QixnQkFBUSxRQUFROzs7MEJBSVMsTUFBTTtBQUNqQyxVQUFJO0FBRUosVUFBTSxVQUFVLEtBQUssTUFBSyx5QkFDcEIsY0FBVyxJQXhDSSxRQUFvQixPQXdDZCxVQUNyQixRQUFRLFlBQVksUUF2Q3lCLFlBQWU7QUF5Q2xFLFVBQUksVUFBSyxJQUFTO0FBQ2hCLFlBQU0sU0FBUyxlQUFlO0FBRTlCLGVBQU8sU0FBUyxNQUFNO2FBQ2pCO0FBQ0wsWUFBTSxRQUFRLFFBQVEsR0FDaEIsYUFBYSxZQUFZLFVBQVU7QUFFekMsZUFBTyxPQUFPOztBQUdoQixhQUFPOzs0QkFHc0IsTUFBTTtBQUNuQyxVQUFNLFNBQU0sY0FBaUIsS0FBSztBQUVsQyxhQUFPOzs4QkFHd0IsTUFBTTtBQUNyQyxVQUFNLFVBQVUsS0FBSyxNQUFLLDBCQUNwQixjQUFXLElBakVJLFFBQW9CLE9BaUVkLFVBQ3JCLFdBQVc7QUFFakIsYUFBTzs7a0NBRzRCLE9BQU87QUFDMUMsVUFBTSxRQUFRLE9BQU8sS0FBSyxRQUNwQixjQUFjLE1BQU0sUUFDcEIsWUFBWSxjQUFjLEdBQzFCLGVBQWMsTUFBTSxPQUFPLFNBQUMsYUFBYSxNQUFNLE9BQVU7QUFDdkQsWUFBTSxRQUFRLE1BQU0sT0FDZCxjQUFjLG1CQUFtQixPQUNqQyxlQUFlLG1CQUFtQixRQUNsQyxxQkFBc0IsVUFBVSxZQTdFSyxZQUFlLHNCQUR2QyxXQUFjO0FBa0ZqQyx1QkFBZ0IsR0FBaUIsT0FBZixhQUFZLEtBQWtCLE9BQWYsY0FBa0MsT0FBbkI7QUFFaEQsZUFBTztTQXBGWSxXQUFjO0FBdUZ6QyxhQUFPOztvQ0FHOEIsTUFBTSxLQUFLLE9BQU87QUFDdkQsVUFBTSxjQUFjLHFCQUFxQixRQUNuQyxNQUFPLGdCQTVGYyxXQUFjLGVBNkYxQixHQUFTLE9BQVAsTUFBVyxPQUFKLE9BQ1AsR0FBUyxPQUFQLE1BQWMsT0FBUCxLQUFJLEtBQWUsT0FBWjtBQUVqQyxhQUFPOzttQkFHTTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUM3R0Y7Ozs7O1lBT2dCLE1BQUE7WUFlQSxPQUFBO1lBa0JBLFVBQUE7O0FBdEN3QixRQUFBLFdBQVk7QUFDTixRQUFBLGdCQUFpQjtBQUNaLFFBQUEsV0FBWTtBQUNaLFFBQUEsUUFBbUI7aUJBRWxELE1BQU0sS0FBSyxPQUFPLFNBQVMsVUFBVTtBQUN2RCxVQUFJLGFBQWEsUUFBVztBQUMxQixtQkFBVztBQUNYLGtCQUFVOztBQUdaLFVBQU0sU0FYZ0MsU0FBWSxZQVk1QyxTQVhzQyxjQUFpQiwrQkFZdkQsVUFBVTtBQUVoQiw2QkFBdUIsU0FBUztBQUVoQyxjQUFRLE1BQU0sS0FBSyxPQUFPLFFBQVEsU0FBUyxTQUFTOztrQkFHakMsTUFBTSxLQUFLLE9BQU8sU0FBUyxTQUFTLFVBQVU7QUFDakUsVUFBSSxhQUFhLFFBQVc7QUFDMUIsbUJBQVc7QUFDWCxrQkFBVTtBQUNWLGtCQUFVOztBQUdaLFVBQU0sU0EzQmdDLFNBQVksYUE0QjVDLFNBM0JzQyxjQUFpQiwrQkE0QnZELGNBNUJzQyxjQUFpQjtBQThCN0QsNkJBQXVCLFNBQVM7QUFFaEMsa0NBQTRCLFNBQVM7QUFFckMsY0FBUSxNQUFNLEtBQUssT0FBTyxRQUFRLFNBQVMsU0FBUzs7cUJBRzlCLE1BQU0sS0FBSyxPQUFPLFFBQVEsU0FBUyxVQUFTLFVBQVU7QUFDNUUsVUFBTSxNQUFHLElBcEN3QyxPQUFtQix1QkFvQ2pDLE1BQU0sS0FBSyxRQUN4QyxTQUFTLFFBdENrQyxTQUFZLGtCQXNDcEIsTUFDbkMsY0FBYyxRQXZDNkIsU0FBWSx3QkF1Q1QsTUFDOUMsaUJBQWlCLElBQUk7QUFFM0IsVUFBSSxnQkEzQ3dDLGNBQWlCLCtCQTJDVjtBQUNqRCxZQUFNLE9BQU8sVUFDUCxhQUFhLEtBQUssVUFBVTtBQUVsQyxtQkFBVTs7QUFHWixxQkFBZSxxQkFBcUIsV0FBTTtBQUN4QyxZQUFRLGFBQWlDLGVBQWpDLFlBQVksU0FBcUIsZUFBckIsUUFBUSxXQUFhLGVBQWIsVUFDdEIsYUFBYTtBQUVuQixZQUFJLGNBQWMsR0FBRztBQUNuQixjQUFJLFVBQVU7QUFFZCxjQUFJLFdBekRvQyxjQUFpQiwrQkF5RFg7QUFDNUMsZ0JBQUk7QUFDRixrQkFBTSxjQUFhLFNBQ2IsUUFBTyxLQUFLLE1BQU07QUFFeEIsd0JBQVU7cUJBQ0gsT0FBUDtBQUNBLHdCQUFVOzs7QUFJZCxtQkFBUyxTQUFTOzs7QUFJdEIscUJBQWUsS0FBSyxRQUFRO0FBRTVCLFVBQUksV0FBVyxNQUFNO0FBQ25CLHVCQUFlLGlCQTFFZ0MsU0FBWSxlQTBFWjs7QUFHakQsVUFBSSxnQkFBZ0IsTUFBTTtBQUN4Qix1QkFBZSxpQkE5RWdDLFNBQVkscUJBOEVOOztBQUd0RCxtQkFBWSxPQUNYLGVBQWUsS0FBSyxZQUNsQixlQUFlOzttQkFHTjtNQUNiO01BQ0E7TUFDQTs7O29DQUc4QixTQUFTLFFBQVE7QUFDL0MsVUFBTSxPQTdGMkMsU0FBWSxlQThGdkQsUUFBUTtVQTdGbUMsT0FBbUIsV0ErRnpELFNBQVMsTUFBTTs7eUNBR1MsU0FBUyxhQUFhO0FBQ3pELFVBQU0sT0FwRzJDLFNBQVkscUJBcUd2RCxRQUFRO1VBcEdtQyxPQUFtQixXQXNHekQsU0FBUyxNQUFNOzs7OztBQzNHNUI7Ozs7O1lBS2dCLGFBQUE7WUFRQSxvQkFBQTtZQVFBLHFCQUFBO1lBTUEscUJBQUE7WUFNQSw4QkFBQTtZQU9BLGVBQUE7WUFpQ0EsbUJBQUE7WUFRQSx5QkFBQTtZQWNBLCtCQUFBO1lBUUEsK0JBQUE7WUFjQSxvQ0FBQTtZQWNBLDBDQUFBOztBQWpJYSxRQUFBLGFBQWM7QUFDUCxRQUFBLFNBQW9CO3dCQUU3QixNQUFNO0FBQy9CLGFBQU8sS0FBSyxRQUFPLE9BSlEsV0FBYyxjQUlBLFFBQU8sT0FKckIsV0FBYztBQU16QyxVQUFNLFdBQVEsS0FBUyxLQUFLLFVBQVU7QUFFdEMsYUFBTzs7K0JBR3lCLE1BQU07QUFDdEMsVUFBTSxXQUFXLFdBQVcsT0FDdEIsbUJBQW1CLG1CQUFtQixPQUN0QyxrQkFBbUIsWUFBWTtBQUVyQyxhQUFPOztnQ0FHMEIsTUFBTTtBQUN2QyxVQUFNLG1CQUFnQixDQUFBLE1BQVUsS0FBSztBQUVyQyxhQUFPOztnQ0FHMEIsTUFBTTtBQUN2QyxVQUFNLG1CQUFnQixNQUFTLEtBQUs7QUFFcEMsYUFBTzs7eUNBR21DLGFBQWEsY0FBYztBQUNyRSxVQUFNLFNBQVMsSUFBSSxPQUFRLElBQWUsT0FBWixhQUFZLGlCQUNwQyw0QkFBNEIsT0FBTyxLQUFLO0FBRTlDLGFBQU87OzBCQUdvQixNQUFNLGNBQWM7QUFDL0MsVUFBSSxlQUFlO0FBRW5CLFVBQU0sWUFBWSxLQUFLLE1BQUssT0FDdEIsb0JBQW9CLGFBQWEsTUFBSztBQUU1QyxVQUFJLGNBQ0Esd0JBQXFCLElBNUNTLFFBQW9CLE1BNENwQjtBQUVsQyxVQUFJLDBCQUEwQixLQUFLO0FBQ2pDLDBCQUFrQjs7QUFHcEIsOEJBQXFCLElBbERhLFFBQW9CLE1Ba0R4QjtBQUM5QixxQkFBWSxJQW5Ec0IsUUFBb0IsS0FtRGxDO2FBRVosMEJBQTBCLFFBQVUsaUJBQWlCLFFBQVk7QUFDdkUsMEJBQWtCO0FBQ2xCLGtCQUFVO0FBRVYsZ0NBQXFCLElBekRXLFFBQW9CLE1BeUR0QjtBQUM5Qix1QkFBWSxJQTFEb0IsUUFBb0IsS0EwRGhDOztBQUd0QixVQUFJLGlCQUFpQixRQUFXO0FBQzlCLFlBQU0sb0JBQW9CLEdBQUcsT0FBTyxXQUFXLE9BQU87QUFFdEQsdUJBQWUsa0JBQWtCLEtBQUs7O0FBR3hDLGFBQU87OzhCQUd3QixNQUFNLGNBQWM7QUFDbkQsYUFBTyxLQUFLLFFBQU8sT0F4RVEsV0FBYztBQTBFekMsVUFBTSxtQkFBb0IsR0FBVSxPQUFSLE1BQUssS0FBZ0IsT0FBYjtBQUVwQyxhQUFPOztvQ0FHOEIsTUFBTTtBQUMzQyxVQUFJLGlCQUFpQjtBQUVyQixVQUFNLFVBQVUsS0FBSyxNQUFLO0FBRTFCLFVBQUksWUFBWSxNQUFNO0FBQ3BCLFlBQU0sY0FBVyxJQXBGZSxRQUFvQixPQW9GekI7QUFFM0IseUJBQWlCOztBQUduQixhQUFPOzswQ0FHb0MsTUFBTTtBQUNqRCxVQUFNLFVBQVUsS0FBSyxNQUFLLHNCQUNwQixjQUFXLElBOUZpQixRQUFvQixPQThGM0IsVUFDckIsdUJBQXVCO0FBRTdCLGFBQU87OzBDQUdvQyxNQUFNO0FBQ2pELFVBQUksdUJBQXVCO0FBRTNCLFVBQU0sVUFBVSxLQUFLLE1BQUs7QUFFMUIsVUFBSSxZQUFZLE1BQU07QUFDcEIsWUFBTSxjQUFXLElBMUdlLFFBQW9CLE9BMEd6QjtBQUUzQiwrQkFBdUI7O0FBR3pCLGFBQU87OytDQUd5QyxNQUFNO0FBQ3RELFVBQUksNEJBQTRCO0FBRWhDLFVBQU0sVUFBVSxLQUFLLE1BQUs7QUFFMUIsVUFBSSxZQUFZLE1BQU07QUFDcEIsWUFBTSxjQUFXLElBeEhlLFFBQW9CLE9Bd0h6QjtBQUUzQixvQ0FBNEI7O0FBRzlCLGFBQU87O3FEQUcrQyxNQUFNO0FBQzVELFVBQUksa0NBQWtDO0FBRXRDLFVBQU0sVUFBVSxLQUFLLE1BQUs7QUFFMUIsVUFBSSxZQUFZLE1BQU07QUFDcEIsWUFBTSxjQUFXLElBdEllLFFBQW9CLE9Bc0l6QjtBQUUzQiwwQ0FBa0M7O0FBR3BDLGFBQU87O21CQUdNO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUM3SkY7Ozs7O1lBRWdCLFNBQUE7WUFpQkEsVUFBQTtZQXVCQSxXQUFBO1lBdUJBLGFBQUE7WUFvQkEsYUFBQTtZQWtCQSxrQkFBQTtZQXVCQSxtQkFBQTs7b0JBNUhPLFdBQVcsTUFBTSxTQUFTO0FBQy9DLFVBQUksUUFBSztzQkFFTztBQUNkO0FBRUEsWUFBTSxRQUFRLE9BQ1IsWUFBWSxVQUFVLE1BQU0sTUFBTSxTQUFTO0FBRWpELFlBQUksV0FBVztBQUNiOzs7QUFJSjs7cUJBR3NCLE9BQU8sV0FBVyxNQUFNLFNBQVM7QUFDdkQsVUFBTSxTQUFTLE1BQU07QUFFckIsVUFBSSxRQUFLO3NCQUVPO0FBQ2Q7QUFFQSxZQUFNLFlBQWEsVUFBVTtBQUU3QixZQUFJLFdBQVc7QUFDYjtlQUNLO0FBQ0wsY0FBTSxRQUFRLE9BQ1IsVUFBVSxNQUFNO0FBRXRCLG9CQUFVLFNBQVMsTUFBTSxNQUFNLFNBQVM7OztBQUk1Qzs7c0JBR3VCLFlBQVksTUFBTSxTQUFTO0FBQ2xELFVBQU0sU0FBUyxXQUFXO0FBRTFCLFVBQUksUUFBSztzQkFFTztBQUNkO0FBRUEsWUFBTSxZQUFhLFVBQVU7QUFFN0IsWUFBSSxXQUFXO0FBQ2I7ZUFDSztBQUNMLGNBQU0sUUFBUSxPQUNSLFlBQVksV0FBVztBQUU3QixvQkFBVSxNQUFNLE1BQU0sU0FBUzs7O0FBSW5DOzt3QkFHeUIsWUFBWSxNQUFNLFNBQVM7VUFLM0MsT0FBVCxpQkFBZ0I7QUFDZDtBQUVBLFlBQU0sWUFBYSxVQUFVO0FBRTdCLFlBQUksV0FBVztBQUNiOzs7QUFWSixVQUFNLFNBQVMsV0FBVztBQUUxQixVQUFJLFFBQVE7QUFZWixpQkFBVyxRQUFRLFNBQUMsV0FBVyxPQUFVO0FBQ3ZDLGtCQUFVLE1BQU0sTUFBTSxTQUFTOzs7d0JBSVIsV0FBVyxRQUFRLE1BQU0sU0FBUztVQUdsRCxPQUFULGlCQUFnQjtBQUNkO0FBRUEsWUFBTSxZQUFhLFVBQVU7QUFFN0IsWUFBSSxXQUFXO0FBQ2I7OztBQVJKLFVBQUksUUFBUTtBQVlaLGVBQVMsUUFBUSxHQUFHLFFBQVEsUUFBUSxTQUFTO0FBQzNDLGtCQUFVLE1BQU0sTUFBTSxTQUFTOzs7NkJBSUgsT0FBTyxXQUFXLE1BQU0sU0FBUztBQUMvRCxVQUFNLFNBQVMsTUFBTTtBQUVyQixVQUFJLFFBQUs7c0JBRU87QUFDZDtBQUVBLFlBQU0sWUFBYSxVQUFVO0FBRTdCLFlBQUksV0FBVztBQUNiO2VBQ0s7QUFDTCxjQUFNLFFBQVEsT0FDUixVQUFVLE1BQU07QUFFdEIsb0JBQVUsU0FBUyxNQUFNLE1BQU0sU0FBUzs7O0FBSTVDOzs4QkFHK0IsT0FBTyxXQUFXLE1BQU0sU0FBUztBQUNoRSxVQUFNLFNBQVMsTUFBTTtBQUVyQixVQUFJLFFBQVE7c0JBRUk7QUFDZDtBQUVBLFlBQU0sWUFBYSxVQUFLO0FBRXhCLFlBQUksV0FBVztBQUNiO2VBQ0s7QUFDTCxjQUFNLFFBQVEsT0FDUixVQUFVLE1BQU07QUFFdEIsb0JBQVUsU0FBUyxNQUFNLE1BQU0sU0FBUzs7O0FBSTVDOzttQkFHYTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUM1SkY7Ozs7O21DQUVvQixVQUFNOzs7dUJBQWpCOzs7bUNBQ1csV0FBTzs7O3dCQUFsQjs7O21DQUNXLFdBQU87Ozt3QkFBbEI7OzttQ0FDVyxZQUFROzs7eUJBQW5COzs7bUNBQ1csYUFBUzs7OzBCQUFwQjs7O21DQUNXLGNBQVU7OzsyQkFBckI7OzttQ0FDVyxlQUFXOzs7NEJBQXRCOzs7bUNBQ1csZ0JBQVk7Ozs2QkFBdkI7OzttQ0FDVyxrQkFBYzs7OytCQUF6Qjs7O21DQUVXLGlCQUFhOzs7cUJBQXhCOzs7bUNBRVcsaUJBQWE7OztxQkFBeEI7OzttQ0FDVyxpQkFBYTs7O3FCQUF4Qjs7O21DQUNXLGtCQUFjOzs7c0JBQXpCOzs7bUNBQ1cseUJBQXFCOzs7NkJBQWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakJUOzs7OzttQ0FNZ0IsbUJBQUE7OztlQUFBOzs7O0FBRmhCLFFBQVEsc0JBQXFFLFdBQUEsV0FBckU7QUFBUixRQUE2QixzQkFBZ0QsV0FBQSxXQUFoRDtBQUE3QixRQUFrRCx5QkFBMkIsV0FBQSxXQUEzQjtBQUUzQyw2QkFBeUIsU0FBUztBQUN2QyxVQUFNLG1CQUFtQixRQUNFLFFBQVEsS0FBSyxxQkFDYixRQUFRLEtBQUsscUJBQ2IsUUFBUSxLQUFLO0FBRXhDLGFBQU87Ozs7O0FDWlQ7Ozs7Ozs7Ozs7Ozs7TUFFYSxVQUFRLFdBQUE7ZUFBUjs7TUFDQSxVQUFRLFdBQUE7ZUFBUjs7TUFDQSxhQUFXLFdBQUE7ZUFBWDs7TUFDQSxlQUFhLFdBQUE7ZUFBYjs7TUFDQSxnQkFBYyxXQUFBO2VBQWQ7O01BQ0EsbUJBQWlCLFdBQUE7ZUFBakI7O01BQ0Esc0JBQW9CLFdBQUE7ZUFBcEI7O01BQ0EsdUJBQXFCLFdBQUE7ZUFBckI7O01BQ0EsdUJBQXFCLFdBQUE7ZUFBckI7O01BQ0EsMkJBQXlCLFdBQUE7ZUFBekI7O01BQ0EsNkJBQTJCLFdBQUE7ZUFBM0I7O01BQ0EsOEJBQTRCLFdBQUE7ZUFBNUI7O01BRWIsU0FhRSxXQUFBO2VBYkY7OztBQWJPLFFBQU0sV0FBVztBQUNqQixRQUFNLFdBQVc7QUFDakIsUUFBTSxjQUFjO0FBQ3BCLFFBQU0sZ0JBQWdCO0FBQ3RCLFFBQU0saUJBQWlCO0FBQ3ZCLFFBQU0sb0JBQW9CO0FBQzFCLFFBQU0sdUJBQXdCLEdBQW1CLE9BQWpCLGVBQWMsS0FBZSxPQUFaO0FBQ2pELFFBQU0sd0JBQXlCLGVBQTBCLE9BQVo7QUFDN0MsUUFBTSx3QkFBd0I7QUFDOUIsUUFBTSw0QkFBNkIscUJBQWdDLE9BQVo7QUFDdkQsUUFBTSw4QkFBK0IsdUJBQWtDLE9BQVo7QUFDM0QsUUFBTSwrQkFBZ0Msd0JBQW1DLE9BQVo7UUFFcEUsV0FBZTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7Ozs7QUMzQkY7Ozs7Ozs7O2VBU3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxRQUFVLFdBQUEsZUFBVjtBQUVPLFFBQU0sUUFBTiwyQkFBQTtzQkFDRCxNQUFNLFNBQVMsV0FBVyxhQUFXOzhCQUQ5QjtBQUVqQixhQUFLLE9BQU87QUFDWixhQUFLLFVBQVU7QUFDZixhQUFLLFlBQVk7QUFDakIsYUFBSyxjQUFjOzttQkFMRixRQUFBOztVQVFuQixLQUFBO2lCQUFBLG1CQUFVO0FBQ1IsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsc0JBQWE7QUFDWCxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSx3QkFBZTtBQUNiLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLDRCQUFtQjtBQUNqQixnQkFBTSxnQkFBZ0IsS0FBSyxRQUFRO0FBRW5DLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSx5QkFBZ0I7QUFDZCxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSwwQkFBaUI7QUFDZixnQkFBTSwwQkFBMEIsS0FBSyxLQUFLLFNBQVMsT0FBQSxjQUM3QyxlQUFlO0FBRXJCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSw0QkFBbUI7QUFDakIsZ0JBQU0sb0JBQXFCLEtBQUssS0FBSyxTQUFTLE9BQUEsZ0JBQ3hDLGlCQUFpQjtBQUV2QixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsNkJBQW9CO0FBQ2xCLGdCQUFNLHFCQUFzQixLQUFLLFNBQVMsT0FBQSxnQkFDcEMsa0JBQWtCO0FBRXhCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxtQkFBVSxPQUFPO0FBQ2YsZ0JBQU0sZUFBZ0IsU0FBUztBQUUvQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsZUFBTSxPQUFPO0FBQ1gsZ0JBQU0sT0FBTyxNQUFNLFdBQ2IsVUFBVSxNQUFNLGNBQ2hCLGNBQWMsTUFBTSxpQkFDcEIsVUFBWSxLQUFLLFNBQVMsUUFBVSxLQUFLLFlBQVksV0FBYSxLQUFLLGdCQUFnQjtBQUU3RixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsa0JBQVM7QUFDUCxnQkFBTSxZQUFZLEtBQUssTUFDakIsT0FBUSxnQkFBNkIsT0FBZCxXQUFVLE1BQW1CLE9BQWYsS0FBSyxXQUFVO0FBRTFELG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxlQUFNLE9BQU8sZUFBZSxhQUFhLGFBQW9DO0FBQXZCLHFCQUFBLE9BQUEsVUFBQSxRQUFHLHFCQUFILElBQUEsTUFBQSxPQUFBLElBQUEsT0FBQSxJQUFBLElBQUEsT0FBQSxHQUFBLE9BQUEsTUFBQSxRQUFBO0FBQUcsaUNBQUgsT0FBQSxLQUFBLFVBQUE7O0FBQ3BELGdCQUFJLFFBQVE7QUFFWixnQkFBSSxrQkFBa0IsYUFBYTtBQUNqQyxrQkFBSSxVQUFVLEtBQUs7QUFFbkIsd0JBQVUsUUFBUSxVQUFVLGVBQWU7QUFFM0Msa0JBQU0sT0FBTyxLQUFLLFdBQ1osbUJBQW1CLElBQUEsU0FBQSxpQkFBZ0IsVUFDbkMsWUFBWTtBQUVsQixzQkFBUSxXQUFJLE9BQUo7Z0JBQVU7Z0JBQU07Z0JBQVM7Z0JBQVc7Z0JBQXBDLE9BQWlELG1CQUFHOztBQUc5RCxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLGVBQWEsT0FBTyxTQUFTLGFBQW9DO0FBQXZCLHFCQUFBLE9BQUEsVUFBQSxRQUFHLHFCQUFILElBQUEsTUFBQSxPQUFBLElBQUEsT0FBQSxJQUFBLElBQUEsT0FBQSxHQUFBLE9BQUEsTUFBQSxRQUFBO0FBQUcsaUNBQUgsT0FBQSxLQUFBLFVBQUE7O0FBQ3hDLGdCQUFJLFFBQVE7QUFFWixnQkFBUSxvQkFBc0IsTUFBdEIsbUJBQ0YsVUFBVSxRQUFRLE1BQU07QUFFOUIsZ0JBQUksWUFBWSxNQUFNO0FBQ3BCLGtCQUFRLFFBQVUsUUFBVjtBQUVSLGtCQUFJLFVBQVUsR0FBRztBQUNmLG9CQUFNLGFBQWEsTUFBTTtBQUV6QiwwQkFBVTtBQUVWLG9CQUFNLGdCQUFnQixRQUFRO0FBRTlCLG9CQUFJLGdCQUFnQixHQUFHO0FBQ3JCLHNCQUFRLE9BQVMsTUFBVCxNQUNGLG1CQUFtQixJQUFBLFNBQUEsaUJBQWdCLFVBQ25DLFlBQVk7QUFFbEIsMEJBQVEsV0FBSSxPQUFKO29CQUFVO29CQUFNO29CQUFTO29CQUFXO29CQUFwQyxPQUFpRCxtQkFBRzs7OztBQUtsRSxtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAscUJBQW1CLE9BQU8sU0FBUyxhQUFvQztBQUF2QixxQkFBQSxPQUFBLFVBQUEsUUFBRyxxQkFBSCxJQUFBLE1BQUEsT0FBQSxJQUFBLE9BQUEsSUFBQSxJQUFBLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLGlDQUFILE9BQUEsS0FBQSxVQUFBOztBQUM5QyxnQkFBUSxPQUFTLE1BQVQsTUFDRixtQkFBbUIsSUFBQSxTQUFBLGlCQUFnQixVQUNuQyxZQUFZLGtCQUNaLFFBQVEsV0FBSSxPQUFKO2NBQVU7Y0FBTTtjQUFTO2NBQVc7Y0FBcEMsT0FBaUQsbUJBQUc7QUFFbEUsbUJBQU87Ozs7VUFHRixLQUFBO2lCQUFQLDRCQUEwQixPQUFPLFNBQVMsTUFBTSxhQUFvQztBQUF2QixxQkFBQSxPQUFBLFVBQUEsUUFBRyxxQkFBSCxJQUFBLE1BQUEsT0FBQSxJQUFBLE9BQUEsSUFBQSxJQUFBLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLGlDQUFILE9BQUEsS0FBQSxVQUFBOztBQUMzRCxnQkFBTSxtQkFBbUIsSUFBQSxTQUFBLGlCQUFnQixVQUNuQyxZQUFZLGtCQUNaLFFBQVEsV0FBSSxPQUFKO2NBQVU7Y0FBTTtjQUFTO2NBQVc7Y0FBcEMsT0FBaUQsbUJBQUc7QUFFbEUsbUJBQU87Ozs7YUF0SVU7Ozs7O0FFVHJCOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBTSxjQUFjO0FBRUwsUUFBTSxtQkFBTix5QkFBQSxPQUFBO2dCQUFNLG1CQUFBO2dDQUFBO21DQUFBOzhCQUFBOzs7bUJBQUEsbUJBQUE7O1VBQ25CLEtBQUE7aUJBQUEsZUFBTSxPQUFPLGVBQWUsYUFBb0M7QUFBdkIscUJBQUEsT0FBQSxVQUFBLFFBQUcscUJBQUgsSUFBQSxNQUFBLE9BQUEsSUFBQSxPQUFBLElBQUEsSUFBQSxPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRyxpQ0FBSCxPQUFBLEtBQUEsVUFBQTs7Z0JBT2Q7QUFOekIsZ0JBQUksZ0JBQWdCLFFBQVc7QUFDN0IsNEJBQWM7QUFDZCw4QkFBZ0I7QUFDaEIsc0JBTGU7O0FBUWpCLGdCQUFNLG1CQUFtQixVQUFBLEtBQUEsZ0JBUlIsa0JBQUEsWUFRYyxTQUFOLE9BQUssS0FBQSxNQUFMLFFBQUE7O2NBQVk7Y0FBTztjQUFlO2NBQWE7cUJBQWEsbUJBQUc7QUFFeEYsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxlQUFhLE9BQU8sU0FBZ0M7QUFBdkIscUJBQUEsT0FBQSxVQUFBLFFBQUcscUJBQUgsSUFBQSxNQUFBLE9BQUEsSUFBQSxPQUFBLElBQUEsSUFBQSxPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRyxpQ0FBSCxPQUFBLEtBQUEsVUFBQTs7Z0JBTUY7QUFMekIsZ0JBQUksWUFBWSxRQUFXO0FBQ3pCLHdCQUFVO0FBQ1Ysc0JBaEJlOztBQW1CakIsZ0JBQU0sbUJBQW1CLFVBQUEsT0FBQSxTQUFNLE1BQU4sTUFBQSxRQUFBO2NBQVk7Y0FBTztjQUFTO2NBQTVCLE9BQXlDLG1CQUFHO0FBRXJFLG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTyxTQUFnQztBQUF2QixxQkFBQSxPQUFBLFVBQUEsUUFBRyxxQkFBSCxJQUFBLE1BQUEsT0FBQSxJQUFBLE9BQUEsSUFBQSxJQUFBLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLGlDQUFILE9BQUEsS0FBQSxVQUFBOztnQkFNUjtBQUx6QixnQkFBSSxZQUFZLFFBQVc7QUFDekIsd0JBQVU7QUFDVixzQkEzQmU7O0FBOEJqQixnQkFBTSxtQkFBbUIsVUFBQSxPQUFBLFNBQU0sWUFBTixNQUFBLFFBQUE7Y0FBa0I7Y0FBTztjQUFTO2NBQWxDLE9BQStDLG1CQUFHO0FBRTNFLG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCw0QkFBMEIsT0FBTyxTQUFTLE1BQTZCO0FBQXZCLHFCQUFBLE9BQUEsVUFBQSxRQUFHLHFCQUFILElBQUEsTUFBQSxPQUFBLElBQUEsT0FBQSxJQUFBLElBQUEsT0FBQSxHQUFBLE9BQUEsTUFBQSxRQUFBO0FBQUcsaUNBQUgsT0FBQSxLQUFBLFVBQUE7O2dCQU9yQjtBQU56QixnQkFBSSxTQUFTLFFBQVc7QUFDdEIscUJBQU87QUFDUCx3QkFBVTtBQUNWLHNCQXZDZTs7QUEwQ2pCLGdCQUFNLG1CQUFtQixVQUFBLE9BQUEsU0FBTSxtQkFBTixNQUFBLFFBQUE7Y0FBeUI7Y0FBTztjQUFTO2NBQU07Y0FBL0MsT0FBNEQsbUJBQUc7QUFFeEYsbUJBQU87Ozs7YUE1Q1U7TUFBeUIsT0FBQTs7OztBRU45Qzs7Ozs7Ozs7Ozs7OztNQUVhLEdBQUMsV0FBQTtlQUFEOztNQUNBLGNBQVksV0FBQTtlQUFaOzs7QUFETixRQUFNLElBQUk7QUFDVixRQUFNLGVBQWU7Ozs7QUNINUI7Ozs7Ozs7O2VBVXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxRQUFVLFdBQUEsZUFBVjtBQUVPLFFBQU0sT0FBTiwyQkFBQTtxQkFDRCxNQUFNLG1CQUFpQjs4QkFEaEI7QUFFakIsYUFBSyxPQUFPO0FBQ1osYUFBSyxvQkFBb0I7O21CQUhSLE9BQUE7O1VBTW5CLEtBQUE7aUJBQUEsbUJBQVU7QUFDUixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxnQ0FBdUI7QUFDckIsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsZUFBTSxTQUFTO0FBQ2IsZ0JBQUksbUJBQW1CO0FBRXZCLGdCQUFNLFVBQVUsUUFBUSxNQUFNLEtBQUs7QUFFbkMsZ0JBQUksWUFBWSxNQUFNO0FBQ3BCLGtCQUFRLFFBQVUsUUFBVjtBQUVSLGtCQUFJLFVBQVUsR0FBRztBQUNmLG9CQUFNLGFBQWEsTUFBTTtBQUV6QiwwQkFBVTtBQUVWLG9CQUFNLGdCQUFnQixRQUFRO0FBRTlCLG9CQUFJLGdCQUFnQixHQUFHO0FBQ3JCLHFDQUFtQixhQUFBLFFBQWlCLG1CQUFtQixTQUFTLEtBQUs7Ozs7QUFLM0UsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG1CQUFVO0FBQ1IsZ0JBQU0sUUFBUSxJQUNSLDJCQUE0QixHQUF5QixPQUF2QixLQUFLO0FBRXpDLGtCQUFNLEtBQUssUUFBUTtBQUVuQixtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQ3RCLGdCQUFRLE9BQTRCLE1BQTVCLE1BQU0sb0JBQXNCLE1BQXRCLG1CQUNSLE9BQU8sSUFqREksTUFpREssTUFBTTtBQUU1QixtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAsbUJBQWlCLE9BQU87QUFDdEIsZ0JBQU0sWUFBWSxPQUFPLEtBQUssUUFDeEIsZ0JBQWdCLE1BQU0sWUFDdEIsT0FBTyxlQUNQLDJCQUEyQixNQUFNLE9BQ2pDLE9BM0RXLE1BMkRDLG9DQUFvQyxNQUFNO0FBRTVELG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCw2Q0FBMkMsTUFBTSwwQkFBMEI7QUFDekUsZ0JBQU0sVUFBVSxVQUFVLDJCQUNwQixRQUFRLFVBQ0UsV0FBQSxJQUNFLFdBQUEsY0FDWixTQUFTLElBQUksT0FBTywwQkFBMEIsUUFDOUMsb0JBQW9CLFFBQ3BCLE9BQU8sSUF2RUksTUF1RUssTUFBTTtBQUU1QixtQkFBTzs7OzthQXpFVTs7QUE2RXJCLHVCQUFtQiwwQkFBMEI7QUFDM0MsVUFBTSwyQkFBMkIsTUFDM0IsUUFBUSx5QkFBeUIsT0FBTywyQkFDeEMsVUFBVyxVQUFVO0FBRTNCLGFBQU87Ozs7O0FDNUZUOzs7Ozs7Ozs7Ozs7O01BRWEsTUFBSSxXQUFBO2VBQUo7O01BQ0EsU0FBTyxXQUFBO2VBQVA7O01BQ0EsVUFBUSxXQUFBO2VBQVI7O01BQ0EsVUFBUSxXQUFBO2VBQVI7O01BQ0EsVUFBUSxXQUFBO2VBQVI7O01BQ0EsV0FBUyxXQUFBO2VBQVQ7O01BQ0EsWUFBVSxXQUFBO2VBQVY7O01BQ0EsYUFBVyxXQUFBO2VBQVg7O01BQ0EsYUFBVyxXQUFBO2VBQVg7O01BQ0EsY0FBWSxXQUFBO2VBQVo7O01BQ0EsY0FBWSxXQUFBO2VBQVo7O01BQ0EsaUJBQWUsV0FBQTtlQUFmOztNQUNBLGVBQWEsV0FBQTtlQUFiOztNQUNBLGFBQVcsV0FBQTtlQUFYOztNQUViLFNBZUUsV0FBQTtlQWZGOzs7QUFmTyxRQUFNLE9BQU87QUFDYixRQUFNLFVBQVU7QUFDaEIsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sV0FBVztBQUNqQixRQUFNLFdBQVc7QUFDakIsUUFBTSxZQUFZO0FBQ2xCLFFBQU0sYUFBYTtBQUNuQixRQUFNLGNBQWM7QUFDcEIsUUFBTSxjQUFjO0FBQ3BCLFFBQU0sZUFBZTtBQUNyQixRQUFNLGVBQWU7QUFDckIsUUFBTSxrQkFBa0I7QUFDeEIsUUFBTSxnQkFBZ0I7QUFDdEIsUUFBTSxjQUFjO1FBRTNCLFdBQWU7TUFDYjtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7OztBQy9CRjs7Ozs7Ozs7Ozs7OztNQUlnQixrQkFBZ0IsV0FBQTtlQUFoQjs7TUFVQSxnQkFBYyxXQUFBO2VBQWQ7O01BUWhCLFNBR0UsV0FBQTtlQUhGOzs7Ozs7Ozs7QUFsQk8sOEJBQTBCLFNBQVM7QUFDeEMsVUFBTSxRQUFRLFFBQVEsSUFBSSxTQUFDLE9BQVU7QUFDbkMsWUFBTSxPQUFPLE1BQUEsUUFBSyxVQUFVO0FBRTVCLGVBQU87O0FBR1QsYUFBTzs7QUFHRiw0QkFBd0IsT0FBTyxPQUFPO0FBQzNDLFVBQU0sbUJBQW1CLDBCQUEwQixRQUM3QyxzQkFBc0IsNkJBQTZCLFFBQ25ELFFBQVEsSUFBSSxNQUFNLE9BQU8sa0JBQWtCO0FBRWpELGFBQU87O1FBR1QsV0FBZTtNQUNiO01BQ0E7O0FBR0YsdUNBQW1DLE9BQU87QUFDeEMsVUFBUSx3QkFBcUYsTUFBckYsdUJBQXVCLDZCQUE4RCxNQUE5RCw0QkFBNEIsZ0NBQWtDLE1BQWxDO0FBRTNELFVBQU0sbUJBQW1CO1FBQ3ZCO1FBQ0E7UUFDQTs7QUFHRixhQUFPOztBQUdULDBDQUFzQyxPQUFPO0FBQzNDLFVBQVEsaUJBTW1DLE1BTm5DLGdCQUNBLGtCQUttQyxNQUxuQyxpQkFDQSx5QkFJbUMsTUFKbkMsd0JBQ0EseUJBR21DLE1BSG5DLHdCQUNBLCtCQUVtQyxNQUZuQyw4QkFDQSxpQ0FDbUMsTUFEbkMsZ0NBQ0EsaUNBQW1DLE1BQW5DO0FBRVIsVUFBTSxzQkFBc0I7UUFDMUI7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O0FBR0YsYUFBTzs7Ozs7QUMxRFQ7Ozs7O21DQWlCQSxXQUFBOzs7ZUFBQTs7O0FBZkEsUUFBTSxVQUFVO01BQ2Q7UUFDRSxTQUFXOztNQUViO1FBQ0UsTUFBUTs7TUFFVjtRQUNFLE1BQVE7O01BRVY7UUFDRSxZQUFjOzs7UUFJbEIsV0FBZTs7OztBQ2pCZjs7Ozs7bUNBRWdCLGtDQUFBOzs7ZUFBQTs7O0FBQVQsNENBQXdDLE9BQU8sV0FBVztBQUMvRCxVQUFNLG9CQUFvQixNQUFNO0FBRWhDLFVBQUksbUJBQW1CO0FBQ3JCLFlBQU0sZUFBZSxPQUNmLGtDQUFrQyxhQUFhO0FBRXJELG9CQUFZOztBQUdkLGFBQU87Ozs7O0FDWlQ7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxjQUFOLDJCQUFBOzRCQUNELE9BQU8sa0JBQWtCLHFCQUFtQjs4QkFEckM7QUFFakIsYUFBSyxRQUFRO0FBQ2IsYUFBSyxtQkFBbUI7QUFDeEIsYUFBSyxzQkFBc0I7O21CQUpWLGNBQUE7O1VBT25CLEtBQUE7aUJBQUEsb0JBQVc7QUFDVCxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSwrQkFBc0I7QUFDcEIsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsa0NBQXlCO0FBQ3ZCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGtCQUFTLFNBQTRCO2lEQUdGO0FBQy9CLGtCQUFJLFFBQVE7QUFFWixrQkFBTSxVQUFVLFlBQ0UsTUFBSyxtQkFDSCxNQUFLO0FBRXpCLHNCQUFRLEtBQUssU0FBQyxPQUFVO0FBQ3RCLG9CQUFJLFVBQVUsTUFBTTtBQUNsQiwwQkFBUSxNQUFNLE1BQU07QUFFcEIsc0JBQUksVUFBVSxNQUFNO0FBQ2xCLDJCQUFPOzs7O0FBS2Isa0JBQUksVUFBVSxNQUFNO0FBQ2xCLG9CQUFJLG1CQUFtQjtBQUV2QixzQkFBSyxNQUFNLEtBQUssU0FBQyxNQUFTO0FBQ3hCLHFDQUFtQixLQUFLLE1BQU07QUFFOUIsc0JBQUkscUJBQXFCLE1BQU07QUFDN0IsNEJBQVE7QUFFUiwyQkFBTzs7OztBQUtiLGtCQUFJLFVBQVUsTUFBTTtBQUNsQixzQkFBTSxJQUFJLE1BQU8sZ0JBQXVCLE9BQVIsU0FBUTs7QUFHMUMscUJBQU8sS0FBSztBQUVaLDBCQUFZLElBQUEsT0FBQSxnQ0FBK0IsT0FBTztBQUVsRCxrQkFBTSxxQkFBcUIsTUFBTSxvQkFDM0IsUUFBUTtBQUVkLHdCQUFVLFFBQVEsVUFBVTs7Z0JBN0NkLFlBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFZO0FBQzVCLGdCQUFNLFNBQVM7QUFFZixtQkFBTyxZQUFZLFdBQUE7QUFBWTtBQTZDL0IsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTztBQUN4QixnQkFBUSxVQUFZLE1BQVosU0FDRixRQUFRLElBQUEsT0FBQSxrQkFBaUIsVUFDekIsUUFBUSxJQUFBLE9BQUEsZ0JBQWUsT0FBTztBQUVwQyxtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAsbUJBQWlCLE9BQU8sT0FBTztBQUM3QixnQkFBTSxRQUFRLElBQUEsT0FBQSxnQkFBZSxPQUFPO0FBRXBDLG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTyxTQUFTO0FBQ2pDLGdCQUFNLFFBQVEsSUFBQSxPQUFBLGtCQUFpQixVQUN6QixRQUFRLElBQUEsT0FBQSxnQkFBZSxPQUFPO0FBRXBDLG1CQUFPOzs7O2FBeEZVOzs7OztBRU5yQjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBTSxjQUFjO0FBRUwsUUFBTSxzQkFBTix5QkFBQSxPQUFBO2dCQUFNLHNCQUFBO2dDQUFBO3NDQUFBOzhCQUFBOzs7bUJBQUEsc0JBQUE7O1VBQ25CLEtBQUE7aUJBQUEsZUFBTSxPQUFPLGVBQWUsYUFBYTtBQUFFLG1CQUFPLEtBQUEsZ0JBRC9CLHFCQUFBLFlBQ3FDLFNBQU4sTUFBSyxLQUFBLE1BQU8sT0FBTyxlQUFlLGFBQWE7Ozs7O1VBRTFGLEtBQUE7aUJBQVAsZUFBYSxPQUFPLFNBQVM7QUFBRSxtQkFBTyxPQUFBLFFBQU0sTUFBTSxPQUFPLFNBQVM7Ozs7VUFFM0QsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTyxTQUFTO0FBQUUsbUJBQU8sT0FBQSxRQUFNLFlBQVksT0FBTyxTQUFTOzs7O1VBRXZFLEtBQUE7aUJBQVAsNEJBQTBCLE9BQU8sU0FBUyxNQUFNO0FBQUUsbUJBQU8sT0FBQSxRQUFNLG1CQUFtQixPQUFPLFNBQVMsTUFBTTs7OzthQVByRjtNQUE0QixPQUFBOzs7O0FFTmpEOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxrQkFBTix5QkFBQSxxQkFBQTtnQkFBTSxrQkFBQTtnQ0FBQTtrQ0FBQTs4QkFBQTs7O21CQUFBLGtCQUFBOztVQUNuQixLQUFBO2lCQUFBLGtCQUFTO0FBQ1AsZ0JBQU0sT0FBTyxLQUFLO0FBRWxCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFPLEtBQUEsZ0JBUHhCLGlCQUFBLFlBTzhCLFNBQU4sTUFBSyxLQUFBLE1BUDdCLGtCQU9xRCxlQUFlOzs7OztVQU1oRixLQUFBO2lCQUFQLGVBQWEsU0FBUztBQUFFLG1CQUFPLGdCQUFBLFFBQW9CLE1BYmhDLGtCQWF1RDs7OztVQUVuRSxLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sZ0JBQUEsUUFBb0IsWUFmdEMsa0JBZW1FOzs7O2FBZm5FO01BQXdCLGdCQUFBO0FBUzNDLG9CQVRtQixpQkFTWixRQUFPLE9BQUE7QUFFZCxvQkFYbUIsaUJBV1oscUJBQW9COzs7O0FFakI3Qjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0seUJBQU4seUJBQUEsa0JBQUE7Z0JBQU0seUJBQUE7Z0NBQUE7eUNBQUE7OEJBQUE7OzttQkFBQSx5QkFBQTs7VUFDbkIsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFPLEtBQUEsZ0JBRHhCLHdCQUFBLFlBQzhCLFNBQU4sTUFBSyxLQUFBLE1BRDdCLHlCQUM0RCxlQUFlOzs7OztVQU12RixLQUFBO2lCQUFQLGVBQWEsU0FBUztBQUFFLG1CQUFPLGFBQUEsUUFBaUIsTUFQN0IseUJBTzJEOzs7O1VBRXZFLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxhQUFBLFFBQWlCLFlBVG5DLHlCQVN1RTs7OzthQVR2RTtNQUErQixhQUFBO0FBR2xELG9CQUhtQix3QkFHWixRQUFPLE9BQUE7QUFFZCxvQkFMbUIsd0JBS1oscUJBQW9COzs7O0FFWDdCOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSwrQkFBTix5QkFBQSxxQkFBQTtnQkFBTSwrQkFBQTtnQ0FBQTsrQ0FBQTs4QkFBQTs7O21CQUFBLCtCQUFBOztVQUNuQixLQUFBO2lCQUFBLGVBQU0sZUFBZSxhQUFhO0FBQUUsbUJBQU8sS0FBQSxnQkFEeEIsOEJBQUEsWUFDOEIsU0FBTixNQUFLLEtBQUEsTUFEN0IsK0JBQ2tFLGVBQWU7Ozs7VUFFcEcsS0FBQTtpQkFBQSxrQkFBUztBQUNQLGdCQUFNLE9BQU8sS0FBSztBQUVsQixtQkFBTzs7Ozs7VUFPRixLQUFBO2lCQUFQLGVBQWEsU0FBUztBQUFFLG1CQUFPLGdCQUFBLFFBQW9CLE1BYmhDLCtCQWFvRTs7OztVQUVoRixLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sZ0JBQUEsUUFBb0IsWUFmdEMsK0JBZWdGOzs7O2FBZmhGO01BQXFDLGdCQUFBO0FBU3hELG9CQVRtQiw4QkFTWixRQUFPLE9BQUE7QUFFZCxvQkFYbUIsOEJBV1oscUJBQW9COzs7O0FFakI3Qjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0scUJBQU4seUJBQUEsa0JBQUE7Z0JBQU0scUJBQUE7Z0NBQUE7cUNBQUE7OEJBQUE7OzttQkFBQSxxQkFBQTs7VUFDbkIsS0FBQTtpQkFBQSxlQUFNLE9BQU8sZUFBZSxhQUFhO0FBQUUsbUJBQU8sS0FBQSxnQkFEL0Isb0JBQUEsWUFDcUMsU0FBTixNQUFLLEtBQUEsTUFBTyxPQUFPLGVBQWU7Ozs7VUFFcEYsS0FBQTtpQkFBQSxxQkFBWTtBQUNWLGdCQUFNLFVBQVUsS0FBSyxjQUNmLGdCQUFnQixRQUFRLFFBQ3hCLFFBQVEsR0FDUixNQUFNLGdCQUFnQixHQUN0QixTQUFTLFFBQVEsVUFBVSxPQUFPO0FBRXhDLG1CQUFPOzs7OztVQUtGLEtBQUE7aUJBQVAsZUFBYSxPQUFPLFNBQVM7QUFBRSxtQkFBTyxhQUFBLFFBQWlCLE1BQU0sT0FBTzs7OztVQUU3RCxLQUFBO2lCQUFQLHFCQUFtQixPQUFPLFNBQVM7QUFBRSxtQkFBTyxhQUFBLFFBQWlCLFlBQVksT0FBTzs7OzthQWpCN0Q7TUFBMkIsYUFBQTtBQWE5QyxvQkFibUIsb0JBYVosUUFBTyxPQUFBOzs7O0FFbkJoQjs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxpQ0FBTix5QkFBQSxvQkFBQTtnQkFBTSxpQ0FBQTtnQ0FBQTtpREFBQTs4QkFBQTs7O21CQUFBLGlDQUFBOztVQUNuQixLQUFBO2lCQUFBLGVBQU0sZUFBZSxhQUFhO0FBQUUsbUJBQU8sS0FBQSxnQkFEeEIsZ0NBQUEsWUFDOEIsU0FBTixNQUFLLEtBQUEsTUFEN0IsaUNBQ29FLGVBQWU7Ozs7O1VBSS9GLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sZUFBQSxRQUFtQixNQUwvQixpQ0FLcUU7Ozs7VUFFakYsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLGVBQUEsUUFBbUIsWUFQckMsaUNBT2lGOzs7O2FBUGpGO01BQXVDLGVBQUE7QUFHMUQsb0JBSG1CLGdDQUdaLHFCQUFvQjs7OztBRVA3Qjs7Ozs7Ozs7ZUFTcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLFdBQU4seUJBQUEsYUFBQTtnQkFBTSxXQUFBO2dDQUFBOzJCQUFBOzhCQUFBOzs7bUJBQUEsV0FBQTs7VUFDbkIsS0FBQTtpQkFBQSx1QkFBYyxLQUFLO0FBQ2pCLGdCQUFNLFVBQVUsS0FDVixTQUFTLEtBQUEsZ0JBSEUsVUFBQSxZQUdJLFlBQU4sTUFBSyxLQUFBLE1BQVU7QUFFOUIsbUJBQU87Ozs7O1VBeUJGLEtBQUE7aUJBQVAsdUJBQXFCO0FBQUUsbUJBQU8sT0FBQSxRQUFZLFlBOUJ2Qjs7OztVQWdDWixLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQUUsbUJBQU8sT0FBQSxRQUFZLFVBaEMxQixXQWdDOEM7Ozs7VUFFMUQsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLE9BQUEsUUFBWSxZQWxDOUIsV0FrQ29EOzs7O2FBbENwRDtNQUFpQixPQUFBO0FBUXBDLG9CQVJtQixVQVFaLFdBQVUsU0FBQTtBQUVqQixvQkFWbUIsVUFVWixrQkFBaUIsV0FBQTtBQUV4QixvQkFabUIsVUFZWixtQkFBa0IsWUFBQTtBQUV6QixvQkFkbUIsVUFjWix5QkFBd0I7QUFFL0Isb0JBaEJtQixVQWdCWiwwQkFBeUIsbUJBQUE7QUFFaEMsb0JBbEJtQixVQWtCWiwwQkFBeUI7QUFFaEMsb0JBcEJtQixVQW9CWiw4QkFBNkI7QUFFcEMsb0JBdEJtQixVQXNCWixnQ0FBK0I7QUFFdEMsb0JBeEJtQixVQXdCWixpQ0FBZ0M7QUFFdkMsb0JBMUJtQixVQTBCWixrQ0FBaUM7QUFFeEMsb0JBNUJtQixVQTRCWixrQ0FBaUMsY0FBQTs7OztBRXJDMUM7Ozs7O21DQWlCQSxXQUFBOzs7ZUFBQTs7O0FBZkEsUUFBTSxVQUFVO01BQ2Q7UUFDRSxPQUFTOztNQUVYO1FBQ0UsU0FBVzs7TUFFYjtRQUNFLFVBQVk7O01BRWQ7UUFDRSxZQUFjOzs7UUFJbEIsV0FBZTs7OztBQ2pCZjs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxpQ0FBTix5QkFBQSxvQkFBQTtnQkFBTSxpQ0FBQTtnQ0FBQTtpREFBQTs4QkFBQTs7O21CQUFBLGlDQUFBOztVQUNuQixLQUFBO2lCQUFBLGVBQU0sZUFBZSxhQUFhO0FBQUUsbUJBQU8sS0FBQSxnQkFEeEIsZ0NBQUEsWUFDOEIsU0FBTixNQUFLLEtBQUEsTUFEN0IsaUNBQ29FLGVBQWU7Ozs7O1VBSS9GLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sZUFBQSxRQUFtQixNQUwvQixpQ0FLcUU7Ozs7VUFFakYsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLGVBQUEsUUFBbUIsWUFQckMsaUNBT2lGOzs7O2FBUGpGO01BQXVDLGVBQUE7QUFHMUQsb0JBSG1CLGdDQUdaLHFCQUFvQjs7OztBRVA3Qjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0seUJBQU4seUJBQUEscUJBQUE7Z0JBQU0seUJBQUE7Z0NBQUE7eUNBQUE7OEJBQUE7OzttQkFBQSx5QkFBQTs7VUFDbkIsS0FBQTtpQkFBQSxlQUFNLE9BQU8sZUFBZSxhQUFhO0FBQUUsbUJBQU8sS0FBQSxnQkFEL0Isd0JBQUEsWUFDcUMsU0FBTixNQUFLLEtBQUEsTUFBTyxPQUFPLGVBQWU7Ozs7VUFFcEYsS0FBQTtpQkFBQSxpQ0FBd0I7QUFDdEIsZ0JBQU0sc0JBQXNCO0FBRTVCLG1CQUFPOzs7OztVQUtGLEtBQUE7aUJBQVAsZUFBYSxPQUFPLFNBQVM7QUFBRSxtQkFBTyxnQkFBQSxRQUFvQixNQUFNLE9BQU87Ozs7VUFFaEUsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTyxTQUFTO0FBQUUsbUJBQU8sZ0JBQUEsUUFBb0IsWUFBWSxPQUFPOzs7O2FBYmhFO01BQStCLGdCQUFBO0FBU2xELG9CQVRtQix3QkFTWixRQUFPLE9BQUE7Ozs7QUVmaEI7Ozs7Ozs7O2VBSXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sb0NBQU4seUJBQUEsd0JBQUE7Z0JBQU0sb0NBQUE7Z0NBQUE7b0RBQUE7OEJBQUE7OzttQkFBQSxvQ0FBQTs7VUFDbkIsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFPLEtBQUEsZ0JBRHhCLG1DQUFBLFlBQzhCLFNBQU4sTUFBSyxLQUFBLE1BRDdCLG9DQUN1RSxlQUFlOzs7OztVQUlsRyxLQUFBO2lCQUFQLGVBQWEsU0FBUztBQUFFLG1CQUFPLFlBQUEsUUFBdUIsTUFMbkMsb0NBSzRFOzs7O1VBRXhGLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxZQUFBLFFBQXVCLFlBUHpDLG9DQU93Rjs7OzthQVB4RjtNQUEwQyxZQUFBO0FBRzdELG9CQUhtQixtQ0FHWixxQkFBb0I7Ozs7QUVQN0I7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLHNDQUFOLHlCQUFBLHFCQUFBO2dCQUFNLHNDQUFBO2dDQUFBO3NEQUFBOzhCQUFBOzs7bUJBQUEsc0NBQUE7O1VBQ25CLEtBQUE7aUJBQUEsZUFBTSxlQUFlLGFBQWE7QUFBRSxtQkFBTyxLQUFBLGdCQUR4QixxQ0FBQSxZQUM4QixTQUFOLE1BQUssS0FBQSxNQUQ3QixzQ0FDeUUsZUFBZTs7OztVQUUzRyxLQUFBO2lCQUFBLGtCQUFTO0FBQ1AsZ0JBQU0sT0FBTyxLQUFLO0FBRWxCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQ0FBd0I7QUFDdEIsZ0JBQU0sc0JBQXNCO0FBRTVCLG1CQUFPOzs7OztVQU9GLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sZ0JBQUEsUUFBb0IsTUFuQmhDLHNDQW1CMkU7Ozs7VUFFdkYsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLGdCQUFBLFFBQW9CLFlBckJ0QyxzQ0FxQnVGOzs7O2FBckJ2RjtNQUE0QyxnQkFBQTtBQWUvRCxvQkFmbUIscUNBZVosUUFBTyxPQUFBO0FBRWQsb0JBakJtQixxQ0FpQloscUJBQW9COzs7O0FFdkI3Qjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sNkJBQU4seUJBQUEscUJBQUE7Z0JBQU0sNkJBQUE7Z0NBQUE7NkNBQUE7OEJBQUE7OzttQkFBQSw2QkFBQTs7VUFDbkIsS0FBQTtpQkFBQSxlQUFNLE9BQU8sZUFBZSxhQUFhO0FBQUUsbUJBQU8sS0FBQSxnQkFEL0IsNEJBQUEsWUFDcUMsU0FBTixNQUFLLEtBQUEsTUFBTyxPQUFPLGVBQWU7Ozs7VUFFcEYsS0FBQTtpQkFBQSxpQ0FBd0I7QUFDdEIsZ0JBQU0sc0JBQXNCO0FBRTVCLG1CQUFPOzs7OztVQUtGLEtBQUE7aUJBQVAsZUFBYSxPQUFPLFNBQVM7QUFBRSxtQkFBTyxnQkFBQSxRQUFvQixNQUFNLE9BQU87Ozs7VUFFaEUsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTyxTQUFTO0FBQUUsbUJBQU8sZ0JBQUEsUUFBb0IsWUFBWSxPQUFPOzs7O2FBYmhFO01BQW1DLGdCQUFBO0FBU3RELG9CQVRtQiw0QkFTWixRQUFPLE9BQUE7Ozs7QUVmaEI7Ozs7Ozs7O2VBSXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sd0NBQU4seUJBQUEsNEJBQUE7Z0JBQU0sd0NBQUE7Z0NBQUE7d0RBQUE7OEJBQUE7OzttQkFBQSx3Q0FBQTs7VUFDbkIsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFPLEtBQUEsZ0JBRHhCLHVDQUFBLFlBQzhCLFNBQU4sTUFBSyxLQUFBLE1BRDdCLHdDQUMyRSxlQUFlOzs7OztVQUl0RyxLQUFBO2lCQUFQLGVBQWEsU0FBUztBQUFFLG1CQUFPLE9BQUEsUUFBMkIsTUFMdkMsd0NBS29GOzs7O1VBRWhHLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxPQUFBLFFBQTJCLFlBUDdDLHdDQU9nRzs7OzthQVBoRztNQUE4QyxPQUFBO0FBR2pFLG9CQUhtQix1Q0FHWixxQkFBb0I7Ozs7QUVQN0I7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLCtCQUFOLHlCQUFBLHFCQUFBO2dCQUFNLCtCQUFBO2dDQUFBOytDQUFBOzhCQUFBOzs7bUJBQUEsK0JBQUE7O1VBQ25CLEtBQUE7aUJBQUEsZUFBTSxPQUFPLGVBQWUsYUFBYTtBQUFFLG1CQUFPLEtBQUEsZ0JBRC9CLDhCQUFBLFlBQ3FDLFNBQU4sTUFBSyxLQUFBLE1BQU8sT0FBTyxlQUFlOzs7O1VBRXBGLEtBQUE7aUJBQUEsaUNBQXdCO0FBQ3RCLGdCQUFNLHNCQUFzQjtBQUU1QixtQkFBTzs7Ozs7VUFLRixLQUFBO2lCQUFQLGVBQWEsT0FBTyxTQUFTO0FBQUUsbUJBQU8sZ0JBQUEsUUFBb0IsTUFBTSxPQUFPOzs7O1VBRWhFLEtBQUE7aUJBQVAscUJBQW1CLE9BQU8sU0FBUztBQUFFLG1CQUFPLGdCQUFBLFFBQW9CLFlBQVksT0FBTzs7OzthQWJoRTtNQUFxQyxnQkFBQTtBQVN4RCxvQkFUbUIsOEJBU1osUUFBTyxPQUFBOzs7O0FFZmhCOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLDBDQUFOLHlCQUFBLDhCQUFBO2dCQUFNLDBDQUFBO2dDQUFBOzBEQUFBOzhCQUFBOzs7bUJBQUEsMENBQUE7O1VBQ25CLEtBQUE7aUJBQUEsZUFBTSxlQUFlLGFBQWE7QUFBRSxtQkFBTyxLQUFBLGdCQUR4Qix5Q0FBQSxZQUM4QixTQUFOLE1BQUssS0FBQSxNQUQ3QiwwQ0FDNkUsZUFBZTs7Ozs7VUFJeEcsS0FBQTtpQkFBUCxlQUFhLFNBQVM7QUFBRSxtQkFBTyxTQUFBLFFBQTZCLE1BTHpDLDBDQUt3Rjs7OztVQUVwRyxLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sU0FBQSxRQUE2QixZQVAvQywwQ0FPb0c7Ozs7YUFQcEc7TUFBZ0QsU0FBQTtBQUduRSxvQkFIbUIseUNBR1oscUJBQW9COzs7O0FFUDdCOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxnQ0FBTix5QkFBQSxxQkFBQTtnQkFBTSxnQ0FBQTtnQ0FBQTtnREFBQTs4QkFBQTs7O21CQUFBLGdDQUFBOztVQUNuQixLQUFBO2lCQUFBLGVBQU0sT0FBTyxlQUFlLGFBQWE7QUFBRSxtQkFBTyxLQUFBLGdCQUQvQiwrQkFBQSxZQUNxQyxTQUFOLE1BQUssS0FBQSxNQUFPLE9BQU8sZUFBZTs7OztVQUVwRixLQUFBO2lCQUFBLGlDQUF3QjtBQUN0QixnQkFBTSxzQkFBc0I7QUFFNUIsbUJBQU87Ozs7O1VBS0YsS0FBQTtpQkFBUCxlQUFhLE9BQU8sU0FBUztBQUFFLG1CQUFPLGdCQUFBLFFBQW9CLE1BQU0sT0FBTzs7OztVQUVoRSxLQUFBO2lCQUFQLHFCQUFtQixPQUFPLFNBQVM7QUFBRSxtQkFBTyxnQkFBQSxRQUFvQixZQUFZLE9BQU87Ozs7YUFiaEU7TUFBc0MsZ0JBQUE7QUFTekQsb0JBVG1CLCtCQVNaLFFBQU8sT0FBQTs7OztBRWZoQjs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSwyQ0FBTix5QkFBQSwrQkFBQTtnQkFBTSwyQ0FBQTtnQ0FBQTsyREFBQTs4QkFBQTs7O21CQUFBLDJDQUFBOztVQUNuQixLQUFBO2lCQUFBLGVBQU0sZUFBZSxhQUFhO0FBQUUsbUJBQU8sS0FBQSxnQkFEeEIsMENBQUEsWUFDOEIsU0FBTixNQUFLLEtBQUEsTUFEN0IsMkNBQzhFLGVBQWU7Ozs7O1VBSXpHLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sVUFBQSxRQUE4QixNQUwxQywyQ0FLMEY7Ozs7VUFFdEcsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLFVBQUEsUUFBOEIsWUFQaEQsMkNBT3NHOzs7O2FBUHRHO01BQWlELFVBQUE7QUFHcEUsb0JBSG1CLDBDQUdaLHFCQUFvQjs7OztBRVA3Qjs7Ozs7Ozs7ZUFlcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sYUFBTix5QkFBQSxhQUFBO2dCQUFNLGFBQUE7Z0NBQUE7NkJBQUE7OEJBQUE7OzttQkFBQSxhQUFBLE1BQUE7O1VBdUJaLEtBQUE7aUJBQVAsdUJBQXFCO0FBQUUsbUJBQU8sT0FBQSxRQUFZLFlBdkJ2Qjs7OztVQXlCWixLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQUUsbUJBQU8sT0FBQSxRQUFZLFVBekIxQixhQXlCZ0Q7Ozs7VUFFNUQsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLE9BQUEsUUFBWSxZQTNCOUIsYUEyQnNEOzs7O2FBM0J0RDtNQUFtQixPQUFBO0FBQ3RDLG9CQURtQixZQUNaLFdBQVUsU0FBQTtBQUVqQixvQkFIbUIsWUFHWixrQkFBaUIsV0FBQTtBQUV4QixvQkFMbUIsWUFLWixtQkFBa0IsWUFBQTtBQUV6QixvQkFQbUIsWUFPWix5QkFBd0IsWUFBQTtBQUUvQixvQkFUbUIsWUFTWiwwQkFBeUIsbUJBQUE7QUFFaEMsb0JBWG1CLFlBV1osMEJBQXlCLGFBQUE7QUFFaEMsb0JBYm1CLFlBYVosOEJBQTZCLGNBQUE7QUFFcEMsb0JBZm1CLFlBZVosZ0NBQStCLGNBQUE7QUFFdEMsb0JBakJtQixZQWlCWixpQ0FBZ0MsY0FBQTtBQUV2QyxvQkFuQm1CLFlBbUJaLGtDQUFpQyxjQUFBO0FBRXhDLG9CQXJCbUIsWUFxQlosa0NBQWlDLGNBQUE7Ozs7QUVwQzFDOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSw0QkFBTix5QkFBQSxrQkFBQTtnQkFBTSw0QkFBQTtnQ0FBQTs0Q0FBQTs4QkFBQTs7O21CQUFBLDRCQUFBOztVQUNuQixLQUFBO2lCQUFBLGVBQU0sZUFBZSxhQUFhO0FBQUUsbUJBQU8sS0FBQSxnQkFEeEIsMkJBQUEsWUFDOEIsU0FBTixNQUFLLEtBQUEsTUFEN0IsNEJBQytELGVBQWU7Ozs7VUFFakcsS0FBQTtpQkFBQSxrQkFBUztBQUNQLGdCQUFNLE9BQU8sS0FBSztBQUVsQixtQkFBTzs7Ozs7VUFPRixLQUFBO2lCQUFQLGVBQWEsU0FBUztBQUFFLG1CQUFPLGFBQUEsUUFBaUIsTUFiN0IsNEJBYThEOzs7O1VBRTFFLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxhQUFBLFFBQWlCLFlBZm5DLDRCQWUwRTs7OzthQWYxRTtNQUFrQyxhQUFBO0FBU3JELG9CQVRtQiwyQkFTWixRQUFPLE9BQUE7QUFFZCxvQkFYbUIsMkJBV1oscUJBQW9COzs7O0FFakI3Qjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sbUNBQU4seUJBQUEsa0JBQUE7Z0JBQU0sbUNBQUE7Z0NBQUE7bURBQUE7OEJBQUE7OzttQkFBQSxtQ0FBQTs7VUFDbkIsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFPLEtBQUEsZ0JBRHhCLGtDQUFBLFlBQzhCLFNBQU4sTUFBSyxLQUFBLE1BRDdCLG1DQUNzRSxlQUFlOzs7O1VBRXhHLEtBQUE7aUJBQUEsa0JBQVM7QUFDUCxnQkFBTSxPQUFPLEtBQUs7QUFFbEIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlDQUF3QjtBQUN0QixnQkFBTSxzQkFBc0I7QUFFNUIsbUJBQU87Ozs7O1VBT0YsS0FBQTtpQkFBUCxlQUFhLFNBQVM7QUFBRSxtQkFBTyxhQUFBLFFBQWlCLE1BbkI3QixtQ0FtQnFFOzs7O1VBRWpGLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxhQUFBLFFBQWlCLFlBckJuQyxtQ0FxQmlGOzs7O2FBckJqRjtNQUF5QyxhQUFBO0FBZTVELG9CQWZtQixrQ0FlWixRQUFPLE9BQUE7QUFFZCxvQkFqQm1CLGtDQWlCWixxQkFBb0I7Ozs7QUV2QjdCOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLCtCQUFOLHlCQUFBLHdCQUFBO2dCQUFNLCtCQUFBO2dDQUFBOytDQUFBOzhCQUFBOzs7bUJBQUEsK0JBQUE7O1VBQ25CLEtBQUE7aUJBQUEsZUFBTSxlQUFlLGFBQWE7QUFBRSxtQkFBTyxLQUFBLGdCQUR4Qiw4QkFBQSxZQUM4QixTQUFOLE1BQUssS0FBQSxNQUQ3QiwrQkFDa0UsZUFBZTs7Ozs7VUFJN0YsS0FBQTtpQkFBUCxlQUFhLFNBQVM7QUFBRSxtQkFBTyxZQUFBLFFBQXVCLE1BTG5DLCtCQUt1RTs7OztVQUVuRixLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sWUFBQSxRQUF1QixZQVB6QywrQkFPbUY7Ozs7YUFQbkY7TUFBcUMsWUFBQTtBQUd4RCxvQkFIbUIsOEJBR1oscUJBQW9COzs7O0FFUDdCOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLG1DQUFOLHlCQUFBLDRCQUFBO2dCQUFNLG1DQUFBO2dDQUFBO21EQUFBOzhCQUFBOzs7bUJBQUEsbUNBQUE7O1VBQ25CLEtBQUE7aUJBQUEsZUFBTSxlQUFlLGFBQWE7QUFBRSxtQkFBTyxLQUFBLGdCQUR4QixrQ0FBQSxZQUM4QixTQUFOLE1BQUssS0FBQSxNQUQ3QixtQ0FDc0UsZUFBZTs7Ozs7VUFJakcsS0FBQTtpQkFBUCxlQUFhLFNBQVM7QUFBRSxtQkFBTyxPQUFBLFFBQTJCLE1BTHZDLG1DQUsrRTs7OztVQUUzRixLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sT0FBQSxRQUEyQixZQVA3QyxtQ0FPMkY7Ozs7YUFQM0Y7TUFBeUMsT0FBQTtBQUc1RCxvQkFIbUIsa0NBR1oscUJBQW9COzs7O0FFUDdCOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLHFDQUFOLHlCQUFBLDhCQUFBO2dCQUFNLHFDQUFBO2dDQUFBO3FEQUFBOzhCQUFBOzs7bUJBQUEscUNBQUE7O1VBQ25CLEtBQUE7aUJBQUEsZUFBTSxlQUFlLGFBQWE7QUFBRSxtQkFBTyxLQUFBLGdCQUR4QixvQ0FBQSxZQUM4QixTQUFOLE1BQUssS0FBQSxNQUQ3QixxQ0FDd0UsZUFBZTs7Ozs7VUFJbkcsS0FBQTtpQkFBUCxlQUFhLFNBQVM7QUFBRSxtQkFBTyxTQUFBLFFBQTZCLE1BTHpDLHFDQUttRjs7OztVQUUvRixLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sU0FBQSxRQUE2QixZQVAvQyxxQ0FPK0Y7Ozs7YUFQL0Y7TUFBMkMsU0FBQTtBQUc5RCxvQkFIbUIsb0NBR1oscUJBQW9COzs7O0FFUDdCOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLHNDQUFOLHlCQUFBLCtCQUFBO2dCQUFNLHNDQUFBO2dDQUFBO3NEQUFBOzhCQUFBOzs7bUJBQUEsc0NBQUE7O1VBQ25CLEtBQUE7aUJBQUEsZUFBTSxlQUFlLGFBQWE7QUFBRSxtQkFBTyxLQUFBLGdCQUR4QixxQ0FBQSxZQUM4QixTQUFOLE1BQUssS0FBQSxNQUQ3QixzQ0FDeUUsZUFBZTs7Ozs7VUFJcEcsS0FBQTtpQkFBUCxlQUFhLFNBQVM7QUFBRSxtQkFBTyxVQUFBLFFBQThCLE1BTDFDLHNDQUtxRjs7OztVQUVqRyxLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sVUFBQSxRQUE4QixZQVBoRCxzQ0FPaUc7Ozs7YUFQakc7TUFBNEMsVUFBQTtBQUcvRCxvQkFIbUIscUNBR1oscUJBQW9COzs7O0FFUDdCOzs7Ozs7Ozs7Ozs7O01BRW9CLE1BQUksV0FBQTtlQUFKLE1BQUE7O01BQ0EsT0FBSyxXQUFBO2VBQUwsT0FBQTs7TUFDQSxnQkFBYyxXQUFBO2VBQWQsZ0JBQUE7O01BRUEsZ0JBQWMsV0FBQTtlQUFkLE9BQUE7O01BRUEsVUFBUSxXQUFBO2VBQVIsUUFBQTs7TUFDQSxZQUFVLFdBQUE7ZUFBVixRQUFBOztNQUNBLGFBQVcsV0FBQTtlQUFYLFFBQUE7O01BRUEsa0JBQWdCLFdBQUE7ZUFBaEIsYUFBQTs7TUFDQSxxQkFBbUIsV0FBQTtlQUFuQixnQkFBQTs7TUFDQSwyQkFBeUIsV0FBQTtlQUF6QixXQUFBOztNQUNBLDhCQUE0QixXQUFBO2VBQTVCLFlBQUE7O01BQ0Esa0NBQWdDLFdBQUE7ZUFBaEMsWUFBQTs7TUFDQSxxQ0FBbUMsV0FBQTtlQUFuQyxZQUFBOztNQUVBLGlCQUFlLFdBQUE7ZUFBZixZQUFBOztNQUVBLG9CQUFrQixXQUFBO2VBQWxCLGVBQUE7O01BQ0Esd0JBQXNCLFdBQUE7ZUFBdEIsbUJBQUE7O01BQ0EsZ0NBQThCLFdBQUE7ZUFBOUIsY0FBQTs7TUFDQSxnQ0FBOEIsV0FBQTtlQUE5QixjQUFBOztNQUVBLHdCQUFzQixXQUFBO2VBQXRCLFlBQUE7O01BQ0EsNEJBQTBCLFdBQUE7ZUFBMUIsT0FBQTs7TUFDQSw4QkFBNEIsV0FBQTtlQUE1QixTQUFBOztNQUNBLCtCQUE2QixXQUFBO2VBQTdCLFVBQUE7O01BQ0EsOEJBQTRCLFdBQUE7ZUFBNUIsUUFBQTs7TUFDQSxrQ0FBZ0MsV0FBQTtlQUFoQyxTQUFBOztNQUNBLG9DQUFrQyxXQUFBO2VBQWxDLFNBQUE7O01BQ0EscUNBQW1DLFdBQUE7ZUFBbkMsU0FBQTs7TUFDQSxtQ0FBaUMsV0FBQTtlQUFqQyxhQUFBOztNQUNBLHVDQUFxQyxXQUFBO2VBQXJDLGNBQUE7O01BQ0EseUNBQXVDLFdBQUE7ZUFBdkMsY0FBQTs7TUFDQSwwQ0FBd0MsV0FBQTtlQUF4QyxjQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JDcEI7Ozs7OztBQUVBLFFBQU0sVUFBVTtNQUVkO1FBQUUsUUFBVTs7TUFFWjtRQUFFLFNBQVc7O01BRWI7UUFBRSxZQUFjOztNQUVoQjtRQUFFLFdBQWE7O01BRWY7UUFBRSxVQUFZOztNQUVkO1FBQUUsUUFBVTs7TUFFWjtRQUFFLE9BQVM7O01BRVg7UUFBRSxNQUFROztNQUVWO1FBQUUsTUFBUTs7TUFFVjtRQUFFLEtBQU87O01BRVQ7UUFBRSxRQUFVOztNQUVaO1FBQUUsU0FBVzs7TUFFYjtRQUFFLFVBQVk7O01BRWQ7UUFBRSxZQUFjOztNQUVoQjtRQUFFLGtCQUFrQjs7TUFFcEI7UUFBRSxZQUFjOzs7bUJBSUg7Ozs7O0FDdENmOzs7Ozs7QUFFMkcsUUFBQSxlQUFjO0FBRXJHLFFBQUEsV0FBVyx1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVoQixRQUFNLFdBQU4seUJBQUEsYUFBQTs7OzJCQUFjOzs7Ozs7VUF1QnBCLEtBQUE7aUJBQVAsdUJBQXFCO0FBQUUsbUJBQU8sYUFBVyxZQUFDLFlBQVk7Ozs7VUFFL0MsS0FBQTtpQkFBUCxtQkFBaUIsT0FBTztBQUFFLG1CQUFPLGFBQVcsWUFBQyxVQUFVLFdBQVU7Ozs7VUFFMUQsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLGFBQVcsWUFBQyxZQUFZLFdBQVU7Ozs7O01BM0JuQyxhQUFXO0FBQy9DLG9CQURtQixVQUNaLFdBQVUsU0FBTztBQUV4QixvQkFIbUIsVUFHWixrQkFBaUIsYUFBNEI7QUFFcEQsb0JBTG1CLFVBS1osbUJBQWtCLGFBQWU7QUFFeEMsb0JBUG1CLFVBT1oseUJBQXdCO0FBRS9CLG9CQVRtQixVQVNaLDBCQUF5QjtBQUVoQyxvQkFYbUIsVUFXWiwwQkFBeUI7QUFFaEMsb0JBYm1CLFVBYVosOEJBQTZCO0FBRXBDLG9CQWZtQixVQWVaLGdDQUErQjtBQUV0QyxvQkFqQm1CLFVBaUJaLGlDQUFnQztBQUV2QyxvQkFuQm1CLFVBbUJaLGtDQUFpQztBQUV4QyxvQkFyQm1CLFVBcUJaLGtDQUFpQyxhQUE4QjtzQkFyQm5EOzs7O0FDTnJCOzs7OzttQ0FzRkEsV0FBQTs7O2VBQUE7OztBQXBGQSxRQUFNLE1BQU87UUFvRmIsV0FBZTs7OztBQ3RGZjs7Ozs7bUNBRWEsZ0JBQUE7OztlQUFBOzs7QUFBTixRQUFNLGVBQWU7Ozs7QUNGNUI7Ozs7O21DQVFnQiw0QkFBQTs7O2VBQUE7Ozs7O0FBRmhCLFFBQVEsa0JBQW9CLFdBQUEsV0FBcEI7QUFFRCxzQ0FBa0MsZUFBZTtBQUN0RCxVQUFJLFVBQVUsV0FBQTtBQUVkLGVBQVMsV0FBVyxHQUFHLFdBQVcsZUFBZSxZQUFZO0FBQzNELG1CQUFXOztBQUdiLGFBQU87Ozs7O0FDZlQ7Ozs7Ozs7O2VBV3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFIckIsUUFBUSxPQUFTLFdBQUEsZUFBVDtBQUFSLFFBQ1Esa0JBQW9CLGFBQUEsZUFBcEI7QUFFTyxRQUFNLE9BQU4sMkJBQUE7cUJBQ0QsTUFBTSxXQUFXLGFBQWEsaUJBQWU7OEJBRHRDO0FBRWpCLGFBQUssT0FBTztBQUNaLGFBQUssWUFBWTtBQUNqQixhQUFLLGNBQWM7QUFDbkIsYUFBSyxrQkFBa0I7O21CQUxOLE9BQUE7O1VBUW5CLEtBQUE7aUJBQUEsbUJBQVU7QUFDUixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSx1QkFBYztBQUNaLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLDBCQUFpQjtBQUNmLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLDhCQUFxQjtBQUNuQixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSx1QkFBYyxZQUFZO0FBQ3hCLGlCQUFLLFlBQVksS0FBSzs7OztVQUd4QixLQUFBO2lCQUFBLHdCQUFlLGFBQWE7QUFDMUIsaUJBQUssS0FBSyxhQUFhOzs7O1VBR3pCLEtBQUE7aUJBQUEsMEJBQWlCLFlBQVk7QUFDM0IsZ0JBQU0sUUFBUSxLQUFLLFlBQVksUUFBUTtBQUV2QyxnQkFBSSxRQUFRLElBQUk7QUFDZCxrQkFBTSxRQUFRLE9BQ1IsY0FBYztBQUVwQixtQkFBSyxZQUFZLE9BQU8sT0FBTzs7Ozs7VUFJbkMsS0FBQTtpQkFBQSwyQkFBa0IsYUFBYTs7QUFDN0Isd0JBQVksUUFBUSxTQUFDLFlBQWU7QUFDbEMsa0JBQU0sUUFBUSxNQUFLLFlBQVksUUFBUTtBQUV2QyxrQkFBSSxRQUFRLElBQUk7QUFDZCxvQkFBTSxRQUFRLE9BQ1IsY0FBYztBQUVwQixzQkFBSyxZQUFZLE9BQU8sT0FBTzs7Ozs7O1VBS3JDLEtBQUE7aUJBQUEsMkJBQWtCLG1CQUE4QztBQUEzQixxQkFBQSxPQUFBLFVBQUEsUUFBRyx5QkFBSCxJQUFBLE1BQUEsT0FBQSxJQUFBLE9BQUEsSUFBQSxJQUFBLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLHFDQUFILE9BQUEsS0FBQSxVQUFBOztnQkFLbkM7QUFKQSxnQkFBTSxRQUFRLEtBQUssWUFBWSxRQUFRLG9CQUNqQyxRQUFRLE9BQ1IsY0FBYztBQUVwQixZQUFBLHFCQUFBLEtBQUssYUFBWSxPQUFqQixNQUFBLG1CQUFBO2NBQXdCO2NBQU87Y0FBL0IsT0FBNEMsbUJBQUc7Ozs7VUFHakQsS0FBQTtpQkFBQSxnQ0FBdUI7QUFDckIsZ0JBQU0sUUFBUSxHQUNSLGNBQWM7QUFFcEIsaUJBQUssWUFBWSxPQUFPLE9BQU87Ozs7VUFHakMsS0FBQTtpQkFBQSxpQ0FBaUQ7QUFBM0IscUJBQUEsT0FBQSxVQUFBLFFBQUcseUJBQUgsSUFBQSxNQUFBLE9BQUEsT0FBQSxHQUFBLE9BQUEsTUFBQSxRQUFBO0FBQUcscUNBQUgsUUFBQSxVQUFBOztnQkFLcEI7QUFKQSxnQkFBTSxRQUFRLEdBQ1IsU0FBUyxLQUFLLFlBQVksUUFDMUIsY0FBYztBQUVwQixZQUFBLHFCQUFBLEtBQUssYUFBWSxPQUFqQixNQUFBLG1CQUFBO2NBQXdCO2NBQU87Y0FBL0IsT0FBNEMsbUJBQUc7Ozs7VUFHakQsS0FBQTtpQkFBQSx5QkFBZ0IsWUFBWSxPQUFPLE9BQU8sVUFBVTtBQUNsRCxnQkFBSTtBQUVKLGdCQUFNLGFBQWEsTUFBTTtBQUV6QixxQkFBUyxXQUFXLE1BQU0sT0FBTyxPQUFPO0FBRXhDLGdCQUFJLENBQUMsUUFBUTtBQUNYLG9CQUFNLFVBQVU7O0FBR2xCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxlQUFNLE9BQU8sVUFBVTs7QUFDckIsZ0JBQUksUUFDQTtBQUVKLGdCQUFJLFdBQVc7QUFFZixpQkFBSyxZQUFZLEtBQUssU0FBQyxZQUFlO0FBQ3BDLHNCQUFRO0FBRVIsdUJBQVMsTUFBSyxnQkFBZ0IsWUFBWSxPQUFPLE9BQU87QUFFeEQsa0JBQUksUUFBUTtBQUNWLG9CQUFNLGNBQWMsTUFBTTtBQUUxQixvQkFBSSxnQkFBZ0IsR0FBRztBQUNyQiwyQkFBUzs7O0FBSWIsa0JBQUksUUFBUTtBQUNWLHVCQUFPOzs7QUFJWCxnQkFBSSxRQUFRO0FBQ1Ysa0JBQU0sV0FBVyxLQUFLLE1BQ2hCLGFBQWEsT0FDYixrQkFBa0IsS0FBSyxnQkFBZ0IsMEJBQTBCLFVBQVU7QUFFakYseUJBQVc7O0FBR2IsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGtCQUFTLHVCQUF5QztnQkFBbEIsWUFBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQVk7QUFDMUMsZ0JBQU0sb0JBQW9CLEtBQUssWUFBWTtBQUUzQyx3QkFBWSxhQUFjLG9CQUFvQjtBQUU5QyxnQkFBTSxpQkFBaUIsSUFBQSxRQUFBLDBCQUF5Qix3QkFDMUMsb0JBQW9CLEtBQUssWUFBWSxPQUFPLFNBQUMsb0JBQW1CLFlBQWU7QUFDN0Usa0JBQU0sbUJBQW1CLFdBQVc7QUFFcEMsa0JBQUksdUJBQXNCLFdBQUEsY0FBYztBQUN0QyxxQ0FBb0I7cUJBQ2Y7QUFDTCxxQ0FBb0IsWUFDRSxHQUVsQyxPQUZvQyxvQkFBa0IsUUFFaEMsT0FBdEIsZ0JBQWUsU0FBd0IsT0FBakIsb0JBQ2MsR0FBeUIsT0FBdkIsb0JBQWtCLE9BQXNCLE9BQWpCOztBQUduRCxxQkFBTztlQUNOLFdBQUEsZUFDSCxXQUFXLEtBQUssTUFDaEIsaUJBQWlCLFNBQVMsUUFDMUIsa0JBQWtCLEtBQUssWUFDSCxrQkFDRSxXQUFBLGNBQ3RCLHdCQUF3QixnQkFBZ0IsUUFDeEMsZ0JBQWdCLHdCQUF3QixpQkFBaUIsdUJBQ3pELFVBQVUsSUFBQSxRQUFBLDBCQUF5QjtBQUV6QyxnQkFBTSxrQkFBa0IsWUFDRSxPQUViLE9BQWYsZ0JBQWUsVUFDYyxNQUNyQixTQUFVLE9BRU4sT0FBWixLQUFLLE1BQXlCLE9BQWxCLGlCQUFpQyxPQUFmLFNBQVEsU0FBMkIsT0FBcEIsbUJBQW9DLE9BQWhCO0FBRS9ELG1CQUFPOzs7O2FBdktVOzs7OztBRVhyQjs7Ozs7Ozs7ZUFFcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLFFBQU4sMkJBQUE7c0JBQ0QsU0FBUyxRQUFRLE9BQUs7OEJBRGY7QUFFakIsYUFBSyxVQUFVO0FBQ2YsYUFBSyxTQUFTO0FBQ2hCLGFBQUssUUFBUTs7bUJBSk0sUUFBQTs7VUFPbkIsS0FBQTtpQkFBQSxzQkFBYTtBQUNYLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsbUJBQU8sS0FBSzs7OztVQUdmLEtBQUE7aUJBQUEsb0JBQVc7QUFDVixtQkFBTyxLQUFLOzs7O1VBR2IsS0FBQTtpQkFBQSx5QkFBZ0I7QUFDYixnQkFBTSxhQUFhLEtBQUs7QUFFeEIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHdCQUFlO0FBQ2IsZ0JBQUksWUFBWTtBQUVoQixnQkFBTSxlQUFlLEtBQUssT0FBTztBQUVqQyxnQkFBSSxLQUFLLFFBQVEsY0FBYztBQUM3QiwwQkFBWSxLQUFLLE9BQU8sS0FBSzs7QUFHL0IsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG1DQUEwQjtBQUMxQixnQkFBSSx1QkFBdUI7QUFFMUIsZ0JBQU0sZUFBZSxLQUFLLE9BQU87QUFFakMsbUJBQU8sS0FBSyxRQUFRLGNBQWM7QUFDakMsa0JBQU0sUUFBUSxLQUFLLE9BQU8sS0FBSyxVQUM3QixtQkFBbUIsTUFBTTtBQUUzQixrQkFBSSxrQkFBa0I7QUFDcEIsb0JBQU0sbUJBQW1CO0FBRTNCLHVDQUF1QjtBQUV2Qjs7O0FBSUYsbUJBQU87Ozs7VUFHUCxLQUFBO2lCQUFBLHNDQUE2QjtBQUMzQixnQkFBSSwyQkFBMkI7QUFFL0IsZ0JBQU0sZUFBZSxLQUFLLE9BQU87QUFFakMsZ0JBQUksS0FBSyxRQUFRLGNBQWM7QUFDN0Isa0JBQU0sWUFBWSxLQUFLLE9BQU8sS0FBSztBQUVuQyx5Q0FBMkIsVUFBVTs7QUFHdkMsbUJBQU87Ozs7VUFHVixLQUFBO2lCQUFBLG1CQUFVLFlBQVk7QUFDckIsaUJBQUssUUFBUTs7OztVQUdiLEtBQUE7aUJBQUEsa0JBQVMsT0FBTztBQUNkLGlCQUFLLFFBQVE7Ozs7O1VBR1IsS0FBQTtpQkFBUCw4QkFBNEIsUUFBUSxTQUFTO0FBQzNDLGdCQUFNLFFBQVEsR0FDYixRQUFRLElBbEZRLE9Ba0ZFLFNBQVMsUUFBUTtBQUVwQyxtQkFBTzs7OzthQXBGVTs7Ozs7QUVGckI7Ozs7Ozs7Ozs7Ozs7TUFJZSxPQUFLLFdBQUE7ZUFBTDs7TUFBTyxRQUFNLFdBQUE7ZUFBTjs7TUFBUSxPQUFLLFdBQUE7ZUFBTDs7TUFBTyxRQUFNLFdBQUE7ZUFBTjs7TUFBUSxNQUFJLFdBQUE7ZUFBSjs7TUFBTSxNQUFJLFdBQUE7ZUFBSjs7TUFBTSxRQUFNLFdBQUE7ZUFBTjs7TUFBUSxjQUFZLFdBQUE7ZUFBWjs7TUFBYyxlQUFhLFdBQUE7ZUFBYjs7TUFFL0QsTUFBSSxXQUFBO2VBQUo7O01BRUEsb0JBQWtCLFdBQUE7ZUFBbEI7Ozs7QUFKVCxRQUFRLFFBQWtGLFdBQUEsZUFBbEY7QUFBUixRQUFlLFNBQTJFLFdBQUEsZUFBM0U7QUFBZixRQUF1QixRQUFtRSxXQUFBLGVBQW5FO0FBQXZCLFFBQThCLFNBQTRELFdBQUEsZUFBNUQ7QUFBOUIsUUFBc0MsT0FBb0QsV0FBQSxlQUFwRDtBQUF0QyxRQUE0QyxPQUE4QyxXQUFBLGVBQTlDO0FBQTVDLFFBQWtELFNBQXdDLFdBQUEsZUFBeEM7QUFBbEQsUUFBMEQsZUFBZ0MsV0FBQSxlQUFoQztBQUExRCxRQUF3RSxnQkFBa0IsV0FBQSxlQUFsQjtBQUV4RSxrQkFBYyxPQUFPO0FBQUUsYUFBTyxNQUFNLE9BQU8sU0FBQyxPQUFPLE9BQUE7ZUFBVSxPQUFPOzs7QUFFcEUsZ0NBQTRCLE9BQU87QUFDeEMsY0FBUSxNQUFNO0FBRWQsWUFBTTtBQUVOLFlBQU07QUFFTixhQUFPOztBQUdULG9CQUFnQixPQUFPO0FBQ3JCLFVBQU0sUUFBUSxLQUFLLE1BQU0sUUFBTSxPQUFPLFFBQU07QUFFNUMsYUFBTzs7Ozs7QUNyQlQ7Ozs7Ozs7O2VBVXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRnJCLFFBQVEscUJBQXdDLFdBQUEsV0FBeEM7QUFBUixRQUE0QixrQkFBb0IsV0FBQSxXQUFwQjtBQUViLFFBQU0sWUFBTiwyQkFBQTswQkFDRCxPQUFLOzhCQURFO0FBRWpCLGFBQUssUUFBUTs7bUJBRkksWUFBQTs7VUFLbkIsS0FBQTtpQkFBQSxpQkFBUTtBQUNOLGdCQUFNLFFBQVEsS0FBSyxNQUFNLFNBQ25CLFlBQVksSUFQRCxXQU9lO0FBRWhDLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFJO0FBRUosZ0JBQUksY0FBYyxLQUFLLE1BQU07QUFFN0IsZ0JBQUksZ0JBQWdCLEdBQUc7QUFDckIsc0JBQVE7bUJBQ0g7QUFDTCxrQkFBTSxXQUFXLElBQUEsT0FBQSxNQUFLLEtBQUssUUFDckIsaUJBQWlCLFNBQVM7QUFFaEMsc0JBQVE7O0FBR1YsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsZ0JBQU0sY0FBYyxLQUFLLE1BQU0sUUFDekIsUUFBUTtBQUVkLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxxQkFBWSxVQUFVO0FBQ3BCLGlCQUFLLE1BQU0sUUFBUTs7OztVQUdyQixLQUFBO2lCQUFBLHFCQUFZLFdBQVc7O0FBQ3JCLHNCQUFVLFlBQVksU0FBQyxNQUFTO0FBQzlCLG9CQUFLLE1BQU0sUUFBUTs7Ozs7VUFJdkIsS0FBQTtpQkFBQSxzQkFBYSxXQUFXOztBQUN0QixzQkFBVSxZQUFZLFNBQUMsTUFBTSxPQUFVO0FBQ3JDLG9CQUFLLE1BQU0sU0FBUyxPQUFPLE1BQUssTUFBTTs7Ozs7VUFJMUMsS0FBQTtpQkFBQSx1QkFBYyxXQUFXOztBQUN2QixzQkFBVSxZQUFZLFNBQUMsTUFBTSxPQUFVO0FBQ3JDLG9CQUFLLE1BQU0sU0FBUyxNQUFLLE1BQU0sU0FBUzs7Ozs7VUFJNUMsS0FBQTtpQkFBQSx3QkFBZSxXQUFXOztBQUN4QixzQkFBVSxZQUFZLFNBQUMsTUFBUztBQUM5QixvQkFBSyxNQUFNLEtBQUs7Ozs7O1VBSXBCLEtBQUE7aUJBQUEsc0JBQWEsZ0JBQWdCO0FBQzNCLGdCQUFNLFFBQVEsS0FBSyxZQUNiLGlCQUFpQixPQUNqQixrQkFBa0IsNEJBQTRCO0FBRXBELHFCQUFTLFFBQVEsR0FBRyxRQUFRLGdCQUFnQixTQUFTO0FBQ25ELG1CQUFLLE1BQU0sUUFBUTs7Ozs7VUFJdkIsS0FBQTtpQkFBQSx1QkFBYyxpQkFBaUI7QUFDN0IsZ0JBQU0sbUJBQW1CLDRCQUE0QixrQkFDL0MsY0FBYyxLQUFLLE1BQU07QUFFL0IscUJBQVMsUUFBUSxHQUFHLFFBQVEsYUFBYSxTQUFTO0FBQ2hELG1CQUFLLE1BQU0sU0FBUyxtQkFBbUIsS0FBSyxNQUFNOzs7OztVQUl0RCxLQUFBO2lCQUFBLHdCQUFlLGtCQUFrQjtBQUMvQixnQkFBTSxvQkFBb0IsNEJBQTRCLG1CQUNoRCxjQUFjLEtBQUssTUFBTTtBQUUvQixxQkFBUyxRQUFRLEdBQUcsUUFBUSxhQUFhLFNBQVM7QUFDaEQsbUJBQUssTUFBTSxTQUFTLEtBQUssTUFBTSxTQUFTOzs7OztVQUk1QyxLQUFBO2lCQUFBLHlCQUFnQixtQkFBbUI7QUFDakMsZ0JBQU0sUUFBUSxLQUFLLFlBQ2Isb0JBQW9CLE9BQ3BCLHFCQUFxQiw0QkFBNEI7QUFFdkQscUJBQVMsUUFBUSxHQUFHLFFBQVEsbUJBQW1CLFNBQVM7QUFDdEQsbUJBQUssTUFBTSxLQUFLOzs7OztVQUlwQixLQUFBO2lCQUFBLG1CQUFVO0FBQUUsbUJBQU8sS0FBSyxNQUFNOzs7O1VBRTlCLEtBQUE7aUJBQUEscUJBQVk7QUFBRSxtQkFBTyxLQUFLLE1BQU07Ozs7VUFFaEMsS0FBQTtpQkFBQSxrQkFBUyxNQUFNO0FBQUUsaUJBQUssTUFBTSxLQUFLOzs7O1VBRWpDLEtBQUE7aUJBQUEscUJBQVksTUFBTTtBQUFFLGlCQUFLLE1BQU0sUUFBUTs7OztVQUV2QyxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsZ0JBQU0sU0FBUyxLQUFLLE1BQU0sT0FBTyxTQUFDLFNBQVEsTUFBUztBQUNqRCx5QkFBVSxPQUFPO0FBRWpCLHFCQUFPO2VBQ04sV0FBQTtBQUVILG1CQUFPOzs7O2FBckhVOztBQXlIckIseUNBQXFDLGFBQWEsZ0JBQWdCO0FBQ2hFLHVCQUFpQixrQkFBa0I7QUFFbkMsVUFBSSxlQUFlLFdBQUE7QUFFbkIsZUFBUyxRQUFRLEdBQUcsUUFBUSxhQUFhLFNBQVM7QUFDaEQsd0JBQWdCOztBQUdsQixhQUFPOzs7OztBQzVJVDs7Ozs7Ozs7ZUFVcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZyQixRQUFRLGdCQUFrQixXQUFBLFdBQWxCO0FBRU8sUUFBTSwwQkFBTix5QkFBQSxXQUFBO2dCQUFNLDBCQUFBO2dDQUFBO3dDQUNQLE9BQU8sd0JBQXNCOzhCQUR0Qjs7a0NBRVg7QUFFTixjQUFLLHlCQUF5Qjs7O21CQUpiLDBCQUFBOztVQU9uQixLQUFBO2lCQUFBLHFDQUE0QjtBQUMxQixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSx1QkFBYyxpQkFBaUI7QUFDN0IsaUJBQUEsZ0JBWmlCLHlCQUFBLFlBWVgsaUJBQU4sTUFBSyxLQUFBLE1BQWU7QUFFcEIsaUJBQUssMEJBQTBCOzs7OztVQUcxQixLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQ3RCLGdCQUFNLFNBQVMsZUFDVCx5QkFBeUIsR0FDekIsMEJBcEJXLHlCQW9CdUMsb0NBcEJ2QywwQkFvQm9HLFFBQVEseUJBQ3ZILGtCQUFrQixLQUFLLE1BQU0sUUFBTSxJQUNuQyxtQkFBbUIsUUFBUSxrQkFBa0I7QUFFbkQsb0NBQXdCLGNBQWM7QUFDdEMsb0NBQXdCLGVBQWU7QUFFdkMsbUJBQU87Ozs7VUFHRixLQUFBO2lCQUFQLDRDQUEwQyxPQUFPLE9BQU8sd0JBQXdCO0FBQzlFLGdCQUFNLFFBQVEsZUFBZSxRQUN2QixPQUFPO2NBQUU7Y0FBTTtjQUFPO2VBQ3RCLDBCQUEwQixJQUFLLFVBQVMsVUFBVSxLQUFLLE1BQU0sT0FBTztBQUUxRSxtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAsNkNBQTJDLE9BQU8sUUFBUSx3QkFBd0I7QUFDaEYsZ0JBQUksMkJBQTJCLFFBQVc7QUFDeEMsdUNBQXlCO0FBQ3pCLHVCQUFTO0FBQ1Qsc0JBQVEsV0FBQTs7QUFHVixnQkFBTSxPQUFPLFFBQ1AsUUFBUTtjQUFDO2VBQ1QsT0FBTztjQUFFO2NBQU07Y0FBTztlQUN0QiwwQkFBMEIsSUFBSyxVQUFTLFVBQVUsS0FBSyxNQUFNLE9BQU87QUFFMUUsbUJBQU87Ozs7YUFsRFU7TUFBZ0MsV0FBQTtBQXNEckQsNEJBQXdCLE9BQU87QUFDN0IsVUFBTSxRQUFRO0FBRWQsVUFBSSxRQUFRO0FBRVosYUFBTyxRQUFRLE9BQU87QUFDcEIsY0FBTSxXQUFXLFdBQUE7O0FBR25CLGFBQU87Ozs7O0FDekVUOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxvQkFBTix5QkFBQSx5QkFBQTtnQkFBTSxvQkFBQTtnQ0FBQTtvQ0FBQTs4QkFBQTs7O21CQUFBLG9CQUFBLE1BQUE7O1VBQ1osS0FBQTtpQkFBUCw4Q0FBNEMsaUJBQWlCLFFBQVEsVUFBVTtBQUM3RSxnQkFBTSxXQUFXLGdCQUFnQixlQUMzQix3QkFBd0IsZ0JBQWdCLDRCQUN4Qyx1QkFBdUIsZ0JBQWdCLDJCQUN2Qyw2QkFBNkIsT0FBTyxRQUFRLHdCQUM1Qyw0QkFBNEIsT0FBTyxRQUFRLHVCQUMzQyxlQUFnQiwrQkFBK0IsNEJBQzdCLEdBQWdDLE9BQTlCLDRCQUEyQixLQUE2QixPQUExQiw2QkFDOUIsR0FBNkIsT0FBM0IsNkJBQ3RCLFNBQVMsV0FDRyxHQUFXLE9BQVQsWUFDQSxHQUFjLE9BQVosVUFBUyxLQUFnQixPQUFiLGNBQWEsTUFDekMsZUFBZSxPQUFPLFFBQ3RCLCtCQUErQixjQUMvQiwwQkFBMEIsZ0JBQUEsUUFBd0IsVUFBVSwrQkFDNUQseUJBQXlCLHdCQUF3Qiw2QkFDakQsb0JBQW9CLGdCQUFBLFFBQXdCLG9DQWpCakMsb0JBaUJ3RixRQUFRO0FBRWpILDhCQUFrQixZQUFZO0FBRTlCLG1CQUFPOzs7O2FBckJVO01BQTBCLGdCQUFBOzs7O0FFSi9DOzs7Ozs7OztlQVVxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxpQkFBbUIsV0FBQSxXQUFuQjtBQUVPLFFBQU0sNEJBQU4seUJBQUEsV0FBQTtnQkFBTSw0QkFBQTtnQ0FBQTs0Q0FBQTs4QkFBQTs7O21CQUFBLDRCQUFBLE1BQUE7O1VBQ1osS0FBQTtpQkFBUCxtQkFBaUIsT0FBTztBQUN0QixnQkFBTSxTQUFTLDBCQUEwQixPQUFPLGlCQUMxQyxPQUFPLFFBQ1AsUUFBUTtjQUFDO2VBQ1QsNEJBQTRCLElBTGpCLDJCQUsrQztBQUVoRSxtQkFBTzs7OzthQVBVO01BQWtDLFdBQUE7QUFXdkQsdUNBQW1DLGlCQUFpQixXQUFXO0FBQzdELFVBQUksU0FBUyxXQUFBO0FBRWIsZUFBUyxRQUFRLEdBQUcsUUFBUSxpQkFBaUIsU0FBUztBQUNwRCxrQkFBVTs7QUFHWixhQUFPOzs7OztBQzVCVDs7Ozs7Ozs7ZUFPcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxzQkFBTix5QkFBQSx5QkFBQTtnQkFBTSxzQkFBQTtnQ0FBQTtzQ0FBQTs4QkFBQTs7O21CQUFBLHNCQUFBLE1BQUE7O1VBQ1osS0FBQTtpQkFBUCx5Q0FBdUMsWUFBWSxRQUFRLFVBQVU7QUFDbkUsZ0JBQUk7QUFFSixnQkFBTSxzQkFBc0IsV0FBVyxPQUFPLFNBQUMsc0JBQXFCLFdBQWM7QUFDMUUsa0JBQU0scUJBQXFCLFVBQVUsWUFBWSxRQUFRO0FBRXpELG1DQUFvQixLQUFLO0FBRXpCLHFCQUFPO2VBQ04sS0FDSCw0QkFBNEIsb0JBQW9CO0FBRXRELGdCQUFJLDhCQUE4QixHQUFHO0FBQ25DLGtCQUFNLDBCQUEwQixJQUFBLE9BQUEsT0FBTTtBQUV0QyxvQ0FBc0I7bUJBQ2pCO0FBQ0wsa0JBQUksOEJBQThCLFFBQzlCLDZCQUE2QixHQUM3QiwyQkFBMkIsR0FDM0IsMkJBQTJCO0FBRS9CLGtDQUFvQixRQUFRLFNBQUMsb0JBQW9CLE9BQVU7QUFDekQsb0JBQU0sMEJBQTBCLG1CQUFtQixZQUM3QywwQkFBMEIsbUJBQW1CO0FBRW5ELG9CQUFJLFVBQVUsR0FBRztBQUNmLHNCQUFNLDJCQUEwQixvQkFDMUIsZ0RBQWdELHlCQUF3QjtBQUU5RSxnREFBOEI7O0FBR2hDLG9CQUFJLFVBQVUsNEJBQTRCLEdBQUc7QUFDM0Msc0JBQU0seUJBQXlCLG9CQUN6QiwrQ0FBK0MsdUJBQXVCO0FBRTVFLGdEQUE4Qjs7QUFHaEMsb0JBQUksUUFBUSw0QkFBNEIsR0FBRztBQUN6QyxnREFBOEI7QUFDOUIsZ0RBQThCO0FBRTlCLDhDQUE0Qjs7QUFHOUIsNENBQTRCO0FBQzVCLDJDQUEyQixLQUFLLElBQUksMEJBQTBCOztBQUdoRSxrQkFBTSxRQUFRLDZCQUE2Qiw4QkFBOEIsR0FDbkUsMEJBQTBCLGdCQUFBLFFBQXdCLFVBQVUsUUFDNUQsNEJBQTRCLGtCQUFBLFFBQTBCLFVBQVUsUUFDaEUsa0JBQWtCLDZCQUNsQixtQkFBbUIsMkJBQTJCLFFBQVE7QUFFNUQsc0NBQXdCLGNBQWM7QUFDdEMsc0NBQXdCLGVBQWU7QUFDdkMsd0NBQTBCLGNBQWM7QUFDeEMsd0NBQTBCLGVBQWU7QUFFekMsa0JBQU0seUJBQXlCLHdCQUF3QjtBQUV2RCxvQ0FBc0IsZ0JBQUEsUUFBd0IsbUNBakUvQixzQkFpRXVGLDBCQUEwQjtBQUVoSSxrQ0FBb0IsUUFBUSxTQUFDLG9CQUFvQixPQUFVO0FBQ3pELG9CQUFNLDBCQUEwQixtQkFBbUIsWUFDN0MsMkJBQTJCLG1CQUFtQjtBQUVwRCxvQkFBSSxRQUFRLDRCQUE0QixHQUFHO0FBQ3pDLHNCQUFNLG9CQUFtQjtBQUV6QiwyQ0FBeUIsZUFBZTs7QUFHMUMsb0JBQUksMEJBQTBCLDBCQUEwQjtBQUN0RCxzQkFBTSxvQkFBb0IsMkJBQTJCO0FBRXJELDJDQUF5QixnQkFBZ0I7O0FBRzNDLG9DQUFvQixjQUFjOztBQUdwQyxrQ0FBb0IsWUFBWTtBQUNoQyxrQ0FBb0IsWUFBWTs7QUFHbEMsbUJBQU87Ozs7YUExRlU7TUFBNEIsZ0JBQUE7Ozs7QUVQakQ7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sMkJBQU4seUJBQUEseUJBQUE7Z0JBQU0sMkJBQUE7Z0NBQUE7MkNBQUE7OEJBQUE7OzttQkFBQSwyQkFBQSxNQUFBOztVQUNaLEtBQUE7aUJBQVAsOENBQTRDLGlCQUFpQixRQUFRLFVBQVU7QUFDN0UsZ0JBQU0sYUFBYSxnQkFBZ0IsaUJBQzdCLG9CQUFvQixVQUFBLFFBQWtCLHFDQUFxQyxpQkFBaUIsUUFBUSxXQUNwRyxzQkFBc0IsWUFBQSxRQUFvQixnQ0FBZ0MsWUFBWSxRQUFRO0FBRXBHLGdCQUFJLDBDQUEwQyxrQkFBa0I7QUFFaEUsZ0JBQU0sNENBQTRDLG9CQUFvQiw2QkFDaEUsb0NBQW9DLDBDQUEwQztBQUVwRixnQkFBSSxrQkFBa0I7QUFFdEIsZ0JBQUksT0FBTzt1QkFFQSxvQ0FBb0MsR0FBRztBQUNoRCxnQ0FBa0IsQ0FBQztBQUVuQixnQ0FBa0IsY0FBYzt1QkFDdkIsb0NBQW9DLEdBQUc7QUFDaEQsZ0NBQWtCLENBQUM7QUFFbkIsa0NBQW9CLGNBQWM7O0FBR3BDLGdCQUFNLHlCQUF5QixrQkFBa0IsWUFDM0MsMkJBQTJCLG9CQUFvQixZQUMvQyxtQkFBbUIseUJBQXlCO0FBRWxELGdCQUFJLG1CQUFtQjtBQUV2QixnQkFBSSxPQUFPO3VCQUVBLG1CQUFtQixHQUFHO0FBQy9CLGlDQUFtQixDQUFDO0FBRXBCLGdDQUFrQixlQUFlO3VCQUN4QixtQkFBbUIsR0FBRztBQUMvQixpQ0FBbUIsQ0FBQztBQUVwQixrQ0FBb0IsZUFBZTs7QUFHckMsc0RBQTBDLGtCQUFrQjtBQUU1RCxnQkFBTSx5QkFBeUIsa0JBQWtCLFlBQzNDLGdDQUFnQyx3QkFDaEMseUJBQXlCLHlDQUN6QiwyQkFBMkIsZ0JBQUEsUUFBd0IsbUNBaER4QywyQkFnRHFHLCtCQUErQjtBQUVySixxQ0FBeUIsY0FBYztBQUN2QyxxQ0FBeUIsZUFBZTtBQUV4QyxtQkFBTzs7OzthQXJEVTtNQUFpQyxnQkFBQTs7OztBRU50RDs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxrQkFBTiwyQkFBQTtnQ0FDRCxVQUFVLFlBQVU7OEJBRGI7QUFFakIsYUFBSyxXQUFXO0FBQ2hCLGFBQUssYUFBYTs7bUJBSEQsa0JBQUE7O1VBTW5CLEtBQUE7aUJBQUEsMEJBQWlCO0FBQ2YsZ0JBQU0sZUFBZTtBQUVyQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsNkJBQW9CO0FBQ2xCLGdCQUFNLGtCQUFrQjtBQUV4QixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsdUJBQWM7QUFDWixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSx5QkFBZ0I7QUFDZCxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxvQ0FBMkI7QUFDekIsZ0JBQUksd0JBQXdCO0FBRTVCLFlBQUEsSUFBQSxPQUFBLGNBQWEsS0FBSyxZQUFZLFNBQUMsV0FBYztBQUMzQyxzQ0FBd0IsVUFBVTtBQUVsQyxrQkFBSSwwQkFBMEIsTUFBTTtBQUNsQyx1QkFBTzs7O0FBSVgsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG1DQUEwQjtBQUN4QixnQkFBSSx1QkFBdUI7QUFFM0IsWUFBQSxJQUFBLE9BQUEsZUFBYyxLQUFLLFlBQVksU0FBQyxXQUFjO0FBQzVDLHFDQUF1QixVQUFVO0FBRWpDLGtCQUFJLHlCQUF5QixNQUFNO0FBQ2pDLHVCQUFPOzs7QUFJWCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEscUJBQVksVUFBVTtBQUNwQixpQkFBSyxXQUFXOzs7O1VBR2xCLEtBQUE7aUJBQUEsdUJBQWMsWUFBWTtBQUN4QixpQkFBSyxhQUFhOzs7O1VBR3BCLEtBQUE7aUJBQUEscUJBQVksUUFBMEI7Z0JBQWxCLFdBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFXO0FBQzdCLGdCQUFNLGtCQUFrQixNQUNsQiwyQkFBMkIsaUJBQUEsUUFBeUIscUNBQXFDLGlCQUFpQixRQUFRLFdBQ2xILFlBQVk7QUFFbEIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGVBQU0sT0FBTztBQUNYLGdCQUFJLFVBQVUsUUFBVztBQUN2QixzQkF4RWU7O0FBMkVqQixnQkFBTSxXQUFXLEtBQUssVUFDaEIsYUFBYSxLQUFLLFdBQVcsSUFBSSxTQUFDLFdBQWM7QUFDOUMsMEJBQVksVUFBVTtBQUV0QixxQkFBTztnQkFFVCxrQkFBa0IsSUFBSSxNQUFNLFVBQVU7QUFFNUMsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsT0FBTyxVQUFVLFlBQVk7QUFDNUQsZ0JBQUksZUFBZSxRQUFXO0FBQzVCLDJCQUFhO0FBQ2IseUJBQVc7QUFDWCxzQkExRmU7O0FBNkZqQixnQkFBTSxrQkFBa0IsSUFBSSxNQUFNLFVBQVU7QUFFNUMsbUJBQU87Ozs7YUEvRlU7Ozs7O0FFTnJCOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sY0FBTix5QkFBQSxpQkFBQTtnQkFBTSxjQUFBO2dDQUFBOzhCQUFBOzhCQUFBOzs7bUJBQUEsY0FBQTs7VUFDbkIsS0FBQTtpQkFBQSxtQkFBVTtBQUNSLGdCQUFNLGFBQWEsS0FBSyxpQkFDbEIsaUJBQWlCLElBQUEsT0FBQSxPQUFNLGFBQ3ZCLGVBQWUsZ0JBQ2Ysc0JBQXNCLGFBQWEsY0FDbkMsT0FBTztBQUViLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQUEsUUFBZ0IsMEJBWDdELGNBV29HLFVBQVU7Ozs7YUFYOUc7TUFBb0IsYUFBQTs7OztBRU56Qzs7Ozs7bUNBRWdCLG1DQUFBOzs7ZUFBQTs7O0FBQVQsNkNBQXlDLE1BQU07QUFDcEQsVUFBSSxnQ0FBZ0M7QUFFcEMsVUFBTSxtQkFBbUIsbUJBQW1CO0FBRTVDLFVBQUksa0JBQWtCO0FBQ3BCLFlBQU0sZUFBZSxNQUNmLFlBQVksYUFBYTtBQUUvQixZQUFJLFdBQVc7QUFDYiwwQ0FBZ0M7OztBQUlwQyxhQUFPOztBQUdULGdDQUE0QixNQUFNO0FBQ2hDLFVBQUksbUJBQW1CO0FBRXZCLFVBQU0sbUJBQW1CLEtBQUssa0JBQ3hCLHNCQUFzQixDQUFDO0FBRTdCLFVBQUkscUJBQXFCO0FBQ3ZCLFlBQU0sa0JBQWtCLE1BQ2xCLDhCQUE4QixnQkFBZ0I7QUFFcEQsMkJBQW1COztBQUdyQixhQUFPOzs7OztBQ2hDVDs7Ozs7bUNBS2dCLGNBQUE7OztlQUFBOzs7OztBQUFULHdCQUFvQixPQUFPLE9BQU8sT0FBTyxPQUFPLFVBQVU7QUFDL0QsVUFBSTtBQUVKLFVBQU0sY0FBYyxNQUFNO0FBRTFCLFVBQUksVUFBVSxhQUFhO0FBQ3pCLGlCQUFVLGFBQWEsT0FDWCxhQUNFO2FBQ1Q7QUFDTCxZQUFNLE9BQU8sTUFBTTtBQUVuQixpQkFBUyxpQkFBaUIsTUFBTSxPQUFPLE9BQU8sT0FBTyxPQUFPOztBQUc5RCxhQUFPOztBQUdULDhCQUEwQixNQUFNLE9BQU8sT0FBTyxPQUFPLE9BQU8sVUFBVTtBQUNwRSxVQUFJO0FBRUosVUFBSSxhQUFhLE1BQU07QUFDckIsWUFBTSxhQUFhO0FBRW5CO0FBRUEsaUJBQVMsS0FBSyxNQUFNLE9BQU8sT0FBTyxXQUFBO2lCQUFNLFdBQVcsT0FBTyxZQUFZLE9BQU8sT0FBTzs7QUFFcEYsWUFBSSxRQUFRO0FBQ1YsVUFBQSxJQUFBLE9BQUEsTUFBSyxPQUFPOzthQUVUO0FBQ0wsWUFBTSxnQ0FBZ0MsSUFBQSxNQUFBLGlDQUFnQztBQUV0RSxZQUFJLCtCQUErQjtBQUNqQyxjQUFNLGVBQWUsTUFDZixjQUFhO0FBRW5CO0FBRUEsbUJBQVMsYUFBYSxNQUFNLE9BQU8sT0FBTyxXQUFBO21CQUFNLFdBQVcsT0FBTyxhQUFZLE9BQU8sT0FBTzs7QUFFNUYsY0FBSSxRQUFRO0FBQ1YsWUFBQSxJQUFBLE9BQUEsTUFBSyxPQUFPOztlQUVUO0FBQ0wsbUJBQVMsS0FBSyxNQUFNLE9BQU8sT0FBTztBQUVsQyxjQUFJLFFBQVE7QUFDVjtBQUVBLHFCQUFTLFdBQVcsT0FBTyxPQUFPLE9BQU8sT0FBTzs7OztBQUt0RCxhQUFPOzs7OztBQzdEVDs7Ozs7Ozs7ZUFLcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sYUFBTiwyQkFBQTsyQkFDRCxPQUFLOzhCQURFO0FBRWpCLGFBQUssUUFBUTs7bUJBRkksYUFBQTs7VUFLbkIsS0FBQTtpQkFBQSxvQkFBVztBQUNULG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGVBQU0sT0FBTyxPQUFPLFVBQVU7QUFDNUIsZ0JBQUk7QUFFSixnQkFBTSxRQUFRO0FBRWQscUJBQVMsSUFBQSxXQUFBLFlBQVcsS0FBSyxPQUFPLE9BQU8sT0FBTyxPQUFPO0FBRXJELG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLGNBQWMsS0FBSyxNQUFNLE9BQU8sU0FBQyxjQUFhLE1BQVM7QUFDdkQsa0JBQU0sYUFBYSxLQUFLO0FBRXhCLGtCQUFJLGlCQUFnQixXQUFBLGNBQWM7QUFDaEMsK0JBQWM7cUJBQ1Q7QUFDTCwrQkFBZSxHQUFpQixPQUFmLGNBQVksS0FBYyxPQUFYOztBQUdsQyxxQkFBTztlQUNOLFdBQUEsZUFDSCxTQUFTO0FBRWIsbUJBQU87Ozs7YUFqQ1U7Ozs7O0FFTHJCOzs7Ozs7OztlQUVxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sZUFBTiwyQkFBQTsrQkFBTTs4QkFBQTs7bUJBQUEsZUFBQTs7VUFDbkIsS0FBQTtpQkFBQSw2QkFBb0I7QUFDbEIsZ0JBQU0sa0JBQWtCO0FBRXhCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSwwQkFBaUI7QUFDZixnQkFBTSxlQUFlO0FBRXJCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSw4QkFBcUI7QUFDbkIsZ0JBQU0sbUJBQW1CO0FBRXpCLG1CQUFPOzs7O2FBaEJVOzs7OztBRUZyQjs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sd0JBQU4seUJBQUEseUJBQUE7Z0JBQU0sd0JBQUE7Z0NBQUE7d0NBQUE7OEJBQUE7OzttQkFBQSx3QkFBQSxNQUFBOztVQUNaLEtBQUE7aUJBQVAsMkNBQXlDLGNBQWMsUUFBUSxVQUFVO0FBQ3ZFLGdCQUFNLG1CQUFtQixhQUFhLHVCQUNoQyxVQUFVLGFBQWEsY0FDdkIsT0FBTyxpQkFBaUIsV0FDeEIsYUFBYSxPQUFPLFFBQVEsbUJBQzVCLFNBQVMsV0FDRyxHQUFhLE9BQVgsU0FBUSxLQUFRLE9BQUwsTUFBSyxPQUNoQixHQUFhLE9BQVgsU0FBUSxLQUFZLE9BQVQsTUFBSyxNQUFlLE9BQVgsWUFBVyxNQUMvQyxlQUFlLE9BQU8sUUFDdEIsK0JBQStCLGNBQy9CLDBCQUEwQixnQkFBQSxRQUF3QixVQUFVLCtCQUM1RCx5QkFBeUIsd0JBQXdCLDZCQUNqRCx3QkFBd0IsZ0JBQUEsUUFBd0Isb0NBYnJDLHdCQWFnRyxRQUFRO0FBRXpILGtDQUFzQixZQUFZO0FBRWxDLG1CQUFPOzs7O2FBakJVO01BQThCLGdCQUFBOzs7O0FFSm5EOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sZUFBTiwyQkFBQTs2QkFDRCxrQkFBZ0I7OEJBRFQ7QUFFakIsYUFBSyxtQkFBbUI7O21CQUZQLGVBQUE7O1VBS25CLEtBQUE7aUJBQUEsK0JBQXNCO0FBQ3BCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLG9DQUEyQjtBQUN6QixnQkFBTSx3QkFBd0IsS0FBSztBQUVuQyxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsbUNBQTBCO0FBQ3hCLGdCQUFNLHVCQUF1QixLQUFLO0FBRWxDLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSw4QkFBcUI7QUFDbkIsZ0JBQU0sbUJBQW1CO0FBRXpCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSx5QkFBZ0I7QUFDZCxnQkFBTSxjQUFjO0FBRXBCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSwwQkFBaUI7QUFDZixnQkFBTSxlQUFlO0FBRXJCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSw2QkFBb0I7QUFDbEIsZ0JBQU0sa0JBQWtCO0FBRXhCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxtQkFBVTtBQUFFLG1CQUFPLEtBQUssaUJBQWlCOzs7O1VBRXpDLEtBQUE7aUJBQUEsc0JBQWE7QUFBRSxtQkFBTyxLQUFLLGlCQUFpQjs7OztVQUU1QyxLQUFBO2lCQUFBLDZCQUFvQixrQkFBa0I7QUFDcEMsaUJBQUssbUJBQW1COzs7O1VBRzFCLEtBQUE7aUJBQUEscUJBQVksUUFBMEI7Z0JBQWxCLFdBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFXO0FBQzdCLGdCQUFNLGVBQWUsTUFDZix3QkFBd0IsY0FBQSxRQUFzQixrQ0FBa0MsY0FBYyxRQUFRLFdBQ3RHLFlBQVk7QUFFbEIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGVBQU0sTUFBTTtBQUNWLGdCQUFJLFVBQVU7QUFFZCxnQkFBTSxtQkFBbUIsS0FBSztBQUU5QixnQkFBSSxrQkFBa0I7QUFDcEIsa0JBQU0sZUFBZSxNQUNmLDBCQUEwQixhQUFhLGlCQUN2QywrQkFBK0IsYUFBYTtBQUVsRCxrQkFBSSxDQUFDLDJCQUEyQixDQUFDLDhCQUE4QjtBQUM3RCxvQkFBTSxtQkFBbUIsYUFBYTtBQUV0QywwQkFBVSxLQUFLLGlCQUFpQixNQUFNOzs7QUFJMUMsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGVBQU0sT0FBTztBQUNYLGdCQUFJLFVBQVUsUUFBVztBQUN2QixrQkFBUSxjQUFnQixLQUFoQjtBQUVSLHNCQUFROztBQUdWLGdCQUFNLGdCQUFnQixLQUFLLGlCQUFpQixvQkFDdEMsZ0JBQWdCLEdBQ2hCLGNBQWMsZUFDZCxtQkFBbUIsS0FBSyxpQkFBaUIsTUFBTSxlQUFlLGNBQzlELGVBQWUsTUFBTSxxQkFBcUI7QUFFaEQsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCw4QkFBNEIsT0FBTyxrQkFBa0I7QUFDbkQsZ0JBQUkscUJBQXFCLFFBQVc7QUFDbEMsaUNBQW1CO0FBQ25CLHNCQXBHZTs7QUF1R2pCLGdCQUFNLGVBQWUsSUFBSSxNQUFNO0FBRS9CLG1CQUFPOzs7O2FBekdVOzs7OztBRUpyQjs7Ozs7Ozs7ZUFLcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLDJCQUFOLHlCQUFBLGNBQUE7Z0JBQU0sMkJBQUE7Z0NBQUE7eUNBQ1Asc0JBQW9COzhCQURiOzs7QUFJakIsY0FBSyx1QkFBdUI7OzttQkFKWCwyQkFBQTs7VUFPbkIsS0FBQTtpQkFBQSxlQUFNLE9BQU8sT0FBTyxVQUFVO0FBQzVCLGdCQUFJO0FBRUosZ0JBQUksZUFBZTtBQUVuQixnQkFBTSxhQUFhLE1BQU0saUJBQ3JCLHVCQUF1QixNQUFNLDJCQUNoQyxtQkFBbUI7QUFFcEIsZ0JBQUkscUJBQXFCLE1BQU07QUFDN0Isa0JBQU0sdUJBQXVCLGlCQUFpQjtBQUU5QyxrQkFBSSx5QkFBeUIsS0FBSyxzQkFBc0I7QUFDdEQsK0JBQWUsV0FBQSxRQUFhLHFCQUFxQjs7O0FBSXJELHFCQUFVLGlCQUFpQjtBQUUzQixnQkFBSSxRQUFRO0FBQ1Ysb0JBQU0sS0FBSztBQUVYLGtCQUFJLGFBQWEsTUFBTTtBQUNyQix5QkFBUztBQUVULG9CQUFJLENBQUMsUUFBUTtBQUNYLHdCQUFNOzs7O0FBS1osZ0JBQUksQ0FBQyxRQUFRO0FBQ1gsb0JBQU0sVUFBVTs7QUFHbEIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsZ0JBQU0sU0FBVSxJQUE2QixPQUExQixLQUFLLHNCQUFxQjtBQUU3QyxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsaUJBQVE7QUFBRSxtQkFBTyxJQW5ERSwwQkFtRDJCLEtBQUs7Ozs7YUFuRGhDO01BQWlDLFVBQUE7Ozs7QUVMdEQ7Ozs7Ozs7O2VBU3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxXQUFhLGFBQUEsTUFBYjtBQUVPLFFBQU0saUJBQU4seUJBQUEsWUFBQTtnQkFBTSxpQkFBQTtnQ0FBQTtpQ0FBQTs4QkFBQTtBQUVqQixZQUFNLDJCQUEyQixVQUMzQiwrQkFBK0IsSUFBSSxzQkFBQSxRQUF5QiwyQkFDNUQsUUFBUTtVQUNOOztpQ0FHRjs7YUFSVztNQUF1QixZQUFBOzs7O0FFVDVDOzs7Ozs7Ozs7Ozs7O01BRWEsY0FBWSxXQUFBO2VBQVo7O01BQ0EsY0FBWSxXQUFBO2VBQVo7O01BQ0EsY0FBWSxXQUFBO2VBQVo7O01BQ0EsZUFBYSxXQUFBO2VBQWI7O01BQ0EsaUJBQWUsV0FBQTtlQUFmOztNQUNBLGtCQUFnQixXQUFBO2VBQWhCOztNQUNBLGtCQUFnQixXQUFBO2VBQWhCOztNQUNBLGtCQUFnQixXQUFBO2VBQWhCOztNQUNBLG1CQUFpQixXQUFBO2VBQWpCOztNQUNBLG9CQUFrQixXQUFBO2VBQWxCOztNQUNBLG9CQUFrQixXQUFBO2VBQWxCOztNQUNBLHFCQUFtQixXQUFBO2VBQW5COztNQUNBLHNCQUFvQixXQUFBO2VBQXBCOztNQUNBLHVCQUFxQixXQUFBO2VBQXJCOztNQUNBLHdCQUFzQixXQUFBO2VBQXRCOztNQUNBLHlCQUF1QixXQUFBO2VBQXZCOztNQUNBLHlCQUF1QixXQUFBO2VBQXZCOztNQUNBLDBCQUF3QixXQUFBO2VBQXhCOztNQUNBLDJCQUF5QixXQUFBO2VBQXpCOztNQUNBLDJCQUF5QixXQUFBO2VBQXpCOztNQUNBLDJCQUF5QixXQUFBO2VBQXpCOztNQUNBLDRCQUEwQixXQUFBO2VBQTFCOztNQUNBLDZCQUEyQixXQUFBO2VBQTNCOztNQUNBLDhCQUE0QixXQUFBO2VBQTVCOztNQUNBLDhCQUE0QixXQUFBO2VBQTVCOzs7QUF4Qk4sUUFBTSxlQUFlO0FBQ3JCLFFBQU0sZUFBZTtBQUNyQixRQUFNLGVBQWU7QUFDckIsUUFBTSxnQkFBZ0I7QUFDdEIsUUFBTSxrQkFBa0I7QUFDeEIsUUFBTSxtQkFBbUI7QUFDekIsUUFBTSxtQkFBbUI7QUFDekIsUUFBTSxtQkFBbUI7QUFDekIsUUFBTSxvQkFBb0I7QUFDMUIsUUFBTSxxQkFBcUI7QUFDM0IsUUFBTSxxQkFBcUI7QUFDM0IsUUFBTSxzQkFBc0I7QUFDNUIsUUFBTSx1QkFBdUI7QUFDN0IsUUFBTSx3QkFBd0I7QUFDOUIsUUFBTSx5QkFBeUI7QUFDL0IsUUFBTSwwQkFBMEI7QUFDaEMsUUFBTSwwQkFBMEI7QUFDaEMsUUFBTSwyQkFBMkI7QUFDakMsUUFBTSw0QkFBNEI7QUFDbEMsUUFBTSw0QkFBNEI7QUFDbEMsUUFBTSw0QkFBNEI7QUFDbEMsUUFBTSw2QkFBNkI7QUFDbkMsUUFBTSw4QkFBOEI7QUFDcEMsUUFBTSwrQkFBK0I7QUFDckMsUUFBTSwrQkFBK0I7Ozs7QUMxQjVDOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sV0FBTix5QkFBQSxNQUFBO2dCQUFNLFdBQUE7Z0NBQUE7MkJBQUE7OEJBQUE7QUFFakIsWUFBTSxpQkFBaUIsSUFBSSxPQUFBLFdBQ3JCLE9BQU8sV0FBQSxjQUNQLFlBQVksT0FDWixjQUFjO1VBQ1o7V0FFRixRQUFPLE1BQUE7aUNBRVAsTUFBTSxXQUFXLGFBQWE7O2FBVm5CO01BQWlCLE1BQUE7Ozs7QUVSdEM7Ozs7Ozs7O2VBRXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxrQkFBTiwyQkFBQTtnQ0FDRCxNQUFJOzhCQURHO0FBRWpCLGFBQUssT0FBTzs7bUJBRkssa0JBQUE7O1VBS25CLEtBQUE7aUJBQUEsbUJBQVU7QUFDUixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSw2QkFBb0I7QUFDbEIsZ0JBQU0sa0JBQWtCO0FBRXhCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSwwQkFBaUI7QUFDZixnQkFBTSxlQUFlO0FBRXJCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSwwQkFBaUI7QUFDZixnQkFBTSxlQUFlO0FBRXJCLG1CQUFPOzs7O2FBeEJVOzs7OztBRUZyQjs7Ozs7Ozs7Ozs7OztNQUVhLGtCQUFnQixXQUFBO2VBQWhCOztNQUNBLHNCQUFvQixXQUFBO2VBQXBCOztNQUNBLHVCQUFxQixXQUFBO2VBQXJCOztNQUNBLHdCQUFzQixXQUFBO2VBQXRCOztNQUNBLHlCQUF1QixXQUFBO2VBQXZCOztNQUNBLHlCQUF1QixXQUFBO2VBQXZCOztNQUViLFNBT0UsV0FBQTtlQVBGOzs7QUFQTyxRQUFNLG1CQUFtQjtBQUN6QixRQUFNLHVCQUF1QjtBQUM3QixRQUFNLHdCQUF3QjtBQUM5QixRQUFNLHlCQUF5QjtBQUMvQixRQUFNLDBCQUEwQjtBQUNoQyxRQUFNLDBCQUEwQjtRQUV2QyxXQUFlO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7OztBQ2ZGOzs7Ozs7OztlQVdxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRnJCLFFBQVEsZUFBaUIsYUFBQSxlQUFqQjtBQUVPLFFBQU0sbUJBQU4seUJBQUEsaUJBQUE7Z0JBQU0sbUJBQUE7Z0NBQUE7aUNBQ1AsTUFBSTs4QkFERzs7QUFFakIsWUFBTSxPQUFPLFdBQUE7a0NBRVA7QUFFTixjQUFLLE9BQU87OzttQkFOSyxtQkFBQTs7VUFTbkIsS0FBQTtpQkFBQSxtQkFBVTtBQUNSLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGVBQU0sT0FBTyxPQUFPLFVBQVU7QUFDNUIsZ0JBQUk7QUFFSixnQkFBTSxPQUFPLEtBQUssV0FDWixZQUFZLElBQ1osYUFBYSxNQUFNO0FBRXpCLHFCQUFTLFVBQVUsTUFBTSxXQUFXLE9BQU87QUFFM0MsZ0JBQUksUUFBUTtBQUNWLGNBQUEsSUFBQSxPQUFBLE1BQUssT0FBTzs7QUFHZCxnQkFBSSxDQUFDLFFBQVE7QUFDWCxvQkFBTSxVQUFVOztBQUdsQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsb0JBQVc7QUFDVCxnQkFBTSxhQUFhLEtBQUssS0FBSyxZQUN2QixTQUFVLEdBQWUsT0FBYixZQUEwQixPQUFiO0FBRS9CLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQkFBUTtBQUNOLGdCQUFNLE9BQU8sS0FBSyxLQUFLLFNBQ2pCLG1CQUFtQixJQTFDUixrQkEwQzZCO0FBRTlDLG1CQUFPOzs7O2FBNUNVO01BQXlCLGFBQUE7QUFnRDlDLHVCQUFtQixNQUFNLE9BQU8sT0FBTyxVQUFVO0FBQy9DLFVBQUk7QUFFSixVQUFJLGFBQWEsTUFBTTtBQUNyQixpQkFBUztBQUVULFlBQUksQ0FBQyxRQUFRO0FBQ1gsbUJBQVMsS0FBSyxNQUFNLE9BQU8sT0FBTzs7YUFFL0I7QUFDTCxhQUFLLE1BQU0sT0FBTyxPQUFPO0FBRXpCLGlCQUFTOztBQUdYLGFBQU87Ozs7O0FDMUVUOzs7Ozs7OztlQVdxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRnJCLFFBQVEsT0FBUyxhQUFBLGVBQVQ7QUFFTyxRQUFNLHFCQUFOLHlCQUFBLGlCQUFBO2dCQUFNLHFCQUFBO2dDQUFBO21DQUNQLE1BQUk7OEJBREc7O0FBRWpCLFlBQU0sT0FBTyxXQUFBO2tDQUVQO0FBRU4sY0FBSyxPQUFPOzs7bUJBTksscUJBQUE7O1VBU25CLEtBQUE7aUJBQUEsbUJBQVU7QUFDUixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLGFBQWEsS0FBSyxLQUFLLFlBQ3ZCLFNBQVUsR0FBZSxPQUFiLFlBQWtCLE9BQUw7QUFFL0IsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGVBQU0sT0FBTyxPQUFPLFVBQVU7QUFDNUIsZ0JBQUk7QUFFSixnQkFBTSxPQUFPLEtBQUssV0FDWixZQUFZLElBQ1osYUFBYSxNQUFNO0FBRXpCLHFCQUFTLFVBQVUsTUFBTSxXQUFXLE9BQU87QUFFM0MsZ0JBQUksUUFBUTtBQUNWLGNBQUEsSUFBQSxPQUFBLE1BQUssT0FBTzs7QUFHZCxnQkFBSSxDQUFDLFFBQVE7QUFDWCxvQkFBTSxVQUFVOztBQUdsQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsaUJBQVE7QUFDTixnQkFBTSxPQUFPLEtBQUssS0FBSyxTQUNqQixxQkFBcUIsSUExQ1Ysb0JBMENpQztBQUVsRCxtQkFBTzs7OzthQTVDVTtNQUEyQixhQUFBO0FBZ0RoRCx1QkFBbUIsTUFBTSxPQUFPLE9BQU8sVUFBVTtBQUMvQyxVQUFJO0FBRUosVUFBSSxhQUFhLE1BQU07QUFDckIsaUJBQVMsS0FBSyxNQUFNLE9BQU8sT0FBTyxXQUFNO0FBQ3RDLGNBQUksVUFBUztBQUViLGNBQUksQ0FBQyxTQUFRO0FBQ1gsc0JBQVMsVUFBVSxNQUFNLE9BQU8sT0FBTzs7QUFHekMsaUJBQU87O2FBRUo7QUFDTCxpQkFBUyxLQUFLLE1BQU0sT0FBTyxPQUFPO0FBRWxDLFlBQUksUUFBUTtBQUNWLG9CQUFVLE1BQU0sT0FBTyxPQUFPOzs7QUFJbEMsYUFBTzs7Ozs7QUNoRlQ7Ozs7Ozs7O2VBV3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxXQUFhLGFBQUEsZUFBYjtBQUVPLFFBQU0sc0JBQU4seUJBQUEsaUJBQUE7Z0JBQU0sc0JBQUE7Z0NBQUE7b0NBQ1AsTUFBSTs4QkFERzs7QUFFakIsWUFBTSxPQUFPLFdBQUE7a0NBRVA7QUFFTixjQUFLLE9BQU87OzttQkFOSyxzQkFBQTs7VUFTbkIsS0FBQTtpQkFBQSxtQkFBVTtBQUNSLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsZ0JBQU0sYUFBYSxLQUFLLEtBQUssWUFDdkIsU0FBVSxHQUFlLE9BQWIsWUFBc0IsT0FBVDtBQUUvQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsZUFBTSxPQUFPLE9BQU8sVUFBVTtBQUM1QixnQkFBSTtBQUVKLGdCQUFNLE9BQU8sS0FBSyxXQUNaLFlBQVksSUFDWixhQUFhLE1BQU07QUFFekIscUJBQVMsVUFBVSxNQUFNLFdBQVcsT0FBTztBQUUzQyxnQkFBSSxRQUFRO0FBQ1YsY0FBQSxJQUFBLE9BQUEsTUFBSyxPQUFPOztBQUdkLGdCQUFJLENBQUMsUUFBUTtBQUNYLG9CQUFNLFVBQVU7O0FBR2xCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQkFBUTtBQUNOLGdCQUFNLE9BQU8sS0FBSyxLQUFLLFNBQ2pCLHNCQUFzQixJQTFDWCxxQkEwQ21DO0FBRXBELG1CQUFPOzs7O2FBNUNVO01BQTRCLGFBQUE7QUFnRGpELHVCQUFtQixNQUFNLE9BQU8sT0FBTyxVQUFVO0FBQy9DLFVBQUk7QUFFSixVQUFJLGFBQWEsTUFBTTtBQUNyQixpQkFBUztBQUVULFlBQUksQ0FBQyxRQUFRO0FBQ1gsbUJBQVMsS0FBSyxNQUFNLE9BQU8sT0FBTyxXQUFBO21CQUFNLFVBQVUsTUFBTSxPQUFPLE9BQU87OzthQUVuRTtBQUNMLGlCQUFTLEtBQUssTUFBTSxPQUFPLE9BQU87QUFFbEMsWUFBSSxRQUFRO0FBQ1Ysb0JBQVUsTUFBTSxPQUFPLE9BQU87O0FBR2hDLGlCQUFTOztBQUdYLGFBQU87Ozs7O0FDOUVUOzs7Ozs7Ozs7Ozs7O01BS2dCLGtCQUFnQixXQUFBO2VBQWhCOztNQWVBLG9CQUFrQixXQUFBO2VBQWxCOztNQWdCQSxzQkFBb0IsV0FBQTtlQUFwQjs7TUFnQkEsNkJBQTJCLFdBQUE7ZUFBM0I7O01BaUJBLDRCQUEwQixXQUFBO2VBQTFCOzs7OztBQWhFVCw4QkFBMEIsTUFBTTtBQUNyQyxVQUFJLG1CQUFtQjtBQUV2QixVQUFNLG1CQUFtQixLQUFLO0FBRTlCLFVBQUksa0JBQWtCO0FBQ3BCLFlBQU0sZUFBZSxNQUNmLHNCQUFzQixhQUFhO0FBRXpDLDJCQUFvQix3QkFBd0I7O0FBRzlDLGFBQU87O0FBR0YsZ0NBQTRCLE1BQU07QUFDdkMsVUFBSSxtQkFBbUI7QUFFdkIsVUFBTSxtQkFBbUIsS0FBSyxrQkFDeEIsc0JBQXNCLENBQUM7QUFFN0IsVUFBSSxxQkFBcUI7QUFDdkIsWUFBTSxrQkFBa0IsTUFDbEIsMEJBQTBCLGdCQUFnQjtBQUVoRCwyQkFBb0IsNEJBQTRCLFdBQUE7O0FBR2xELGFBQU87O0FBR0Ysa0NBQThCLE1BQU07QUFDekMsVUFBSSxxQkFBcUI7QUFFekIsVUFBTSxzQkFBc0IsS0FBSztBQUVqQyxVQUFJLHFCQUFxQjtBQUN2QixZQUFNLGtCQUFrQixNQUNsQixXQUFXLGdCQUFnQixlQUMzQiw2QkFBOEIsYUFBYSxXQUFBO0FBRWpELDZCQUFxQjs7QUFHdkIsYUFBTzs7QUFHRix5Q0FBcUMsTUFBTTtBQUNoRCxVQUFJLDRCQUE0QjtBQUVoQyxVQUFNLHNCQUFzQixLQUFLO0FBRWpDLFVBQUkscUJBQXFCO0FBQ3ZCLFlBQU0sa0JBQWtCLE1BQ2xCLFdBQVcsZ0JBQWdCLGVBQzNCLG9DQUFxQyxhQUFhLFdBQUE7QUFFeEQsb0NBQTRCOztBQUc5QixhQUFPOztBQUlGLHdDQUFvQyxnQkFBZ0I7QUFDekQsVUFBSTtBQUVKLHdCQUFrQjtBQUVsQixVQUFNLGFBQWEsZ0JBQWdCLGlCQUM3QixpQkFBaUIsSUFBQSxPQUFBLE9BQU07QUFFN0Isd0JBQWtCO0FBRWxCLFVBQU0sV0FBVyxnQkFBZ0I7QUFFakMsYUFBTzs7Ozs7QUNqRlQ7Ozs7Ozs7O2VBV3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGNBQU4seUJBQUEsaUJBQUE7Z0JBQU0sY0FBQTtnQ0FBQTs4QkFBQTs4QkFBQTs7O21CQUFBLGNBQUE7O1VBQ25CLEtBQUE7aUJBQUEsc0JBQWEsV0FBVztBQUN0QixnQkFBTSxhQUFhLEtBQUssaUJBQ2xCLFFBQVEsV0FBVyxTQUNuQixPQUFPLGNBQWM7QUFFM0IsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBQSxRQUFnQiwwQkFUN0QsY0FTb0csVUFBVTs7OzthQVQ5RztNQUFvQixhQUFBO0FBWXpDLDJCQUF1QixPQUFPO0FBQzVCLFVBQUksT0FBTztBQUVYLFVBQU0sY0FBYyxNQUFNO0FBRTFCLFVBQUksZ0JBQWdCLEdBQUc7QUFDckIsWUFBTSxPQUFPLE1BQU0sT0FDYixZQUFZO0FBRWxCLGVBQU8sS0FBSyxhQUFhO2FBQ3BCO0FBQ0wsWUFBTSx5QkFBeUIseUJBQXlCO0FBRXhELFlBQUksd0JBQXdCO0FBQzFCLGNBQU0sUUFBTyxNQUFNLE9BQ2IsaUJBQWlCO0FBRXZCLGlCQUFPLGNBQWM7QUFFckIsY0FBTSxXQUFXLElBQUEsS0FBQSw0QkFBMkIsaUJBQ3RDLHdCQUF3Qix5Q0FBeUMsTUFBTTtBQUU3RSxpQkFBTztlQUNGO0FBQ0wsZ0JBQU07QUFFTixpQkFBTyxjQUFjOzs7QUFJekIsYUFBTzs7QUFHVCxzQ0FBa0MsT0FBTztBQUN2QyxVQUFNLFdBQVcsSUFBQSxPQUFBLE1BQUssUUFDaEIseUJBQXlCLElBQUEsS0FBQSxzQkFBcUI7QUFFcEQsYUFBTzs7QUFHVCxzREFBa0QsTUFBTSxVQUFVO0FBQ2hFLFVBQUk7QUFFSixjQUFRO2FBQ0QsV0FBQTtBQUNILGNBQU0sbUJBQW1CLElBQUksY0FBQSxRQUFpQjtBQUU5QyxrQ0FBd0I7QUFDeEI7YUFFRyxXQUFBO0FBQ0gsY0FBTSxxQkFBcUIsSUFBSSxnQkFBQSxRQUFtQjtBQUVsRCxrQ0FBd0I7QUFDeEI7YUFFRyxXQUFBO0FBQ0gsY0FBTSxzQkFBc0IsSUFBSSxpQkFBQSxRQUFvQjtBQUVwRCxrQ0FBd0I7QUFDeEI7O0FBR0osYUFBTzs7Ozs7QUN0RlQ7Ozs7Ozs7O2VBV3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxXQUFhLGFBQUEsZUFBYjtBQUVPLFFBQU0sZUFBTix5QkFBQSxpQkFBQTtnQkFBTSxlQUFBO2dDQUFBOzZCQUNQLFVBQVE7WUFBRSxZQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBWTs4QkFEZjs7QUFFakIsWUFBTSxPQUFPLFdBQUE7a0NBRVA7QUFFTixjQUFLLFdBQVc7QUFFaEIsY0FBSyxZQUFZOzs7bUJBUkEsZUFBQTs7VUFXbkIsS0FBQTtpQkFBQSx1QkFBYztBQUNaLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHVCQUFjO0FBQ1osbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsMEJBQWlCO0FBQ2YsZ0JBQU0sZUFBZTtBQUVyQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsc0JBQWEsV0FBVztBQUN0QixpQkFBSyxZQUFZOzs7O1VBR25CLEtBQUE7aUJBQUEsa0JBQVMsT0FBTztBQUNkLGdCQUFNLFVBQVUsTUFBTSxjQUNoQixPQUFPLFFBQVEsS0FBSyxhQUFhO0FBRXZDLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxlQUFNLE9BQU8sT0FBTyxVQUFVO0FBQzVCLGdCQUFJO0FBRUosZ0JBQU0sT0FBTyxLQUFLLFNBQVM7QUFFM0IsZ0JBQUksU0FBUyxNQUFNO0FBQ2pCLHVCQUFTO21CQUNKO0FBQ0wsa0JBQU0sV0FBVyxLQUFLLE1BQU0sT0FBTztBQUVuQyx1QkFBVSxhQUFhO0FBRXZCLGtCQUFJLFFBQVE7QUFDVixzQkFBTSxLQUFLOzs7QUFJZixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsb0JBQVc7QUFDVCxnQkFBTSxrQkFBa0IsS0FBSyxZQUNILFdBQ0UsV0FBQSxjQUN0QixTQUFVLEdBQWtCLE9BQWhCLEtBQUssVUFBMkIsT0FBaEI7QUFFbEMsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRO0FBQ04sZ0JBQU0sV0FBVyxLQUFLLFVBQ2hCLFlBQVksS0FBSyxXQUNqQixlQUFlLElBcEVKLGNBb0VxQixVQUFVO0FBRWhELG1CQUFPOzs7O2FBdEVVO01BQXFCLGFBQUE7Ozs7QUVYMUM7Ozs7Ozs7O2VBS3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0scUJBQU4seUJBQUEsWUFBQTtnQkFBTSxxQkFBQTtnQ0FBQTttQ0FDUCxVQUFROzhCQUREO0FBRWpCLFlBQU0sdUJBQXVCLElBQUksVUFBQSxRQUFhLFdBQ3hDLFFBQVE7VUFDTjs7aUNBR0Y7O2FBUFc7TUFBMkIsWUFBQTs7OztBRUxoRDs7Ozs7Ozs7ZUFRcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLDZCQUFOLHlCQUFBLFlBQUE7Z0JBQU0sNkJBQUE7Z0NBQUE7NkNBQUE7OEJBQUE7QUFFakIsWUFBTSx5QkFBeUIsSUFBSSxVQUFBLFFBQWEsV0FBQSxxQkFDMUMsMkJBQTJCLElBQUksVUFBQSxRQUFhLFdBQUEsdUJBQzVDLHdDQUF3QyxJQUFJLGlCQUFBLFFBQW9CLHlCQUNoRSxRQUFRO1VBQ047VUFDQTs7aUNBR0Y7O2FBVlc7TUFBbUMsWUFBQTs7OztBRVJ4RDs7Ozs7Ozs7ZUFRcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGdDQUFOLHlCQUFBLFlBQUE7Z0JBQU0sZ0NBQUE7Z0NBQUE7Z0RBQUE7OEJBQUE7QUFFakIsWUFBTSx5QkFBeUIsSUFBSSxVQUFBLFFBQWEsV0FBQSxxQkFDMUMsOEJBQThCLElBQUksVUFBQSxRQUFhLFdBQUEsMEJBQy9DLHdDQUF3QyxJQUFJLGlCQUFBLFFBQW9CLHlCQUNoRSxRQUFRO1VBQ047VUFDQTs7aUNBR0Y7O2FBVlc7TUFBc0MsWUFBQTs7OztBRVIzRDs7Ozs7Ozs7ZUFVcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sV0FBTix5QkFBQSxNQUFBO2dCQUFNLFdBQUE7Z0NBQUE7MkJBQUE7OEJBQUE7QUFFakIsWUFBTSxPQUFPLFdBQUEsY0FDUCw2QkFBNkIsSUFBSSxVQUFBLFdBQ2pDLGdDQUFnQyxJQUFJLGFBQUEsV0FDcEMscUNBQXFDLElBQUksVUFBQSxRQUFtQixXQUFBLDJCQUM1RCxZQUFZLE9BQ1osY0FBYztVQUNaO1VBQ0E7VUFDQTtXQUVGLFFBQU8sTUFBQTtpQ0FFUCxNQUFNLFdBQVcsYUFBYTs7YUFkbkI7TUFBaUIsTUFBQTs7OztBRVZ0Qzs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGNBQU4seUJBQUEsaUJBQUE7Z0JBQU0sY0FBQTtnQ0FBQTs4QkFBQTs4QkFBQTs7O21CQUFBLGNBQUE7O1VBQ25CLEtBQUE7aUJBQUEsc0JBQWEsTUFBTTtBQUNqQixnQkFBTSxPQUFPLEtBQUssV0FDWixZQUFZLEtBQUssZUFDakIsY0FBYyxLQUFLLHVCQUNuQixRQUFPLGFBQUEsU0FDUCxPQUFPLElBQUksS0FBSyxNQUFNLFdBQVcsYUFBYTtBQUVwRCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsdUJBQWM7QUFDWixnQkFBTSxhQUFhLEtBQUssaUJBQ2xCLGtCQUFrQixJQUFBLE9BQUEsUUFBTyxhQUN6Qiw4QkFBOEIsZ0JBQWdCLGtCQUM5QyxZQUFZLENBQUM7QUFFbkIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG1CQUFVO0FBQ1IsZ0JBQU0sYUFBYSxLQUFLLGlCQUNsQixpQkFBaUIsSUFBQSxPQUFBLE9BQU0sYUFDdkIsY0FBYyxnQkFDZCxPQUFPLFlBQVk7QUFFekIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLCtCQUFzQjtBQUNwQixnQkFBTSxhQUFhLEtBQUssaUJBQ2xCLG1CQUFtQixXQUFXLFFBQzlCLGlCQUFpQixJQUFBLE9BQUEsT0FBTSxhQUN2QixrQkFBa0IsSUFBQSxPQUFBLFFBQU8sYUFDekIscUJBQXNCLHFCQUFxQixJQUNwQixpQkFDRSxpQkFDekIsY0FBYyxtQkFBbUI7QUFFdkMsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBQSxRQUFnQiwwQkExQzdELGNBMENvRyxVQUFVOzs7O2FBMUM5RztNQUFvQixhQUFBOzs7O0FFTnpDOzs7Ozs7OztlQUtxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0scUJBQU4seUJBQUEsY0FBQTtnQkFBTSxxQkFBQTtnQ0FBQTttQ0FDUCxTQUFPOzhCQURBOzs7QUFJakIsY0FBSyxVQUFVOzs7bUJBSkUscUJBQUE7O1VBT25CLEtBQUE7aUJBQUEsZUFBTSxPQUFPLE9BQU8sVUFBVTtBQUM1QixnQkFBSTtBQUVKLGdCQUFJLGVBQWU7QUFFbkIsZ0JBQU0sYUFBYSxNQUFNLGlCQUNyQix1QkFBdUIsTUFBTSwyQkFDaEMsbUJBQW1CO0FBRXBCLGdCQUFJLHFCQUFxQixNQUFNO0FBQzdCLGtCQUFNLFVBQVUsaUJBQWlCO0FBRWpDLGtCQUFJLFlBQVksS0FBSyxTQUFTO0FBQzVCLCtCQUFlLFdBQUEsUUFBYSxxQkFBcUI7OztBQUlyRCxxQkFBVSxpQkFBaUI7QUFFM0IsZ0JBQUksUUFBUTtBQUNWLG9CQUFNLEtBQUs7QUFFWCxrQkFBSSxhQUFhLE1BQU07QUFDckIseUJBQVM7QUFFVCxvQkFBSSxDQUFDLFFBQVE7QUFDWCx3QkFBTTs7OztBQUtaLGdCQUFJLENBQUMsUUFBUTtBQUNYLG9CQUFNLFVBQVU7O0FBR2xCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLFVBQVUsS0FBSyxRQUFRLFFBQVEsTUFBTSxTQUNyQyxTQUFVLElBQVcsT0FBUixTQUFRO0FBRTNCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQkFBUTtBQUFFLG1CQUFPLElBcERFLG9CQW9EcUIsS0FBSzs7OzthQXBEMUI7TUFBMkIsVUFBQTs7OztBRUxoRDs7Ozs7Ozs7ZUFhcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZyQixRQUFRLFlBQTBCLGFBQUEsZUFBMUI7QUFBUixRQUFtQixhQUFlLGFBQUEsZUFBZjtBQUVKLFFBQU0saUJBQU4seUJBQUEsWUFBQTtnQkFBTSxpQkFBQTtnQ0FBQTtpQ0FBQTs4QkFBQTtBQUVqQixZQUFNLGlDQUFpQyxXQUNqQyxrQ0FBa0MsWUFDbEMsZ0NBQWdDLElBQUksVUFBQSxRQUFhLFdBQUEsNEJBQ2pELG1CQUFtQixJQUFJLFVBQUEsUUFBYSxXQUFBLGVBQ3BDLG9DQUFvQyxJQUFJLGNBQUEsUUFBaUIsZ0NBQ3pELDhCQUE4QixJQUFJLGdCQUFBLFFBQW1CLGlDQUNyRCwwQkFBMEIsSUFBSSxVQUFBLFFBQWEsV0FBQSxzQkFDM0MsK0JBQStCLElBQUksZ0JBQUEsUUFBbUIsa0NBQ3RELFFBQVE7VUFDTjtVQUNBO1VBQ0E7VUFDQTtVQUNBOztpQ0FHRjs7YUFsQlc7TUFBdUIsWUFBQTs7OztBRWI1Qzs7Ozs7Ozs7ZUFRcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLFdBQU4seUJBQUEsTUFBQTtnQkFBTSxXQUFBO2dDQUFBOzJCQUFBOzhCQUFBO0FBRWpCLFlBQU0saUJBQWlCLElBQUksT0FBQSxXQUNyQixPQUFPLFdBQUEsY0FDUCxZQUFZLE9BQ1osY0FBYztVQUNaO1dBRUYsUUFBTyxPQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVZuQjtNQUFpQixNQUFBOzs7O0FFUnRDOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxlQUFOLHlCQUFBLGlCQUFBO2dCQUFNLGVBQUE7Z0NBQUE7K0JBQUE7OEJBQUE7OzttQkFBQSxlQUFBLE1BQUE7O1VBQ1osS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBQSxRQUFnQiwwQkFEN0QsZUFDcUcsVUFBVTs7OzthQUQvRztNQUFxQixhQUFBOzs7O0FFSjFDOzs7Ozs7OztlQVNxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxXQUFhLGFBQUEsZUFBYjtBQUVPLFFBQU0sZUFBTix5QkFBQSxjQUFBO2dCQUFNLGVBQUE7Z0NBQUE7K0JBQUE7OEJBQUE7OzttQkFBQSxlQUFBOztVQUNuQixLQUFBO2lCQUFBLGVBQU0sT0FBTyxPQUFPLFVBQVU7QUFDNUIsZ0JBQUk7QUFFSixnQkFBSSxlQUFlO0FBRW5CLGdCQUFNLGFBQWEsTUFBTSxpQkFDckIsdUJBQXVCLE1BQU0sMkJBQ2hDLG1CQUFtQjtBQUVwQixnQkFBSSxxQkFBcUIsTUFBTTtBQUM3Qiw2QkFBZSxXQUFBLFFBQWEscUJBQXFCOztBQUduRCxxQkFBVSxpQkFBaUI7QUFFM0IsZ0JBQUksUUFBUTtBQUNWLG9CQUFNLEtBQUs7QUFFWCxrQkFBSSxhQUFhLE1BQU07QUFDckIseUJBQVM7QUFFVCxvQkFBSSxDQUFDLFFBQVE7QUFDWCx3QkFBTTs7OztBQUtaLGdCQUFJLENBQUMsUUFBUTtBQUNYLG9CQUFNLFVBQVU7O0FBR2xCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLFNBQVM7QUFFZixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsaUJBQVE7QUFBRSxtQkFBTyxJQXpDRTs7OzthQUFBO01BQXFCLFVBQUE7Ozs7QUVUMUM7Ozs7Ozs7O2VBS3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sa0JBQU4seUJBQUEsWUFBQTtnQkFBTSxrQkFBQTtnQ0FBQTtrQ0FBQTs4QkFBQTtBQUVqQixZQUFNLGVBQWUsSUFBSSxVQUFBLFdBQ25CLFFBQVE7VUFDTjs7aUNBR0Y7O2FBUFc7TUFBd0IsWUFBQTs7OztBRUw3Qzs7Ozs7Ozs7ZUFRcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLFlBQU4seUJBQUEsTUFBQTtnQkFBTSxZQUFBO2dDQUFBOzRCQUFBOzhCQUFBO0FBRWpCLFlBQU0sa0JBQWtCLElBQUksUUFBQSxXQUN0QixPQUFPLFdBQUEsZUFDUCxZQUFZLE9BQ1osY0FBYztVQUNaO1dBRUYsUUFBTyxPQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVZuQjtNQUFrQixNQUFBOzs7O0FFUnZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxRQUFRLFVBQVksYUFBQSxlQUFaO0FBRVIsUUFBTSx1QkFBTix5QkFBQSx5QkFBQTtnQkFBTSx1QkFBQTtnQ0FBQTt1Q0FBQTs4QkFBQTs7O21CQUFBLHVCQUFBLE1BQUE7O1VBQ0csS0FBQTtpQkFBUCx1QkFBcUI7QUFDbkIsZ0JBQU0sU0FBUyxTQUNULGVBQWUsT0FBTyxRQUN0QiwrQkFBK0IsY0FDL0IsMEJBQTBCLGdCQUFBLFFBQXdCLFVBQVUsK0JBQzVELHlCQUF5Qix3QkFBd0IsNkJBQ2pELHdCQUF3QixnQkFBQSxRQUF3QixvQ0FQcEQsdUJBTzhHLFFBQVE7QUFFeEgsa0NBQXNCLFlBQVk7QUFFbEMsZ0JBQU0sdUJBQXVCO0FBRTdCLG1CQUFPOzs7O2FBYkw7TUFBNkIsZ0JBQUE7QUFpQm5DLFdBQU8sVUFBVTs7OztBQ3pCakI7Ozs7Ozs7O2VBU3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZyQixRQUFRLFVBQVksYUFBQSxlQUFaO0FBRU8sUUFBTSxjQUFOLHlCQUFBLGNBQUE7Z0JBQU0sY0FBQTtnQ0FBQTs4QkFBQTs4QkFBQTs7O21CQUFBLGNBQUE7O1VBQ25CLEtBQUE7aUJBQUEseUJBQWdCO0FBQ2QsZ0JBQU0sY0FBYztBQUVwQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsbUJBQVU7QUFDUixnQkFBTSxPQUFPO0FBRWIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHNCQUFhO0FBQ1gsZ0JBQU0sVUFBVTtBQUVoQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEscUJBQVksUUFBUTtBQUNsQixnQkFBTSx1QkFBdUIsYUFBQSxRQUFxQixlQUM1QyxZQUFZO0FBRWxCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxlQUFNLE1BQU07QUFDVixnQkFBSSxVQUFVO0FBRWQsZ0JBQU0sbUJBQW1CLEtBQUs7QUFFOUIsZ0JBQUksa0JBQWtCO0FBQ3BCLGtCQUFNLGVBQWUsTUFDZiwwQkFBMEIsYUFBYTtBQUU3QyxrQkFBSSx5QkFBeUI7QUFDM0IsMEJBQVU7OztBQUlkLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQkFBUTtBQUNOLGdCQUFNLGNBNUNXLGFBNENlO0FBRWhDLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsdUJBQXFCO0FBQ25CLGdCQUFNLG1CQUFtQixNQUNuQixjQUFjLFVBQUEsUUFBYSxxQkFuRGhCLGNBbURrRDtBQUVuRSxtQkFBTzs7OzthQXJEVTtNQUFvQixVQUFBOzs7O0FFVHpDOzs7Ozs7OztlQVNxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxVQUFZLGFBQUEsZUFBWjtBQUVPLFFBQU0sY0FBTix5QkFBQSxjQUFBO2dCQUFNLGNBQUE7Z0NBQUE7OEJBQUE7OEJBQUE7OzttQkFBQSxjQUFBOztVQUNuQixLQUFBO2lCQUFBLGVBQU0sT0FBTyxPQUFPLFVBQVU7QUFDNUIsZ0JBQUk7QUFFSixnQkFBTSxhQUFhLE1BQU0saUJBQ25CLGlCQUFpQixTQUFBLFFBQWU7QUFFdEMscUJBQVUsbUJBQW1CO0FBRTdCLGdCQUFJLFFBQVE7QUFDVixvQkFBTSxLQUFLO0FBRVgsa0JBQUksYUFBYSxNQUFNO0FBQ3JCLHlCQUFTO0FBRVQsb0JBQUksQ0FBQyxRQUFRO0FBQ1gsd0JBQU07Ozs7QUFLWixnQkFBSSxDQUFDLFFBQVE7QUFDWCxvQkFBTSxVQUFVOztBQUdsQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsb0JBQVc7QUFDVCxnQkFBTSxTQUFTO0FBRWYsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRO0FBQUUsbUJBQU8sSUFsQ0U7Ozs7YUFBQTtNQUFvQixVQUFBOzs7O0FFVHpDOzs7Ozs7OztlQUtxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0saUJBQU4seUJBQUEsaUJBQUE7Z0JBQU0saUJBQUE7Z0NBQUE7aUNBQUE7OEJBQUE7OzttQkFBQSxpQkFBQTs7VUFDbkIsS0FBQTtpQkFBQSxzQkFBYSxXQUFXO0FBQ3RCLGdCQUFNLGNBQWMsSUFBSSxTQUFBO0FBRXhCLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQUEsUUFBZ0IsMEJBUDdELGlCQU91RyxVQUFVOzs7O2FBUGpIO01BQXVCLGFBQUE7Ozs7QUVMNUM7Ozs7Ozs7O2VBS3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sMkJBQU4seUJBQUEsWUFBQTtnQkFBTSwyQkFBQTtnQ0FBQTt5Q0FDUCxTQUFPOzhCQURBO0FBRWpCLFlBQU0scUJBQXFCLElBQUksZ0JBQUEsUUFBbUIsVUFDNUMsUUFBUTtVQUNOOztpQ0FHRjs7YUFQVztNQUFpQyxZQUFBOzs7O0FFTHREOzs7Ozs7OztlQVlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxVQUFZLGFBQUEsZUFBWjtBQUVPLFFBQU0sY0FBTix5QkFBQSxNQUFBO2dCQUFNLGNBQUE7Z0NBQUE7OEJBQUE7OEJBQUE7QUFFakIsWUFBTSwrQkFBK0IsU0FDL0Isa0NBQWtDLElBQUksZ0JBQUEsUUFBeUIsK0JBQy9ELE9BQU8sV0FBQSxpQkFDUCxZQUFZLE9BQ1osY0FBYztVQUNaO1dBRUYsUUFBTyxTQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVhuQjtNQUFvQixNQUFBOzs7O0FFWnpDOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sa0JBQU4seUJBQUEsaUJBQUE7Z0JBQU0sa0JBQUE7Z0NBQUE7a0NBQUE7OEJBQUE7OzttQkFBQSxrQkFBQTs7VUFDbkIsS0FBQTtpQkFBQSx1QkFBYyxNQUFNO0FBQ2xCLGdCQUFNLGFBQWEsS0FBSyxpQkFDbEIsWUFBWSxXQUFXLE9BQU8sU0FBQyxZQUFXLFdBQWM7QUFDdEQsa0JBQU0sMkJBQTJCLFVBQVU7QUFFM0Msa0JBQUksMEJBQTBCO0FBQzVCLG9CQUFNLGtCQUFrQixXQUNsQixXQUFXLFVBQVUsZUFDckIsdUJBQXdCLGFBQWEsV0FBQSxjQUNyQywwQkFBMEI7QUFFaEMsb0JBQUkseUJBQXlCO0FBQzNCLHNCQUFNLFdBQVc7QUFFakIsNkJBQVUsS0FBSzs7O0FBSW5CLHFCQUFPO2VBQ04sS0FDSCxRQUFRLFVBQVUsSUFBSSxTQUFDLFVBQWE7QUFDbEMsa0JBQU0sT0FBTyxTQUFTLGFBQWE7QUFFbkMscUJBQU87O0FBR2YsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBQSxRQUFnQiwwQkE5QjdELGtCQThCd0csVUFBVTs7OzthQTlCbEg7TUFBd0IsYUFBQTs7OztBRU43Qzs7Ozs7Ozs7ZUFPcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxvQkFBTix5QkFBQSxpQkFBQTtnQkFBTSxvQkFBQTtnQ0FBQTtrQ0FDUCxPQUFLOzhCQURFOztBQUVqQixZQUFNLE9BQU8sV0FBQTtrQ0FFUDtBQUVOLGNBQUssUUFBUTs7O21CQU5JLG9CQUFBOztVQVNuQixLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsZUFBTSxPQUFPLE9BQU8sVUFBVTtBQUM1QixnQkFBSTtBQUVKLGlCQUFLLE1BQU0sS0FBSyxTQUFDLE1BQVM7QUFDeEIsdUJBQVMsS0FBSyxNQUFNLE9BQU8sT0FBTztBQUVsQyxrQkFBSSxRQUFRO0FBQ1YsdUJBQU87OztBQUlYLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLGNBQWMsS0FBSyxNQUFNLE9BQU8sU0FBQyxjQUFhLE1BQVM7QUFDckQsa0JBQU0sYUFBYSxLQUFLO0FBRXhCLGtCQUFJLGlCQUFnQixNQUFNO0FBQ3hCLCtCQUFjO3FCQUNUO0FBQ0wsK0JBQWUsR0FBbUIsT0FBakIsY0FBWSxPQUFnQixPQUFYOztBQUdwQyxxQkFBTztlQUNOLE9BQ0gsU0FBVSxLQUFnQixPQUFaLGFBQVk7QUFFaEMsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRO0FBQ04sZ0JBQU0sUUFBUSxLQUFLLE1BQU0sSUFBSSxTQUFDLE1BQUE7cUJBQVMsS0FBSztnQkFDdEMsb0JBQW9CLElBOUNULG1CQThDK0I7QUFFaEQsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQkFBaUIsT0FBTztBQUN0QixnQkFBTSwwQkFBMEIsSUFBQSxPQUFBLG9CQUFtQjtBQUVuRCxvQkFBUTtBQUVSLGdCQUFNLFlBQVksSUFBQSxPQUFBLE1BQUs7QUFFdkIsb0JBQVE7QUFFUixnQkFBTSxZQUFZLE9BQ1osUUFBUSxNQUFNLElBQUksU0FBQyxNQUFTO0FBQzFCLGtCQUFNLE9BQU8sS0FBSyxhQUFhO0FBRS9CLHFCQUFPO2dCQUVULG9CQUFvQixJQWxFVCxtQkFrRStCO0FBRWhELG1CQUFPOzs7O2FBcEVVO01BQTBCLGFBQUE7Ozs7QUVQL0M7Ozs7Ozs7O2VBU3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0scUJBQU4seUJBQUEsWUFBQTtnQkFBTSxxQkFBQTtnQ0FBQTtxQ0FBQTs4QkFBQTtBQUVqQixZQUFNLG1CQUFtQixJQUFJLFVBQUEsUUFBYSxXQUFBLGVBQ3BDLG9CQUFvQixJQUFJLFVBQUEsUUFBYSxXQUFBLGdCQUNyQyxvQ0FBb0M7VUFDbEM7VUFDQTtXQUVGLGdEQUFnRCxJQUFJLGVBQUEsUUFBa0Isb0NBQ3RFLDhEQUE4RCxJQUFJLGdCQUFBLFFBQW1CLGdEQUNyRixRQUFRO1VBQ047O2lDQUdGOzthQWRXO01BQTJCLFlBQUE7Ozs7QUVUaEQ7Ozs7Ozs7O2VBUXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxlQUFOLHlCQUFBLE1BQUE7Z0JBQU0sZUFBQTtnQ0FBQTsrQkFBQTs4QkFBQTtBQUVqQixZQUFNLHFCQUFxQixJQUFJLFdBQUEsV0FDekIsT0FBTyxXQUFBLGtCQUNQLFlBQVksT0FDWixjQUFjO1VBQ1o7V0FFRixRQUFPLFVBQUE7aUNBRVAsTUFBTSxXQUFXLGFBQWE7O2FBVm5CO01BQXFCLE1BQUE7Ozs7QUVSMUM7Ozs7Ozs7O2VBT3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sa0JBQU4seUJBQUEsaUJBQUE7Z0JBQU0sa0JBQUE7Z0NBQUE7a0NBQUE7OEJBQUE7OzttQkFBQSxrQkFBQTs7VUFDbkIsS0FBQTtpQkFBQSxzQkFBYSxXQUFXO0FBQ3RCLGdCQUFNLFdBQVcsS0FBSyxlQUNoQixlQUFlLElBQUksVUFBQSxRQUFhLFVBQVU7QUFFaEQsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHVCQUFjO0FBQ1osZ0JBQU0sYUFBYSxLQUFLLGlCQUNsQixpQkFBaUIsSUFBQSxPQUFBLE9BQU0sYUFDdkIsZUFBZSxnQkFDZixzQkFBc0IsYUFBYSxjQUNuQyxXQUFXO0FBRWpCLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQUEsUUFBZ0IsMEJBbEI3RCxrQkFrQndHLFVBQVU7Ozs7YUFsQmxIO01BQXdCLGFBQUE7Ozs7QUVQN0M7Ozs7Ozs7O2VBUXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxlQUFOLHlCQUFBLE1BQUE7Z0JBQU0sZUFBQTtnQ0FBQTsrQkFBQTs4QkFBQTtBQUVqQixZQUFNLGlCQUFpQixJQUFJLE1BQUEsV0FDckIsT0FBTyxXQUFBLGtCQUNQLFlBQVksT0FDWixjQUFjO1VBQ1o7V0FFRixRQUFPLFVBQUE7aUNBRVAsTUFBTSxXQUFXLGFBQWE7O2FBVm5CO01BQXFCLE1BQUE7Ozs7QUVSMUM7Ozs7Ozs7O2VBS3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxrQkFBTix5QkFBQSxpQkFBQTtnQkFBTSxrQkFBQTtnQ0FBQTtrQ0FBQTs4QkFBQTs7O21CQUFBLGtCQUFBOztVQUNuQixLQUFBO2lCQUFBLHNCQUFhLFdBQVc7QUFDdEIsZ0JBQU0sZUFBZSxJQUFJLFVBQUE7QUFFekIsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBQSxRQUFnQiwwQkFQN0Qsa0JBT3dHLFVBQVU7Ozs7YUFQbEg7TUFBd0IsYUFBQTs7OztBRUw3Qzs7Ozs7Ozs7ZUFZcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRnJCLFFBQVEsV0FBYSxhQUFBLGVBQWI7QUFFTyxRQUFNLGVBQU4seUJBQUEsTUFBQTtnQkFBTSxlQUFBO2dDQUFBOytCQUFBOzhCQUFBO0FBRWpCLFlBQU0sZ0NBQWdDLFVBQ2hDLG1DQUFtQyxJQUFJLGdCQUFBLFFBQXlCLGdDQUNoRSxPQUFPLFdBQUEsa0JBQ1AsWUFBWSxPQUNaLGNBQWM7VUFDWjtXQUVGLFFBQU8sVUFBQTtpQ0FFUCxNQUFNLFdBQVcsYUFBYTs7YUFYbkI7TUFBcUIsTUFBQTs7OztBRVoxQzs7Ozs7Ozs7ZUFRcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxjQUFnQixhQUFBLGVBQWhCO0FBRU8sUUFBTSx5QkFBTix5QkFBQSx5QkFBQTtnQkFBTSx5QkFBQTtnQ0FBQTt5Q0FBQTs4QkFBQTs7O21CQUFBLHlCQUFBLE1BQUE7O1VBQ1osS0FBQTtpQkFBUCx1QkFBcUI7QUFDbkIsZ0JBQU0sU0FBUyxhQUNULGVBQWUsT0FBTyxRQUN0QiwrQkFBK0IsY0FDL0IsMEJBQTBCLGdCQUFBLFFBQXdCLFVBQVUsK0JBQzVELHlCQUF5Qix3QkFBd0IsNkJBQ2pELHdCQUF3QixnQkFBQSxRQUF3QixvQ0FQckMseUJBT2lHLFFBQVE7QUFFMUgsa0NBQXNCLFlBQVk7QUFFbEMsZ0JBQU0seUJBQXlCO0FBRS9CLG1CQUFPOzs7O2FBYlU7TUFBK0IsZ0JBQUE7Ozs7QUVScEQ7Ozs7Ozs7O2VBT3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGdCQUFOLHlCQUFBLGNBQUE7Z0JBQU0sZ0JBQUE7Z0NBQUE7Z0NBQUE7OEJBQUE7OzttQkFBQSxnQkFBQTs7VUFDbkIsS0FBQTtpQkFBQSxzQkFBYTtBQUNYLGdCQUFNLFVBQVUsV0FBQTtBQUVoQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEscUJBQVksUUFBUTtBQUNsQixnQkFBTSx5QkFBeUIsZUFBQSxRQUF1QixlQUNoRCxZQUFZO0FBRWxCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQkFBUTtBQUFFLG1CQUFPLEtBQUEsZ0JBZEUsZUFBQSxZQWNJLFNBQU4sTUFBSyxLQUFBLE1BZEg7Ozs7O1VBZ0JaLEtBQUE7aUJBQVAsOEJBQTRCLGtCQUFrQjtBQUFFLG1CQUFPLFVBQUEsUUFBYSxxQkFoQmpELGdCQWdCcUY7Ozs7YUFoQnJGO01BQXNCLFVBQUE7Ozs7QUVQM0M7Ozs7Ozs7O2VBU3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZyQixRQUFRLGNBQWdCLGFBQUEsZUFBaEI7QUFFTyxRQUFNLGdCQUFOLHlCQUFBLGNBQUE7Z0JBQU0sZ0JBQUE7Z0NBQUE7Z0NBQUE7OEJBQUE7OzttQkFBQSxnQkFBQTs7VUFDbkIsS0FBQTtpQkFBQSxlQUFNLE9BQU8sT0FBTyxVQUFVO0FBQzVCLGdCQUFJO0FBRUosZ0JBQUksZ0JBQWdCO0FBRXBCLGdCQUFNLGFBQWEsTUFBTSxpQkFDckIsdUJBQXVCLE1BQU0sMkJBQzNCLG1CQUFtQjtBQUV6QixnQkFBSSxxQkFBcUIsTUFBTTtBQUM3QixrQkFBTSxpQ0FBaUMsaUJBQWlCO0FBRXhELGtCQUFJLGdDQUFnQztBQUNsQyxnQ0FBZ0IsV0FBQSxRQUFjLHFCQUFxQjs7O0FBSXZELHFCQUFVLGtCQUFrQjtBQUU1QixnQkFBSSxRQUFRO0FBQ1Ysb0JBQU0sS0FBSztBQUVYLGtCQUFJLGFBQWEsTUFBTTtBQUNyQix5QkFBUztBQUVULG9CQUFJLENBQUMsUUFBUTtBQUNYLHdCQUFNOzs7O0FBS1osZ0JBQUksQ0FBQyxRQUFRO0FBQ1gsb0JBQU0sVUFBVTs7QUFHbEIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsZ0JBQU0sU0FBUztBQUVmLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQkFBUTtBQUFFLG1CQUFPLElBN0NFOzs7O2FBQUE7TUFBc0IsVUFBQTs7OztBRVQzQzs7Ozs7Ozs7ZUFLcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLG1CQUFOLHlCQUFBLGlCQUFBO2dCQUFNLG1CQUFBO2dDQUFBO21DQUFBOzhCQUFBOzs7bUJBQUEsbUJBQUE7O1VBQ25CLEtBQUE7aUJBQUEsc0JBQWEsV0FBVztBQUN0QixnQkFBTSxnQkFBZ0IsSUFBSSxXQUFBO0FBRTFCLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQUEsUUFBZ0IsMEJBUDdELG1CQU95RyxVQUFVOzs7O2FBUG5IO01BQXlCLGFBQUE7Ozs7QUVMOUM7Ozs7Ozs7O2VBWXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZyQixRQUFRLGNBQWdCLGFBQUEsZUFBaEI7QUFFTyxRQUFNLGdCQUFOLHlCQUFBLE1BQUE7Z0JBQU0sZ0JBQUE7Z0NBQUE7Z0NBQUE7OEJBQUE7QUFFakIsWUFBTSxpQ0FBaUMsYUFDakMsb0NBQW9DLElBQUksZ0JBQUEsUUFBeUIsaUNBQ2pFLE9BQU8sV0FBQSxtQkFDUCxZQUFZLE9BQ1osY0FBYztVQUNaO1dBRUYsUUFBTyxXQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVhuQjtNQUFzQixNQUFBOzs7O0FFWjNDOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0saUJBQU4seUJBQUEsTUFBQTtnQkFBTSxpQkFBQTtnQ0FBQTtpQ0FBQTs4QkFBQTtBQUVqQixZQUFNLE9BQU8sV0FBQSxvQkFDUCx1Q0FBdUMsSUFBSSxVQUFBLFFBQW1CLFdBQUEsNkJBQzlELHdDQUF3QyxJQUFJLFVBQUEsUUFBbUIsV0FBQSw4QkFDL0QseUNBQXlDLElBQUksVUFBQSxRQUFtQixXQUFBLCtCQUNoRSxZQUFZLE9BQ1osY0FBYztVQUNaO1VBQ0E7VUFDQTtXQUVGLFFBQU8sTUFBQTtpQ0FFUCxNQUFNLFdBQVcsYUFBYTs7YUFkbkI7TUFBdUIsTUFBQTs7OztBRVI1Qzs7Ozs7Ozs7ZUFLcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLG9CQUFOLHlCQUFBLGlCQUFBO2dCQUFNLG9CQUFBO2dDQUFBO29DQUFBOzhCQUFBOzs7bUJBQUEsb0JBQUE7O1VBQ25CLEtBQUE7aUJBQUEsOEJBQXFCO0FBQ25CLGdCQUFNLGFBQWEsS0FBSyxpQkFDbEIsWUFBWSxZQUNaLFlBQVksT0FDWixRQUFRLFVBQVUsSUFBSSxTQUFDLFVBQWE7QUFDbEMsa0JBQU0sT0FBTyxTQUFTLGFBQWE7QUFFbkMscUJBQU87Z0JBRVQsYUFBYSxJQUFJLFlBQUEsUUFBVztBQUVsQyxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxhQUFBLFFBQWdCLDBCQWY3RCxvQkFlMEcsVUFBVTs7OzthQWZwSDtNQUEwQixhQUFBOzs7O0FFTC9DOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sdUJBQU4seUJBQUEsWUFBQTtnQkFBTSx1QkFBQTtnQ0FBQTt1Q0FBQTs4QkFBQTtBQUVqQixZQUFNLG1CQUFtQixJQUFJLFVBQUEsUUFBYSxXQUFBLGVBQ3BDLDZCQUE2QixJQUFJLGdCQUFBLFFBQW1CLG1CQUNwRCxRQUFRO1VBQ047O2lDQUdGOzthQVJXO01BQTZCLFlBQUE7Ozs7QUVSbEQ7Ozs7Ozs7O2VBUXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxpQkFBTix5QkFBQSxNQUFBO2dCQUFNLGlCQUFBO2dDQUFBO2lDQUFBOzhCQUFBO0FBRWpCLFlBQU0sT0FBTyxXQUFBLG9CQUNQLHVCQUF1QixJQUFJLGFBQUEsV0FDM0IsWUFBWSxPQUNaLGNBQWM7VUFDWjtXQUVGLFFBQU8sWUFBQTtpQ0FFUCxNQUFNLFdBQVcsYUFBYTs7YUFWbkI7TUFBdUIsTUFBQTs7OztBRVI1Qzs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLHFCQUFOLHlCQUFBLGlCQUFBO2dCQUFNLHFCQUFBO2dDQUFBO3FDQUFBOzhCQUFBOzs7bUJBQUEscUJBQUE7O1VBQ25CLEtBQUE7aUJBQUEsK0JBQXNCO0FBQ3BCLGdCQUFNLGFBQWEsS0FBSyxpQkFDbEIsaUJBQWlCLElBQUEsT0FBQSxNQUFLLGFBQ3RCLHFCQUFxQixnQkFDckIsY0FBYyxtQkFBbUIsSUFBSSxTQUFDLG1CQUFzQjtBQUMxRCxrQkFBTSxhQUFhLGtCQUFrQjtBQUVyQyxxQkFBTzs7QUFHZixtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxhQUFBLFFBQWdCLDBCQWQ3RCxxQkFjMkcsVUFBVTs7OzthQWRySDtNQUEyQixhQUFBOzs7O0FFTmhEOzs7Ozs7OztlQVNxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxzQkFBTix5QkFBQSxpQkFBQTtnQkFBTSxzQkFBQTtnQ0FBQTtvQ0FDUCxPQUFLOzhCQURFOztBQUVqQixZQUFNLE9BQU8sV0FBQTtrQ0FFUDtBQUVOLGNBQUssUUFBUTs7O21CQU5JLHNCQUFBOztVQVNuQixLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsZUFBTSxPQUFPLE9BQU8sVUFBVTtBQUM1QixnQkFBSTtBQUVKLGdCQUFNLGFBQWEsTUFBTSxpQkFDbkIsYUFBYSxJQUNiLFFBQVE7QUFFZCxxQkFBUyxJQUFBLFdBQUEsWUFBVyxLQUFLLE9BQU8sWUFBWSxPQUFPLE9BQU87QUFFMUQsZ0JBQUksUUFBUTtBQUNWLGNBQUEsSUFBQSxPQUFBLE1BQUssT0FBTzs7QUFHZCxnQkFBSSxDQUFDLFFBQVE7QUFDWCxvQkFBTSxVQUFVOztBQUdsQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsb0JBQVc7QUFDVCxnQkFBTSxjQUFjLEtBQUssTUFBTSxPQUFPLFNBQUMsY0FBYSxNQUFTO0FBQ3JELGtCQUFNLGFBQWEsS0FBSztBQUV4QixrQkFBSSxpQkFBZ0IsTUFBTTtBQUN4QiwrQkFBYztxQkFDVDtBQUNMLCtCQUFlLEdBQWlCLE9BQWYsY0FBWSxLQUFjLE9BQVg7O0FBR2xDLHFCQUFPO2VBQ04sT0FDSCxTQUFVLEtBQWdCLE9BQVosYUFBWTtBQUVoQyxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsaUJBQVE7QUFDTixnQkFBTSxRQUFRLEtBQUssTUFBTSxJQUFJLFNBQUMsTUFBQTtxQkFBUyxLQUFLO2dCQUN0QyxzQkFBc0IsSUFwRFgscUJBb0RtQztBQUVwRCxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQ3RCLGdCQUFNLDBCQUEwQixJQUFBLE9BQUEsb0JBQW1CO0FBRW5ELG9CQUFRO0FBRVIsZ0JBQU0sWUFBWSxPQUNaLFFBQVEsTUFBTSxJQUFJLFNBQUMsTUFBUztBQUMxQixrQkFBTSxPQUFPLEtBQUssYUFBYTtBQUUvQixxQkFBTztnQkFFVCxzQkFBc0IsSUFwRVgscUJBb0VtQztBQUVwRCxtQkFBTzs7OzthQXRFVTtNQUE0QixhQUFBOzs7O0FFVGpEOzs7Ozs7OztlQWNxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZyQixRQUFRLGNBQWdCLGFBQUEsZUFBaEI7QUFFTyxRQUFNLHdCQUFOLHlCQUFBLFlBQUE7Z0JBQU0sd0JBQUE7Z0NBQUE7d0NBQUE7OEJBQUE7QUFFakIsWUFBTSxtQ0FBbUMsYUFDbkMseUJBQXlCLElBQUksVUFBQSxRQUFhLFdBQUEscUJBQzFDLGdDQUFnQyxJQUFJLGdCQUFBLFFBQW1CLG1DQUN2RCx1REFBdUQ7VUFDckQ7VUFDQTtXQUVGLHNCQUFzQixJQUFJLGlCQUFBLFFBQW9CLHVEQUM5QyxnQ0FBZ0MsSUFBSSxpQkFBQSxRQUFvQixzQkFDeEQsUUFBUTtVQUNOO1VBQ0E7O2lDQUdGOzthQWhCVztNQUE4QixZQUFBOzs7O0FFZG5EOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sa0JBQU4seUJBQUEsTUFBQTtnQkFBTSxrQkFBQTtnQ0FBQTtrQ0FBQTs4QkFBQTtBQUVqQixZQUFNLHdCQUF3QixJQUFJLGNBQUEsV0FDNUIsT0FBTyxXQUFBLHFCQUNQLFlBQVksT0FDWixjQUFjO1VBQ1o7V0FFRixRQUFPLGFBQUE7aUNBRVAsTUFBTSxXQUFXLGFBQWE7O2FBVm5CO01BQXdCLE1BQUE7Ozs7QUVSN0M7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxzQkFBTix5QkFBQSxpQkFBQTtnQkFBTSxzQkFBQTtnQ0FBQTtzQ0FBQTs4QkFBQTs7O21CQUFBLHNCQUFBOztVQUNuQixLQUFBO2lCQUFBLHNCQUFhLFdBQVc7QUFDdEIsZ0JBQU0sYUFBYSxLQUFLLGlCQUNsQixpQkFBaUIsSUFBQSxPQUFBLE9BQU0sYUFDdkIsT0FBTyxnQkFDUCxPQUFPLEtBQUssYUFBYTtBQUUvQixtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxhQUFBLFFBQWdCLDBCQVY3RCxzQkFVNEcsVUFBVTs7OzthQVZ0SDtNQUE0QixhQUFBOzs7O0FFTmpEOzs7Ozs7OztlQWNxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sbUJBQU4seUJBQUEsTUFBQTtnQkFBTSxtQkFBQTtnQ0FBQTttQ0FBQTs4QkFBQTtBQUVqQixZQUFNLE9BQU8sV0FBQSxzQkFDUCw0QkFBNEIsSUFBSSxVQUFBLFFBQW1CLFdBQUEsa0JBQ25ELDZCQUE2QixJQUFJLFVBQUEsUUFBbUIsV0FBQSxtQkFDcEQsOEJBQThCLElBQUksVUFBQSxRQUFtQixXQUFBLG9CQUNyRCxtQ0FBbUMsSUFBSSxVQUFBLFFBQW1CLFdBQUEseUJBQzFELHNDQUFzQyxJQUFJLFVBQUEsUUFBbUIsV0FBQSw0QkFDN0QseUNBQXlDLElBQUksVUFBQSxRQUFtQixXQUFBLCtCQUNoRSxZQUFZLE9BQ1osY0FBYztVQUNaO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtXQUVGLFFBQU8sVUFBQTtpQ0FFUCxNQUFNLFdBQVcsYUFBYTs7YUFwQm5CO01BQXlCLE1BQUE7Ozs7QUVkOUM7Ozs7Ozs7O2VBS3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSx1QkFBTix5QkFBQSxpQkFBQTtnQkFBTSx1QkFBQTtnQ0FBQTt1Q0FBQTs4QkFBQTs7O21CQUFBLHVCQUFBOztVQUNuQixLQUFBO2lCQUFBLHNCQUFhLFdBQVc7QUFDdEIsZ0JBQU0sYUFBYSxLQUFLLGlCQUNsQixRQUFRLFdBQVcsU0FDbkIsT0FBTyxlQUFBLFFBQWtCLFVBQVU7QUFFekMsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBQSxRQUFnQiwwQkFUN0QsdUJBUzZHLFVBQVU7Ozs7YUFUdkg7TUFBNkIsYUFBQTs7OztBRUxsRDs7Ozs7Ozs7ZUFjcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxjQUEyQyxhQUFBLGVBQTNDO0FBQVIsUUFBcUIsY0FBOEIsYUFBQSxlQUE5QjtBQUFyQixRQUFrQyxlQUFpQixhQUFBLGVBQWpCO0FBRW5CLFFBQU0sMEJBQU4seUJBQUEsWUFBQTtnQkFBTSwwQkFBQTtnQ0FBQTswQ0FBQTs4QkFBQTtBQUVqQixZQUFNLG1DQUFtQyxhQUNuQyxtQ0FBbUMsYUFDbkMsb0NBQW9DLGNBQ3BDLG1CQUFtQixJQUFJLFVBQUEsUUFBYSxXQUFBLGVBQ3BDLGdDQUFnQyxJQUFJLGdCQUFBLFFBQW1CLG1DQUN2RCxnQ0FBZ0MsSUFBSSxnQkFBQSxRQUFtQixtQ0FDdkQsaUNBQWlDLElBQUksZ0JBQUEsUUFBbUIsb0NBQ3hELGlEQUFpRDtVQUMvQztVQUNBO1dBRUYsc0JBQXNCLElBQUksaUJBQUEsUUFBb0IsaURBQzlDLCtCQUErQixJQUFJLGdCQUFBLFFBQW1CLHNCQUN0RCxRQUFRO1VBQ047VUFDQTtVQUNBO1VBQ0E7O2lDQUdGOzthQXRCVztNQUFnQyxZQUFBOzs7O0FFZHJEOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sb0JBQU4seUJBQUEsTUFBQTtnQkFBTSxvQkFBQTtnQ0FBQTtvQ0FBQTs4QkFBQTtBQUVqQixZQUFNLE9BQU8sV0FBQSx1QkFDUCwwQkFBMEIsSUFBSSxnQkFBQSxXQUM5QixZQUFZLE9BQ1osY0FBYztVQUNaO1dBRUYsUUFBTyxlQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVZuQjtNQUEwQixNQUFBOzs7O0FFUi9DOzs7Ozs7OztlQU9xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSx3QkFBTix5QkFBQSxpQkFBQTtnQkFBTSx3QkFBQTtnQ0FBQTt3Q0FBQTs4QkFBQTs7O0FBQ25CLHdCQUFBLHVCQUFBLFFBQUEscUJBQW9COzs7bUJBREQsd0JBQUE7O1VBR25CLEtBQUE7aUJBQUEsc0JBQWEsV0FBVztBQUN0QixnQkFBTSxVQUFVLEtBQUssY0FDZixxQkFBcUIsSUFBSSxnQkFBQSxRQUFtQjtBQUVsRCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsc0JBQWE7QUFDWCxnQkFBTSxhQUFhLEtBQUssaUJBQ2xCLGlCQUFpQixJQUFBLE9BQUEsT0FBTSxhQUN2QixlQUFlLGdCQUNmLHNCQUFzQixhQUFhLGNBQ25DLFVBQVUsb0JBQW9CLE1BQU0sS0FBSyxvQkFDekMsY0FBYyxJQUFBLE9BQUEsUUFBTyxVQUNyQixVQUFVLFlBQVksUUFBUSxTQUFTLE1BQU0sUUFBUSxRQUFRO0FBRW5FLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQUEsUUFBZ0IsMEJBdEI3RCx3QkFzQjhHLFVBQVU7Ozs7YUF0QnhIO01BQThCLGFBQUE7Ozs7QUVQbkQ7Ozs7Ozs7O2VBS3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0saUNBQU4seUJBQUEsWUFBQTtnQkFBTSxpQ0FBQTtnQ0FBQTsrQ0FDUCxzQkFBb0I7OEJBRGI7QUFFakIsWUFBTSwyQkFBMkIsSUFBSSxzQkFBQSxRQUF5Qix1QkFDeEQsUUFBUTtVQUNOOztpQ0FHRjs7YUFQVztNQUF1QyxZQUFBOzs7O0FFTDVEOzs7Ozs7OztlQVlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxvQkFBc0IsYUFBQSxNQUF0QjtBQUVPLFFBQU0scUJBQU4seUJBQUEsTUFBQTtnQkFBTSxxQkFBQTtnQ0FBQTtxQ0FBQTs4QkFBQTtBQUVqQixZQUFNLG9DQUFvQyxtQkFDcEMsOENBQThDLElBQUksc0JBQUEsUUFBK0Isb0NBQ2pGLE9BQU8sV0FBQSx3QkFDUCxZQUFZLE9BQ1osY0FBYztVQUNaO1dBRUYsUUFBTyxnQkFBQTtpQ0FFUCxNQUFNLFdBQVcsYUFBYTs7YUFYbkI7TUFBMkIsTUFBQTs7OztBRVpoRDs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0seUJBQU4seUJBQUEsaUJBQUE7Z0JBQU0seUJBQUE7Z0NBQUE7eUNBQUE7OEJBQUE7OzttQkFBQSx5QkFBQTs7VUFDbkIsS0FBQTtpQkFBQSxzQkFBYSxXQUFXO0FBQ3RCLGdCQUFNLGFBQWEsS0FBSyxpQkFDbEIsUUFBUSxXQUFXLFNBQ25CLE9BQU8sY0FBYyxPQUFPO0FBRWxDLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQUEsUUFBZ0IsMEJBVDdELHlCQVMrRyxVQUFVOzs7O2FBVHpIO01BQStCLGFBQUE7QUFZcEQsMkJBQXVCLE9BQU8sV0FBVztBQUN2QyxVQUFJLE9BQU87QUFFWCxVQUFNLGNBQWMsTUFBTTtBQUUxQixVQUFJLGdCQUFnQixHQUFHO0FBQ3JCLFlBQU0sT0FBTyxNQUFNO0FBRW5CLGVBQU8sS0FBSyxhQUFhO2FBQ3BCO0FBQ0wsY0FBTTtBQUVOLG9CQUFZO0FBRVosZUFBTyxjQUFjLE9BQU87O0FBRzlCLGFBQU87Ozs7O0FDakNUOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sd0NBQU4seUJBQUEsWUFBQTtnQkFBTSx3Q0FBQTtnQ0FBQTt3REFBQTs4QkFBQTtBQUVqQixZQUFNLHVCQUF1QixJQUFJLFVBQUEsUUFBYSxXQUFBLG1CQUN4QyxnQ0FBZ0MsSUFBSSxVQUFBLFFBQWEsV0FBQSw0QkFDakQsb0NBQW9DLElBQUksY0FBQSxRQUFpQixnQ0FDekQsUUFBUTtVQUNOO1VBQ0E7O2lDQUdGOzthQVZXO01BQThDLFlBQUE7Ozs7QUVSbkU7Ozs7Ozs7O2VBU3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sc0JBQU4seUJBQUEsTUFBQTtnQkFBTSxzQkFBQTtnQ0FBQTtzQ0FBQTs4QkFBQTtBQUVqQixZQUFNLE9BQU8sV0FBQSx5QkFDUCxrQ0FBa0MsSUFBSSxVQUFBLFFBQW1CLFdBQUEsd0JBQ3pELG9DQUFvQyxJQUFJLFVBQUEsUUFBbUIsV0FBQSwwQkFDM0Qsd0NBQXdDLElBQUksV0FBQSxXQUM1QyxZQUFZLE9BQ1osY0FBYztVQUNaO1VBQ0E7VUFDQTtXQUVGLFFBQU8sYUFBQTtpQ0FFUCxNQUFNLFdBQVcsYUFBYTs7YUFkbkI7TUFBNEIsTUFBQTs7OztBRVRqRDs7Ozs7Ozs7ZUFLcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLHlCQUFOLHlCQUFBLGlCQUFBO2dCQUFNLHlCQUFBO2dDQUFBO3lDQUFBOzhCQUFBOzs7bUJBQUEseUJBQUE7O1VBQ25CLEtBQUE7aUJBQUEsc0JBQWEsV0FBVztBQUN0QixnQkFBTSxhQUFhLEtBQUssaUJBQ2xCLFFBQVEsV0FBVyxTQUNuQixPQUFPLGlCQUFBLFFBQW9CLFVBQVU7QUFFM0MsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBQSxRQUFnQiwwQkFUN0QseUJBUytHLFVBQVU7Ozs7YUFUekg7TUFBK0IsYUFBQTs7OztBRUxwRDs7Ozs7Ozs7ZUFhcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZyQixRQUFRLGNBQThCLGFBQUEsZUFBOUI7QUFBUixRQUFxQixlQUFpQixhQUFBLGVBQWpCO0FBRU4sUUFBTSw0QkFBTix5QkFBQSxZQUFBO2dCQUFNLDRCQUFBO2dDQUFBOzRDQUFBOzhCQUFBO0FBRWpCLFlBQU0sbUNBQW1DLGFBQ25DLG9DQUFvQyxjQUNwQyxtQkFBbUIsSUFBSSxVQUFBLFFBQWEsV0FBQSxlQUNwQyxnQ0FBZ0MsSUFBSSxnQkFBQSxRQUFtQixtQ0FDdkQsaUNBQWlDLElBQUksZ0JBQUEsUUFBbUIsb0NBQ3hELGlDQUFpQyxJQUFJLGdCQUFBLFFBQW1CLG1CQUN4RCxRQUFRO1VBQ047VUFDQTtVQUNBO1VBQ0E7O2lDQUdGOzthQWZXO01BQWtDLFlBQUE7Ozs7QUVidkQ7Ozs7Ozs7O2VBUXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxzQkFBTix5QkFBQSxNQUFBO2dCQUFNLHNCQUFBO2dDQUFBO3NDQUFBOzhCQUFBO0FBRWpCLFlBQU0sT0FBTyxXQUFBLHlCQUNQLDRCQUE0QixJQUFJLGtCQUFBLFdBQ2hDLFlBQVksT0FDWixjQUFjO1VBQ1o7V0FFRixRQUFPLGlCQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVZuQjtNQUE0QixNQUFBOzs7O0FFUmpEOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZyQixRQUFRLGdCQUFrQixhQUFBLGVBQWxCO0FBRU8sUUFBTSw0QkFBTix5QkFBQSx5QkFBQTtnQkFBTSw0QkFBQTtnQ0FBQTs0Q0FBQTs4QkFBQTs7O21CQUFBLDRCQUFBLE1BQUE7O1VBQ1osS0FBQTtpQkFBUCx1QkFBcUI7QUFDbkIsZ0JBQU0sU0FBUyxlQUNULGVBQWUsT0FBTyxRQUN0QiwrQkFBK0IsY0FDL0IsMEJBQTBCLGdCQUFBLFFBQXdCLFVBQVUsK0JBQzVELHlCQUF5Qix3QkFBd0IsNkJBQ2pELHdCQUF3QixnQkFBQSxRQUF3QixvQ0FQckMsNEJBT29HLFFBQVE7QUFFN0gsa0NBQXNCLFlBQVk7QUFFbEMsZ0JBQU0sNEJBQTRCO0FBRWxDLG1CQUFPOzs7O2FBYlU7TUFBa0MsZ0JBQUE7Ozs7QUVSdkQ7Ozs7Ozs7O2VBT3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sbUJBQU4seUJBQUEsY0FBQTtnQkFBTSxtQkFBQTtnQ0FBQTttQ0FBQTs4QkFBQTs7O21CQUFBLG1CQUFBOztVQUNuQixLQUFBO2lCQUFBLG1CQUFVO0FBQ1IsZ0JBQU0sT0FBTztBQUViLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxzQkFBYTtBQUNYLGdCQUFNLFVBQVUsV0FBQTtBQUVoQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsOEJBQXFCO0FBQ25CLGdCQUFNLG1CQUFtQjtBQUV6QixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEscUJBQVksUUFBUTtBQUNsQixnQkFBTSw0QkFBNEIsa0JBQUEsUUFBMEIsZUFDdEQsWUFBWTtBQUVsQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsZUFBTSxNQUFNO0FBQ1YsZ0JBQUksVUFBVTtBQUVkLGdCQUFNLG1CQUFtQixLQUFLO0FBRTlCLGdCQUFJLGtCQUFrQjtBQUNwQixrQkFBTSxlQUFlLE1BQ2YsK0JBQStCLGFBQWE7QUFFbEQsa0JBQUksOEJBQThCO0FBQ2hDLDBCQUFVOzs7QUFJZCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsaUJBQVE7QUFDTixnQkFBTSxtQkE1Q1csa0JBNEN5QjtBQUUxQyxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLHVCQUFxQjtBQUNuQixnQkFBTSxtQkFBbUIsTUFDbkIsbUJBQW1CLFVBQUEsUUFBYSxxQkFuRHJCLG1CQW1ENEQ7QUFFN0UsbUJBQU87Ozs7YUFyRFU7TUFBeUIsVUFBQTs7OztBRVA5Qzs7Ozs7Ozs7ZUFTcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRnJCLFFBQVEsZ0JBQWtCLGFBQUEsZUFBbEI7QUFFTyxRQUFNLG1CQUFOLHlCQUFBLGNBQUE7Z0JBQU0sbUJBQUE7Z0NBQUE7bUNBQUE7OEJBQUE7OzttQkFBQSxtQkFBQTs7VUFDbkIsS0FBQTtpQkFBQSw4QkFBcUI7QUFDbkIsZ0JBQU0sbUJBQW1CO0FBRXpCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxlQUFNLE9BQU8sT0FBTyxVQUFVO0FBQzVCLGdCQUFJO0FBRUosZ0JBQUksbUJBQW1CO0FBRXZCLGdCQUFNLGFBQWEsTUFBTSxpQkFDbkIsMkJBQTJCLE1BQU07QUFFdkMsZ0JBQUksQ0FBQywwQkFBMEI7QUFDN0IsaUNBQW1CLGNBQUEsUUFBaUI7O0FBR3RDLHFCQUFVLHFCQUFxQjtBQUUvQixnQkFBSSxRQUFRO0FBQ1Ysb0JBQU0sS0FBSztBQUVYLGtCQUFJLGFBQWEsTUFBTTtBQUNyQix5QkFBUztBQUVULG9CQUFJLENBQUMsUUFBUTtBQUNYLHdCQUFNOzs7O0FBS1osZ0JBQUksQ0FBQyxRQUFRO0FBQ1gsb0JBQU0sVUFBVTs7QUFHbEIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsZ0JBQU0sU0FBUztBQUVmLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQkFBUTtBQUFFLG1CQUFPLElBOUNFOzs7O2FBQUE7TUFBeUIsVUFBQTs7OztBRVQ5Qzs7Ozs7Ozs7ZUFLcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLDBCQUFOLHlCQUFBLGlCQUFBO2dCQUFNLDBCQUFBO2dDQUFBOzBDQUFBOzhCQUFBOzs7bUJBQUEsMEJBQUE7O1VBQ25CLEtBQUE7aUJBQUEsc0JBQWEsV0FBVztBQUN0QixnQkFBTSxtQkFBbUIsSUFBSSxjQUFBO0FBRTdCLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQUEsUUFBZ0IsMEJBUDdELDBCQU9nSCxVQUFVOzs7O2FBUDFIO01BQWdDLGFBQUE7Ozs7QUVMckQ7Ozs7Ozs7O2VBU3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxnQkFBa0IsYUFBQSxlQUFsQjtBQUVPLFFBQU0sNkJBQU4seUJBQUEsWUFBQTtnQkFBTSw2QkFBQTtnQ0FBQTs2Q0FBQTs4QkFBQTtBQUVqQixZQUFNLFVBQVUsZUFDVixxQkFBcUIsSUFBSSxnQkFBQSxRQUFtQixVQUM1QyxRQUFRO1VBQ047O2lDQUdGOzthQVJXO01BQW1DLFlBQUE7Ozs7QUVUeEQ7Ozs7Ozs7O2VBUXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSx1QkFBTix5QkFBQSxNQUFBO2dCQUFNLHVCQUFBO2dDQUFBO3VDQUFBOzhCQUFBO0FBRWpCLFlBQU0sNkJBQTZCLElBQUksbUJBQUEsV0FDakMsT0FBTyxXQUFBLDBCQUNQLFlBQVksT0FDWixjQUFjO1VBQ1o7V0FFRixRQUFPLGtCQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVZuQjtNQUE2QixNQUFBOzs7O0FFUmxEOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxrQkFBTix5QkFBQSxpQkFBQTtnQkFBTSxrQkFBQTtnQ0FBQTtrQ0FBQTs4QkFBQTs7O21CQUFBLGtCQUFBLE1BQUE7O1VBQ1osS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBQSxRQUFnQiwwQkFEN0Qsa0JBQ3dHLFVBQVU7Ozs7YUFEbEg7TUFBd0IsYUFBQTs7OztBRUo3Qzs7Ozs7Ozs7ZUFVcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxXQUFhLGFBQUEsZUFBYjtBQUVPLFFBQU0sa0NBQU4seUJBQUEsWUFBQTtnQkFBTSxrQ0FBQTtnQ0FBQTtrREFBQTs4QkFBQTtBQUVqQixZQUFNLFVBQVUsVUFDVixtQkFBbUIsSUFBSSxjQUFBLFdBQ3ZCLHFCQUFxQixJQUFJLGdCQUFBLFFBQW1CLFVBQzVDLFFBQVE7VUFDTjtVQUNBOztpQ0FHRjs7YUFWVztNQUF3QyxZQUFBOzs7O0FFVjdEOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sd0JBQU4seUJBQUEsTUFBQTtnQkFBTSx3QkFBQTtnQ0FBQTt3Q0FBQTs4QkFBQTtBQUVqQixZQUFNLE9BQU8sV0FBQSwyQkFDUCxrQ0FBa0MsSUFBSSx1QkFBQSxXQUN0QyxZQUFZLE9BQ1osY0FBYztVQUNaO1dBRUYsUUFBTyxVQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVZuQjtNQUE4QixNQUFBOzs7O0FFUm5EOzs7Ozs7OztlQVVxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZyQixRQUFRLGtCQUFvQixhQUFBLGVBQXBCO0FBRU8sUUFBTSxrQ0FBTix5QkFBQSxZQUFBO2dCQUFNLGtDQUFBO2dDQUFBO2tEQUFBOzhCQUFBO0FBRWpCLFlBQU0sVUFBVSxpQkFDVixtQkFBbUIsSUFBSSxjQUFBLFdBQ3ZCLHFCQUFxQixJQUFJLGdCQUFBLFFBQW1CLFVBQzVDLFFBQVE7VUFDTjtVQUNBOztpQ0FHRjs7YUFWVztNQUF3QyxZQUFBOzs7O0FFVjdEOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sd0JBQU4seUJBQUEsTUFBQTtnQkFBTSx3QkFBQTtnQ0FBQTt3Q0FBQTs4QkFBQTtBQUVqQixZQUFNLE9BQU8sV0FBQSwyQkFDUCxrQ0FBa0MsSUFBSSx1QkFBQSxXQUN0QyxZQUFZLE9BQ1osY0FBYztVQUNaO1dBRUYsUUFBTyxVQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVZuQjtNQUE4QixNQUFBOzs7O0FFUm5EOzs7Ozs7OztlQU9xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLHdCQUFOLHlCQUFBLGNBQUE7Z0JBQU0sd0JBQUE7Z0NBQUE7c0NBQ1AsbUJBQWlCOzhCQURWOzs7QUFJakIsY0FBSyxvQkFBb0I7OzttQkFKUix3QkFBQTs7VUFPbkIsS0FBQTtpQkFBQSxlQUFNLE9BQU8sT0FBTyxVQUFVO0FBQzVCLGdCQUFJO0FBRUosZ0JBQUksZUFBZTtBQUVuQixnQkFBTSxhQUFhLE1BQU0saUJBQ3JCLHVCQUF1QixNQUFNLDJCQUNoQyxtQkFBbUI7QUFFcEIsZ0JBQUkscUJBQXFCLE1BQU07QUFDN0Isa0JBQU0sVUFBVSxpQkFBaUIsY0FDM0IsVUFBVSxRQUFRLE1BQU0sS0FBSztBQUVuQyxrQkFBSSxZQUFZLE1BQU07QUFDcEIsb0JBQU0sYUFBYSxJQUFBLE9BQUEsT0FBTTtBQUV6QixvQkFBSSxlQUFlLFNBQVM7QUFDMUIsaUNBQWUsV0FBQSxRQUFhLHFCQUFxQjs7OztBQUt2RCxxQkFBVSxpQkFBaUI7QUFFM0IsZ0JBQUksUUFBUTtBQUNWLG9CQUFNLEtBQUs7QUFFWCxrQkFBSSxhQUFhLE1BQU07QUFDckIseUJBQVM7QUFFVCxvQkFBSSxDQUFDLFFBQVE7QUFDWCx3QkFBTTs7OztBQUtaLGdCQUFJLENBQUMsUUFBUTtBQUNYLG9CQUFNLFVBQVU7O0FBR2xCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLDBCQUEwQixLQUFLLGtCQUFrQixZQUNuRCxTQUFTO0FBRWIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRO0FBQUUsbUJBQU8sSUF6REUsdUJBeUR3QixLQUFLOzs7O2FBekQ3QjtNQUE4QixVQUFBOzs7O0FFUG5EOzs7Ozs7OztlQU9xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSwyQkFBTix5QkFBQSxpQkFBQTtnQkFBTSwyQkFBQTtnQ0FBQTsyQ0FBQTs4QkFBQTs7O0FBQ25CLHdCQUFBLHVCQUFBLFFBQUEscUJBQW9COzs7bUJBREQsMkJBQUE7O1VBR25CLEtBQUE7aUJBQUEsc0JBQWEsV0FBVztBQUN0QixnQkFBTSxvQkFBb0IsS0FBSyx3QkFDekIsd0JBQXdCLElBQUksbUJBQUEsUUFBc0I7QUFFeEQsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGdDQUF1QjtBQUNyQixnQkFBTSxhQUFhLEtBQUssaUJBQ2xCLGlCQUFpQixJQUFBLE9BQUEsT0FBTSxhQUN2QixlQUFlLGdCQUNmLHNCQUFzQixhQUFhLGNBQ25DLFVBQVUsb0JBQW9CLE1BQU0sS0FBSyxvQkFDekMsY0FBYyxJQUFBLE9BQUEsUUFBTyxVQUNyQixVQUFVLGFBQ1Ysb0JBQW9CLElBQUksT0FBTztBQUVyQyxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxhQUFBLFFBQWdCLDBCQXZCN0QsMkJBdUJpSCxVQUFVOzs7O2FBdkIzSDtNQUFpQyxhQUFBOzs7O0FFUHREOzs7Ozs7OztlQVlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSx3QkFBMEIsYUFBQSxNQUExQjtBQUVPLFFBQU0sd0JBQU4seUJBQUEsTUFBQTtnQkFBTSx3QkFBQTtnQ0FBQTt3Q0FBQTs4QkFBQTtBQUVqQixZQUFNLHdDQUF3Qyx1QkFDeEMsa0RBQWtELElBQUksc0JBQUEsUUFBK0Isd0NBQ3JGLE9BQU8sV0FBQSwyQkFDUCxZQUFZLE9BQ1osY0FBYztVQUNaO1dBRUYsUUFBTyxtQkFBQTtpQ0FFUCxNQUFNLFdBQVcsYUFBYTs7YUFYbkI7TUFBOEIsTUFBQTs7OztBRVpuRDs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sb0JBQU4seUJBQUEsaUJBQUE7Z0JBQU0sb0JBQUE7Z0NBQUE7b0NBQUE7OEJBQUE7OzttQkFBQSxvQkFBQSxNQUFBOztVQUNaLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQUEsUUFBZ0IsMEJBRDdELG9CQUMwRyxVQUFVOzs7O2FBRHBIO01BQTBCLGFBQUE7Ozs7QUVKL0M7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLDJCQUFOLHlCQUFBLFlBQUE7Z0JBQU0sMkJBQUE7Z0NBQUE7eUNBQ1AsdUJBQXFCOzhCQURkO0FBRWpCLFlBQU0sVUFBVSx1QkFDVixtQkFBbUIsSUFBSSxjQUFBLFdBQ3ZCLHFCQUFxQixJQUFJLGdCQUFBLFFBQW1CLFVBQzVDLFFBQVE7VUFDTjtVQUNBOztpQ0FHRjs7YUFWVztNQUFpQyxZQUFBOzs7O0FFTnREOzs7Ozs7OztlQVlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxlQUFpQixhQUFBLGVBQWpCO0FBRU8sUUFBTSx5QkFBTix5QkFBQSxNQUFBO2dCQUFNLHlCQUFBO2dDQUFBO3lDQUFBOzhCQUFBO0FBRWpCLFlBQU0sT0FBTyxXQUFBLDRCQUNQLDBDQUEwQyxjQUMxQyxtQ0FBbUMsSUFBSSxnQkFBQSxRQUF5QiwwQ0FDaEUsWUFBWSxPQUNaLGNBQWM7VUFDWjtXQUVGLFFBQU8sWUFBQTtpQ0FFUCxNQUFNLFdBQVcsYUFBYTs7YUFYbkI7TUFBK0IsTUFBQTs7OztBRVpwRDs7Ozs7Ozs7ZUFZcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRnJCLFFBQVEsT0FBUyxhQUFBLGVBQVQ7QUFFTyxRQUFNLDBCQUFOLHlCQUFBLE1BQUE7Z0JBQU0sMEJBQUE7Z0NBQUE7MENBQUE7OEJBQUE7QUFFakIsWUFBTSxPQUFPLFdBQUEsNkJBQ1AsMkNBQTJDLE1BQzNDLG9DQUFvQyxJQUFJLGdCQUFBLFFBQXlCLDJDQUNqRSxZQUFZLE9BQ1osY0FBYztVQUNaO1dBRUYsUUFBTyxZQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVhuQjtNQUFnQyxNQUFBOzs7O0FFWnJEOzs7Ozs7OztlQVlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxXQUFhLGFBQUEsZUFBYjtBQUVPLFFBQU0sMkJBQU4seUJBQUEsTUFBQTtnQkFBTSwyQkFBQTtnQ0FBQTsyQ0FBQTs4QkFBQTtBQUVqQixZQUFNLE9BQU8sV0FBQSw4QkFDUCw0Q0FBNEMsVUFDNUMscUNBQXFDLElBQUksZ0JBQUEsUUFBeUIsNENBQ2xFLFlBQVksT0FDWixjQUFjO1VBQ1o7V0FFRixRQUFPLFlBQUE7aUNBRVAsTUFBTSxXQUFXLGFBQWE7O2FBWG5CO01BQWlDLE1BQUE7Ozs7QUVadEQ7Ozs7Ozs7O2VBT3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLDhCQUFOLHlCQUFBLGlCQUFBO2dCQUFNLDhCQUFBO2dDQUFBOzhDQUFBOzhCQUFBOzs7QUFDbkIsd0JBQUEsdUJBQUEsUUFBQSxxQkFBb0I7OzttQkFERCw4QkFBQTs7VUFHbkIsS0FBQTtpQkFBQSxzQkFBYSxXQUFXO0FBQ3RCLGdCQUFNLHVCQUF1QixLQUFLLDJCQUM1QiwyQkFBMkIsSUFBSSxzQkFBQSxRQUF5QjtBQUU5RCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsbUNBQTBCO0FBQ3hCLGdCQUFNLGFBQWEsS0FBSyxpQkFDbEIsaUJBQWlCLElBQUEsT0FBQSxPQUFNLGFBQ3ZCLGVBQWUsZ0JBQ2Ysc0JBQXNCLGFBQWEsY0FDbkMsVUFBVSxvQkFBb0IsTUFBTSxLQUFLLG9CQUN6QyxjQUFjLElBQUEsT0FBQSxRQUFPLFVBQ3JCLHVCQUF1QjtBQUU3QixtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxhQUFBLFFBQWdCLDBCQXRCN0QsOEJBc0JvSCxVQUFVOzs7O2FBdEI5SDtNQUFvQyxhQUFBO0FBeUJ6RCxXQUFPLFVBQVU7Ozs7QUNoQ2pCOzs7Ozs7OztlQVlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxXQUFhLGFBQUEsTUFBYjtBQUVPLFFBQU0sMkJBQU4seUJBQUEsTUFBQTtnQkFBTSwyQkFBQTtnQ0FBQTsyQ0FBQTs4QkFBQTtBQUVqQixZQUFNLDJCQUEyQixVQUMzQixxQ0FBcUMsSUFBSSx1QkFBQSxRQUErQiwyQkFDeEUsT0FBTyxXQUFBLDhCQUNQLFlBQVksT0FDWixjQUFjO1VBQ1o7V0FFRixRQUFPLHNCQUFBO2lDQUVQLE1BQU0sV0FBVyxhQUFhOzthQVhuQjtNQUFpQyxNQUFBOzs7O0FFWnREOzs7Ozs7Ozs7Ozs7O01BUWdCLGVBQWEsV0FBQTtlQUFiOztNQW9CQSxrQkFBZ0IsV0FBQTtlQUFoQjs7TUFZQSxvQkFBa0IsV0FBQTtlQUFsQjs7TUFPQSw4QkFBNEIsV0FBQTtlQUE1Qjs7TUFpQkEsb0NBQWtDLFdBQUE7ZUFBbEM7O01BZ0JoQixTQU1FLFdBQUE7ZUFORjs7Ozs7QUE1RUEsUUFBUSxRQUFrQixXQUFBLGVBQWxCO0FBQVIsUUFBZSxTQUFXLFdBQUEsZUFBWDtBQUlSLDJCQUF1QixPQUFPLFdBQVc7QUFDOUMsVUFBTSx3QkFBd0IsTUFBTSxPQUFPLFNBQUMsd0JBQXVCLE1BQVM7QUFDdEUsWUFBTSxXQUFXLEtBQUssV0FDaEIsaUJBQWlCLFNBQVM7QUFFaEMsaUNBQXdCLEtBQUssSUFBSSx3QkFBdUI7QUFFeEQsZUFBTztTQUNOLElBQ0gsY0FBYyxNQUFNLE9BQU8sU0FBQyxjQUFhLE1BQVM7QUFDaEQsWUFBTSxhQUFhLEtBQUssU0FBUyx1QkFBdUI7QUFFeEQsd0JBQWU7QUFFZixlQUFPO1NBQ04sV0FBQSxjQUFjLFFBQVEsU0FBUyxXQUFBO0FBRXRDLGFBQU87O0FBR0YsOEJBQTBCLE9BQU87QUFDdEMsVUFBTSxVQUFVO0FBRWhCLFlBQU0sUUFBUSxTQUFDLE1BQVM7QUFDdEIsWUFBTSxXQUFXLEtBQUs7QUFFdEIsZ0JBQVEsWUFBWTs7QUFHdEIsYUFBTzs7QUFHRixnQ0FBNEIsT0FBTztBQUN4QyxVQUFNLFlBQVksTUFBTSxRQUNsQixZQUFZO0FBRWxCLGFBQU87O0FBR0YsMENBQXNDLFdBQVcsU0FBUztBQUMvRCxVQUFNLFFBQVEsT0FBTyxPQUFPLFVBQ3RCLGdCQUFnQixVQUFVO0FBRWhDLGFBQU8sT0FBTyxTQUFDLE1BQVM7QUFDdEIsWUFBTSxXQUFXLEtBQUs7QUFFdEIsWUFBSSxhQUFhLGVBQWU7QUFDOUIsaUJBQU87OztBQUlYLFlBQU0sUUFBUTtBQUVkLGFBQU87O0FBR0YsZ0RBQTRDLE9BQU8sZUFBZTtBQUN2RSxVQUFJLFlBQVksTUFBTSxLQUFLLFNBQUMsTUFBUztBQUNuQyxZQUFNLFdBQVcsS0FBSztBQUV0QixZQUFJLGFBQWEsZUFBZTtBQUM5QixpQkFBTzs7WUFFTDtBQUVOLFVBQUksY0FBYyxNQUFNO0FBQ3RCLG9CQUFZLG1CQUFtQjs7QUFHakMsYUFBTzs7UUFHVCxXQUFlO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTs7Ozs7QUNyRkY7Ozs7Ozs7O2VBaUNxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxZQUFOLDJCQUFBOzBCQUNELFdBQVcsU0FBTzs4QkFEWDtBQUVqQixhQUFLLFlBQVk7QUFDakIsYUFBSyxVQUFVOzttQkFIRSxZQUFBOztVQU1uQixLQUFBO2lCQUFBLHdCQUFlO0FBQ2IsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsc0JBQWE7QUFDWCxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxlQUFNLFFBQStCO2dCQUF2QixPQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBTyxLQUFLO0FBQ3hCLGdCQUFNLFFBQVEsT0FBQSxRQUFNLHFCQUFxQixRQUFRLEtBQUssVUFDaEQsV0FBVyxNQUNYLFdBQVcsS0FBSyxNQUFNLE9BQU8sV0FDN0IsT0FBTztBQUViLG1CQUFPOzs7O1VBR1YsS0FBQTtpQkFBQSx5QkFBZ0IsUUFBUTtBQUN0QixnQkFBSTtBQUVILGdCQUFNLE9BQU8sS0FBSyxNQUFNO0FBRXhCLGdCQUFJLFNBQVMsTUFBTTtBQUNqQixvQkFBTSxJQUFJLE1BQU87O0FBR25CLG9CQUFRLEtBQUssY0FBYyxNQUFBO0FBRTNCLGdCQUFNLGNBQWMsTUFBTTtBQUUxQixnQkFBSSxnQkFBZ0IsR0FBRztBQUNyQixvQkFBTSxJQUFJLE1BQU87O0FBR25CLG1CQUFPOzs7OztVQUtGLEtBQUE7aUJBQVAsdUJBQXFCO0FBQ25CLGdCQUFNLFdBQVcsSUFBSSxNQUFBLFdBQ2YsV0FBVyxJQUFJLE1BQUEsV0FDZixXQUFXLElBQUksT0FBQSxXQUNmLFlBQVksSUFBSSxPQUFBLFdBQ2hCLGNBQWMsSUFBSSxTQUFBLFdBQ2xCLGVBQWUsSUFBSSxVQUFBLFdBQ25CLGVBQWUsSUFBSSxVQUFBLFdBQ25CLGVBQWUsSUFBSSxVQUFBLFdBQ25CLGdCQUFnQixJQUFJLFdBQUEsV0FDcEIsaUJBQWlCLElBQUksWUFBQSxXQUNyQixpQkFBaUIsSUFBSSxZQUFBLFdBQ3JCLGtCQUFrQixJQUFJLGFBQUEsV0FDdEIsbUJBQW1CLElBQUksY0FBQSxXQUN2QixvQkFBb0IsSUFBSSxlQUFBLFdBQ3hCLHFCQUFxQixJQUFJLGdCQUFBLFdBQ3pCLHNCQUFzQixJQUFJLGlCQUFBLFdBQzFCLHNCQUFzQixJQUFJLGlCQUFBLFdBQzFCLHVCQUF1QixJQUFJLGtCQUFBLFdBQzNCLHdCQUF3QixJQUFJLG1CQUFBLFdBQzVCLHdCQUF3QixJQUFJLG1CQUFBLFdBQzVCLHdCQUF3QixJQUFJLG1CQUFBLFdBQzVCLHlCQUF5QixJQUFJLG9CQUFBLFdBQzdCLDBCQUEwQixJQUFJLHFCQUFBLFdBQzlCLDJCQUEyQixJQUFJLHNCQUFBLFdBQy9CLDJCQUEyQixJQUFJLHNCQUFBO0FBRXJDLGdCQUFJLFFBQVE7Y0FDVjtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTs7QUFHRixnQkFBTSxZQUFZLElBQUEsT0FBQSxvQkFBbUIsUUFDL0IsVUFBVSxJQUFBLE9BQUEsa0JBQWlCLFFBQzNCLFlBQVksSUF0R0QsV0FzR2UsV0FBVztBQUUzQyxtQkFBTzs7OzthQXhHVTs7QUEyQ25CLG9CQTNDbUIsV0EyQ1osT0FBTSxLQUFBOzs7O0FFNUVmOzs7OzttQ0FnQ0EsV0FBQTs7O2VBQUE7OztBQTlCQSxRQUFNLE1BQU87UUE4QmIsV0FBZTs7OztBQ2hDZjs7Ozs7Ozs7Ozs7OztNQVdnQixjQUFZLFdBQUE7ZUFBWjs7TUFPQSxpQkFBZSxXQUFBO2VBQWY7O01BUUEsaUNBQStCLFdBQUE7ZUFBL0I7O01BUWhCLFNBSUUsV0FBQTtlQUpGOzs7Ozs7Ozs7OztBQTFCQSxRQUFNLFdBQVcsYUFBQSxTQUFTO0FBQTFCLFFBQ00sWUFBWSxRQUFBLFFBQVU7QUFFckIsMEJBQXNCLEtBQUs7QUFDaEMsVUFBTSxTQUFTLFNBQVMsY0FBYyxNQUNoQyxRQUFRLFVBQVUsZ0JBQWdCO0FBRXhDLGFBQU87O0FBR0YsNkJBQXlCLE9BQU8sT0FBTztBQUM1QyxVQUFNLFlBQVksSUFBQSxPQUFBLG9CQUFtQixRQUMvQixVQUFVLElBQUEsT0FBQSxrQkFBaUIsUUFDM0IsU0FBUyxJQUFJLE1BQU0sV0FBVztBQUVwQyxhQUFPOztBQUdGLDZDQUF5QyxPQUFPLE9BQU8sZUFBZTtBQUMzRSxVQUFNLFlBQVksSUFBQSxPQUFBLG9DQUFtQyxPQUFPLGdCQUN0RCxVQUFVLElBQUEsT0FBQSxrQkFBaUIsUUFDM0IsU0FBUyxJQUFJLE1BQU0sV0FBVztBQUVwQyxhQUFPOztRQUdULFdBQWU7TUFDYjtNQUNBO01BQ0E7Ozs7O0FDckNGOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGVBQU4sMkJBQUE7NkJBQ0QsV0FBVyxTQUFPOzhCQURYO0FBRWpCLGFBQUssWUFBWTtBQUNqQixhQUFLLFVBQVU7O21CQUhFLGVBQUE7O1VBTW5CLEtBQUE7aUJBQUEsd0JBQWU7QUFDYixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxzQkFBYTtBQUNYLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGVBQU0sUUFBK0I7Z0JBQXZCLE9BQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFPLEtBQUs7QUFDeEIsZ0JBQU0sUUFBUSxPQUFBLFFBQU0scUJBQXFCLFFBQVEsS0FBSyxVQUNoRCxXQUFXLE1BQ1gsV0FBVyxLQUFLLE1BQU0sT0FBTyxXQUM3QixPQUFPO0FBRWIsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTztBQUN4QixnQkFBUSxNQUFRLE1BQVIsS0FDRixRQUFRLElBQUEsUUFBQSxjQUFhLE1BQ3JCLFNBQVMsSUFBQSxRQUFBLGlCQUFnQixPQUFPO0FBRXRDLG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCxpQkFBZSxPQUFPLEtBQUs7QUFDekIsZ0JBQU0sUUFBUSxJQUFBLFFBQUEsY0FBYSxNQUNyQixTQUFTLElBQUEsUUFBQSxpQkFBZ0IsT0FBTztBQUV0QyxtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAsbUJBQWlCLE9BQU8sT0FBTztBQUM3QixnQkFBTSxTQUFTLElBQUEsUUFBQSxpQkFBZ0IsT0FBTztBQUV0QyxtQkFBTzs7OzthQXpDVTs7Ozs7QUVOckI7Ozs7Ozs7O2VBS3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sY0FBTix5QkFBQSxjQUFBO2dCQUFNLGNBQUE7Z0NBQUE7OEJBQUE7OEJBQUE7OzttQkFBQSxjQUFBLE1BQUE7O1VBR1osS0FBQTtpQkFBUCx1QkFBcUI7QUFBRSxtQkFBTyxRQUFBLFFBQWEsWUFIeEI7Ozs7VUFLWixLQUFBO2lCQUFQLGlCQUFlLEtBQUs7QUFBRSxtQkFBTyxRQUFBLFFBQWEsUUFMdkIsY0FLNEM7Ozs7VUFFeEQsS0FBQTtpQkFBUCxtQkFBaUIsT0FBTztBQUFFLG1CQUFPLFFBQUEsUUFBYSxVQVAzQixjQU9rRDs7OzthQVBsRDtNQUFvQixRQUFBO0FBQ3ZDLG9CQURtQixhQUNaLE9BQU0sS0FBQTs7OztBRU5mOzs7OzttQ0FlQSxXQUFBOzs7ZUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFBQSxXQUFlO01BQ2IsYUFBQSxTQUFBO01BQ0EsY0FBQSxVQUFBO01BQ0EsZUFBQSxXQUFBO01BQ0Esb0JBQUEsZ0JBQUE7TUFDQSx1QkFBQSxtQkFBQTtNQUNBLDBCQUFBLHNCQUFBO01BQ0EsY0FBQSxVQUFBO01BQ0Esa0JBQUEsY0FBQTtNQUNBLHFCQUFBLGlCQUFBO01BQ0Esb0JBQUEsZ0JBQUE7TUFDQSxxQkFBQSxpQkFBQTtNQUNBLG1CQUFBLGVBQUE7Ozs7O0FDM0JGOzs7Ozs7Ozs7Ozs7O01BRW9CLFdBQVMsV0FBQTtlQUFULFFBQUE7O01BQ0EsYUFBVyxXQUFBO2VBQVgsU0FBQTs7TUFDQSxjQUFZLFdBQUE7ZUFBWixTQUFBOztNQUVBLGdCQUFjLFdBQUE7ZUFBZCxPQUFBOztNQUNBLGlCQUFlLFdBQUE7ZUFBZixTQUFBOztNQUVBLE1BQUksV0FBQTtlQUFKLE1BQUE7O01BQ0EsT0FBSyxXQUFBO2VBQUwsT0FBQTs7TUFDQSxXQUFTLFdBQUE7ZUFBVCxXQUFBOztNQUNBLFlBQVUsV0FBQTtlQUFWLFlBQUE7O01BQ0EsYUFBVyxXQUFBO2VBQVgsU0FBQTs7TUFDQSxjQUFZLFdBQUE7ZUFBWixVQUFBOztNQUNBLGlCQUFlLFdBQUE7ZUFBZixhQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZwQjs7Ozs7O0FBRUEsUUFBTSxNQUFPO21CQWtJRTs7Ozs7QUNwSWY7Ozs7OztBQUU2QixRQUFBLGdCQUFlO0FBRTVCLFFBQUEsT0FBTyx1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVSLFFBQU0sWUFBTix5QkFBQSxjQUFBOzs7NEJBQWU7Ozs7OztVQUdyQixLQUFBO2lCQUFQLHVCQUFxQjtBQUFFLG1CQUFPLGNBQVksYUFBQyxZQUFZOzs7O1VBRWhELEtBQUE7aUJBQVAsaUJBQWUsS0FBSztBQUFFLG1CQUFPLGNBQVksYUFBQyxRQUFRLFlBQVc7Ozs7VUFFdEQsS0FBQTtpQkFBUCxtQkFBaUIsT0FBTztBQUFFLG1CQUFPLGNBQVksYUFBQyxVQUFVLFlBQVc7Ozs7O01BUDlCLGNBQVk7QUFDakQsb0JBRG1CLFdBQ1osT0FBTSxLQUFHO3NCQURHOzs7O0FDTnJCOzs7Ozs7Ozs7Ozs7O01BSWUsT0FBSyxXQUFBO2VBQUw7O01BQU8sTUFBSSxXQUFBO2VBQUo7O01BQU0sUUFBTSxXQUFBO2VBQU47O01BQVEsT0FBSyxXQUFBO2VBQUw7O01BQU8sUUFBTSxXQUFBO2VBQU47O01BQVEsT0FBSyxXQUFBO2VBQUw7O01BRW5DLE1BQUksV0FBQTtlQUFKOztNQXFCQSxVQUFRLFdBQUE7ZUFBUjs7OztBQXZCVCxRQUFRLFFBQThDLFdBQUEsZUFBOUM7QUFBUixRQUFlLE9BQXVDLFdBQUEsZUFBdkM7QUFBZixRQUFxQixTQUFpQyxXQUFBLGVBQWpDO0FBQXJCLFFBQTZCLFFBQXlCLFdBQUEsZUFBekI7QUFBN0IsUUFBb0MsU0FBa0IsV0FBQSxlQUFsQjtBQUFwQyxRQUE0QyxRQUFVLFdBQUEsZUFBVjtBQUU1QyxrQkFBYyxPQUFPLFlBQVksVUFBVTtBQUNoRCxVQUFJLGFBQWEsR0FBRztBQUNsQixZQUFNLFNBQVMsTUFBTTtBQUVyQixxQkFBYSxTQUFTO0FBRXRCLG1CQUFXLFNBQVM7O0FBR3RCLFVBQUksYUFBYSxVQUFVO0FBQ3pCLFlBQU0sUUFBUSxXQUFXO0FBRXpCLGNBQU0sT0FBTzs7QUFHZixVQUFNLFNBQVEsR0FDUixjQUFjO0FBRXBCLFlBQU0sT0FBTyxRQUFPOztBQUdmLHNCQUFrQixPQUFvQjtBQUFiLGVBQUEsT0FBQSxVQUFBLFFBQUcsV0FBSCxJQUFBLE1BQUEsT0FBQSxJQUFBLE9BQUEsSUFBQSxJQUFBLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLGlCQUFILE9BQUEsS0FBQSxVQUFBOztBQUM5QixhQUFPLFNBQVMsS0FBSyxTQUFDLFNBQUE7ZUFBWSxNQUFNLFNBQVM7Ozs7OztBQzVCbkQ7Ozs7Ozs7O2VBUXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSw2QkFBK0IsV0FBQSxXQUEvQjtBQUVPLFFBQU0sU0FBTiwyQkFBQTt1QkFDRCxZQUFZLFVBQVUsUUFBTTs4QkFEckI7QUFFakIsYUFBSyxhQUFhO0FBQ2xCLGFBQUssV0FBVztBQUNoQixhQUFLLFNBQVM7O21CQUpHLFNBQUE7O1VBT25CLEtBQUE7aUJBQUEscUJBQVksT0FBTztBQUNqQixnQkFBSSxLQUFLLFFBQVE7QUFDZixrQkFBTSxjQUFjLE1BQU07QUFFMUIsa0JBQUksY0FBYyxHQUFHO0FBQ25CLGdCQUFBLElBQUEsT0FBQSxPQUFNOzttQkFFSDtBQUNMLGNBQUEsSUFBQSxPQUFBLE1BQUssT0FBTyxLQUFLLFlBQVksS0FBSzs7Ozs7O1VBSS9CLEtBQUE7aUJBQVAsOEJBQTRCLGtCQUFrQjtBQUM1QyxnQkFBSSxhQUFhLEdBQ2IsV0FBVyxVQUNYLFNBQVM7QUFFYixnQkFBSSxxQkFBcUIsTUFBTTtBQUM3QixrQkFBSSxxQkFBcUIsNEJBQTRCO0FBQ25ELHlCQUFTO3FCQUNKO0FBQ0wsb0JBQU0sU0FBUyxnQ0FDVCxVQUFVLGlCQUFpQixNQUFNLFNBQ2pDLGNBQWMsSUFBQSxPQUFBLFFBQU8sWUFBWSxNQUNqQyxhQUFhLElBQUEsT0FBQSxPQUFNLFlBQVksTUFDL0IsY0FBYyxJQUFBLE9BQUEsUUFBTyxZQUFZO0FBRXZDLG9CQUFJLGdCQUFnQixNQUFNO0FBQ3hCLCtCQUFhLFNBQVM7QUFFdEIsc0JBQUksZUFBZSxNQUFNO0FBQ3ZCLCtCQUFXOzs7QUFJZixvQkFBSSxnQkFBZ0IsTUFBTTtBQUN4Qiw2QkFBVyxTQUFTO0FBRXBCLHNCQUFJLGVBQWUsTUFBTTtBQUN2QixpQ0FBYTs7Ozs7QUFNckIsZ0JBQU0sU0FBUyxJQXBERSxRQW9EUyxZQUFZLFVBQVU7QUFFaEQsbUJBQU87Ozs7YUF0RFU7Ozs7O0FFUnJCOzs7Ozs7OztlQVVxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRnJCLFFBQVEsZ0JBQStELFdBQUEsV0FBL0Q7QUFBUixRQUF1QixxQkFBZ0QsV0FBQSxXQUFoRDtBQUF2QixRQUEyQywwQkFBNEIsV0FBQSxXQUE1QjtBQUU1QixRQUFNLFFBQU4sMkJBQUE7c0JBQ0QsT0FBTyxRQUFRLFVBQVcsV0FBVyxjQUFjLGlCQUFpQixtQkFBaUI7OEJBRDlFO0FBRWpCLGFBQUssUUFBUTtBQUNiLGFBQUssU0FBUztBQUNkLGFBQUssV0FBVztBQUNoQixhQUFLLFlBQVk7QUFDakIsYUFBSyxlQUFlO0FBQ3BCLGFBQUssa0JBQWtCO0FBQ3ZCLGFBQUssb0JBQW9COzttQkFSUixRQUFBOztVQVduQixLQUFBO2lCQUFBLGlCQUFRLE1BQW1EO2dCQUE3QyxRQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBUSxHQUFHLGVBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFlLEtBQUs7QUFDM0MsZ0JBQU0sUUFBUTtBQUVkLGlCQUFLO0FBRUwsaUJBQUssS0FBSyxNQUFNLE9BQU87QUFFdkIsaUJBQUssTUFBTSxPQUFPLE9BQU87QUFFekIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRO0FBQ04sWUFBQSxJQUFBLE9BQUEsT0FBTSxLQUFLOzs7O1VBR2IsS0FBQTtpQkFBQSxjQUFLLE1BQU0sT0FBTyxjQUFjOztBQUM5QixnQkFBSSxRQUFRLGNBQWM7QUFDeEI7O0FBR0YsZ0JBQU0sbUJBQW1CLEtBQUssa0JBQ3hCLHNCQUFzQixDQUFDO0FBRTdCLGdCQUFJO0FBRUosZ0JBQUksa0JBQWtCO0FBQ3BCLGtCQUFNLGVBQWUsTUFDZixPQUFPLGFBQWE7QUFFMUIsc0JBQVEsSUFBQSxPQUFBLFVBQVMsS0FBSyxPQUFPLE1BQU07O0FBR3JDLGdCQUFJLHFCQUFxQjtBQUN2QixrQkFBTSxrQkFBa0IsTUFDbEIsV0FBVyxnQkFBZ0I7QUFFakMsc0JBQVEsSUFBQSxPQUFBLFVBQVMsS0FBSyxXQUFXLFVBQVU7O0FBRzdDLGdCQUFJLE9BQU87QUFDVCxrQkFBTSxtQkFBbUI7QUFFekIsbUJBQUssa0JBQWtCLEtBQUs7O0FBRzlCLGdCQUFJLEtBQUssaUJBQWlCO0FBQ3hCLGtCQUFJLHFCQUFxQjtBQUN2QjtBQUVBLG9CQUFNLG1CQUFrQixNQUNsQixhQUFhLGlCQUFnQjtBQUVuQywyQkFBVyxRQUFRLFNBQUMsV0FBYztBQUNoQyx3QkFBSyxLQUFLLFdBQVcsT0FBTzs7Ozs7OztVQU1wQyxLQUFBO2lCQUFBLGVBQU0sT0FBTyxPQUFPLGNBQWM7O0FBQ2hDLGlCQUFLLE9BQU8sWUFBWSxLQUFLO0FBRTdCLGdCQUFJLEtBQUssYUFBYSxNQUFNO0FBQzFCLGNBQUEsSUFBQSxPQUFBLE1BQUssT0FBTyxLQUFLO21CQUNaO0FBQ0wsbUJBQUssa0JBQWtCLFFBQVEsU0FBQyxrQkFBcUI7QUFDbkQsb0JBQU0sa0NBQWtDLGlCQUFpQjtBQUV6RCxvQkFBSSxpQ0FBaUM7QUFDbkM7QUFFQSxzQkFBTSxrQkFBa0Isa0JBQ2xCLGFBQWEsZ0JBQWdCO0FBRW5DLHdCQUFLLFNBQVM7QUFFZCw2QkFBVyxRQUFRLFNBQUMsV0FBYztBQUNoQywwQkFBSyxTQUFTLEtBQUssV0FBVyxPQUFPOztBQUd2Qyx3QkFBSyxTQUFTLE1BQU0sT0FBTyxPQUFPOzs7Ozs7OztVQU1uQyxLQUFBO2lCQUFQLHdCQUFzQixZQUFxQztnQkFBekIsZUFBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQWU7QUFDL0MsZ0JBQUksUUFBUTtBQUVaLGdCQUFJLGVBQWUsTUFBTTtBQUN2QixrQkFBTSxTQUFTLDRDQUNULFVBQVUsV0FBVyxNQUFNLFNBQzNCLGNBQWMsSUFBQSxPQUFBLFFBQU8sVUFDckIsYUFBYSxJQUFBLE9BQUEsT0FBTSxVQUNuQixjQUFjLElBQUEsT0FBQSxRQUFPLFVBQ3JCLGFBQWEsSUFBQSxPQUFBLE9BQU0sVUFDbkIsWUFBWSxXQUFXLE1BQU0sZ0JBQzdCLGdCQUFnQixjQUFjLE1BQzlCLG1CQUFtQixlQUFlLE1BQ2xDLFFBQVEsbUJBQW1CLFlBQzNCLFNBQVMsUUFBQSxRQUFPLHFCQUFxQixtQkFDckMsV0FqSFMsT0FpSFEsZUFBZSxnQkFDaEMsWUFBWSx1QkFBdUIsWUFDbkMsa0JBQW1CLGdCQUFnQix5QkFDbkMsb0JBQW9CO0FBRTFCLHNCQUFRLElBdEhPLE9Bc0hHLE9BQU8sUUFBUSxVQUFVLFdBQVcsY0FBYyxpQkFBaUI7O0FBR3ZGLG1CQUFPOzs7O2FBekhVOztBQTZIckIsZ0NBQTRCLFdBQVc7QUFDckMsVUFBTSxRQUFRO0FBRWQsZ0JBQVUsUUFBUSxTQUFDLFVBQWE7QUFDOUIsWUFBTSx1QkFBdUIsdUJBQXVCO0FBRXBELFlBQUksc0JBQXNCO0FBQ3hCLGNBQU0sT0FBTyxTQUFTLFVBQVU7QUFFaEMsZ0JBQU0sS0FBSzs7O0FBSWYsYUFBTzs7QUFHVCxvQ0FBZ0MsV0FBVztBQUN6QyxVQUFNLFlBQVk7QUFFbEIsZ0JBQVUsUUFBUSxTQUFDLFVBQWE7QUFDOUIsWUFBTSwyQkFBMkIsMkJBQTJCO0FBRTVELFlBQUksMEJBQTBCO0FBQzVCLGNBQU0sV0FBVztBQUVqQixvQkFBVSxLQUFLOzs7QUFJbkIsYUFBTzs7QUFHVCxvQ0FBZ0MsVUFBVTtBQUFFLGFBQU8sS0FBSyxLQUFLOztBQUU3RCx3Q0FBb0MsVUFBVTtBQUFFLGFBQU8sUUFBUSxLQUFLOzs7OztBQ3pLcEU7Ozs7Ozs7Ozs7Ozs7TUFJZ0IsY0FBWSxXQUFBO2VBQVo7O01BZ0JBLGdCQUFjLFdBQUE7ZUFBZDs7TUFvQkEsbUJBQWlCLFdBQUE7ZUFBakI7O01BT2hCLFNBSUUsV0FBQTtlQUpGOzs7Ozs7Ozs7Ozs7Ozs7O0FBM0NPLDBCQUFzQixNQUFNLE9BQW1CO1VBQVosUUFBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQVE7QUFDaEQsVUFBUSxZQUFKLE1BQWdCLFFBQU87QUFDekIsY0FBTSxLQUFLOztBQUdiLFVBQU0sc0JBQXNCLEtBQUs7QUFFakMsVUFBSSxxQkFBcUI7QUFDdkIsWUFBTSxhQUFhLEtBQUs7QUFFeEIsbUJBQVcsUUFBUSxTQUFDLFdBQUE7aUJBQWMsYUFBYSxXQUFXLE9BQU87OztBQUduRSxhQUFPOztBQUdGLDRCQUF3QixNQUFNLFNBQXFCO1VBQVosUUFBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQVE7QUFDcEQsY0FBUSxLQUFLLFNBQUMsT0FBVTtBQUN0QixZQUFRLFlBQUosTUFBZ0IsUUFBTztBQUN6QixnQkFBTSxLQUFLO0FBRVgsaUJBQU87OztBQUlYLFVBQU0sc0JBQXNCLEtBQUs7QUFFakMsVUFBSSxxQkFBcUI7QUFDdkIsWUFBTSxhQUFhLEtBQUs7QUFFeEIsbUJBQVcsUUFBUSxTQUFDLFdBQUE7aUJBQWMsZUFBZSxXQUFXLFNBQVM7OztBQUd2RSxhQUFPOztBQUdGLCtCQUEyQixNQUFNLFlBQVksY0FBYztBQUNoRSxVQUFNLFFBQVEsT0FBQSxRQUFNLGVBQWUsWUFBWSxlQUN6QyxRQUFRLE1BQU0sUUFBUTtBQUU1QixhQUFPOztRQUdULFdBQWU7TUFDYjtNQUNBO01BQ0E7Ozs7O0FDbERGOzs7Ozs7Ozs7Ozs7O01BRW9CLE9BQUssV0FBQTtlQUFMLE9BQUE7O01BQ0EsZ0JBQWMsV0FBQTtlQUFkLFFBQUE7Ozs7Ozs7Ozs7Ozs7QUNIcEI7Ozs7OztBQUVPLFFBQU0sT0FBTztZQUFQLE9BQUE7QUFDTixRQUFNLFFBQVE7WUFBUixRQUFBO0FBQ04sUUFBTSxhQUFhO1lBQWIsYUFBQTtBQUNOLFFBQU0sYUFBYTtZQUFiLGFBQUE7QUFDTixRQUFNLGNBQWM7WUFBZCxjQUFBO0FBQ04sUUFBTSxlQUFlO1lBQWYsZUFBQTtBQUNOLFFBQU0sb0JBQW9CO1lBQXBCLG9CQUFBOzs7O0FDUmI7Ozs7O1lBUWdCLGdDQUFBO0FBTmUsUUFBQSxhQUFXO0FBRWIsUUFBQSxhQUFjO0FBRTNDLFFBQVEsUUFBVSxXQUFjLGVBQXhCO0FBRUQsMkNBQXVDLE9BQU8sTUFBTSxRQUFRO0FBQ2pFLFVBQUksVUFBVTtBQUVkLFVBQU0sUUFBUSxNQUFNLFFBQVEsT0FDdEIsY0FBYyxNQUFNO0FBRTFCLFVBQUksY0FBYyxHQUFHO0FBQ25CLFlBQU0sWUFBWSxNQUFNO0FBRXhCLGVBQU87QUFFUCxrQkFBVSx5QkFBeUIsTUFBTTs7QUFHM0MsYUFBTzs7QUFHVCxzQ0FBa0MsTUFBTSxRQUFRO0FBQzlDLFVBQU0sd0JBQXdCLEtBQUssNEJBQzdCLHVCQUF1QixLQUFLLDJCQUM1QixhQUFhLHVCQUNiLFlBQVksc0JBQ1osa0JBQWtCLE9BQU8sUUFBUSxhQUNqQyxpQkFBaUIsT0FBTyxRQUFRO0FBRXRDLFVBQUksVUFBVSxXQUFZO0FBRTFCLGVBQVMsUUFBUSxpQkFBaUIsU0FBUyxnQkFBZ0IsU0FBUztBQUNsRSxZQUFNLFFBQVEsT0FBTyxRQUNmLGVBQWUsTUFBTTtBQUUzQixtQkFBVzs7QUFHYixhQUFPOzs7OztBQzFDVDs7Ozs7O0FBRXNCLFFBQUEsWUFBVztBQUVKLFFBQUEsYUFBYztBQUNHLFFBQUEsV0FBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXBFLFFBQU0sZ0JBQWdCLFVBQUssTUFBQyxlQUFlO0FBQTNDLFFBQ00sZ0JBQWdCLFVBQUssTUFBQyxlQUFlO0FBRDNDLFFBRU0sa0JBQWtCLFVBQUssTUFBQyxlQUFlO0FBRTlCLFFBQU0sY0FBTiwyQkFBQTs0QkFDRCxVQUFVLFlBQVksVUFBUTs7QUFDeEMsYUFBSyxXQUFXO0FBQ2hCLGFBQUssYUFBYTtBQUNsQixhQUFLLFdBQVc7Ozs7VUFHbEIsS0FBQTtpQkFBQSx1QkFBYztBQUNaLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHVCQUFjO0FBQ1osbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsc0JBQWEsY0FBYzs7QUFDekIsZ0JBQU0sVUFBVSxhQUFhLEtBQUssU0FBQyxhQUFnQjtBQUNqRCxrQkFBTSxXQUFXLFlBQVksZUFDdkIsa0JBQW1CLGFBQWEsTUFBSztBQUUzQyxrQkFBSSxpQkFBaUI7QUFDbkIsdUJBQU87OztBQUlYLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxlQUFNLFFBQVEsTUFBTTtBQUNsQixnQkFBTSxNQUFNLE9BQ0MsR0FBVyxPQUFULFFBQTJCLE9BQWxCLEtBQUssVUFBUyxNQUFzQixPQUFsQixLQUFLLFlBQTJCLE9BQWQsS0FBSyxVQUFTLE9BQzNELEdBQVcsT0FBVCxRQUEyQixPQUFsQixLQUFLLFVBQVMsTUFBc0IsT0FBbEIsS0FBSyxZQUEyQixPQUFkLEtBQUssVUFBUztBQUU1RSxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLDJCQUF5QixNQUFNLFFBQVE7QUFDckMsZ0JBQU0sa0JBQWtCLElBQUEsVUFBMEQsOEJBQTVCLGVBQWUsTUFBTSxTQUNyRSxvQkFBb0IsSUFBQSxVQUE0RCw4QkFBOUIsaUJBQWlCLE1BQU0sU0FDekUsa0JBQWtCLElBQUEsVUFBMEQsOEJBQTVCLGVBQWUsTUFBTSxTQUNyRSxXQUFXLGlCQUNYLGFBQWEsbUJBQ2IsV0FBWSxvQkFBb0IsT0FDbkIsV0FBWSxlQUNWLElBQW1CLE9BQWhCLGtCQUNsQixjQUFjLElBQUksYUFBWSxVQUFVLFlBQVk7QUFFMUQsbUJBQU87Ozs7OztzQkFuRFU7Ozs7QUNYckI7Ozs7OztBQUVzQixRQUFBLFlBQVc7QUFFVCxRQUFBLGVBQWUsdUJBQUE7QUFFVixRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFM0MsUUFBTSxtQkFBbUIsVUFBSyxNQUFDLGVBQWU7QUFFL0IsUUFBTSxlQUFOLDJCQUFBOzZCQUNELE9BQUs7O0FBQ2YsYUFBSyxRQUFROzs7O1VBR2YsS0FBQTtpQkFBQSx5QkFBZ0IsVUFBVTtBQUN4QixnQkFBTSxTQUFTLEtBQUssTUFBTSxRQUNwQixhQUFhLEdBQ2IsWUFBWSxTQUFTO0FBRTNCLHFCQUFTLFFBQVEsWUFBWSxTQUFTLFdBQVcsU0FBUztBQUN4RCxrQkFBTSxjQUFjLEtBQUssTUFBTTtBQUUvQix1QkFBUyxhQUFhOzs7OztVQUkxQixLQUFBO2lCQUFBLDBCQUFpQixVQUFVO0FBQ3pCLGdCQUFNLFNBQVMsS0FBSyxNQUFNLFFBQ3BCLGFBQWEsR0FDYixZQUFZLFNBQVM7QUFFM0IscUJBQVMsUUFBUSxXQUFXLFNBQVMsWUFBWSxTQUFTO0FBQ3hELGtCQUFNLGNBQWMsS0FBSyxNQUFNO0FBRS9CLHVCQUFTLGFBQWE7Ozs7O1VBSTFCLEtBQUE7aUJBQUEsaUJBQVEsY0FBYzs7QUFDcEIseUJBQWEsaUJBQWlCLFNBQUMsYUFBZ0I7QUFDN0Msa0JBQU0sVUFBVSxZQUFZLGFBQWEsTUFBSztBQUU5QyxrQkFBSSxDQUFDLFNBQVM7QUFDWixzQkFBSyxNQUFNLFFBQVE7Ozs7OztVQUt6QixLQUFBO2lCQUFBLGVBQU0sV0FBVyxRQUFRO0FBQ3ZCLGdCQUFJLFdBQVcsUUFBVztBQUN4Qix1QkFBUztBQUVULDBCQUFZOztBQUdkLGdCQUFJLE1BQU0sV0FBWTtBQUV0QixnQkFBTSxTQUFTLEtBQUssTUFBTTtBQUUxQixnQkFBSSxTQUFTLEdBQUc7QUFDZCxrQkFBTSxZQUFZLFNBQVMsR0FDckIsbUJBQWtCLEtBQUssTUFBTSxPQUFPLFNBQUMsaUJBQWlCLGFBQWEsT0FBVTtBQUMzRSxvQkFBTSxPQUFRLFVBQVUsV0FDbEIsaUJBQWlCLFlBQVksTUFBTSxRQUFRO0FBRWpELG1DQUFtQjtBQUVuQix1QkFBTztpQkFDTixXQUFZO0FBRXJCLGtCQUFJLGNBQWMsTUFBTTtBQUN0QixzQkFBTTtxQkFDRDtBQUNMLHNCQUFPLElBQ2IsT0FEZ0IsV0FBVSxRQUNWLE9BQWhCLGtCQUFnQjs7O0FBT2QsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCwyQkFBeUIsTUFBTSxRQUFRO0FBQ3JDLGdCQUFNLG1CQUFtQixpQkFBaUIsUUFBUSxPQUM1QyxRQUFRLGlCQUFpQixJQUFJLFNBQUMsaUJBQW9CO0FBQ2hELGtCQUFNLFNBQU8saUJBQ1AsY0FBYyxhQUFXLFFBQUMsa0JBQWtCLFFBQU07QUFFeEQscUJBQU87Z0JBRVQsZUFBZSxJQUFJLGNBQWE7QUFFdEMsbUJBQU87Ozs7OztzQkFyRlU7Ozs7QUNWckI7Ozs7OztBQUVzQixRQUFBLFlBQVc7QUFFUixRQUFBLGdCQUFnQix1QkFBQTtBQUVaLFFBQUEsYUFBYztBQUNHLFFBQUEsV0FBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcEUsUUFBTSxpQkFBaUIsVUFBSyxNQUFDLGVBQWU7QUFFN0IsUUFBTSxVQUFOLDJCQUFBO3dCQUNELFdBQVcsY0FBWTs7QUFDakMsYUFBSyxZQUFZO0FBQ2pCLGFBQUssZUFBZTs7OztVQUd0QixLQUFBO2lCQUFBLHdCQUFlO0FBQ2IsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsMkJBQWtCO0FBQ2hCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGlCQUFRLFNBQVM7QUFDZixnQkFBTSxlQUFlLFFBQVE7QUFFN0IsaUJBQUssYUFBYSxRQUFROzs7O1VBRzVCLEtBQUE7aUJBQUEsNkJBQW9CLFVBQVU7O0FBQzVCLGdCQUFNLGtCQUFrQixTQUFTLEtBQUssU0FBQyxTQUFZO0FBQ2pELGtCQUFNLFlBQVksUUFBUSxnQkFDcEIsaUJBQWtCLGNBQWMsTUFBSyxXQUNyQyxnQkFBZ0I7QUFFdEIsa0JBQUksZUFBZTtBQUNqQix1QkFBTzs7a0JBRUw7QUFFTixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsZUFBTSxXQUFXLFFBQVE7QUFDdkIsZ0JBQUksTUFBTSxXQUFZO0FBRXRCLGdCQUFNLGtCQUFrQixLQUFLLGFBQWEsTUFBTyxLQUFXLE9BQVA7QUFFckQsZ0JBQUksb0JBQW9CLFdBQVksY0FBRTtBQUNuQyxvQkFBTyxHQUFZLE9BQVYsUUFBTyxLQUFlLE9BQVosV0FDeEIsT0FEb0MsS0FBSyxXQUFVLFFBRW5ELE9BREEsaUJBQWdCLE1BQ1QsT0FBUCxRQUFPOztBQUtMLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsMkJBQXlCLE1BQU0sUUFBUTtBQUNyQyxnQkFBTSxZQUFZLDJCQUEyQixNQUFNLFNBQzdDLGVBQWUsY0FBWSxRQUFDLGtCQUFrQixNQUFNLFNBQ3BELFFBQVEsSUFBSSxTQUFRLFdBQVc7QUFFckMsbUJBQU87Ozs7OztBQUlYLHdDQUFvQyxNQUFNLFFBQVE7QUFDaEQsVUFBTSx1QkFBdUIsSUFBQSxVQUEyRCw4QkFBN0IsZ0JBQWdCLE1BQU0sU0FDM0UsWUFBYSxHQUF1QixPQUFyQjtBQUVyQixhQUFPOztzQkEvRFk7Ozs7QUNYckI7Ozs7OztBQUVzQixRQUFBLFlBQVc7QUFFYixRQUFBLFdBQVcsdUJBQUE7QUFFRixRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFM0MsUUFBTSxlQUFlLFVBQUssTUFBQyxlQUFlO0FBRTNCLFFBQU0sV0FBTiwyQkFBQTt5QkFDRCxPQUFLOztBQUNmLGFBQUssUUFBUTs7OztVQUdmLEtBQUE7aUJBQUEsaUJBQVEsVUFBVTs7QUFDaEIscUJBQVMsUUFBUSxTQUFDLFNBQVk7QUFDNUIsa0JBQU0sa0JBQWtCLFFBQVEsb0JBQW9CLE1BQUs7QUFFeEQsa0NBQW9CLE9BQ25CLE1BQUssTUFBTSxRQUFRLFdBQ2pCLGdCQUFnQixRQUFROzs7OztVQUloQyxLQUFBO2lCQUFBLGlCQUFRLFVBQVU7QUFDaEIsaUJBQUssTUFBTSxRQUFROzs7O1VBR3JCLEtBQUE7aUJBQUEsZUFBTSxXQUFXLFFBQVE7QUFDdkIsZ0JBQU0sT0FBTSxLQUFLLE1BQU0sT0FBTyxTQUFDLEtBQUssU0FBWTtBQUM5QyxrQkFBTSxhQUFhLFFBQVEsTUFBTSxXQUFXO0FBRTVDLHFCQUFPO0FBRVAscUJBQU87ZUFDTixXQUFZO0FBRWYsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCwyQkFBeUIsTUFBTSxRQUFRO0FBQ3JDLGdCQUFNLGVBQWUsYUFBYSxRQUFRLE9BQ3BDLFFBQVEsYUFBYSxJQUFJLFNBQUMsYUFBZ0I7QUFDeEMsa0JBQU0sU0FBTyxhQUNQLFVBQVUsU0FBTyxRQUFDLGtCQUFrQixRQUFNO0FBRWhELHFCQUFPO2dCQUVULFdBQVcsSUFBSSxVQUFTO0FBRTlCLG1CQUFPOzs7Ozs7c0JBekNVOzs7O0FDVnJCOzs7Ozs7QUFFc0IsUUFBQSxZQUFXO0FBRVosUUFBQSxZQUFZLHVCQUFBO0FBQ1IsUUFBQSxnQkFBZ0IsdUJBQUE7QUFFRCxRQUFBLGFBQWM7QUFDUixRQUFBLFdBQXNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXBFLFFBQU0sb0JBQW9CLFVBQUssTUFBQyxlQUFlO0FBRWhDLFFBQU0sUUFBTiwyQkFBQTtzQkFDRCxjQUFjLGNBQWMsVUFBUTs7QUFDOUMsYUFBSyxlQUFlO0FBQ3BCLGFBQUssZUFBZTtBQUNwQixhQUFLLFdBQVc7Ozs7VUFHbEIsS0FBQTtpQkFBQSwyQkFBa0I7QUFDaEIsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsMkJBQWtCO0FBQ2hCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHVCQUFjO0FBQ1osbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsZUFBTSxXQUFXO0FBQ2YsZ0JBQUksTUFBTTtBQUVWLGdCQUFNLGNBQWMsS0FBSyxTQUFTLE1BQU0sV0FBVyxXQUFVLGFBQ3ZELGtCQUFrQixLQUFLLGFBQWEsTUFBTSxXQUFXLFdBQVc7QUFFdEUsZ0JBQUssZ0JBQWdCLFFBQVUsb0JBQW9CLE1BQU87QUFDeEQsb0JBQU8sVUFDWCxPQURvQixLQUFLLGNBQWEsUUFDcEIsT0FBbEIsaUJBQThCLE9BQVosYUFBWTs7QUFNNUIsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCwyQkFBeUIsTUFBTSxRQUFRO0FBQ3JDLGdCQUFNLGVBQWUsOEJBQThCLE1BQU0sU0FDbkQsZUFBZSxjQUFZLFFBQUMsa0JBQWtCLE1BQU0sU0FDcEQsV0FBVyxVQUFRLFFBQUMsa0JBQWtCLE1BQU0sU0FDNUMsUUFBUSxJQUFJLE9BQU0sY0FBYyxjQUFjO0FBRXBELG1CQUFPOzs7Ozs7QUFJWCwyQ0FBdUMsTUFBTSxRQUFRO0FBQ25ELFVBQU0sMEJBQTBCLElBQUEsVUFBOEQsOEJBQWhDLG1CQUFtQixNQUFNLFNBQ2pGLGVBQWdCLEdBQTBCLE9BQXhCO0FBRXhCLGFBQU87O3NCQWxEWTs7OztBQ1pyQjs7Ozs7O0FBRXNCLFFBQUEsWUFBVztBQUVmLFFBQUEsU0FBUyx1QkFBQTtBQUVFLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUzQyxRQUFNLGFBQWEsVUFBSyxNQUFDLGVBQWU7QUFFekIsUUFBTSxTQUFOLDJCQUFBO3VCQUNELE9BQUs7O0FBQ2YsYUFBSyxRQUFROzs7O1VBR2YsS0FBQTtpQkFBQSxpQkFBUSxRQUFROztBQUNkLG1CQUFPLFFBQVEsU0FBQyxPQUFVO0FBQ3hCLG9CQUFLLE1BQU0sUUFBUTs7Ozs7VUFJdkIsS0FBQTtpQkFBQSxpQkFBUSxVQUFVO0FBQ2hCLGlCQUFLLE1BQU0sUUFBUTs7OztVQUdyQixLQUFBO2lCQUFBLGVBQU0sV0FBVztBQUNmLGdCQUFNLE9BQU0sS0FBSyxNQUFNLE9BQU8sU0FBQyxLQUFLLE9BQVU7QUFDNUMsa0JBQU0sV0FBVyxNQUFNLE1BQU07QUFFN0IscUJBQU87QUFFUCxxQkFBTztlQUNOLFdBQVk7QUFFZixtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLDJCQUF5QixNQUFNLFFBQVE7QUFDckMsZ0JBQU0sYUFBYSxXQUFXLFFBQVEsT0FDaEMsUUFBUSxXQUFXLElBQUksU0FBQyxXQUFjO0FBQ3BDLGtCQUFNLFNBQU8sV0FDUCxRQUFRLE9BQUssUUFBQyxrQkFBa0IsUUFBTTtBQUU1QyxxQkFBTztnQkFFVCxTQUFTLElBQUksUUFBTztBQUUxQixtQkFBTzs7Ozs7O3NCQXJDVTs7OztBQ1ZyQjs7Ozs7O0FBRW1CLFFBQUEsVUFBZ0IsdUJBQUE7QUFDZCxRQUFBLFlBQWtCLHVCQUFBO0FBQ2QsUUFBQSxnQkFBc0IsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFaEMsUUFBTSxRQUFOLDJCQUFBO3NCQUNELGNBQWMsVUFBVSxRQUFNOztBQUN4QyxhQUFLLGVBQWU7QUFDcEIsYUFBSyxXQUFXO0FBQ2hCLGFBQUssU0FBUzs7OztVQUdoQixLQUFBO2lCQUFBLDJCQUFrQjtBQUNoQixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSx1QkFBYztBQUNaLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsa0JBQVEsWUFBWTtBQUNsQixnQkFBTSxlQUFlLFdBQVcsbUJBQzFCLFdBQVcsV0FBVyxlQUN0QixTQUFTLFdBQVc7QUFFMUIsaUJBQUssUUFBUSxjQUFjLFVBQVU7Ozs7VUFHdkMsS0FBQTtpQkFBQSxpQkFBUSxjQUFjLFVBQVUsUUFBUTtBQUN0QyxpQkFBSyxhQUFhLFFBQVE7QUFDMUIsaUJBQUssU0FBUyxRQUFRO0FBQ3RCLGlCQUFLLE9BQU8sUUFBUTs7OztVQUd0QixLQUFBO2lCQUFBLGVBQU0sV0FBVztBQUNmLGdCQUFNLGtCQUFrQixLQUFLLGFBQWEsTUFBTSxXQUFXLE9BQ3JELGNBQWMsS0FBSyxTQUFTLE1BQU0sV0FBVyxLQUM3QyxZQUFZLEtBQUssT0FBTyxNQUFNLFlBQzlCLE1BQU8sR0FBb0IsT0FBbEIsaUJBQWdDLE9BQWQsYUFBd0IsT0FBVjtBQUUvQyxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLDJCQUF5QixNQUFNLFFBQVE7QUFDckMsZ0JBQU0sZUFBZSxjQUFZLFFBQUMsa0JBQWtCLE1BQU0sU0FDcEQsV0FBVyxVQUFRLFFBQUMsa0JBQWtCLE1BQU0sU0FDNUMsU0FBUyxRQUFNLFFBQUMsa0JBQWtCLE1BQU0sU0FDeEMsUUFBUSxJQUFJLE9BQU0sY0FBYyxVQUFVO0FBRWhELG1CQUFPOzs7Ozs7c0JBaERVOzs7O0FDTnJCOzs7Ozs7QUFFa0IsUUFBQSxTQUFVLHVCQUFBO0FBQ1AsUUFBQSxTQUFjLHVCQUFBO0FBQ2IsUUFBQSxVQUFlLHVCQUFBO0FBRUssUUFBQSxhQUFjOzs7Ozs7QUFFeEQsUUFBTSxXQUFXLE9BQVEsUUFBQztBQUExQixRQUNNLFlBQVksUUFBUyxRQUFDO0FBRTVCLFFBQUksQ0FBQyxXQUFXLFVBQVU7QUFDeEIsaUJBQVcsV0FBVzs7QUFHeEIsUUFBUSxXQUFhLFdBQWI7QUFFUix5QkFBcUIsT0FBTztBQUMxQixVQUFNLGlCQUFpQixTQUFTLGNBQWMsV0FBSSxPQUM1QyxrQkFBa0IsU0FBUyxjQUFjLFdBQUssUUFDOUMsWUFBYSxlQUViLE9BQU47QUFFQSxhQUFPLE9BQU8saUJBQWlCO1FBQzdCOztBQUdGLHFCQUFlLFlBQVk7O0FBRzdCLDRCQUF3QjtBQUN0QixVQUFNLFlBQVkscUJBQ1osUUFBUTtBQUVkLGtCQUFZOztBQUdkLDJCQUF1QixNQUFNLFdBQThCO1VBQW5CLGFBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQWlCLFVBQUEsS0FBSjtBQUNuRCxVQUFNLFVBQVUsS0FBSyxTQUNmLFdBQVUsUUFBUSxPQUFPLFNBQUMsU0FBUyxRQUFRLE9BQVU7QUFDbkQsWUFBTSxNQUFNLEtBQUs7QUFFakIsa0JBQVcsUUFBUSxTQUNOLEdBQVksT0FBVixTQUFtQixPQUFULFFBQWEsT0FBSixPQUNuQixHQUFZLE9BQVYsU0FBaUIsT0FBUDtBQUUzQixlQUFPO1NBQ04sV0FBWSxlQUNmLFNBQVMsU0FBUyxTQUFTLFdBQzNCLE9BQU8sVUFBVSxNQUFNLFNBQ3ZCLFFBQVEsT0FBSyxRQUFDLGtCQUFrQixNQUFNO0FBRXRDLFVBQUksZUFBZSxNQUFNO0FBQ3ZCLGNBQU0sUUFBUTs7QUFHaEIsZUFBUyxhQUFhOztBQUc5QiwyQkFBdUIsV0FBVztBQUNoQyxVQUFNLFFBQVEsU0FBUyxjQUFjO0FBRXJDLGFBQU87O21CQUdNO01BQ2I7TUFDQTtNQUNBO01BQ0E7OztBQUdGLGlDQUE2QjtBQUMzQixVQUFNLGFBQWEsT0FBTyxLQUFLLFdBQ3pCLGFBQVksV0FBVyxPQUFPLFNBQUMsV0FBVyxXQUFjO0FBQ3RELFlBQU0sUUFBUSxjQUFjLFlBQ3RCLFdBQVcsTUFBTSxNQUFNO0FBRTdCLHFCQUFhO0FBRWIsZUFBTztTQUNOLFdBQVk7QUFFckIsYUFBTzs7Ozs7QUNwRlQ7Ozs7O1lBVWdCLG9CQUFBO1lBcUJBLG9CQUFBOztBQTdCNEMsUUFBQSxhQUFjO0FBRTFFLFFBQU0sU0FBUyxXQUFpQjtBQUFoQyxRQUNNLGFBQWEsV0FBVTtBQUQ3QixRQUVNLG1CQUFtQixXQUFXO0FBRXBDLFFBQU0sYUFBYTtBQUVaLGlDQUE2QjtBQUNsQyxVQUFJLFlBQVksV0FBWTtBQUU1QixlQUFTLFFBQVEsR0FBRyxRQUFRLFFBQVEsU0FBUztBQUMzQyxZQUFNLFFBQVEsS0FBSyxNQUFNLEtBQUssV0FBVyxtQkFDbkMsWUFBWSxXQUFXO0FBRTdCLHFCQUFhOztBQUdmLFVBQU0sOEJBQThCLFdBQVcsU0FBUztBQUV4RCxVQUFJLENBQUMsNkJBQTZCO0FBQ2hDLG1CQUFXLEtBQUs7YUFDWDtBQUNMLG9CQUFZOztBQUdkLGFBQU87O0FBR0YsK0JBQTJCLFNBQVM7QUFDekMsVUFBUSxZQUFjLFNBQVEsaUJBQWlCLFFBQVEsZUFBZSxhQUE5RDtBQUVSLGFBQU87O21CQUdNO01BQ2I7TUFDQTs7Ozs7O0FDdkNGOzs7OzttQ0FFb0IsWUFBUTs7O3lCQUFuQjs7O21DQUNXLFlBQVE7OztzQkFBbkI7OzttQ0FDVyxhQUFTOzs7dUJBQXBCOzs7bUNBQ1csbUJBQWU7Ozt1QkFBMUI7OzttQ0FDVyxzQkFBa0I7OzswQkFBN0I7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOVDs7Ozs7bUNBSWdCLFdBQUE7OztlQUFBOzs7Ozs7Ozs7OztBQUFULHFCQUFpQixVQUFVO0FBQUUsYUFBTyxhQUFhLFVBQVUsTUFBQTs7QUFFbEUsMEJBQXNCLFVBQVUsT0FBTztBQUNyQyxVQUFNLGFBQWdDLFlBQWxCLFNBQVMsV0FBcUI7QUFFbEQsYUFBTzs7Ozs7QUNUVDs7Ozs7bUNBRWEsY0FBQTs7O2VBQUE7OztBQUFOLFFBQU0sYUFBYTs7OztBQ0YxQjs7Ozs7bUNBMkRBLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFuREEsUUFBUSxvQkFBc0IsV0FBQSxtQkFBdEI7QUFBUixRQUNRLGNBQTRELFdBQUEsZ0JBQTVEO0FBRFIsUUFDcUIsZUFBK0MsV0FBQSxnQkFBL0M7QUFEckIsUUFDbUMsZ0JBQWlDLFdBQUEsZ0JBQWpDO0FBRG5DLFFBQ2tELGdCQUFrQixXQUFBLGdCQUFsQjtBQUVsRCx1QkFBbUIsaUJBQWlCO0FBQ2xDLGFBQU8sV0FBVztBQUNoQixZQUFNLE9BQVMsTUFBQSxVQUFBLE1BQUEsS0FBRztBQUVsQixZQUFBLDZCQUEyQixnQkFBckIsV0FBQSxZQUFBLCtCQUFBLFNBQVksT0FBSTtBQUV0QixZQUFNLGFBQWEsY0FBYztBQUVqQyxvQkFBWTtBQUVaLHNCQUFjLE1BQU0sV0FBVztBQUUvQixZQUFNLHVCQUF1QixJQUFBLE9BQUEsU0FBUTtBQUVyQyxZQUFJLHNCQUFzQjtBQUN4QixjQUFNLFFBQVE7QUFFZCw0QkFBa0IseUJBQUEsUUFBQTs7O3dDQUFsQjs7Ozs7O2dCQUNTLEtBQUE7dUJBQVAsbUJBQWlCLFFBQVEsWUFBbUM7QUFBdkIsMkJBQUEsT0FBQSxVQUFBLFFBQUcscUJBQUgsSUFBQSxNQUFBLE9BQUEsSUFBQSxPQUFBLElBQUEsSUFBQSxPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRyx1Q0FBSCxPQUFBLEtBQUEsVUFBQTs7c0JBRzVCO0FBRlAsK0JBQWEsNEJBQTRCLFdBQVc7QUFFcEQseUJBQU8sWUFBQSxPQUFNLFVBQU4sTUFBQSxVQUFBO29CQUFnQjtvQkFBUTtvQkFBeEIsT0FBb0MsbUJBQUc7Ozs7O1lBSmxCO2VBUTNCO0FBQ0wsY0FBTSxZQUFXO0FBRWpCLDRCQUFrQixTQUFDLFlBQWU7QUFDaEMseUJBQWEsNEJBQTRCLFdBQVc7QUFFcEQsbUJBQU8sVUFBUzs7O0FBSXBCLGVBQU8sT0FBTyxpQkFBaUI7VUFDN0I7O0FBR0YsZUFBTzs7O0FBSVgsV0FBTyxPQUFPLFdBQVc7TUFDdkI7TUFDQTs7UUFHRixXQUFlO0FBRWYsZUFBQSxTQUFTLFFBQVEsU0FBQyxTQUFZO0FBQzVCLGFBQU8sZUFBZSxXQUFXLFNBQVM7UUFDeEMsS0FBSyxXQUFBO2lCQUFNLFdBQVc7QUFDcEIsZ0JBQU0sT0FBUSxNQUFBLFVBQUEsTUFBQSxLQUFHLFlBQ1gsWUFBWTtBQUVsQiwwQkFBYyxNQUFNO0FBRXBCLGdCQUFNLFlBQVcsU0FBQyxZQUFlO0FBQy9CLDJCQUFhLDRCQUE0QixXQUFXO0FBRXBELHFCQUFPLE1BQUEsTUFBTSxjQUFjLFNBQVM7O0FBR3RDLG1CQUFPLE9BQU8sV0FBVTtjQUN0Qjs7QUFHRixtQkFBTzs7Ozs7QUFLYix5Q0FBcUMsV0FBVyxZQUFZO0FBQzFELG1CQUFhLFdBQVcsZUFBZSxXQUFBLGNBQWMsYUFBYSxtQkFBQSxjQUFBLElBQUssYUFBQTtRQUFZOztBQUVuRixhQUFPOzs7OztBQ3ZGVDs7Ozs7bUNBSUEsV0FBQTs7O2VBQUE7Ozs7Ozs7OztRQUFBLFdBQWUsV0FBQTs7OztBQ0pmOzs7OzttQ0FFYSxVQUFBOzs7ZUFBQTs7O0FBQU4sUUFBTSxTQUFTOzs7O0FDRnRCOzs7Ozs7Ozs7Ozs7O01BRWEsYUFBVyxXQUFBO2VBQVg7O01BQ0EsZ0JBQWMsV0FBQTtlQUFkOztNQUNBLG1CQUFpQixXQUFBO2VBQWpCOztNQUNBLG1CQUFpQixXQUFBO2VBQWpCOzs7QUFITixRQUFNLGNBQWM7QUFDcEIsUUFBTSxpQkFBaUI7QUFDdkIsUUFBTSxvQkFBb0I7QUFDMUIsUUFBTSxvQkFBb0I7Ozs7QUNMakM7Ozs7Ozs7Ozs7Ozs7TUFXZ0IsYUFBVyxXQUFBO2VBQVg7O01BSUEsZUFBYSxXQUFBO2VBQWI7O01BVUEsaUJBQWUsV0FBQTtlQUFmOztNQVVBLG9CQUFrQixXQUFBO2VBQWxCOztNQVVoQixTQUtDLFdBQUE7ZUFMRDs7Ozs7O0FBdENBLFFBQU0sT0FBTyxJQUFJLE1BQUE7QUFFakIsUUFBSTtBQUVHLDJCQUF1QjtBQUM1QixnQkFBVTs7QUFHTCw2QkFBeUI7QUFDOUIsVUFBTSxnQkFBZ0I7QUFFdEIsVUFBSSxrQkFBa0IsU0FBQSxnQkFBZ0I7QUFDcEMseUJBQWlCO0FBRWpCLGtCQUFVLFNBQUE7OztBQUlQLCtCQUEyQjtBQUNoQyxVQUFNLGdCQUFnQjtBQUV0QixVQUFJLGtCQUFrQixTQUFBLG1CQUFtQjtBQUN2Qyx5QkFBaUI7QUFFakIsa0JBQVUsU0FBQTs7O0FBSVAsa0NBQThCO0FBQ25DLFVBQU0sZ0JBQWdCO0FBRXRCLFVBQUksa0JBQWtCLFNBQUEsbUJBQW1CO0FBQ3ZDLHlCQUFpQjtBQUVqQixrQkFBVSxTQUFBOzs7UUFJZCxXQUFlO01BQ2I7TUFDQTtNQUNBO01BQ0E7O0FBR0YsdUJBQW1CLFFBQVE7QUFDekIsVUFBTSxNQUFNO1FBQ1Y7O0FBR0YsV0FBSyxJQUFJOztBQUdYLGdDQUE0QjtBQUMxQixVQUFNLGdCQUFnQixLQUFLLElBQUksV0FBQSxXQUFXLFNBQUE7QUFFMUMsYUFBTzs7Ozs7QUMvRFQ7Ozs7O21DQWNBLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVJBLFFBQU0sU0FBTix5QkFBQSxTQUFBO2dCQUFNLFNBQUE7Z0NBQUE7eUJBQUE7OEJBQUE7OzthQUFBO3VCQUFlLE1BQUE7QUFDbkIsb0JBREksUUFDRyxXQUFVO0FBRWpCLG9CQUhJLFFBR0cscUJBQW9CO01BQ3pCLFdBQVc7O1FBSWYsV0FBZSxJQUFBLGVBQUEsU0FBVSxRQUFBOzs7O0FDZHpCOzs7OzttQ0FjQSxXQUFBOzs7ZUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFSQSxRQUFNLFVBQU4seUJBQUEsU0FBQTtnQkFBTSxVQUFBO2dDQUFBOzBCQUFBOzhCQUFBOzs7YUFBQTt1QkFBZ0IsTUFBQTtBQUNwQixvQkFESSxTQUNHLFdBQVU7QUFFakIsb0JBSEksU0FHRyxxQkFBb0I7TUFDekIsV0FBVzs7UUFJZixXQUFlLElBQUEsZUFBQSxTQUFVLFNBQUE7Ozs7QUNkekI7Ozs7O21DQWNBLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVJBLFFBQU0sWUFBTix5QkFBQSxTQUFBO2dCQUFNLFlBQUE7Z0NBQUE7NEJBQUE7OEJBQUE7OzthQUFBO3VCQUFrQixNQUFBO0FBQ3RCLG9CQURJLFdBQ0csV0FBVTtBQUVqQixvQkFISSxXQUdHLHFCQUFvQjtNQUN6QixXQUFXOztRQUlmLFdBQWUsSUFBQSxlQUFBLFNBQVUsV0FBQTs7OztBQ2R6Qjs7Ozs7bUNBY0EsV0FBQTs7O2VBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUkEsUUFBTSxhQUFOLHlCQUFBLFNBQUE7Z0JBQU0sYUFBQTtnQ0FBQTs2QkFBQTs4QkFBQTs7O2FBQUE7dUJBQW1CLE1BQUE7QUFDdkIsb0JBREksWUFDRyxXQUFVO0FBRWpCLG9CQUhJLFlBR0cscUJBQW9CO01BQ3pCLFdBQVc7O1FBSWYsV0FBZSxJQUFBLGVBQUEsU0FBVSxZQUFBOzs7O0FDZHpCOzs7Ozs7Ozs7Ozs7O01BRWEsaUJBQWUsV0FBQTtlQUFmOztNQUNBLGlCQUFlLFdBQUE7ZUFBZjs7TUFDQSxxQkFBbUIsV0FBQTtlQUFuQjs7TUFDQSxzQkFBb0IsV0FBQTtlQUFwQjs7TUFDQSxzQkFBb0IsV0FBQTtlQUFwQjs7TUFDQSx1QkFBcUIsV0FBQTtlQUFyQjs7TUFFYixTQU9FLFdBQUE7ZUFQRjs7O0FBUE8sUUFBTSxrQkFBa0I7QUFDeEIsUUFBTSxrQkFBa0I7QUFDeEIsUUFBTSxzQkFBc0I7QUFDNUIsUUFBTSx1QkFBdUI7QUFDN0IsUUFBTSx1QkFBdUI7QUFDN0IsUUFBTSx3QkFBd0I7UUFFckMsV0FBZTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7Ozs7QUNmRjs7Ozs7bUNBRWEsd0JBQUE7OztlQUFBOzs7QUFBTixRQUFNLHVCQUF1Qjs7OztBQ0ZwQzs7Ozs7Ozs7Ozs7OztNQUVnQixtQkFBaUIsV0FBQTtlQUFqQjs7TUFPQSxvQkFBa0IsV0FBQTtlQUFsQjs7O0FBUFQsK0JBQTJCLE9BQU87QUFDdkMsVUFBUSxRQUFVLE1BQVYsT0FDRixXQUFXO0FBRWpCLGFBQU87O0FBR0YsZ0NBQTRCLE9BQU87QUFDeEMsVUFBUSxRQUFVLE1BQVYsT0FDRixZQUFZO0FBRWxCLGFBQU87Ozs7O0FDYlQ7Ozs7O21DQTJUQSxXQUFBOzs7ZUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbFRBLFFBQVEsVUFBWSxXQUFBLHNCQUFaO0FBQVIsUUFDUSxrQkFBb0IsV0FBQSxTQUFwQjtBQURSLFFBRVEsa0JBQW9CLE1BQUEsV0FBcEI7QUFGUixRQUdRLG9CQUFzQixNQUFBLFFBQXRCO0FBRVIsUUFBTSxjQUFjO0FBRXBCLFdBQU8sT0FBTyxZQUFZO01BQ3hCOztBQUdGLG9CQUFnQixhQUFhLFNBQVM7QUFDcEMsVUFBTSxZQUFZLFlBQUEsaUJBQ1osVUFBVTtBQUVoQixXQUFLLGlCQUFpQixXQUFXLFNBQVM7O0FBRzVDLHFCQUFpQixhQUFhLFNBQVM7QUFDckMsVUFBTSxZQUFZLFlBQUEsaUJBQ1osVUFBVTtBQUVoQixXQUFLLG9CQUFvQixXQUFXLFNBQVM7O0FBRy9DLHdCQUFvQixpQkFBaUIsU0FBUztBQUM1QyxVQUFNLFlBQVksWUFBQSxzQkFDWixVQUFVO0FBRWhCLFdBQUssaUJBQWlCLFdBQVcsU0FBUzs7QUFHNUMseUJBQXFCLGlCQUFpQixTQUFTO0FBQzdDLFVBQU0sWUFBWSxZQUFBLHNCQUNaLFVBQVU7QUFFaEIsV0FBSyxvQkFBb0IsV0FBVyxTQUFTOztBQUcvQyx5QkFBcUIsa0JBQWtCLFNBQVM7QUFDOUMsVUFBTSxZQUFZLFlBQUEsdUJBQ1osVUFBVTtBQUVoQixXQUFLLGlCQUFpQixXQUFXLFNBQVM7O0FBRzVDLDBCQUFzQixrQkFBa0IsU0FBUztBQUMvQyxVQUFNLFlBQVksWUFBQSx1QkFDWixVQUFVO0FBRWhCLFdBQUssb0JBQW9CLFdBQVcsU0FBUzs7QUFHL0MsMEJBQXNCO0FBQ3BCLFVBQTRDLG1CQUFBLEtBQUssWUFBekMsV0FBb0MsaUJBQXBDLFFBQVEsZUFBNEIsaUJBQTVCLFlBQVksZ0JBQWdCLGlCQUFoQixhQUN0QixjQUFjLFVBQ2Qsa0JBQWtCLGNBQ2xCLG1CQUFtQixlQUNuQixVQUFVLE1BQ1YsWUFBWSxNQUNaLGFBQWEsTUFDYixnQkFBZ0IsTUFDaEIsaUJBQWlCO0FBRXZCLHFCQUFlLEtBQUssT0FBTztBQUMzQix5QkFBbUIsS0FBSyxXQUFXO0FBQ25DLDBCQUFvQixLQUFLLFlBQVk7QUFFckMsV0FBSyxZQUFZLGtCQUFrQjtBQUVuQyxXQUFLLFNBQVM7UUFDWjtRQUNBO1FBQ0E7UUFDQTtRQUNBOzs7QUFJSiwyQkFBdUI7QUFDckIsVUFBNEMsbUJBQUEsS0FBSyxZQUF6QyxXQUFvQyxpQkFBcEMsUUFBUSxlQUE0QixpQkFBNUIsWUFBWSxnQkFBZ0IsaUJBQWhCLGFBQ3RCLGNBQWMsVUFDZCxrQkFBa0IsY0FDbEIsbUJBQW1CO0FBRXpCLHFCQUFlLEtBQUssUUFBUTtBQUM1Qix5QkFBbUIsS0FBSyxZQUFZO0FBQ3BDLDBCQUFvQixLQUFLLGFBQWE7QUFFdEMsV0FBSyxhQUFhLGtCQUFrQjs7QUFHdEMsMEJBQXNCO0FBQ3BCLFVBQU0sV0FBVyxLQUFLLFNBQVM7QUFFL0IsYUFBTzs7QUFHVCxnQ0FBNEIsVUFBVSxXQUFXOztBQUMvQyxVQUFJLFVBQVUsS0FBSztBQUVuQixVQUFJLFlBQVksTUFBTTtBQUNwQixrQkFBVSxXQUFXLFdBQU07QUFDekIsZ0JBQUs7QUFFTCxnQkFBSyxVQUFVLFVBQVU7V0FDeEIsV0FBQTtBQUVILGFBQUssY0FBYzs7O0FBSXZCLGlDQUE2QjtBQUMzQixVQUFNLFVBQVUsS0FBSztBQUVyQixVQUFJLFlBQVksTUFBTTtBQUNwQixxQkFBYTtBQUViLGFBQUs7OztBQUlULHVCQUFtQixVQUFVLFdBQVc7QUFDdEMsVUFBTSxTQUFTLEtBQUssYUFDZCxZQUFZLFlBQUEsdUJBQ1osWUFBWSxPQUFPLFVBQ25CLGFBQWEsT0FBTyxXQUNwQixjQUFjLE9BQU8sWUFDckIsZUFBZSxPQUFPLGFBQ3RCLGNBQWMsY0FBYyxZQUM1QixlQUFlLGVBQWUsV0FDOUIsWUFBWSxLQUFLLE1BQU0sZUFBZSxJQUN0QyxhQUFhLEtBQUssTUFBTSxjQUFjLElBQ3RDLGVBQWMsTUFDZCxnQkFBZ0IsVUFDaEIsaUJBQWlCO0FBRXZCLFlBQUEsT0FBTyxVQUFVLGdCQUFnQjtBQUVqQyxZQUFBLE9BQU8sWUFBWSxrQkFBa0I7QUFFckMsV0FBSyxTQUFTO0FBRWQsYUFBTyxPQUFPLFlBQVk7UUFDeEIsYUFBQTs7QUFHRixXQUFLLGFBQWE7QUFFbEIsV0FBSyxjQUFjO0FBRW5CLFdBQUssaUJBQWlCO0FBRXRCLFdBQUssa0JBQWtCO0FBRXZCLFdBQUssYUFBYTtBQUVsQixXQUFLLEtBQUssVUFBVTs7QUFHdEIsc0JBQWtCLFNBQVM7O0FBQ3pCLFVBQVEsY0FBZ0IsV0FBaEIsYUFDRixZQUFZLFlBQUE7QUFFbEIsWUFBQSxPQUFPLFdBQVcsZ0JBQWdCO0FBRWxDLFlBQUEsT0FBTyxhQUFhLGtCQUFrQjtBQUV0QyxVQUFNLE9BQU8sV0FBTTtBQUNqQixjQUFLLGtCQUFrQixXQUFXLGFBQWEsU0FBUyxXQUFNO0FBQzVELGNBQU0sZUFBYztBQUVwQixpQkFBTyxPQUFPLFlBQVk7WUFDeEIsYUFBQTs7QUFHRixnQkFBSyxZQUFZOzs7QUFJckIsVUFBSSxnQkFBZ0IsTUFBTTtBQUN4QixZQUFNLGVBQWM7QUFFcEIsb0JBQVksS0FBSyxjQUFhLFNBQVM7YUFDbEM7QUFDTDs7O0FBSUosa0JBQWMsVUFBVSxXQUFXO0FBQ2pDLFVBQU0sWUFBWSxZQUFBLGlCQUNaLFlBQVksTUFBQSxPQUFPLGdCQUNuQixhQUFhLE1BQUEsT0FBTyxpQkFDcEIsWUFBWSxLQUFLLGdCQUNqQixhQUFhLEtBQUssaUJBQ2xCLGdCQUFnQixLQUFLLG9CQUNyQixpQkFBaUIsS0FBSyxxQkFDdEIsbUJBQW1CLFdBQVcsZUFDOUIsb0JBQW9CLFlBQVk7QUFFdEMsVUFBSSxNQUFNLGdCQUFnQixtQkFBbUIsWUFBWSxXQUNyRCxPQUFPLGlCQUFpQixvQkFBb0IsYUFBYTtBQUU3RCxZQUFPLEdBQU0sT0FBSixLQUFJO0FBQ2IsYUFBUSxHQUFPLE9BQUwsTUFBSztBQUVmLFVBQU0sTUFBTTtRQUNWO1FBQ0E7O0FBR0YsV0FBSyxJQUFJO0FBRVQsV0FBSyxhQUFhLFdBQVcsa0JBQWtCOztBQUdqRCwwQkFBc0I7QUFDcEIsVUFBUSxVQUFZLEtBQUssV0FBakI7QUFFUixhQUFPOztBQUdULDRCQUF3QjtBQUN0QixVQUFNLFVBQVU7QUFFaEIsV0FBSyxjQUFjOztBQUdyQiwyQkFBdUIsU0FBUztBQUM5QixXQUFLLFlBQVk7UUFDZjs7O0FBSUosNEJBQXdCO0FBQ3RCLFVBQVEsWUFBYyxLQUFLLFdBQW5CO0FBRVIsYUFBTzs7QUFHVCw2QkFBeUI7QUFDdkIsVUFBUSxhQUFlLEtBQUssV0FBcEI7QUFFUixhQUFPOztBQUdULGdDQUE0QjtBQUMxQixVQUFRLGdCQUFrQixLQUFLLFdBQXZCO0FBRVIsYUFBTzs7QUFHVCxpQ0FBNkI7QUFDM0IsVUFBUSxpQkFBbUIsS0FBSyxXQUF4QjtBQUVSLGFBQU87O0FBR1QsMEJBQXNCLFdBQVc7QUFDL0IsV0FBSyxZQUFZO1FBQ2Y7OztBQUlKLDJCQUF1QixZQUFZO0FBQ2pDLFdBQUssWUFBWTtRQUNmOzs7QUFJSiw4QkFBMEIsZUFBZTtBQUN2QyxXQUFLLFlBQVk7UUFDZjs7O0FBSUosK0JBQTJCLGdCQUFnQjtBQUN6QyxXQUFLLFlBQVk7UUFDZjs7O0FBSUosMEJBQXNCLFdBQWtDO0FBQXZCLGVBQUEsT0FBQSxVQUFBLFFBQUcscUJBQUgsSUFBQSxNQUFBLE9BQUEsSUFBQSxPQUFBLElBQUEsSUFBQSxPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRywyQkFBSCxPQUFBLEtBQUEsVUFBQTs7O0FBQy9CLFVBQU0saUJBQWlCLEtBQUssbUJBQW1CO0FBRS9DLHFCQUFlLFFBQVEsU0FBQyxlQUFrQjtZQUl4QztBQUhBLFlBQVEsVUFBcUMsY0FBckMsU0FBa0IsaUJBQW1CLGNBQTVCLFNBQ1gsVUFBQTtBQUVOLFFBQUEsWUFBQSxTQUFRLEtBQVIsTUFBQSxVQUFBO1VBQWE7VUFBYixPQUE2QixtQkFBRyxxQkFBaEM7VUFBb0Q7Ozs7QUFJeEQsK0JBQTJCLFdBQWtDO0FBQXZCLGVBQUEsT0FBQSxVQUFBLFFBQUcscUJBQUgsSUFBQSxNQUFBLE9BQUEsSUFBQSxPQUFBLElBQUEsSUFBQSxPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRywyQkFBSCxPQUFBLEtBQUEsVUFBQTs7O0FBQ3BDLFVBQU0sT0FBTyxtQkFBbUIsT0FDMUIsaUJBQWlCLEtBQUssbUJBQW1CO0FBRS9DLGNBQVEsZ0JBQWdCLFNBQUMsZUFBZSxNQUFTO1lBSy9DO0FBSkEsWUFBUSxVQUFxQyxjQUFyQyxTQUFrQixpQkFBbUIsY0FBNUIsU0FDWCxVQUFBLE9BQ0EsUUFBTztBQUViLFFBQUEsWUFBQSxTQUFRLEtBQVIsTUFBQSxVQUFBO1VBQWE7VUFBYixPQUE2QixtQkFBRyxxQkFBaEM7VUFBb0Q7VUFBUzs7U0FDNUQ7O1FBR0wsV0FBZTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7QUFHRiw0QkFBd0IsT0FBTyxTQUFTO0FBQ3RDLFVBQVEsVUFBWSxNQUFaLFNBQ0YsWUFBYSxZQUFZLGlCQUN6QixVQUFVO0FBRWhCLFVBQUksV0FBVztBQUNiLGFBQUssU0FBUztBQUVkLGNBQU07OztBQUlWLDRCQUF3QixPQUFPLFNBQVM7QUFDdEMsVUFBTSxXQUFXLEtBQUssY0FDaEIsVUFBVTtBQUVoQixpQkFDRSxLQUFLLFNBQVMsV0FDWixLQUFLO0FBRVQsWUFBTTtBQUVOLFlBQUEsT0FBTyxJQUFJLGlCQUFpQixnQkFBZ0I7QUFFNUMsWUFBQSxPQUFPLFdBQVcsZ0JBQWdCOztBQUdwQyw4QkFBMEIsT0FBTyxTQUFTO0FBQ3hDLFVBQVEsU0FBVyxNQUFYO0FBRVIsVUFBSSxXQUFXLG1CQUFtQjtBQUNoQyxZQUFNLFdBQVcsS0FBSztBQUV0QixZQUFJLENBQUMsVUFBVTtBQUNiLGNBQU0sV0FBVyxJQUFBLE9BQUEsbUJBQWtCLFFBQzdCLFlBQVksSUFBQSxPQUFBLG9CQUFtQjtBQUVyQyxlQUFLLG1CQUFtQixVQUFVOzs7QUFJdEMsWUFBTTtBQUVOLFlBQUEsT0FBTyxHQUFHLGlCQUFpQixnQkFBZ0I7QUFFM0MsWUFBQSxPQUFPLFVBQVUsZ0JBQWdCOztBQUduQyw4QkFBMEIsT0FBTyxTQUFTO0FBQ3hDLFVBQU0sV0FBVyxLQUFLO0FBRXRCLFVBQUksVUFBVTtBQUNaLFlBQU0sV0FBVyxJQUFBLE9BQUEsbUJBQWtCLFFBQzdCLFlBQVksSUFBQSxPQUFBLG9CQUFtQjtBQUVyQyxhQUFLLEtBQUssVUFBVTs7QUFHdEIsWUFBTTs7Ozs7QUNuWlI7Ozs7O21DQThIQSxXQUFBOzs7ZUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeEhBLFFBQVEsVUFBWSxXQUFBLHNCQUFaO0FBRVIsUUFBTSxjQUFjO0FBRXBCLFdBQU8sT0FBTyxZQUFZO01BQ3hCOztBQUdGLGtCQUFjLGFBQWEsU0FBUyxNQUFNO0FBQ3hDLFVBQU0sWUFBWSxZQUFBO0FBRWxCLFdBQUssa0JBQWtCLFdBQVcsYUFBYSxTQUFTOztBQUcxRCxxQkFBaUIsYUFBYTtBQUM1QixVQUFNLFlBQVksWUFBQTtBQUVsQixXQUFLLGFBQWEsV0FBVzs7QUFHL0Isc0JBQWtCLGFBQWE7QUFDN0IsVUFBTSxZQUFZLFlBQUE7QUFFbEIsV0FBSyxhQUFhLFdBQVc7O0FBRy9CLG9CQUFnQixhQUFhLFNBQVM7QUFDcEMsVUFBTSxZQUFZLFlBQUEsaUJBQ1osVUFBVTtBQUVoQixXQUFLLGlCQUFpQixXQUFXLFNBQVM7O0FBRzVDLHFCQUFpQixhQUFhLFNBQVM7QUFDckMsVUFBTSxZQUFZLFlBQUEsaUJBQ1osVUFBVTtBQUVoQixXQUFLLG9CQUFvQixXQUFXLFNBQVM7O0FBRy9DLHVCQUFtQixnQkFBZ0IsU0FBUztBQUMxQyxVQUFNLFlBQVksWUFBQSxxQkFDWixVQUFVO0FBRWhCLFdBQUssaUJBQWlCLFdBQVcsU0FBUzs7QUFHNUMsd0JBQW9CLGdCQUFnQixTQUFTO0FBQzNDLFVBQU0sWUFBWSxZQUFBLHFCQUNaLFVBQVU7QUFFaEIsV0FBSyxvQkFBb0IsV0FBVyxTQUFTOztBQUcvQyx3QkFBb0IsaUJBQWlCLFNBQVM7QUFDNUMsVUFBTSxZQUFZLFlBQUEsc0JBQ1osVUFBVTtBQUVoQixXQUFLLGlCQUFpQixXQUFXLFNBQVM7O0FBRzVDLHlCQUFxQixpQkFBaUIsU0FBUztBQUM3QyxVQUFNLFlBQVksWUFBQSxzQkFDWixVQUFVO0FBRWhCLFdBQUssb0JBQW9CLFdBQVcsU0FBUzs7QUFHL0MsMEJBQXNCO0FBQ3BCLFVBQTBDLG1CQUFBLEtBQUssWUFBdkMsV0FBa0MsaUJBQWxDLFFBQVEsY0FBMEIsaUJBQTFCLFdBQVcsZUFBZSxpQkFBZixZQUNyQixjQUFjLFVBQ2QsaUJBQWlCLGFBQ2pCLGtCQUFrQjtBQUV4QixxQkFBZSxLQUFLLE9BQU87QUFDM0Isd0JBQWtCLEtBQUssVUFBVTtBQUNqQyx5QkFBbUIsS0FBSyxXQUFXO0FBRW5DLFdBQUssV0FBVyxpQkFBaUI7QUFDakMsV0FBSyxZQUFZLGtCQUFrQjs7QUFHckMsMkJBQXVCO0FBQ3JCLFVBQTBDLG1CQUFBLEtBQUssWUFBdkMsV0FBa0MsaUJBQWxDLFFBQVEsY0FBMEIsaUJBQTFCLFdBQVcsZUFBZSxpQkFBZixZQUNyQixjQUFjLFVBQ2QsaUJBQWlCLGFBQ2pCLGtCQUFrQjtBQUV4QixxQkFBZSxLQUFLLFFBQVE7QUFDNUIsd0JBQWtCLEtBQUssV0FBVztBQUNsQyx5QkFBbUIsS0FBSyxZQUFZO0FBRXBDLFdBQUssWUFBWSxpQkFBaUI7QUFDbEMsV0FBSyxhQUFhLGtCQUFrQjs7QUFHdEMsMEJBQXNCLFdBQWtDO0FBQXZCLGVBQUEsT0FBQSxVQUFBLFFBQUcscUJBQUgsSUFBQSxNQUFBLE9BQUEsSUFBQSxPQUFBLElBQUEsSUFBQSxPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRywyQkFBSCxPQUFBLEtBQUEsVUFBQTs7O0FBQy9CLFVBQU0saUJBQWlCLEtBQUssbUJBQW1CO0FBRS9DLHFCQUFlLFFBQVEsU0FBQyxlQUFrQjtZQUl4QztBQUhBLFlBQVEsVUFBcUMsY0FBckMsU0FBa0IsaUJBQW1CLGNBQTVCLFNBQ1gsVUFBQTtBQUVOLFFBQUEsWUFBQSxTQUFRLEtBQVIsTUFBQSxVQUFBO1VBQWE7VUFBYixPQUE2QixtQkFBRyxxQkFBaEM7VUFBb0Q7Ozs7QUFJeEQsK0JBQTJCLFdBQWtDO0FBQXZCLGVBQUEsT0FBQSxVQUFBLFFBQUcscUJBQUgsSUFBQSxNQUFBLE9BQUEsSUFBQSxPQUFBLElBQUEsSUFBQSxPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRywyQkFBSCxPQUFBLEtBQUEsVUFBQTs7O0FBQ3BDLFVBQU0sT0FBTyxtQkFBbUIsT0FDMUIsaUJBQWlCLEtBQUssbUJBQW1CO0FBRS9DLGNBQVEsZ0JBQWdCLFNBQUMsZUFBZSxNQUFTO1lBSy9DO0FBSkEsWUFBUSxVQUFxQyxjQUFyQyxTQUFrQixpQkFBbUIsY0FBNUIsU0FDWCxVQUFBLE9BQ0EsUUFBTztBQUViLFFBQUEsWUFBQSxTQUFRLEtBQVIsTUFBQSxVQUFBO1VBQWE7VUFBYixPQUE2QixtQkFBRyxxQkFBaEM7VUFBb0Q7VUFBUzs7U0FDNUQ7O1FBR0wsV0FBZTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOztBQUdGLDZCQUF5QixPQUFPLFNBQVM7QUFDdkMsVUFBUSxjQUFnQixXQUFoQjtBQUVSLFVBQUksZ0JBQWdCLE1BQU07QUFDeEIsWUFBTSxlQUFjO0FBRXBCLGVBQU8sT0FBTyxZQUFZO1VBQ3hCLGFBQUE7O0FBR0YsYUFBSyxRQUFROztBQUdmLFlBQU07O0FBR1IsOEJBQTBCLE9BQU8sU0FBUztBQUN4QyxVQUFRLGNBQWdCLFdBQWhCO0FBRVIsVUFBSSxnQkFBZ0IsTUFBTTtBQUN4QixZQUFNLGVBQWM7QUFFcEIsZUFBTyxPQUFPLFlBQVk7VUFDeEIsYUFBQTs7QUFHRixhQUFLLFNBQVM7O0FBR2hCLFlBQU07Ozs7O0FDM0tSOzs7OzttQ0EwQkEsV0FBQTs7O2VBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbEJBLFFBQU0sY0FBTix5QkFBQSxTQUFBO2dCQUFNLGNBQUE7Z0NBQUE7OEJBQUE7OEJBQUE7OzttQkFBQSxjQUFBOztVQUNKLEtBQUE7aUJBQUEsb0JBQVc7QUFDVCxpQkFBSzs7OztVQUdQLEtBQUE7aUJBQUEsdUJBQWM7QUFDWixpQkFBSzs7OzthQU5IO3VCQUFvQixNQUFBO0FBU3hCLG9CQVRJLGFBU0cscUJBQW9CO01BQ3pCO01BQ0E7TUFDQTs7QUFJSixXQUFPLE9BQU8sWUFBWSxXQUFXLE1BQUE7UUFFckMsV0FBZSxJQUFBLGVBQUEsU0FBVSxhQUFBOzs7O0FDMUJ6Qjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sY0FBTix5QkFBQSxTQUFBO2dCQUFNLGNBQUE7Z0NBQUE7OEJBQUE7OEJBQUE7OzttQkFBQSxjQUFBOztVQUNuQixLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsaUJBQUs7Ozs7VUFHUCxLQUFBO2lCQUFBLHVCQUFjO0FBQ1osaUJBQUs7Ozs7YUFOWTt1QkFBb0IsTUFBQTtBQVN2QyxvQkFUbUIsYUFTWixxQkFBb0I7TUFDekI7TUFDQTtNQUNBOztBQUlKLFdBQU8sT0FBTyxZQUFZLFdBQVcsTUFBQTs7OztBQ3RCckM7Ozs7Ozs7Ozs7Ozs7TUFFb0IsWUFBVSxXQUFBO2VBQVYsWUFBQTs7TUFFQSxZQUFVLFdBQUE7ZUFBVixNQUFBOztNQUNBLFlBQVUsV0FBQTtlQUFWLE1BQUE7O01BQ0EsYUFBVyxXQUFBO2VBQVgsT0FBQTs7TUFDQSxhQUFXLFdBQUE7ZUFBWCxPQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0FDUHBCOzs7OzttQ0FjQSxXQUFBOzs7ZUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFSQSxRQUFNLGNBQU4seUJBQUEsU0FBQTtnQkFBTSxjQUFBO2dDQUFBOzhCQUFBOzhCQUFBOzs7YUFBQTt1QkFBb0IsTUFBQTtBQUN4QixvQkFESSxhQUNHLFdBQVU7QUFFakIsb0JBSEksYUFHRyxxQkFBb0I7TUFDekIsV0FBVzs7UUFJZixXQUFlLElBQUEsZUFBQSxTQUFVLGFBQUE7Ozs7QUNkekI7Ozs7O21DQWdJQSxXQUFBOzs7ZUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFySEEsUUFBTSxjQUFOLHlCQUFBLFNBQUE7Z0JBQU0sY0FBQTtnQ0FBQTs4QkFBQTs4QkFBQTs7O0FBQ0osd0JBQUEsdUJBQUEsUUFBQSxtQkFBa0IsU0FBQyxhQUFhLFNBQVMsU0FBUyxNQUFTO0FBQ3pELFVBQUEsSUFBQSxRQUFBO0FBRUE7O0FBR0Ysd0JBQUEsdUJBQUEsUUFBQSxtQkFBa0IsU0FBQyxPQUFPLFNBQVk7QUFDcEMsVUFBQSxJQUFBLFFBQUE7Ozs7bUJBUkUsY0FBQTs7VUFXSixLQUFBO2lCQUFBLDBCQUFpQjtBQUNmLGdCQUFJO0FBRUosZ0JBQU0scUJBQXFCLEtBQUsseUJBQzFCLHlCQUF5QixLQUFLLDZCQUM5QixnQ0FBbUQsWUFBbEIsb0JBQThCLFVBQUEsVUFDL0Qsb0NBQTJELFlBQXRCLHdCQUFrQyxVQUFBO0FBRTdFLGdCQUFJLCtCQUErQjtBQUNqQyw0QkFBYzs7QUFHaEIsZ0JBQUksbUNBQW1DO0FBQ3JDLDRCQUFjOztBQUdoQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsd0JBQWU7QUFDYixnQkFBSTtBQUVKLGdCQUFNLHFCQUFxQixLQUFLLHlCQUMxQix5QkFBeUIsS0FBSyw2QkFDOUIsZ0NBQW1ELFlBQWxCLG9CQUE4QixVQUFBLFVBQy9ELG9DQUEyRCxZQUF0Qix3QkFBa0MsVUFBQTtBQUU3RSxnQkFBSSwrQkFBK0I7QUFDakMsMEJBQVk7O0FBR2QsZ0JBQUksbUNBQW1DO0FBQ3JDLDBCQUFZOztBQUdkLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxrQkFBUztBQUNQLGlCQUFLLFlBQVk7Ozs7VUFHbkIsS0FBQTtpQkFBQSxtQkFBVTtBQUNSLGlCQUFLLFNBQVM7Ozs7VUFHaEIsS0FBQTtpQkFBQSxzQkFBYTtBQUNYLGdCQUFNLFdBQVcsS0FBSyxTQUFTO0FBRS9CLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGlCQUFLO0FBRUwsaUJBQUssT0FBTyxLQUFLO0FBRWpCLGlCQUFLLFdBQVcsS0FBSztBQUVyQixpQkFBSyxZQUFZLEtBQUs7QUFFdEIsaUJBQUssWUFBWSxLQUFLO0FBRXRCLGlCQUFLLFdBQVcsS0FBSzs7OztVQUd2QixLQUFBO2lCQUFBLHVCQUFjO0FBQ1osaUJBQUssWUFBWSxLQUFLO0FBRXRCLGlCQUFLLGFBQWEsS0FBSztBQUV2QixpQkFBSyxhQUFhLEtBQUs7QUFFdkIsaUJBQUssWUFBWSxLQUFLO0FBRXRCLGlCQUFLLFFBQVEsS0FBSztBQUVsQixpQkFBSzs7OztVQUdQLEtBQUE7aUJBQUEsc0JBQWE7QUFDWCxpQkFBSzs7Ozs7VUFnQkEsS0FBQTtpQkFBUCxtQkFBaUIsT0FBTyxZQUFZO0FBQ2xDLGdCQUFNLGNBQWMsTUFBQSxRQUFRLFVBQVUsT0FBTztBQUU3QyxtQkFBTzs7OzthQS9HTDt1QkFBb0IsTUFBQTtBQStGeEIsb0JBL0ZJLGFBK0ZHLFdBQVU7QUFFakIsb0JBakdJLGFBaUdHLHFCQUFvQjtNQUN6QjtNQUNBO01BQ0E7TUFDQTs7QUFHRixvQkF4R0ksYUF3R0cscUJBQW9CO01BQ3pCLFdBQVc7O0FBVWYsV0FBTyxPQUFPLFlBQVksV0FBVyxpQkFBQTtRQUVyQyxXQUFlLElBQUEsZUFBQSxTQUFVLGFBQUE7Ozs7QUNoSXpCOzs7OzttQ0EwRUEsV0FBQTs7O2VBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFsRUEsUUFBTSxtQkFBTix5QkFBQSxVQUFBO2dCQUFNLG1CQUFBO2dDQUFBO21DQUFBOzhCQUFBOzs7QUFDSix3QkFBQSx1QkFBQSxRQUFBLG9CQUFtQixTQUFDLE9BQU8sU0FBWTtBQUNyQyxnQkFBSzs7QUFHUCx3QkFBQSx1QkFBQSxRQUFBLG9CQUFtQixTQUFDLFNBQVk7QUFDOUIsY0FBTSxXQUFXLE1BQUs7QUFFdEIsY0FBSSxDQUFDLFVBQVU7QUFDYixnQkFBTSxjQUFjLE1BQUssa0JBQ25CLG1CQUFtQixZQUFZLFlBQy9CLDJCQUEyQjtBQUVqQyxrQkFBSyw0QkFBNEI7O0FBR25DLGdCQUFLOztBQUdQLHdCQUFBLHVCQUFBLFFBQUEsZUFBYyxTQUFDLGtCQUFrQixtQkFBc0I7QUFDckQsY0FBTSxXQUFXLE1BQUs7QUFFdEIsY0FBSSxDQUFDLFVBQVU7QUFDYixnQkFBTSxZQUFZLE1BQUssZ0JBQ2pCLGNBQWMsTUFBSyxrQkFDbkIsMkJBQTJCLE1BQUssK0JBQ2hDLG1CQUFtQiwyQkFBMkIsWUFBWSxtQkFDMUQsUUFBUTtBQUVkLHdCQUFZLFNBQVM7Ozs7O21CQTdCckIsbUJBQUE7O1VBaUNKLEtBQUE7aUJBQUEscUJBQVk7QUFDVixnQkFBTSxXQUFXLEtBQUs7QUFFdEIsZ0JBQUksQ0FBQyxVQUFVO0FBQ2IsY0FBQSxJQUFBLFFBQUE7Ozs7O1VBSUosS0FBQTtpQkFBQSx1Q0FBOEI7QUFDNUIsZ0JBQVEsMkJBQTZCLEtBQUssV0FBbEM7QUFFUixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEscUNBQTRCLDBCQUEwQjtBQUNwRCxpQkFBSyxZQUFZO2NBQ2Y7Ozs7O1VBSUosS0FBQTtpQkFBQSwyQkFBa0I7QUFDaEIsZ0JBQU0sMkJBQTJCO0FBRWpDLGlCQUFLLFNBQVM7Y0FDWjs7Ozs7YUF6REE7TUFBeUIsVUFBQTtBQTZEN0Isb0JBN0RJLGtCQTZERyxxQkFBb0I7TUFDekIsV0FBVzs7UUFJZixXQUFlLElBQUEsZUFBQSxTQUFVLGtCQUFBOzs7O0FDMUV6Qjs7Ozs7bUNBMEVBLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbEVBLFFBQU0scUJBQU4seUJBQUEsVUFBQTtnQkFBTSxxQkFBQTtnQ0FBQTtxQ0FBQTs4QkFBQTs7O0FBQ0osd0JBQUEsdUJBQUEsUUFBQSxvQkFBbUIsU0FBQyxPQUFPLFNBQVk7QUFDckMsZ0JBQUs7O0FBR1Asd0JBQUEsdUJBQUEsUUFBQSxvQkFBbUIsU0FBQyxTQUFZO0FBQzlCLGNBQU0sV0FBVyxNQUFLO0FBRXRCLGNBQUksQ0FBQyxVQUFVO0FBQ2IsZ0JBQU0sY0FBYyxNQUFLLGtCQUNuQixvQkFBb0IsWUFBWSxhQUNoQyw0QkFBNEI7QUFFbEMsa0JBQUssNkJBQTZCOztBQUdwQyxnQkFBSzs7QUFHUCx3QkFBQSx1QkFBQSxRQUFBLGVBQWMsU0FBQyxrQkFBa0IsbUJBQXNCO0FBQ3JELGNBQU0sV0FBVyxNQUFLO0FBRXRCLGNBQUksQ0FBQyxVQUFVO0FBQ2IsZ0JBQU0sWUFBWSxNQUFLLGdCQUNqQixjQUFjLE1BQUssa0JBQ25CLDRCQUE0QixNQUFLLGdDQUNqQyxvQkFBb0IsNEJBQTRCLFlBQVksa0JBQzVELFNBQVM7QUFFZix3QkFBWSxVQUFVOzs7OzttQkE3QnRCLHFCQUFBOztVQWlDSixLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsZ0JBQU0sV0FBVyxLQUFLO0FBRXRCLGdCQUFJLENBQUMsVUFBVTtBQUNiLGNBQUEsSUFBQSxRQUFBOzs7OztVQUlKLEtBQUE7aUJBQUEsd0NBQStCO0FBQzdCLGdCQUFRLDRCQUE4QixLQUFLLFdBQW5DO0FBRVIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHNDQUE2QiwyQkFBMkI7QUFDdEQsaUJBQUssWUFBWTtjQUNmOzs7OztVQUlKLEtBQUE7aUJBQUEsMkJBQWtCO0FBQ2hCLGdCQUFNLDRCQUE0QjtBQUVsQyxpQkFBSyxTQUFTO2NBQ1o7Ozs7O2FBekRBO01BQTJCLFVBQUE7QUE2RC9CLG9CQTdESSxvQkE2REcscUJBQW9CO01BQ3pCLFdBQVc7O1FBSWYsV0FBZSxJQUFBLGVBQUEsU0FBVSxvQkFBQTs7OztBQzFFekI7Ozs7Ozs7Ozs7Ozs7TUFFb0IsUUFBTSxXQUFBO2VBQU4sUUFBQTs7TUFFQSxRQUFNLFdBQUE7ZUFBTixLQUFBOztNQUNBLFNBQU8sV0FBQTtlQUFQLE1BQUE7O01BQ0EsV0FBUyxXQUFBO2VBQVQsUUFBQTs7TUFDQSxZQUFVLFdBQUE7ZUFBVixTQUFBOztNQUNBLGFBQVcsV0FBQTtlQUFYLFVBQUE7O01BQ0EsYUFBVyxXQUFBO2VBQVgsVUFBQTs7TUFDQSxxQkFBbUIsV0FBQTtlQUFuQixVQUFBOztNQUNBLHVCQUFxQixXQUFBO2VBQXJCLFlBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWHBCOzs7OzttQ0FFYSwrQkFBQTs7O2VBQUE7OztBQUFOLFFBQU0sOEJBQThCOzs7O0FDRjNDOzs7Ozs7Ozs7Ozs7O01BRWEsZ0JBQWMsV0FBQTtlQUFkOztNQUNBLHFCQUFtQixXQUFBO2VBQW5COztNQUNBLHlCQUF1QixXQUFBO2VBQXZCOztNQUViLFNBSUUsV0FBQTtlQUpGOzs7QUFKTyxRQUFNLGlCQUFpQjtBQUN2QixRQUFNLHNCQUFzQjtBQUM1QixRQUFNLDBCQUEwQjtRQUV2QyxXQUFlO01BQ2I7TUFDQTtNQUNBOzs7OztBQ1RGOzs7Ozs7Ozs7Ozs7O01BRWEsbUJBQWlCLFdBQUE7ZUFBakI7O01BQ0EscUJBQW1CLFdBQUE7ZUFBbkI7O01BQ0EsdUJBQXFCLFdBQUE7ZUFBckI7O01BRWIsU0FJRSxXQUFBO2VBSkY7OztBQUpPLFFBQU0sb0JBQW9CO0FBQzFCLFFBQU0sc0JBQXNCO0FBQzVCLFFBQU0sd0JBQXdCO1FBRXJDLFdBQWU7TUFDYjtNQUNBO01BQ0E7Ozs7O0FDVEY7Ozs7Ozs7Ozs7Ozs7TUFFYSxjQUFZLFdBQUE7ZUFBWjs7TUFDQSxjQUFZLFdBQUE7ZUFBWjs7O0FBRE4sUUFBTSxlQUFlO0FBQ3JCLFFBQU0sZUFBZTs7OztBQ0g1Qjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGdCQUFOLDJCQUFBOzhCQUNELE1BQU0sU0FBUyxjQUFjLGtCQUFrQixhQUFhLGVBQWUsaUJBQWU7OEJBRG5GO0FBRWpCLGFBQUssT0FBTztBQUNaLGFBQUssVUFBVTtBQUNmLGFBQUssZUFBZTtBQUNwQixhQUFLLG1CQUFtQjtBQUN4QixhQUFLLGNBQWM7QUFDbkIsYUFBSyxnQkFBZ0I7QUFDckIsYUFBSyxrQkFBa0I7O21CQVJOLGdCQUFBOztVQVduQixLQUFBO2lCQUFBLG1CQUFVO0FBQ1IsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsa0JBQXdCO2dCQUFqQixXQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBVzs7QUFDaEIsZ0JBQUk7QUFFSixvQkFBUTttQkFDRCxXQUFBO0FBQWdCLHNCQUFNLEtBQUs7QUFBUzttQkFDcEMsV0FBQTtBQUFxQixzQkFBTSxLQUFLO0FBQWM7bUJBQzlDLFdBQUE7QUFBeUIsc0JBQU0sS0FBSztBQUFrQjt1QkFFbEQ7QUFDUCxvQkFBTSxZQUFZO2tCQUNWLFdBQUE7a0JBQ0EsV0FBQTtrQkFDQSxXQUFBO21CQUVGLGNBQWMsVUFBVSxPQUFPLFNBQUMsY0FBYSxXQUFhO0FBQzlELHNCQUFNLE9BQU0sTUFBSyxPQUFPO0FBRXhCLHNCQUFJLFNBQVEsV0FBQSxjQUFjO0FBQ3hCLG1DQUFlLEdBRXpCLE9BRjJCLGNBQVksb0JBRW5DLE9BQUo7O0FBR1EseUJBQU87bUJBQ04sV0FBQTtBQUVILHNCQUFNO0FBRU47OztBQUlKLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVyxhQUFhO0FBQ3RCLGdCQUFJO0FBRUosb0JBQVE7bUJBQ0QsY0FBQTtBQUFtQiwwQkFBVSxLQUFLO0FBQWE7bUJBQy9DLGNBQUE7QUFBcUIsMEJBQVUsS0FBSztBQUFlO21CQUNuRCxjQUFBO0FBQXVCLDBCQUFVLEtBQUs7QUFBaUI7O0FBRzlELG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSx1QkFBYztBQUNaLGdCQUFNLFdBQVc7Y0FDZixLQUFLO2NBQ0wsS0FBSztjQUNMLEtBQUs7O0FBR1AsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRLE1BQU07QUFDWixpQkFBSyxPQUFPOzs7O1VBR2QsS0FBQTtpQkFBQSxnQkFBTyxVQUFVLEtBQUs7QUFDcEIsb0JBQVE7bUJBQ0QsV0FBQTtBQUNILHFCQUFLLFVBQVU7QUFFZjttQkFFRyxXQUFBO0FBQ0gscUJBQUssZUFBZTtBQUVwQjttQkFFRyxXQUFBO0FBQ0gscUJBQUssbUJBQW1CO0FBRXhCOzs7OztVQUlOLEtBQUE7aUJBQUEsb0JBQVcsYUFBYSxTQUFTO0FBQy9CLG9CQUFRO21CQUNELGNBQUE7QUFDSCxxQkFBSyxjQUFjO0FBRW5CO21CQUVHLGNBQUE7QUFDSCxxQkFBSyxnQkFBZ0I7QUFFckI7bUJBRUcsY0FBQTtBQUNILHFCQUFLLGtCQUFrQjtBQUV2Qjs7Ozs7VUFJTixLQUFBO2lCQUFBLGtCQUFTLFVBQVU7QUFDakIsZ0JBQU0sTUFBTSxXQUFBO0FBRVosaUJBQUssT0FBTyxVQUFVOzs7O1VBR3hCLEtBQUE7aUJBQUEsc0JBQWEsYUFBYTtBQUN4QixnQkFBTSxVQUFVLFdBQUE7QUFFaEIsaUJBQUssV0FBVyxhQUFhOzs7O1VBRy9CLEtBQUE7aUJBQUEsZ0JBQU8sVUFBVSxLQUFLLGFBQWEsU0FBUztBQUMxQyxpQkFBSyxPQUFPLFVBQVU7QUFFdEIsaUJBQUssV0FBVyxhQUFhOzs7O1VBRy9CLEtBQUE7aUJBQUEsa0JBQVM7QUFDUCxnQkFBTSxPQUFPLEtBQUssTUFDWixVQUFVLEtBQUssU0FDZixlQUFlLEtBQUssY0FDcEIsbUJBQW1CLEtBQUssa0JBQ3hCLGNBQWMsS0FBSyxhQUNuQixnQkFBZ0IsS0FBSyxlQUNyQixrQkFBa0IsS0FBSyxpQkFDdkIsT0FBTztjQUNMO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBOztBQUdSLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsa0JBQWdCLE1BQU07QUFDcEIsZ0JBQVEsT0FBK0YsS0FBL0YsTUFBTSxVQUF5RixLQUF6RixTQUFTLGVBQWdGLEtBQWhGLGNBQWMsbUJBQWtFLEtBQWxFLGtCQUFrQixjQUFnRCxLQUFoRCxhQUFhLGdCQUFtQyxLQUFuQyxlQUFlLGtCQUFvQixLQUFwQixpQkFDN0UsZ0JBQWdCLElBM0pMLGVBMkp1QixNQUFNLFNBQVMsY0FBYyxrQkFBa0IsYUFBYSxlQUFlO0FBRW5ILG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCxrQkFBZ0IsTUFBTTtBQUNwQixnQkFBTSxVQUFVLFdBQUEsY0FDVixlQUFlLFdBQUEsY0FDZixtQkFBbUIsV0FBQSxjQUNuQixjQUFjLFdBQUEsY0FDZCxnQkFBZ0IsV0FBQSxjQUNoQixrQkFBa0IsV0FBQSxjQUNsQixnQkFBZ0IsSUF2S0wsZUF1S3VCLE1BQU0sU0FBUyxjQUFjLGtCQUFrQixhQUFhLGVBQWU7QUFFbkgsbUJBQU87Ozs7VUFHRixLQUFBO2lCQUFQLCtGQUE2RixNQUFNLFNBQVMsY0FBYyxrQkFBa0IsYUFBYSxlQUFlLGlCQUFpQjtBQUN2TCxnQkFBTSxnQkFBZ0IsSUE3S0wsZUE2S3VCLE1BQU0sU0FBUyxjQUFjLGtCQUFrQixhQUFhLGVBQWU7QUFFbkgsbUJBQU87Ozs7YUEvS1U7Ozs7O0FFTnJCOzs7OzttQ0FXQSxXQUFBOzs7ZUFBQTs7O0FBVEEsUUFBTSxVQUFVO01BQ2Q7UUFDRSxTQUFXOztNQUViO1FBQ0UsWUFBYzs7O1FBSWxCLFdBQWU7Ozs7QUNYZjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxXQUFOLHlCQUFBLGFBQUE7Z0JBQU0sV0FBQTtnQ0FBQTsyQkFBQTs4QkFBQTs7O21CQUFBLFdBQUEsTUFBQTs7VUF1QlosS0FBQTtpQkFBUCx1QkFBcUI7QUFBRSxtQkFBTyxhQUFBLFlBQVksWUF2QnZCOzs7O1VBeUJaLEtBQUE7aUJBQVAsbUJBQWlCLE9BQU87QUFBRSxtQkFBTyxhQUFBLFlBQVksVUF6QjFCLFdBeUI4Qzs7OztVQUUxRCxLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sYUFBQSxZQUFZLFlBM0I5QixXQTJCb0Q7Ozs7YUEzQnBEO01BQWlCLGFBQUE7QUFDcEMsb0JBRG1CLFVBQ1osV0FBVSxTQUFBO0FBRWpCLG9CQUhtQixVQUdaLGtCQUFpQixhQUFBO0FBRXhCLG9CQUxtQixVQUtaLG1CQUFrQixhQUFBO0FBRXpCLG9CQVBtQixVQU9aLHlCQUF3QjtBQUUvQixvQkFUbUIsVUFTWiwwQkFBeUI7QUFFaEMsb0JBWG1CLFVBV1osMEJBQXlCO0FBRWhDLG9CQWJtQixVQWFaLDhCQUE2QjtBQUVwQyxvQkFmbUIsVUFlWixnQ0FBK0I7QUFFdEMsb0JBakJtQixVQWlCWixpQ0FBZ0M7QUFFdkMsb0JBbkJtQixVQW1CWixrQ0FBaUM7QUFFeEMsb0JBckJtQixVQXFCWixrQ0FBaUM7Ozs7QUUzQjFDOzs7OzttQ0FnREEsV0FBQTs7O2VBQUE7OztBQTlDQSxRQUFNLE1BQU87UUE4Q2IsV0FBZTs7OztBQ2hEZjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxZQUFOLHlCQUFBLGNBQUE7Z0JBQU0sWUFBQTtnQ0FBQTs0QkFBQTs4QkFBQTs7O21CQUFBLFlBQUEsTUFBQTs7VUFHWixLQUFBO2lCQUFQLHVCQUFxQjtBQUFFLG1CQUFPLGNBQUEsYUFBYSxZQUh4Qjs7OztVQUtaLEtBQUE7aUJBQVAsaUJBQWUsS0FBSztBQUFFLG1CQUFPLGNBQUEsYUFBYSxRQUx2QixZQUswQzs7OztVQUV0RCxLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQUUsbUJBQU8sY0FBQSxhQUFhLFVBUDNCLFlBT2dEOzs7O2FBUGhEO01BQWtCLGNBQUE7QUFDckMsb0JBRG1CLFdBQ1osT0FBTSxLQUFBOzs7O0FFUGY7Ozs7O21DQVFBLFdBQUE7OztlQUFBOzs7QUFOQSxRQUFNLFVBQVU7TUFDZDtRQUNFLFlBQWM7OztRQUlsQixXQUFlOzs7O0FDUmY7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sYUFBTix5QkFBQSxhQUFBO2dCQUFNLGFBQUE7Z0NBQUE7NkJBQUE7OEJBQUE7OzttQkFBQSxhQUFBLE1BQUE7O1VBdUJaLEtBQUE7aUJBQVAsdUJBQXFCO0FBQUUsbUJBQU8sYUFBQSxZQUFZLFlBdkJ2Qjs7OztVQXlCWixLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQUUsbUJBQU8sYUFBQSxZQUFZLFVBekIxQixhQXlCZ0Q7Ozs7VUFFNUQsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLGFBQUEsWUFBWSxZQTNCOUIsYUEyQnNEOzs7O2FBM0J0RDtNQUFtQixhQUFBO0FBQ3RDLG9CQURtQixZQUNaLFdBQVUsU0FBQTtBQUVqQixvQkFIbUIsWUFHWixrQkFBaUIsYUFBQTtBQUV4QixvQkFMbUIsWUFLWixtQkFBa0IsYUFBQTtBQUV6QixvQkFQbUIsWUFPWix5QkFBd0I7QUFFL0Isb0JBVG1CLFlBU1osMEJBQXlCO0FBRWhDLG9CQVhtQixZQVdaLDBCQUF5QjtBQUVoQyxvQkFibUIsWUFhWiw4QkFBNkI7QUFFcEMsb0JBZm1CLFlBZVosZ0NBQStCO0FBRXRDLG9CQWpCbUIsWUFpQlosaUNBQWdDO0FBRXZDLG9CQW5CbUIsWUFtQlosa0NBQWlDO0FBRXhDLG9CQXJCbUIsWUFxQlosa0NBQWlDOzs7O0FFM0IxQzs7Ozs7bUNBZ0JBLFdBQUE7OztlQUFBOzs7QUFkQSxRQUFNLE1BQU87UUFjYixXQUFlOzs7O0FDaEJmOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGNBQU4seUJBQUEsY0FBQTtnQkFBTSxjQUFBO2dDQUFBOzhCQUFBOzhCQUFBOzs7bUJBQUEsY0FBQSxNQUFBOztVQUdaLEtBQUE7aUJBQVAsdUJBQXFCO0FBQUUsbUJBQU8sY0FBQSxhQUFhLFlBSHhCOzs7O1VBS1osS0FBQTtpQkFBUCxpQkFBZSxLQUFLO0FBQUUsbUJBQU8sY0FBQSxhQUFhLFFBTHZCLGNBSzRDOzs7O1VBRXhELEtBQUE7aUJBQVAsbUJBQWlCLE9BQU87QUFBRSxtQkFBTyxjQUFBLGFBQWEsVUFQM0IsY0FPa0Q7Ozs7YUFQbEQ7TUFBb0IsY0FBQTtBQUN2QyxvQkFEbUIsYUFDWixPQUFNLEtBQUE7Ozs7QUVQZjs7Ozs7bUNBUUEsV0FBQTs7O2VBQUE7OztBQU5BLFFBQU0sVUFBVTtNQUNkO1FBQ0UsWUFBYzs7O1FBSWxCLFdBQWU7Ozs7QUNSZjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxjQUFOLHlCQUFBLGFBQUE7Z0JBQU0sY0FBQTtnQ0FBQTs4QkFBQTs4QkFBQTs7O21CQUFBLGNBQUEsTUFBQTs7VUF1QlosS0FBQTtpQkFBUCx1QkFBcUI7QUFBRSxtQkFBTyxhQUFBLFlBQVksWUF2QnZCOzs7O1VBeUJaLEtBQUE7aUJBQVAsbUJBQWlCLE9BQU87QUFBRSxtQkFBTyxhQUFBLFlBQVksVUF6QjFCLGNBeUJpRDs7OztVQUU3RCxLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sYUFBQSxZQUFZLFlBM0I5QixjQTJCdUQ7Ozs7YUEzQnZEO01BQW9CLGFBQUE7QUFDdkMsb0JBRG1CLGFBQ1osV0FBVSxTQUFBO0FBRWpCLG9CQUhtQixhQUdaLGtCQUFpQixhQUFBO0FBRXhCLG9CQUxtQixhQUtaLG1CQUFrQixhQUFBO0FBRXpCLG9CQVBtQixhQU9aLHlCQUF3QjtBQUUvQixvQkFUbUIsYUFTWiwwQkFBeUI7QUFFaEMsb0JBWG1CLGFBV1osMEJBQXlCO0FBRWhDLG9CQWJtQixhQWFaLDhCQUE2QjtBQUVwQyxvQkFmbUIsYUFlWixnQ0FBK0I7QUFFdEMsb0JBakJtQixhQWlCWixpQ0FBZ0M7QUFFdkMsb0JBbkJtQixhQW1CWixrQ0FBaUM7QUFFeEMsb0JBckJtQixhQXFCWixrQ0FBaUM7Ozs7QUUzQjFDOzs7OzttQ0FnQkEsV0FBQTs7O2VBQUE7OztBQWRBLFFBQU0sTUFBTztRQWNiLFdBQWU7Ozs7QUNoQmY7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sZUFBTix5QkFBQSxjQUFBO2dCQUFNLGVBQUE7Z0NBQUE7K0JBQUE7OEJBQUE7OzttQkFBQSxlQUFBLE1BQUE7O1VBR1osS0FBQTtpQkFBUCx1QkFBcUI7QUFBRSxtQkFBTyxjQUFBLGFBQWEsWUFIeEI7Ozs7VUFLWixLQUFBO2lCQUFQLGlCQUFlLEtBQUs7QUFBRSxtQkFBTyxjQUFBLGFBQWEsUUFMdkIsZUFLNkM7Ozs7VUFFekQsS0FBQTtpQkFBUCxtQkFBaUIsT0FBTztBQUFFLG1CQUFPLGNBQUEsYUFBYSxVQVAzQixlQU9tRDs7OzthQVBuRDtNQUFxQixjQUFBO0FBQ3hDLG9CQURtQixjQUNaLE9BQU0sS0FBQTs7OztBRVBmOzs7OzttQ0FXQSxXQUFBOzs7ZUFBQTs7O0FBVEEsUUFBTSxVQUFVO01BQ2Q7UUFDRSxTQUFXOztNQUViO1FBQ0UsWUFBYzs7O1FBSWxCLFdBQWU7Ozs7QUNYZjs7Ozs7Ozs7ZUFTcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxnQkFBTix5QkFBQSxhQUFBO2dCQUFNLGdCQUFBO2dDQUFBO2dDQUFBOzhCQUFBOzs7bUJBQUEsZ0JBQUEsTUFBQTs7VUF1QlosS0FBQTtpQkFBUCx1QkFBcUI7QUFBRSxtQkFBTyxhQUFBLFlBQVksWUF2QnZCOzs7O1VBeUJaLEtBQUE7aUJBQVAsbUJBQWlCLE9BQU87QUFBRSxtQkFBTyxhQUFBLFlBQVksVUF6QjFCLGdCQXlCbUQ7Ozs7VUFFL0QsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLGFBQUEsWUFBWSxZQTNCOUIsZ0JBMkJ5RDs7OzthQTNCekQ7TUFBc0IsYUFBQTtBQUN6QyxvQkFEbUIsZUFDWixXQUFVLFNBQUE7QUFFakIsb0JBSG1CLGVBR1osa0JBQWlCLGFBQUE7QUFFeEIsb0JBTG1CLGVBS1osbUJBQWtCLGFBQUE7QUFFekIsb0JBUG1CLGVBT1oseUJBQXdCO0FBRS9CLG9CQVRtQixlQVNaLDBCQUF5QjtBQUVoQyxvQkFYbUIsZUFXWiwwQkFBeUI7QUFFaEMsb0JBYm1CLGVBYVosOEJBQTZCO0FBRXBDLG9CQWZtQixlQWVaLGdDQUErQjtBQUV0QyxvQkFqQm1CLGVBaUJaLGlDQUFnQztBQUV2QyxvQkFuQm1CLGVBbUJaLGtDQUFpQztBQUV4QyxvQkFyQm1CLGVBcUJaLGtDQUFpQyxhQUFBOzs7O0FFOUIxQzs7Ozs7bUNBZ0RBLFdBQUE7OztlQUFBOzs7QUE5Q0EsUUFBTSxNQUFPO1FBOENiLFdBQWU7Ozs7QUNoRGY7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0saUJBQU4seUJBQUEsY0FBQTtnQkFBTSxpQkFBQTtnQ0FBQTtpQ0FBQTs4QkFBQTs7O21CQUFBLGlCQUFBLE1BQUE7O1VBR1osS0FBQTtpQkFBUCx1QkFBcUI7QUFBRSxtQkFBTyxjQUFBLGFBQWEsWUFIeEI7Ozs7VUFLWixLQUFBO2lCQUFQLGlCQUFlLEtBQUs7QUFBRSxtQkFBTyxjQUFBLGFBQWEsUUFMdkIsaUJBSytDOzs7O1VBRTNELEtBQUE7aUJBQVAsbUJBQWlCLE9BQU87QUFBRSxtQkFBTyxjQUFBLGFBQWEsVUFQM0IsaUJBT3FEOzs7O2FBUHJEO01BQXVCLGNBQUE7QUFDMUMsb0JBRG1CLGdCQUNaLE9BQU0sS0FBQTs7OztBRVBmOzs7OzttQ0FvQkEsV0FBQTs7O2VBQUE7OztBQWxCQSxRQUFNLFVBQVU7TUFDZDtRQUNFLFNBQVc7O01BRWI7UUFDRSxTQUFXOztNQUViO1FBQ0UsYUFBYTs7TUFFZjtRQUNFLE1BQVE7O01BRVY7UUFDRSxZQUFjOzs7UUFJbEIsV0FBZTs7OztBQ3BCZjs7Ozs7Ozs7ZUFjcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxnQkFBTix5QkFBQSxhQUFBO2dCQUFNLGdCQUFBO2dDQUFBO2dDQUFBOzhCQUFBOzs7bUJBQUEsZ0JBQUEsTUFBQTs7VUF1QlosS0FBQTtpQkFBUCx1QkFBcUI7QUFBRSxtQkFBTyxhQUFBLFlBQVksWUF2QnZCOzs7O1VBeUJaLEtBQUE7aUJBQVAsbUJBQWlCLE9BQU87QUFBRSxtQkFBTyxhQUFBLFlBQVksVUF6QjFCLGdCQXlCbUQ7Ozs7VUFFL0QsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLGFBQUEsWUFBWSxZQTNCOUIsZ0JBMkJ5RDs7OzthQTNCekQ7TUFBc0IsYUFBQTtBQUN6QyxvQkFEbUIsZUFDWixXQUFVLFNBQUE7QUFFakIsb0JBSG1CLGVBR1osa0JBQWlCLGFBQUE7QUFFeEIsb0JBTG1CLGVBS1osbUJBQWtCLGFBQUE7QUFFekIsb0JBUG1CLGVBT1osMEJBQXlCO0FBRWhDLG9CQVRtQixlQVNaLHlCQUF3QixhQUFBO0FBRS9CLG9CQVhtQixlQVdaLDBCQUF5QixhQUFBO0FBRWhDLG9CQWJtQixlQWFaLDhCQUE2QixhQUFBO0FBRXBDLG9CQWZtQixlQWVaLGdDQUErQixhQUFBO0FBRXRDLG9CQWpCbUIsZUFpQlosaUNBQWdDLGFBQUE7QUFFdkMsb0JBbkJtQixlQW1CWixrQ0FBaUM7QUFFeEMsb0JBckJtQixlQXFCWixrQ0FBaUMsYUFBQTs7OztBRW5DMUM7Ozs7O21DQXNXQSxXQUFBOzs7ZUFBQTs7O0FBcFdBLFFBQU0sTUFBTztRQW9XYixXQUFlOzs7O0FDdFdmOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxpQkFBTix5QkFBQSxjQUFBO2dCQUFNLGlCQUFBO2dDQUFBO2lDQUFBOzhCQUFBOzs7YUFBQTtNQUF1QixjQUFBO0FBQzFDLG9CQURtQixnQkFDWixPQUFNLEtBQUE7Ozs7QUVQZjs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSx3QkFBTix5QkFBQSxVQUFBO2dCQUFNLHdCQUFBO2dDQUFBO3dDQUFBOzhCQUFBOzs7YUFBQTtNQUE4QixhQUFBOzs7O0FFSm5EOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLHlCQUFOLHlCQUFBLFdBQUE7Z0JBQU0seUJBQUE7Z0NBQUE7eUNBQUE7OEJBQUE7OzthQUFBO01BQStCLGNBQUE7Ozs7QUVKcEQ7Ozs7O21DQVFBLFdBQUE7OztlQUFBOzs7QUFOQSxRQUFNLFVBQVU7TUFDZDtRQUNFLFlBQWM7OztRQUlsQixXQUFlOzs7O0FDUmY7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sNEJBQU4seUJBQUEsYUFBQTtnQkFBTSw0QkFBQTtnQ0FBQTs0Q0FBQTs4QkFBQTs7O21CQUFBLDRCQUFBLE1BQUE7O1VBdUJaLEtBQUE7aUJBQVAsdUJBQXFCO0FBQUUsbUJBQU8sYUFBQSxZQUFZLFlBdkJ2Qjs7OztVQXlCWixLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQUUsbUJBQU8sYUFBQSxZQUFZLFVBekIxQiw0QkF5QitEOzs7O1VBRTNFLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxhQUFBLFlBQVksWUEzQjlCLDRCQTJCcUU7Ozs7YUEzQnJFO01BQWtDLGFBQUE7QUFDckQsb0JBRG1CLDJCQUNaLFdBQVUsU0FBQTtBQUVqQixvQkFIbUIsMkJBR1osa0JBQWlCLGFBQUE7QUFFeEIsb0JBTG1CLDJCQUtaLG1CQUFrQixhQUFBO0FBRXpCLG9CQVBtQiwyQkFPWix5QkFBd0I7QUFFL0Isb0JBVG1CLDJCQVNaLDBCQUF5QjtBQUVoQyxvQkFYbUIsMkJBV1osMEJBQXlCO0FBRWhDLG9CQWJtQiwyQkFhWiw4QkFBNkI7QUFFcEMsb0JBZm1CLDJCQWVaLGdDQUErQjtBQUV0QyxvQkFqQm1CLDJCQWlCWixpQ0FBZ0M7QUFFdkMsb0JBbkJtQiwyQkFtQlosa0NBQWlDO0FBRXhDLG9CQXJCbUIsMkJBcUJaLGtDQUFpQzs7OztBRTNCMUM7Ozs7O21DQW1CQSxXQUFBOzs7ZUFBQTs7O0FBakJBLFFBQU0sTUFBTztRQWlCYixXQUFlOzs7O0FDbkJmOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLDZCQUFOLHlCQUFBLGNBQUE7Z0JBQU0sNkJBQUE7Z0NBQUE7NkNBQUE7OEJBQUE7OzttQkFBQSw2QkFBQSxNQUFBOztVQUdaLEtBQUE7aUJBQVAsdUJBQXFCO0FBQUUsbUJBQU8sY0FBQSxhQUFhLFlBSHhCOzs7O1VBS1osS0FBQTtpQkFBUCxpQkFBZSxLQUFLO0FBQUUsbUJBQU8sY0FBQSxhQUFhLFFBTHZCLDZCQUsyRDs7OztVQUV2RSxLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQUUsbUJBQU8sY0FBQSxhQUFhLFVBUDNCLDZCQU9pRTs7OzthQVBqRTtNQUFtQyxjQUFBO0FBQ3RELG9CQURtQiw0QkFDWixPQUFNLEtBQUE7Ozs7QUVQZjs7Ozs7Ozs7Ozs7OztNQUVvQixVQUFRLFdBQUE7ZUFBUixPQUFBOztNQUNBLFdBQVMsV0FBQTtlQUFULFFBQUE7O01BQ0EsWUFBVSxXQUFBO2VBQVYsUUFBQTs7TUFDQSxhQUFXLFdBQUE7ZUFBWCxTQUFBOztNQUNBLGFBQVcsV0FBQTtlQUFYLFFBQUE7O01BQ0EsY0FBWSxXQUFBO2VBQVosU0FBQTs7TUFDQSxlQUFhLFdBQUE7ZUFBYixRQUFBOztNQUNBLGdCQUFjLFdBQUE7ZUFBZCxTQUFBOztNQUNBLGVBQWEsV0FBQTtlQUFiLFFBQUE7O01BQ0EsZ0JBQWMsV0FBQTtlQUFkLFNBQUE7O01BQ0EsdUJBQXFCLFdBQUE7ZUFBckIsUUFBQTs7TUFDQSx3QkFBc0IsV0FBQTtlQUF0QixTQUFBOztNQUNBLDJCQUF5QixXQUFBO2VBQXpCLFFBQUE7O01BQ0EsNEJBQTBCLFdBQUE7ZUFBMUIsU0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZwQjs7Ozs7Ozs7Ozs7OztNQU1hLGFBQVcsV0FBQTtlQUFYOztNQUVBLGVBQWEsV0FBQTtlQUFiOztNQUVBLGlCQUFlLFdBQUE7ZUFBZjs7TUFFQSxTQUFPLFdBQUE7ZUFBUDs7TUFFQSxjQUFZLFdBQUE7ZUFBWjs7TUFjQSxrQkFBZ0IsV0FBQTtlQUFoQjs7TUFpQ2IsU0FBb0MsV0FBQTtlQUFwQzs7Ozs7Ozs7OztBQXZETyxRQUFNLGNBQWM7QUFFcEIsUUFBTSxnQkFBZ0I7QUFFdEIsUUFBTSxrQkFBa0I7QUFFeEIsUUFBTSxVQUFXO0FBRWpCLFFBQU0sZUFBZ0I7QUFjdEIsUUFBTSxtQkFBb0I7QUFvQmpDLFFBQU0sT0FBTyxjQUFBO0FBQWIsUUFDTSxPQUFPO01BQ0w7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7O0FBR1IsUUFBTSx1QkFBdUIsZUFBQSxRQUFjLFNBQVM7UUFFcEQsV0FBZTs7OztBQzdEZjs7Ozs7Ozs7ZUFXcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRnJCLFFBQVEsZUFBaUIsY0FBQSxnQkFBakI7QUFFTyxRQUFNLHdCQUFOLDJCQUFBO3NDQUNELE9BQU8sU0FBTzs4QkFEUDtBQUVqQixhQUFLLFFBQVE7QUFDYixhQUFLLFVBQVU7O21CQUhFLHdCQUFBOztVQU1uQixLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsc0JBQWE7QUFDWCxtQkFBTyxLQUFLOzs7OztVQUdQLEtBQUE7aUJBQVAsdUJBQTBDO2dCQUF2QixpQkFBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQWlCO0FBQ2xDLGdCQUFJLGlCQUFpQjtBQUVyQixnQkFBSSxnQkFBZ0I7QUFDbEIsK0JBQWlCO2dCQUFFLHNCQUFBO2dCQUFGLE9BQXdCLG1CQUFHOztBQUc5QyxnQkFBTSxRQUFRLHFDQUFxQyxpQkFDN0MsVUFBVSwwQkFBMEIsaUJBQ3BDLHdCQUF3QixJQXZCYix1QkF1QnVDLE9BQU87QUFFL0QsbUJBQU87Ozs7VUFHRixLQUFBO2lCQUFQLDRCQUEwQixnQkFBdUM7Z0JBQXZCLGlCQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBaUI7QUFDekQsZ0JBQUksZ0JBQWdCO0FBQ2xCLCtCQUFpQjtnQkFBRSxzQkFBQTtnQkFBRixPQUF3QixtQkFBRzs7QUFHOUMsZ0JBQU0sUUFBUSxxQ0FBcUMsaUJBQzdDLFVBQVUsMEJBQTBCLGlCQUNwQyx3QkFBd0IsSUFuQ2IsdUJBbUN1QyxPQUFPO0FBRS9ELG1CQUFPOzs7O2FBckNVOztBQXlDckIsa0RBQThDLGdCQUFnQjtBQUM1RCxVQUFNLE9BQU8sZUFBZSxJQUFJLFNBQUMsZUFBa0I7QUFDM0MsWUFBTSxPQUFNLGNBQWM7QUFFMUIsZUFBTztVQUVULE1BQU0sS0FBSyxLQUFLLFdBQUEsZUFDaEIsUUFBUSxhQUFhO0FBRTNCLG1CQUFhO0FBRWIsYUFBTzs7QUFHVCx1Q0FBbUMsZ0JBQWdCO0FBQ2pELFVBQU0sZUFBZTtRQUNiLGNBQUE7UUFDQSxjQUFBO1FBQ0EsY0FBQTtTQUVGLFVBQVUsYUFBYSxJQUFJLFNBQUMsYUFBZ0I7QUFDMUMsWUFBTSxRQUFRLHdCQUF3QixnQkFBZ0I7QUFFdEQsZUFBTzs7QUFHZixhQUFPOztBQUdULHFDQUFpQyxnQkFBZ0IsYUFBYTtBQUM1RCxVQUFNLFdBQVcsZUFBZSxPQUFPLFNBQUMsV0FBVSxlQUFrQjtBQUNsRSxZQUFNLFdBQVUsY0FBYyxXQUFXO0FBRXpDLFlBQUksVUFBUztBQUNYLG9CQUFTLEtBQUs7O0FBR2hCLGVBQU87U0FDTjtBQUVILGVBQVM7QUFFVCxVQUFNLGlCQUFpQixTQUFTLEtBQUssV0FBQSxlQUMvQixVQUFZLGdCQUFnQixjQUFBLHFCQUF1QixnQkFBZ0IsY0FBQSxzQkFDdkQsT0FBcUIsT0FBZixnQkFBZSxVQUNuQixPQUFxQixPQUFmLGdCQUFlO0FBRXpDLFVBQU0sUUFBUTtBQUVkLFlBQU0sZUFBZTtBQUVyQixhQUFPOztBQUdULDBCQUFzQixPQUFPO0FBQzNCLFVBQUksYUFBYSxHQUNiLFNBQVMsTUFBTTtBQUVuQixhQUFPLGFBQWEsUUFBUTtBQUMxQixZQUFNLFlBQVksTUFBTSxhQUNsQixnQkFBZ0IsVUFBVTtBQUVoQyxZQUFJLHVCQUF1QixVQUFVO0FBRXJDLFlBQUksYUFBYSxhQUFhO0FBRTlCLGVBQU8sYUFBYSxRQUFRO0FBQzFCLGNBQU0sWUFBWSxNQUFNLGFBQ2xCLGdCQUFnQixVQUFVO0FBRWhDLGNBQUksa0JBQWtCLGVBQWU7Z0JBUW5DO0FBUEEsZ0JBQU0sdUJBQXVCLFVBQVU7QUFFdkMsbUNBQ0UsbUJBQUcsc0JBQUEsT0FDSCxtQkFBRztBQUdMLFlBQUEsY0FBQSxXQUFVLHNCQUFWLE1BQUEsWUFBZ0MsbUJBQUc7QUFFbkMsZ0JBQU0sUUFBUSxZQUNSLGNBQWM7QUFFcEIsa0JBQU0sT0FBTyxPQUFPO0FBRXBCLHFCQUFTLE1BQU07aUJBQ1Y7QUFDTDs7O0FBSUo7QUFFQSxpQkFBUyxNQUFNOzs7Ozs7QUNqSm5COzs7Ozs7Ozs7Ozs7O01BU2dCLDBCQUF3QixXQUFBO2VBQXhCOztNQVNBLHdDQUFzQyxXQUFBO2VBQXRDOztNQVFBLGtEQUFnRCxXQUFBO2VBQWhEOztNQU9oQixTQUlFLFdBQUE7ZUFKRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMUJBLFFBQVEsbUJBQXFCLGFBQUEsZUFBckI7QUFFRCx3Q0FBb0M7QUFDekMsVUFBUSxVQUFZLGVBQUEsY0FBWixTQUNGLHdCQUF3Qix1QkFBQSxRQUFzQixlQUM5QyxRQUFRLHlDQUF5QyxTQUFTLHdCQUMxRCxnQkFBZ0IsZUFBQSxjQUFjLFVBQVU7QUFFOUMsYUFBTzs7QUFHRixvREFBZ0QsdUJBQXVCO0FBQzVFLFVBQVEsVUFBWSxlQUFBLGNBQVosU0FDRixRQUFRLHlDQUF5QyxTQUFTLHdCQUMxRCxnQkFBZ0IsZUFBQSxjQUFjLFVBQVU7QUFFOUMsYUFBTzs7QUFHRiw4REFBMEQsU0FBUyx1QkFBdUI7QUFDL0YsVUFBTSxRQUFRLHlDQUF5QyxTQUFTLHdCQUMxRCxnQkFBZ0IsZUFBQSxjQUFjLFVBQVU7QUFFOUMsYUFBTzs7UUFHVCxXQUFlO01BQ2I7TUFDQTtNQUNBOztBQUdGLHNEQUFrRCxTQUFTLHVCQUF1QjtBQUNoRixVQUFNLHVCQUF1QixzQkFBc0I7QUFFbkQsZ0JBQ0UsbUJBQUcsc0JBQUEsT0FDSCxtQkFBRztBQUdMLFVBQU0sUUFBUSxpQkFBaUI7QUFFL0IsYUFBTzs7Ozs7QUNqRFQ7Ozs7Ozs7Ozs7Ozs7TUFFZ0IsNkJBQTJCLFdBQUE7ZUFBM0I7O01BTUEsOEJBQTRCLFdBQUE7ZUFBNUI7O01BTUEscUNBQW1DLFdBQUE7ZUFBbkM7O01BTUEsc0NBQW9DLFdBQUE7ZUFBcEM7O01BTUEsdUNBQXFDLFdBQUE7ZUFBckM7O01BTUEsZ0VBQThELFdBQUE7ZUFBOUQ7OztBQTlCVCx5Q0FBcUMsaUJBQWlCO0FBQzNELFVBQU0sV0FBVyxnQkFBZ0IsUUFBUSxZQUFZO0FBRXJELGFBQU87O0FBR0YsMENBQXNDLGtCQUFrQjtBQUM3RCxVQUFNLFdBQVcsaUJBQWlCLFFBQVEsY0FBYztBQUV4RCxhQUFPOztBQUdGLGlEQUE2QyxVQUFVO0FBQzVELFVBQU0sMEJBQTJCLEdBQVcsT0FBVCxVQUFTO0FBRTVDLGFBQU87O0FBR0Ysa0RBQThDLFVBQVU7QUFDN0QsVUFBTSwyQkFBNEIsR0FBVyxPQUFULFVBQVM7QUFFN0MsYUFBTzs7QUFHRixtREFBK0MsVUFBVTtBQUM5RCxVQUFNLDRCQUE2QixHQUFXLE9BQVQsVUFBUztBQUU5QyxhQUFPOztBQUdGLDRFQUF3RSxVQUFVLHVCQUF1QjtBQUM5RyxVQUFNLDZCQUE4QixHQUFjLE9BQVosVUFBUyxLQUF5QixPQUF0Qix1QkFBc0I7QUFFeEUsYUFBTzs7Ozs7QUNuQ1Q7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGdCQUFOLHlCQUFBLGlCQUFBO2dCQUFNLGdCQUFBO2dDQUFBO2dDQUFBOzhCQUFBOzs7bUJBQUEsZ0JBQUE7O1VBQ25CLEtBQUE7aUJBQUEsaUJBQVE7QUFBRSxtQkFBTyxLQUFBLGdCQURFLGVBQUEsWUFDSSxTQUFOLE1BQUssS0FBQSxNQURIOzs7OztVQUdaLEtBQUE7aUJBQVAseUJBQXVCLGFBQWE7QUFDbEMsZ0JBQU0sc0JBQXNCLFlBQVksZUFDbEMsa0JBQWtCLHFCQUNsQixXQUFXLElBQUEsVUFBQSw2QkFBNEIsa0JBQ3ZDLGFBQWEsWUFBWSxpQkFDekIsZ0JBQWdCLElBUkwsZUFRdUIsVUFBVTtBQUVsRCxtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAsMEJBQXdCLGNBQWM7QUFDcEMsZ0JBQU0sdUJBQXVCLGFBQWEsZUFDcEMsbUJBQW1CLHNCQUNuQixXQUFXLElBQUEsVUFBQSw4QkFBNkIsbUJBQ3hDLGFBQWEsYUFBYSxpQkFDMUIsZ0JBQWdCLElBbEJMLGVBa0J1QixVQUFVO0FBRWxELG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sY0FBQSxnQkFBZ0IsMEJBdkI3RCxnQkF1QnNHLFVBQVU7Ozs7YUF2QmhIO01BQXNCLGNBQUE7Ozs7QUVOM0M7Ozs7Ozs7O2VBSXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sY0FBTix5QkFBQSxpQkFBQTtnQkFBTSxjQUFBO2dDQUFBOzhCQUFBOzhCQUFBOzs7bUJBQUEsY0FBQTs7VUFDbkIsS0FBQTtpQkFBQSxpQkFBUTtBQUFFLG1CQUFPLEtBQUEsZ0JBREUsYUFBQSxZQUNJLFNBQU4sTUFBSyxLQUFBLE1BREg7Ozs7O1VBR1osS0FBQTtpQkFBUCxtQ0FBaUMsT0FBTyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxjQUFBLGdCQUFnQiwwQkFBMEIsT0FBTyxVQUFVOzs7O2FBSC9HO01BQW9CLGNBQUE7Ozs7QUVKekM7Ozs7Ozs7O2VBSXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLHNCQUFOLHlCQUFBLGFBQUE7Z0JBQU0sc0JBQUE7Z0NBQUE7c0NBQUE7OEJBQUE7OzttQkFBQSxzQkFBQSxNQUFBOztVQUNaLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLFNBQUEsUUFBWSwwQkFEekQsc0JBQ3dHLFVBQVU7Ozs7YUFEbEg7TUFBNEIsU0FBQTs7OztBRUpqRDs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxlQUFOLHlCQUFBLGlCQUFBO2dCQUFNLGVBQUE7Z0NBQUE7K0JBQUE7OEJBQUE7OzttQkFBQSxlQUFBOztVQUNuQixLQUFBO2lCQUFBLGlCQUFRO0FBQUUsbUJBQU8sS0FBQSxnQkFERSxjQUFBLFlBQ0ksU0FBTixNQUFLLEtBQUEsTUFESDs7Ozs7VUFHWixLQUFBO2lCQUFQLG1DQUFpQyxPQUFPLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGNBQUEsZ0JBQWdCLDBCQUEwQixPQUFPLFVBQVU7Ozs7YUFIL0c7TUFBcUIsY0FBQTs7OztBRUoxQzs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sdUJBQU4seUJBQUEsY0FBQTtnQkFBTSx1QkFBQTtnQ0FBQTt1Q0FBQTs4QkFBQTs7O21CQUFBLHVCQUFBLE1BQUE7O1VBQ1osS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sVUFBQSxRQUFhLDBCQUQxRCx1QkFDMEcsVUFBVTs7OzthQURwSDtNQUE2QixVQUFBOzs7O0FFSmxEOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSx3QkFBTix5QkFBQSxhQUFBO2dCQUFNLHdCQUFBO2dDQUFBO3dDQUFBOzhCQUFBOzs7bUJBQUEsd0JBQUEsTUFBQTs7VUFDWixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxTQUFBLFFBQVksMEJBRHpELHdCQUMwRyxVQUFVOzs7O2FBRHBIO01BQThCLFNBQUE7Ozs7QUVKbkQ7Ozs7Ozs7O2VBSXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLHlCQUFOLHlCQUFBLGNBQUE7Z0JBQU0seUJBQUE7Z0NBQUE7eUNBQUE7OEJBQUE7OzttQkFBQSx5QkFBQSxNQUFBOztVQUNaLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLFVBQUEsUUFBYSwwQkFEMUQseUJBQzRHLFVBQVU7Ozs7YUFEdEg7TUFBK0IsVUFBQTs7OztBRUpwRDs7Ozs7Ozs7Ozs7OztNQUllLE9BQUssV0FBQTtlQUFMOztNQUFPLE1BQUksV0FBQTtlQUFKOztNQUFNLFFBQU0sV0FBQTtlQUFOOztNQUFRLE9BQUssV0FBQTtlQUFMOztNQUFPLE1BQUksV0FBQTtlQUFKOztNQUFNLE1BQUksV0FBQTtlQUFKOztNQUFNLE1BQUksV0FBQTtlQUFKOztNQUFNLFNBQU8sV0FBQTtlQUFQOztNQUFTLGVBQWEsV0FBQTtlQUFiOztNQUFlLGVBQWEsV0FBQTtlQUFiOztNQUFlLGdCQUFjLFdBQUE7ZUFBZDs7TUFFcEYsZ0JBQWMsV0FBQTtlQUFkOzs7O0FBRlQsUUFBUSxRQUF3RyxXQUFBLGVBQXhHO0FBQVIsUUFBZSxPQUFpRyxXQUFBLGVBQWpHO0FBQWYsUUFBcUIsU0FBMkYsV0FBQSxlQUEzRjtBQUFyQixRQUE2QixRQUFtRixXQUFBLGVBQW5GO0FBQTdCLFFBQW9DLE9BQTRFLFdBQUEsZUFBNUU7QUFBcEMsUUFBMEMsT0FBc0UsV0FBQSxlQUF0RTtBQUExQyxRQUFnRCxPQUFnRSxXQUFBLGVBQWhFO0FBQWhELFFBQXNELFVBQTBELFdBQUEsZUFBMUQ7QUFBdEQsUUFBK0QsZ0JBQWlELFdBQUEsZUFBakQ7QUFBL0QsUUFBOEUsZ0JBQWtDLFdBQUEsZUFBbEM7QUFBOUUsUUFBNkYsaUJBQW1CLFdBQUEsZUFBbkI7QUFFN0YsNEJBQXdCLFFBQVEsUUFBUTtBQUM3QyxhQUFPLFFBQVEsU0FBQyxVQUFhO0FBQzNCLFlBQU0seUJBQXlCLE9BQU8sU0FBUztBQUUvQyxZQUFJLENBQUMsd0JBQXdCO0FBQzNCLGlCQUFPOzs7Ozs7O0FDWGI7Ozs7O21DQVlBLFdBQUE7OztlQUF3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBVCwwQkFBc0IsTUFBTTtBQUN6QyxVQUFNLGtCQUFrQjtBQUV4QixjQUFRO0FBRVIscUJBQWU7QUFFZiwyQkFBcUI7O0FBR3ZCLHFCQUFpQixpQkFBaUI7QUFDaEMsVUFBTSxhQUFhLGdCQUFnQjtBQUVuQyxnQ0FBMEI7QUFFMUIsOEJBQXdCO0FBRXhCLDZCQUF1QjtBQUV2QiwrQkFBeUI7QUFFekIsaUJBQVcsUUFBUSxTQUFDLFdBQWM7QUFDaEMsWUFBTSwyQkFBMkIsVUFBVTtBQUUzQyxZQUFJLDBCQUEwQjtBQUM1QixjQUFNLG9CQUFrQjtBQUV4QixrQkFBUTs7OztBQUtkLDRCQUF3QixpQkFBaUI7QUFDdkMsVUFBTSxhQUFhLGdCQUFnQjtBQUVuQyxNQUFBLElBQUEsT0FBQSxRQUFPLFlBQVksU0FBQyxXQUFjO0FBQ2hDLFlBQU0sdUJBQWlDLFlBQVQsV0FBcUIsY0FBQTtBQUVuRCxZQUFJLENBQUMsc0JBQXNCO0FBQ3pCLGlCQUFPOzs7QUFJWCxpQkFBVyxRQUFRLFNBQUMsV0FBYztBQUNoQyxZQUFNLDJCQUEyQixVQUFVO0FBRTNDLFlBQUksMEJBQTBCO0FBQzVCLGNBQU0sb0JBQWtCO0FBRXhCLHlCQUFlOzs7O0FBS3JCLGtDQUE4QixpQkFBaUI7QUFDN0MsVUFBTSxXQUFXLGdCQUFnQixlQUMzQixhQUFhLGdCQUFnQixpQkFDN0IsMkJBQTJCO0FBRWpDLGlCQUFTO0FBQ1AsWUFBTSxjQUFhLGdCQUFnQixpQkFDN0IsbUJBQW1CLFlBQVc7QUFFcEMsWUFBSSxtQkFBbUIsR0FBRztBQUN4Qjs7QUFHRixZQUFNLGlCQUFpQixJQUFBLE9BQUEsT0FBTSxjQUN2Qiw2QkFBNkIsZUFBZTtBQUVsRCxZQUFJLDRCQUE0QjtBQUM5Qjs7QUFHRixZQUFNLDBCQUEwQjtBQUVoQyxpQ0FBeUIsS0FBSztBQUU5QiwwQkFBa0I7O0FBR3BCLHdCQUFrQjtBQUVsQixNQUFBLElBQUEsT0FBQSxlQUFjLDBCQUEwQixTQUFDLDBCQUE0QjtBQUNuRSxZQUFNLGtDQUFrQyx5QkFBd0I7QUFFaEUsWUFBSSxvQ0FBb0MsVUFBVTtBQUNoRCw0QkFBa0I7QUFFbEIsaUJBQU87OztBQUlYLFVBQUksb0JBQW9CLE1BQU07WUFLNUI7QUFKQSxZQUFNLDRCQUE0QixnQkFBZ0IsaUJBQzVDLFFBQVEsR0FDUixjQUFjO0FBRXBCLFFBQUEsZUFBQSxZQUFXLE9BQVgsTUFBQSxhQUFBO1VBQWtCO1VBQU87VUFBekIsT0FBc0MsbUJBQUc7O0FBRzNDLGlCQUFXLFFBQVEsU0FBQyxXQUFjO0FBQ2hDLFlBQU0sMkJBQTJCLFVBQVU7QUFFM0MsWUFBSSwwQkFBMEI7QUFDNUIsY0FBTSxvQkFBa0I7QUFFeEIsK0JBQXFCOzs7O0FBSzNCLG9DQUFnQyxpQkFBaUI7QUFDL0MsVUFBTSxhQUFhLGdCQUFnQixpQkFDN0Isc0JBQXNCLFdBQVcsS0FBSyxTQUFDLFdBQUE7ZUFBd0IsWUFBVCxXQUFxQixVQUFBO1lBQXlCO0FBRTFHLFVBQUksd0JBQXdCLE1BQU07QUFDaEMsWUFBTSxRQUFRLFdBQVcsUUFBUSxzQkFDM0IsY0FBYyxxQkFDZCxnQkFBZ0IsV0FBQSxRQUFjLGdCQUFnQixjQUM5QyxRQUFRLE9BQ1IsY0FBYztBQUVwQixtQkFBVyxPQUFPLE9BQU8sYUFBYTs7O0FBSTFDLHFDQUFpQyxpQkFBaUI7QUFDaEQsVUFBSSxhQUFhLGdCQUFnQjtBQUVqQyxVQUFNLHdCQUF3QixXQUFXLE9BQU8sU0FBQyxXQUFBO2VBQXdCLFlBQVQsV0FBcUIsV0FBQTtVQUMvRSw4QkFBOEIsc0JBQXNCO0FBRTFELFVBQUksOEJBQThCLEdBQUc7QUFDbkMsWUFBTSwyQkFBMkIsSUFBQSxPQUFBLE1BQUssd0JBQ2hDLFFBQVEsV0FBVyxRQUFRLDJCQUMzQixRQUFRLEdBQ1IsY0FBYyxRQUFRLEdBQ3RCLGVBQWUsMEJBQ2YsZ0JBQWdCLFdBQUEsUUFBYyxpQkFBaUIsZUFDL0Msb0JBQW9CLFdBQVcsT0FBTyxPQUFPLGFBQWE7QUFFaEUsMEJBQWtCO0FBRWxCLHFCQUFhLGdCQUFnQjtBQUU3QiwwQkFBa0I7QUFFbEIsUUFBQSxJQUFBLE9BQUEsU0FBUSxZQUFZOzs7QUFJeEIsc0NBQWtDLGlCQUFpQjtBQUNqRCxVQUFNLGFBQWEsZ0JBQWdCLGlCQUM3Qix3QkFBd0IsV0FBVyxLQUFLLFNBQUMsV0FBQTtlQUF3QixZQUFULFdBQXFCLFlBQUE7WUFBMkI7QUFFOUcsVUFBSSwwQkFBMEIsTUFBTTtBQUNsQyxZQUFNLFFBQVEsV0FBVyxRQUFRLHdCQUMzQixjQUFjLHVCQUNkLGdCQUFnQixXQUFBLFFBQWMsZ0JBQWdCLGNBQzlDLFFBQVEsT0FDUixjQUFjO0FBRXBCLG1CQUFXLE9BQU8sT0FBTyxhQUFhOzs7QUFJMUMsdUNBQW1DLGlCQUFpQjtBQUNsRCxVQUFNLGFBQWEsZ0JBQWdCLGlCQUM3Qix5QkFBeUIsV0FBVyxLQUFLLFNBQUMsV0FBQTtlQUF3QixZQUFULFdBQXFCLGFBQUE7WUFBNEI7QUFFaEgsVUFBSSwyQkFBMkIsTUFBTTtBQUNuQyxZQUFNLG1DQUFtQyx1QkFBdUIsaUJBQzFELHVCQUF1QixpQ0FBaUMsS0FBSyxTQUFDLGlDQUFBO2lCQUFvRSxZQUEvQixpQ0FBMkMsV0FBQTtjQUEwQjtBQUU5SyxZQUFJLHlCQUF5QixNQUFNO2NBYWpDO0FBWkEsY0FBSSxRQUFRLGlDQUFpQyxRQUFRLHVCQUNqRCxRQUFRLE9BQ1IsY0FBYztBQUVsQixjQUFNLHdCQUF3QixpQ0FBaUMsT0FBTyxPQUFPO0FBRTdFLGtCQUFRLFdBQVcsUUFBUTtBQUUzQixrQkFBUSxRQUFRO0FBRWhCLHdCQUFjO0FBRWQsVUFBQSxlQUFBLFlBQVcsT0FBWCxNQUFBLGFBQUE7WUFBa0I7WUFBTztZQUF6QixPQUFzQyxtQkFBRzs7QUFHM0MsWUFBTSxlQUFlLHdCQUNmLGdCQUFnQixXQUFBLFFBQWMsaUJBQWlCO0FBRXJELFlBQUksU0FBUSxXQUFXLFFBQVEseUJBQzNCLFNBQVEsUUFDUixlQUFjO0FBRWxCLG1CQUFXLE9BQU8sUUFBTyxjQUFhO0FBRXRDLGlCQUFRO0FBRVIsdUJBQWM7QUFFZCxZQUFNLG1CQUFtQixXQUFXLE9BQU8sUUFBTyxlQUM1QywwQkFBMEIsY0FBYztBQUU5QyxRQUFBLElBQUEsT0FBQSxTQUFRLHlCQUF5Qjs7Ozs7O0FDM05yQzs7Ozs7Ozs7ZUFFcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sWUFBTiwyQkFBQTs0QkFBTTs4QkFBQTs7bUJBQUEsWUFBQTs7VUFDbkIsS0FBQTtpQkFBQSxtQkFBVSxXQUFXO0FBQ25CLGdCQUFJLFVBQVU7QUFFZCxnQkFBUSxjQUFnQixLQUFoQjtBQUVSLGdCQUFhLFlBQVQsV0FBcUIsY0FBYTtBQUNwQyxrQkFBTSxhQUFhLEtBQUssUUFBUTtBQUVoQyx3QkFBVTs7QUFHWixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsbUJBQStCO0FBQXZCLHFCQUFBLE9BQUEsVUFBQSxRQUFHLHFCQUFILElBQUEsTUFBQSxPQUFBLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLGlDQUFILFFBQUEsVUFBQTs7QUFDTixnQkFBTSxVQUFVLG1CQUFtQjtBQUVuQyxnQkFBSTtBQUVKLGdCQUFRLGFBQWUsUUFBZjtBQUVSLGdCQUFJLFlBQVksS0FBSyxLQUFLO0FBRTFCLGdCQUFJLGNBQWMsTUFBTTtrQkFLYjtBQUpULDBCQUFZO0FBRVoseUJBQVcsS0FBSztBQUVoQix1QkFBUyxjQUFBLFdBQVUsTUFBVixNQUFBLFlBQWdCLG1CQUFHLG9CQUFBLE9BQW5CO2dCQUF1Qzs7bUJBQzNDO2tCQUNJO0FBQVQsdUJBQVMsZUFBQSxXQUFVLFNBQVYsTUFBQSxhQUFtQixtQkFBRyxvQkFBQSxPQUF0QjtnQkFBMEM7OztBQUdyRCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsY0FBSyxTQUFTOztBQUNaLGdCQUFRLGFBQWUsUUFBZixZQUNGLFlBQVksV0FBVyxLQUFLLFNBQUMsWUFBYztBQUN6QyxrQkFBTSxVQUFVLE1BQUssVUFBVTtBQUUvQixrQkFBSSxTQUFTO0FBQ1gsdUJBQU87O2tCQUVMO0FBRVosbUJBQU87Ozs7YUEvQ1U7Ozs7O0FFRnJCOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxnQkFBTix5QkFBQSxXQUFBO2dCQUFNLGdCQUFBO2dDQUFBOzhCQUNQLE1BQUk7OEJBREc7OztBQUlqQixjQUFLLE9BQU87OzttQkFKSyxnQkFBQTs7VUFPbkIsS0FBQTtpQkFBQSxtQkFBVTtBQUNSLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGlCQUFRLGVBQWU7QUFDckIsZ0JBQU0sT0FBTyxjQUFjLFdBQ3JCLGFBQWMsS0FBSyxTQUFTO0FBRWxDLG1CQUFPOzs7O2FBZlU7TUFBc0IsV0FBQTs7OztBRUozQzs7Ozs7Ozs7ZUFRcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxzQkFBTix5QkFBQSxNQUFBO2dCQUFNLHNCQUFBO2dDQUFBO3NDQUFBOzhCQUFBOzs7bUJBQUEsc0JBQUEsTUFBQTs7VUFDWixLQUFBO2lCQUFQLDZDQUEyQyxNQUFNLDBCQUEwQixlQUFlO0FBQ3hGLGdCQUFJLHNCQUFzQjtBQUUxQixnQkFBSSxjQUFjLEtBQUs7QUFFdkIsMEJBQWMsWUFBWSxNQUFNO0FBRWhDLHFDQUF5QixRQUFRLFNBQUMseUJBQTRCO0FBQzVELGtCQUFNLGFBQWEsd0JBQXdCLGlCQUNyQyxRQUFRLFlBQVksUUFBUTtBQUVsQyxrQkFBSSxRQUFRLElBQUk7QUFDZCxvQkFBTSxRQUFRLE9BQ1IsY0FBYztBQUVwQiw0QkFBWSxPQUFPLE9BQU87OztBQUk5QixnQkFBTSxvQkFBb0IsWUFBWTtBQUV0QyxnQkFBSSxzQkFBc0IsR0FBRztBQUMzQixrQkFBSSxDQUFDLGVBQWU7QUFDbEIsb0JBQU0sV0FBVyxLQUFLO0FBRXRCLHNCQUFNLElBQUksTUFBTyxtREFBMkQsT0FBVCxVQUFTOzs7QUFJaEYsZ0JBQUksb0JBQW9CLEdBQUc7QUFDekIsa0JBQU0sWUFBVyxLQUFLLFdBQ2hCLDBCQUEwQixJQUFBLFVBQUEscUNBQW9DLFlBQzlELE9BQU8seUJBQ1AsWUFBWSxPQUNaLGtCQUFrQixVQUFBO0FBRXhCLG9DQUFzQixJQXJDUCxxQkFxQytCLE1BQU0sV0FBVyxhQUFhOztBQUc5RSxtQkFBTzs7OzthQXhDVTtNQUE0QixjQUFBOzs7O0FFUmpEOzs7Ozs7Ozs7Ozs7O01BZWdCLFlBQVUsV0FBQTtlQUFWOztNQVFBLGFBQVcsV0FBQTtlQUFYOztNQXFEQSxlQUFhLFdBQUE7ZUFBYjs7TUFxREEsMEJBQXdCLFdBQUE7ZUFBeEI7O01BTUEsNEJBQTBCLFdBQUE7ZUFBMUI7O01Bc0VBLDZCQUEyQixXQUFBO2VBQTNCOztNQThEQSxnQ0FBOEIsV0FBQTtlQUE5Qjs7Ozs7O0FBcFFoQixRQUFRLGVBQTRFLGNBQUEsTUFBNUU7QUFBUixRQUFzQixtQkFBOEQsY0FBQSxNQUE5RDtBQUF0QixRQUF3QyxxQkFBNEMsY0FBQSxNQUE1QztBQUF4QyxRQUE0RCxzQkFBd0IsY0FBQSxNQUF4QjtBQUE1RCxRQUNRLG1CQUs0QixjQUFBLFVBTDVCO0FBRFIsUUFFUSx1QkFJNEIsY0FBQSxVQUo1QjtBQUZSLFFBR1Esd0JBRzRCLGNBQUEsVUFINUI7QUFIUixRQUlRLHlCQUU0QixjQUFBLFVBRjVCO0FBSlIsUUFLUSwwQkFDNEIsY0FBQSxVQUQ1QjtBQUxSLFFBTVEsMEJBQTRCLGNBQUEsVUFBNUI7QUFFRCx3QkFBb0IsT0FBTyxPQUFPO0FBQ3ZDLFVBQU0sY0FBYyxNQUFNLFlBQ3BCLGNBQWMsTUFBTSxZQUNwQixVQUFXLGdCQUFnQjtBQUVqQyxhQUFPOztBQUdGLHlCQUFxQixNQUFNO0FBQ2hDLFVBQUksWUFBWTtBQUVoQixVQUFNLHNCQUFzQixLQUFLO0FBRWpDLFVBQUkscUJBQXFCO0FBQ3ZCLFlBQU0sa0JBQWtCLE1BQ2xCLE9BQU8sZ0JBQWdCO0FBRTdCLGdCQUFRO2VBQ0Q7QUFDSCx3QkFBWTtBQUVaO2VBRUcsc0JBQXNCO0FBQ3pCLGdCQUFNLG1CQUFtQixpQkFDbkIsU0FBTyxpQkFBaUI7QUFFOUIsd0JBQVksWUFBWTtBQUV4Qjs7ZUFHRyx3QkFBd0I7QUFDM0IsZ0JBQU0scUJBQXFCLGlCQUNyQixVQUFPLG1CQUFtQjtBQUVoQyx3QkFBWSxZQUFZO0FBRXhCOztlQUdHLHlCQUF5QjtBQUM1QixnQkFBTSxzQkFBc0IsaUJBQ3RCLFVBQU8sb0JBQW9CO0FBRWpDLHdCQUFZLFlBQVk7QUFFeEI7O2VBR0c7ZUFDQTtBQUNILHdCQUFZO0FBRVo7OztBQUlOLGFBQU87O0FBR0YsMkJBQXVCLE1BQU07QUFDbEMsVUFBSSxjQUFjO0FBRWxCLFVBQU0sc0JBQXNCLEtBQUs7QUFFakMsVUFBSSxxQkFBcUI7QUFDdkIsWUFBTSxrQkFBa0IsTUFDbEIsT0FBTyxnQkFBZ0I7QUFFN0IsZ0JBQVE7ZUFDRDtBQUNILDBCQUFjO0FBRWQ7ZUFFRyxzQkFBc0I7QUFDekIsZ0JBQU0sbUJBQW1CLGlCQUNuQixTQUFPLGlCQUFpQjtBQUU5QiwwQkFBYyxjQUFjO0FBRTVCOztlQUdHLHdCQUF3QjtBQUMzQixnQkFBTSxxQkFBcUIsaUJBQ3JCLFVBQU8sbUJBQW1CO0FBRWhDLDBCQUFjLGNBQWM7QUFFNUI7O2VBR0cseUJBQXlCO0FBQzVCLGdCQUFNLHNCQUFzQixpQkFDdEIsVUFBTyxvQkFBb0I7QUFFakMsMEJBQWMsY0FBYztBQUU1Qjs7ZUFHRztlQUNBO0FBQ0gsMEJBQWM7QUFFZDs7O0FBSU4sYUFBTzs7QUFHRixzQ0FBa0MsVUFBVTtBQUNqRCxVQUFNLGVBQWUsSUFBSSxhQUFhO0FBRXRDLGFBQU87O0FBR0Ysd0NBQW9DLE1BQU0sb0JBQW9CO0FBQ25FLFVBQU0sc0JBQXNCLEtBQUs7QUFFakMsVUFBSSxxQkFBcUI7QUFDdkIsWUFBTSxrQkFBa0IsTUFDbEIsT0FBTyxnQkFBZ0I7QUFFN0IsZ0JBQVE7ZUFDRCxrQkFBa0I7QUFDckIsZ0JBQU0sZUFBZSxpQkFDZixXQUFXLGFBQWEsZUFDeEIscUNBQXFDLG1CQUFtQixTQUFTO0FBRXZFLGdCQUFJLENBQUMsb0NBQW9DO0FBQ3ZDLGtCQUFNLG9CQUFvQjtBQUUxQixpQ0FBbUIsS0FBSzs7QUFHMUI7O2VBR0csc0JBQXNCO0FBQ3pCLGdCQUFNLG1CQUFtQixpQkFDbkIsU0FBTyxpQkFBaUI7QUFFOUIsdUNBQTJCLFFBQU07QUFFakM7O2VBR0csd0JBQXdCO0FBQzNCLGdCQUFNLHFCQUFxQixpQkFDckIsVUFBTyxtQkFBbUI7QUFFaEMsdUNBQTJCLFNBQU07QUFFakM7O2VBR0cseUJBQXlCO0FBQzVCLGdCQUFNLHNCQUFzQixpQkFDdEIsVUFBTyxvQkFBb0I7QUFFakMsdUNBQTJCLFNBQU07QUFFakM7O2VBR0csdUJBQXVCO0FBQzFCLGdCQUFNLG9CQUFvQixpQkFDcEIsUUFBUSxrQkFBa0I7QUFFaEMsa0JBQU0sUUFBUSxTQUFDLE9BQUE7cUJBQVMsMkJBQTJCLE9BQU07O0FBRXpEOztlQUdHLHlCQUF5QjtBQUM1QixnQkFBTSxzQkFBc0IsaUJBQ3RCLFNBQVEsb0JBQW9CO0FBRWxDLG1CQUFNLFFBQVEsU0FBQyxPQUFBO3FCQUFTLDJCQUEyQixPQUFNOztBQUV6RDs7Ozs7QUFNRCx5Q0FBcUMsTUFBTTtBQUNoRCxVQUFJO0FBRUosVUFBTSxrQkFBa0IsTUFDbEIsT0FBTyxnQkFBZ0I7QUFFN0IsY0FBUTthQUNELGtCQUFrQjtBQUNyQixjQUFNLGVBQWUsaUJBQ2YsV0FBVyxhQUFhLGVBQ3hCLFlBQVksYUFBYSxlQUN6QiwwQkFBMEIsSUFBQSxVQUFBLHFDQUFvQyxXQUM5RCw4QkFBOEIsSUFBSSxhQUFhLHlCQUF5QjtBQUU5RSxnQ0FBc0I7QUFFdEI7O2FBR0csc0JBQXNCO0FBQ3pCLGNBQU0sbUJBQW1CLGlCQUNuQixTQUFPLGlCQUFpQjtBQUU5QixnQ0FBc0IsNEJBQTRCO0FBRWxELGNBQU0sa0NBQWtDLElBQUksaUJBQWlCO0FBRTdELGdDQUFzQjtBQUV0Qjs7YUFHRyx3QkFBd0I7QUFDM0IsY0FBTSxxQkFBcUIsaUJBQ3JCLFVBQU8sbUJBQW1CO0FBRWhDLGdDQUFzQiw0QkFBNEI7QUFFbEQsY0FBTSxvQ0FBb0MsSUFBSSxtQkFBbUI7QUFFakUsZ0NBQXNCO0FBRXRCOzthQUdHLHlCQUF5QjtBQUM1QixjQUFNLHNCQUFzQixpQkFDdEIsVUFBTyxvQkFBb0I7QUFFakMsZ0NBQXNCLDRCQUE0QjtBQUVsRCxjQUFNLHFDQUFxQyxJQUFJLG9CQUFvQjtBQUVuRSxnQ0FBc0I7QUFFdEI7OztBQUlKLGFBQU87O0FBR0YsNENBQXdDLE1BQU0sd0JBQXdCO0FBQzNFLFVBQU0sc0JBQXNCLEtBQUs7QUFFakMsVUFBSSxxQkFBcUI7QUFDdkIsWUFBTSxrQkFBa0IsTUFDbEIsT0FBTyxnQkFBZ0I7QUFFN0IsZ0JBQVE7ZUFDRCxrQkFBa0I7QUFDckIsZ0JBQU0sZUFBZSxpQkFDZixXQUFXLGFBQWEsZUFDeEIseUNBQXlDLHVCQUF1QixTQUFTO0FBRS9FLGdCQUFJLENBQUMsd0NBQXdDO0FBQzNDLGtCQUFNLHdCQUF3QjtBQUU5QixxQ0FBdUIsS0FBSzs7QUFHOUI7O2VBR0csc0JBQXNCO0FBQ3pCLGdCQUFNLG1CQUFtQixpQkFDbkIsU0FBTyxpQkFBaUI7QUFFOUIsMkNBQStCLFFBQU07QUFFckM7O2VBR0csd0JBQXdCO0FBQzNCLGdCQUFNLHFCQUFxQixpQkFDckIsVUFBTyxtQkFBbUI7QUFFaEMsMkNBQStCLFNBQU07QUFFckM7O2VBR0cseUJBQXlCO0FBQzVCLGdCQUFNLHNCQUFzQixpQkFDdEIsVUFBTyxvQkFBb0I7QUFFakMsMkNBQStCLFNBQU07QUFFckM7O2VBR0csdUJBQXVCO0FBQzFCLGdCQUFNLG9CQUFvQixpQkFDcEIsUUFBUSxrQkFBa0I7QUFFaEMsa0JBQU0sUUFBUSxTQUFDLE9BQUE7cUJBQVMsK0JBQStCLE9BQU07O0FBRTdEOztlQUdHLHlCQUF5QjtBQUM1QixnQkFBTSxzQkFBc0IsaUJBQ3RCLFNBQVEsb0JBQW9CLFlBQzVCLFlBQVksSUFBQSxPQUFBLE9BQU0sU0FDbEIsVUFBTztBQUViLDJDQUErQixTQUFNO0FBRXJDOzs7Ozs7OztBQzdVUjs7Ozs7Ozs7Ozs7OztNQVNnQixZQUFVLFdBQUE7ZUFBVjs7TUFNQSxtQkFBaUIsV0FBQTtlQUFqQjs7TUFRQSxxQkFBbUIsV0FBQTtlQUFuQjs7TUFrQkEsdUJBQXFCLFdBQUE7ZUFBckI7O01BUUEsdUJBQXFCLFdBQUE7ZUFBckI7O01BU0EsNkJBQTJCLFdBQUE7ZUFBM0I7O01BUUEsaUNBQStCLFdBQUE7ZUFBL0I7Ozs7OztBQTNEaEIsUUFBUSxzQkFBNkMsY0FBQSxNQUE3QztBQUFSLFFBQTZCLHNCQUF3QixjQUFBLE1BQXhCO0FBRXRCLHdCQUFvQixPQUFPO0FBQ2hDLGNBQVEsTUFBTSxJQUFJLFNBQUMsTUFBQTtlQUFTLEtBQUs7O0FBRWpDLGFBQU87O0FBR0YsK0JBQTJCLE9BQU87QUFDdkMsVUFBTSxxQkFBcUIsNEJBQTRCLFFBQ2pELDJCQUEyQixtQkFBbUIsUUFDOUMsaUJBQWtCLDJCQUEyQjtBQUVuRCxhQUFPOztBQUdGLGlDQUE2QixPQUFPO0FBQ3pDLFVBQUk7QUFFSixVQUFNLGNBQWMsTUFBTTtBQUUxQixVQUFJLGdCQUFnQixHQUFHO0FBQ3JCLFlBQU0sWUFBWSxJQUFBLE9BQUEsT0FBTTtBQUV4QixxQkFBYTthQUNSO0FBQ0wsWUFBTSxzQkFBc0IsSUFBSSxvQkFBb0I7QUFFcEQscUJBQWE7O0FBR2YsYUFBTzs7QUFHRixtQ0FBK0IsT0FBTztBQUMzQyxVQUFNLHlCQUF5QixnQ0FBZ0MsUUFDekQsK0JBQStCLHVCQUF1QixRQUN0RCxxQkFBc0IsK0JBQStCO0FBRTNELGFBQU87O0FBR0YsbUNBQStCLE9BQU87QUFDM0MsVUFBTSxhQUFhLG9CQUFvQixRQUNqQyxPQUFPLFlBQ1Asc0JBQXNCLElBQUksb0JBQW9CLE9BQzlDLGVBQWU7QUFFckIsYUFBTzs7QUFHRix5Q0FBcUMsT0FBTztBQUNqRCxVQUFNLHFCQUFxQjtBQUUzQixZQUFNLFFBQVEsU0FBQyxNQUFBO2VBQVMsSUFBQSxNQUFBLDRCQUEyQixNQUFNOztBQUV6RCxhQUFPOztBQUdGLDZDQUF5QyxPQUFPO0FBQ3JELFVBQU0seUJBQXlCLElBQ3pCLFlBQVksSUFBQSxPQUFBLE9BQU0sUUFDbEIsT0FBTztBQUViLE1BQUEsSUFBQSxNQUFBLGdDQUErQixNQUFNO0FBRXJDLGFBQU87Ozs7O0FDekVUOzs7Ozs7Ozs7Ozs7O01BTWdCLG1CQUFpQixXQUFBO2VBQWpCOztNQWlCQSxxQkFBbUIsV0FBQTtlQUFuQjs7TUFTQSx1QkFBcUIsV0FBQTtlQUFyQjs7TUFRQSwyQkFBeUIsV0FBQTtlQUF6Qjs7TUFRQSxrQ0FBZ0MsV0FBQTtlQUFoQzs7TUFPQSxzQ0FBb0MsV0FBQTtlQUFwQzs7Ozs7O0FBakRULCtCQUEyQixZQUFZO0FBQzVDLFVBQUksa0JBQWtCO0FBRXRCLFVBQU0sUUFBUSxXQUFXLFlBQ25CLGNBQWMsTUFBTTtBQUUxQixVQUFJLGdCQUFnQixHQUFHO0FBQ3JCLFlBQU0sWUFBWSxJQUFBLE9BQUEsT0FBTSxRQUNsQixPQUFPLFdBQ1AsWUFBWSxJQUFBLE1BQUEsYUFBWTtBQUU5QiwwQkFBa0I7O0FBR3BCLGFBQU87O0FBR0YsaUNBQTZCLFlBQVk7QUFDOUMsVUFBTSxRQUFRLFdBQVcsWUFDbkIsWUFBWSxJQUFBLE9BQUEsT0FBTSxRQUNsQixtQkFBbUIsSUFBQSxNQUFBLGVBQWMsWUFDakMsb0JBQW9CO0FBRTFCLGFBQU87O0FBR0YsbUNBQStCLFlBQVk7QUFDaEQsVUFBTSxRQUFRLFdBQVcsWUFDbkIsaUJBQWlCLElBQUEsT0FBQSxtQkFBa0IsUUFDbkMsc0JBQXNCO0FBRTVCLGFBQU87O0FBR0YsdUNBQW1DLFlBQVk7QUFDcEQsVUFBTSxRQUFRLFdBQVcsWUFDbkIscUJBQXFCLElBQUEsT0FBQSx1QkFBc0IsUUFDM0MsMEJBQTBCO0FBRWhDLGFBQU87O0FBR0YsOENBQTBDLFlBQVk7QUFDM0QsVUFBTSxRQUFRLFdBQVcsWUFDbkIscUJBQXFCLElBQUEsT0FBQSw2QkFBNEI7QUFFdkQsYUFBTzs7QUFHRixrREFBOEMsWUFBWTtBQUMvRCxVQUFNLFFBQVEsV0FBVyxZQUNuQix5QkFBeUIsSUFBQSxPQUFBLGlDQUFnQztBQUUvRCxhQUFPOzs7OztBQzNEVDs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxzQkFBTiwyQkFBQTtvQ0FDRCxNQUFNLFlBQVksb0JBQWtCOzhCQUQ3QjtBQUVqQixhQUFLLE9BQU87QUFDWixhQUFLLGFBQWE7QUFDbEIsYUFBSyxxQkFBcUI7O21CQUpULHNCQUFBOztVQU9uQixLQUFBO2lCQUFBLG1CQUFVO0FBQ1IsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEseUJBQWdCO0FBQ2QsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsaUNBQXdCO0FBQ3RCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHVCQUFjO0FBQ1osZ0JBQU0sV0FBVyxLQUFLLEtBQUs7QUFFM0IsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG9CQUFXO0FBQUUsbUJBQU8sS0FBSyxXQUFXOzs7OztVQUU3QixLQUFBO2lCQUFQLCtCQUE2QixNQUFNLFlBQVk7QUFDN0MsZ0JBQUksc0JBQXNCO0FBRTFCLGdCQUFNLHNCQUFzQixJQUFBLFlBQUEsdUJBQXNCO0FBRWxELGdCQUFJLHFCQUFxQjtBQUN2QixrQkFBTSxxQkFBcUIsSUFBQSxZQUFBLGtDQUFpQztBQUU1RCxvQ0FBc0IsSUFuQ1AscUJBbUMrQixNQUFNLFlBQVk7O0FBR2xFLG1CQUFPOzs7O2FBdENVOzs7OztBRUpyQjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLDBCQUFOLHlCQUFBLHFCQUFBO2dCQUFNLDBCQUFBO2dDQUFBO3dDQUNQLE1BQU0sWUFBWSxvQkFBb0Isd0JBQXNCOzhCQURyRDs7a0NBRVgsTUFBTSxZQUFZO0FBRXhCLGNBQUsseUJBQXlCOzs7bUJBSmIsMEJBQUE7O1VBT25CLEtBQUE7aUJBQUEscUNBQTRCO0FBQzFCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLG1CQUFVLDBCQUEwQjtBQUNsQyxnQkFBTSxhQUFhLHlCQUF5QixpQkFDdEMsVUFBVyxlQUFlLEtBQUs7QUFFckMsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCwrQkFBNkIsTUFBTSxZQUFZO0FBQzdDLGdCQUFJLDBCQUEwQjtBQUU5QixnQkFBTSwwQkFBMEIsSUFBQSxZQUFBLDJCQUEwQjtBQUUxRCxnQkFBSSx5QkFBeUI7QUFDM0Isa0JBQU0scUJBQXFCLElBQUEsWUFBQSxrQ0FBaUMsYUFDdEQseUJBQXlCLElBQUEsWUFBQSxzQ0FBcUM7QUFFcEUsd0NBQTBCLElBM0JYLHlCQTJCdUMsTUFBTSxZQUFZLG9CQUFvQjs7QUFHOUYsbUJBQU87Ozs7YUE5QlU7TUFBZ0MscUJBQUE7Ozs7QUVOckQ7Ozs7Ozs7O2VBT3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sa0NBQU4seUJBQUEseUJBQUE7Z0JBQU0sa0NBQUE7Z0NBQUE7a0RBQUE7OEJBQUE7OzttQkFBQSxrQ0FBQTs7VUFDbkIsS0FBQTtpQkFBQSxvQ0FBMkI7QUFDekIsZ0JBQU0seUJBQXlCLEtBQUssNkJBQzlCLDZCQUE2QixJQUFBLE9BQUEsT0FBTSx5QkFDbkMsd0JBQXdCO0FBRTlCLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsK0JBQTZCLE1BQU0sWUFBWTtBQUM3QyxnQkFBSSxrQ0FBa0M7QUFFdEMsZ0JBQU0sV0FBVyxLQUFLLFdBQ2hCLDBCQUEwQixJQUFBLFlBQUEsMkJBQTBCO0FBRTFELGdCQUFJLHlCQUF5QjtBQUMzQixrQkFBTSx5QkFBeUIsSUFBQSxZQUFBLHNDQUFxQyxhQUM5RCw2QkFBNkIsSUFBQSxPQUFBLE9BQU0seUJBQ25DLHFDQUFzQyxhQUFhO0FBRXpELGtCQUFJLG9DQUFvQztBQUN0QyxvQkFBTSxvQkFBb0IsSUFBQSxZQUFBLHFCQUFvQjtBQUU5QyxvQkFBSSxtQkFBbUI7QUFDckIsc0JBQU0sbUJBQW1CLFdBQVc7QUFFcEMsd0JBQU0sSUFBSSxNQUFPLFFBQXVFLE9BQWhFLGtCQUFpQixpREFBd0QsT0FBVCxVQUFTOztBQUduRyxvQkFBTSxxQkFBcUIsSUFBQSxZQUFBLGtDQUFpQztBQUU1RCxrREFBa0MsSUEvQnJCLGlDQStCeUQsTUFBTSxZQUFZLG9CQUFvQjs7O0FBSWhILG1CQUFPOzs7O2FBbkNVO01BQXdDLE1BQUE7Ozs7QUVQN0Q7Ozs7Ozs7O2VBT3FCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxvQ0FBTix5QkFBQSx5QkFBQTtnQkFBTSxvQ0FBQTtnQ0FBQTtrREFDUCxNQUFNLFlBQVksb0JBQW9CLHdCQUF3QiwwQkFBd0I7OEJBRC9FOztrQ0FFWCxNQUFNLFlBQVksb0JBQW9CO0FBRTVDLGNBQUssMkJBQTJCOzs7bUJBSmYsb0NBQUE7O1VBT25CLEtBQUE7aUJBQUEsdUNBQThCO0FBQzVCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHNDQUE2QjtBQUMzQixnQkFBTSw4QkFBOEIsSUFBQSxPQUFBLE1BQUssS0FBSywyQkFDeEMsMEJBQTBCO0FBRWhDLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQ0FBMkI7QUFDekIsZ0JBQU0seUJBQXlCLEtBQUssNkJBQzlCLDZCQUE2QixJQUFBLE9BQUEsT0FBTSx5QkFDbkMsd0JBQXdCO0FBRTlCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSwwQkFBaUI7QUFDZixnQkFBTSxjQUFjLEtBQUsseUJBQXlCLElBQUksU0FBQywwQkFBNkI7QUFDbEYsa0JBQU0sYUFBYSx5QkFBeUI7QUFFNUMscUJBQU87O0FBR1Qsd0JBQVksS0FBSyxLQUFLO0FBRXRCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLGlDQUFpQyxLQUFLLHlCQUF5QixRQUMvRCxRQUFRLGlDQUFpQztBQUUvQyxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsbUJBQVU7QUFDUixnQkFBTSxRQUFRLEtBQUssWUFDYixRQUFTLFVBQVU7QUFFekIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHVCQUFjLG1DQUFtQztBQUMvQyxnQkFBTSxRQUFRLEtBQUssWUFDYix5Q0FBeUMsa0NBQWtDLFlBQzNFLCtDQUFnRCxRQUFRO0FBRTlELG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSx3QkFBZSxtQ0FBbUM7QUFDaEQsZ0JBQU0sY0FBYyxLQUFLLGtCQUNuQiwrQ0FBK0Msa0NBQWtDLGtCQUNqRixlQUFlLG1CQUFtQixhQUFhO0FBRXJELG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbURBQWlELE1BQU0sWUFBWSxzQkFBc0I7QUFDdkYsZ0JBQUksb0NBQW9DO0FBRXhDLGdCQUFNLFdBQVcsS0FBSyxXQUNoQiwwQkFBMEIsSUFBQSxZQUFBLDJCQUEwQjtBQUUxRCxnQkFBSSx5QkFBeUI7QUFDM0Isa0JBQU0seUJBQXlCLElBQUEsWUFBQSxzQ0FBcUMsYUFDOUQsNkJBQTZCLElBQUEsT0FBQSxPQUFNLHlCQUNuQyx3QkFBd0IsNEJBQ3hCLGdDQUFpQyxhQUFhO0FBRXBELGtCQUFJLENBQUMsK0JBQStCO0FBQ2xDLG9CQUFNLDBCQUEwQixNQUFBLFFBQXdCLHNCQUFzQixNQUFNO0FBRXBGLHVDQUF5QixtQkFBRyxzQkFBQSxPQUFMO2tCQUEyQjs7QUFFbEQsb0JBQU0sMkJBQTJCLDZCQUE2QjtBQUU5RCxvQkFBSSw2QkFBNkIsTUFBTTtBQUNyQyxzQkFBTSxrQkFBa0IsSUFBQSxZQUFBLG1CQUFrQixhQUNwQyxvQkFBb0IsSUFBQSxZQUFBLHFCQUFvQjtBQUU5QyxzQkFBSSxpQkFBaUI7QUFDbkIsd0JBQU0sZ0NBQWdDLHlCQUF5QixNQUFNLFNBQUMsMEJBQTRCO0FBQ2hHLDBCQUFNLGVBQWEseUJBQXdCLGlCQUNyQyxtQkFBbUIsSUFBQSxZQUFBLG1CQUFrQjtBQUUzQywwQkFBSSxrQkFBa0I7QUFDcEIsK0JBQU87OztBQUlYLHdCQUFJLCtCQUErQjtBQUNqQywwQkFBTSxtQkFBbUIsV0FBVztBQUVwQyw0QkFBTSxJQUFJLE1BQU8sUUFBeUUsT0FBbEUsa0JBQWlCLG1EQUEwRCxPQUFULFVBQVM7OztBQUl2RyxzQkFBSSxtQkFBbUI7QUFDckIsd0JBQU0sb0JBQW1CLFdBQVc7QUFFcEMsMEJBQU0sSUFBSSxNQUFPLFFBQXlFLE9BQWxFLG1CQUFpQixtREFBMEQsT0FBVCxVQUFTOztBQUdyRywyQ0FBeUIsUUFBUSxTQUFDLDBCQUE0QjtBQUM1RCx3QkFBTSxlQUFhLHlCQUF3QixpQkFDckMscUJBQW9CLElBQUEsWUFBQSxxQkFBb0I7QUFFOUMsd0JBQUksb0JBQW1CO0FBQ3JCLDBCQUFNLFlBQVcseUJBQXdCLGVBQ25DLG9CQUFtQixhQUFXO0FBRXBDLDRCQUFNLElBQUksTUFBTyxRQUF5RSxPQUFsRSxtQkFBaUIsbURBQTBELE9BQVQsV0FBUzs7O0FBSXZHLHNCQUFNLHFCQUFxQixJQUFBLFlBQUEsa0NBQWlDO0FBRTVELHNEQUFvQyxJQWhJekIsbUNBZ0krRCxNQUFNLFlBQVksb0JBQW9CLHdCQUF3Qjs7OztBQUs5SSxtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAsbURBQWlELFlBQVksMEJBQTBCO0FBQ3JGLGdCQUFNLDhCQUE4QixJQUFBLE9BQUEsTUFBSywyQkFDbkMsZ0NBQWdDLElBQUEsT0FBQSxPQUFNO0FBRTVDLGdCQUFNLE9BQU8sNEJBQTRCO0FBRXpDLHVDQUEyQjtBQUUzQixnQkFBTSxxQkFBcUIsSUFBQSxZQUFBLGtDQUFpQyxhQUN0RCx5QkFBeUIsSUFBQSxZQUFBLHNDQUFxQyxhQUM5RCxvQ0FBb0MsSUFsSnpCLG1DQWtKK0QsTUFBTSxZQUFZLG9CQUFvQix3QkFBd0I7QUFFOUksbUJBQU87Ozs7VUFHRixLQUFBO2lCQUFQLHVEQUFxRCxNQUFNLFlBQVksMEJBQTBCO0FBQy9GLGdCQUFNLHFCQUFxQixJQUFBLFlBQUEsa0NBQWlDLGFBQ3RELHlCQUF5QixJQUFBLFlBQUEsc0NBQXFDLGFBQzlELG9DQUFvQyxJQTFKekIsbUNBMEorRCxNQUFNLFlBQVksb0JBQW9CLHdCQUF3QjtBQUU5SSxtQkFBTzs7OzthQTVKVTtNQUEwQyxNQUFBO0FBZ0svRCxnQ0FBNEIsY0FBYyxjQUFjO0FBQ3RELFVBQUksVUFBVTtBQUVkLFVBQU0scUJBQXFCLGFBQWEsUUFDbEMscUJBQXFCLGFBQWE7QUFFeEMsVUFBSSx1QkFBdUIsb0JBQW9CO0FBQzdDLFlBQU0sbUJBQW1CLElBQUEsT0FBQSxPQUFNLGVBQ3pCLFNBQVMsYUFBYSxRQUFRO0FBRXBDLFlBQUksU0FBUyxJQUFJO0FBQ2YsY0FBTSxTQUFTO0FBRWYsb0JBQVUsYUFBYSxNQUFNLFNBQUMsYUFBYSxPQUFVO0FBQ25ELG9CQUFTLFVBQVMsUUFBUSxVQUFVO0FBRXBDLGdCQUFNLGNBQWMsYUFBYTtBQUVqQyxnQkFBSSxnQkFBZ0IsYUFBYTtBQUMvQixxQkFBTzs7Ozs7QUFNZixhQUFPOztBQUdULHlDQUFxQywwQkFBMEI7QUFDN0QsVUFBTSw4QkFBOEIsSUFBQSxPQUFBLE1BQUssMkJBQ25DLHlCQUF5Qiw0QkFBNEIsNkJBQ3JELDZCQUE2QixJQUFBLE9BQUEsT0FBTSx5QkFDbkMseUJBQXlCLDRCQUN6QiwwQkFBMEIsSUFBQSxPQUFBLGVBQWMsMEJBQTBCLFNBQUMsMEJBQTRCO0FBQzdGLFlBQU0sV0FBVyx5QkFBd0I7QUFFekMsWUFBSSxhQUFhLHdCQUF3QjtBQUN2QyxpQkFBTzs7WUFFTDtBQUVaLGFBQU87O0FBR1QseUNBQXFDLDBCQUEwQjtBQUM3RCxVQUFNLFlBQVkseUJBQXlCLElBQUksU0FBQyx5QkFBNEI7QUFDcEUsWUFBTSxZQUFXLHdCQUF3QjtBQUV6QyxlQUFPO1VBRVQsV0FBVyxVQUFVO0FBRTNCLGdCQUFVLEtBQUs7QUFFZixVQUFNLDhCQUE4Qix5QkFBeUIsTUFBTSxTQUFDLHlCQUF5QixPQUFVO0FBQ3JHLFlBQU0sWUFBVyxVQUFVLFFBQ3JCLHlCQUF5Qix3QkFBd0IsNkJBQ2pELHlDQUF5Qyx1QkFBdUIsU0FBUztBQUUvRSxZQUFJLHdDQUF3QztBQUMxQyxpQkFBTzs7O0FBSVgsYUFBTzs7QUFHVCwwQ0FBc0Msc0JBQXNCO0FBQzFELFVBQUksMkJBQTJCLGlEQUFpRDtBQUVoRixVQUFJLDZCQUE2QixNQUFNO0FBQ3JDLFlBQU0sMEJBQTBCLDRCQUE0QjtBQUU1RCxZQUFJLDRCQUE0QixNQUFNO0FBQ3BDLDJDQUFpQywwQkFBMEI7QUFFM0QsY0FBTSw4QkFBOEIsNEJBQTRCO0FBRWhFLGNBQUksNkJBQTZCO0FBQy9CLHFDQUF5QjtpQkFDcEI7QUFDTCx1Q0FBMkI7O2VBRXhCO0FBQ0wscUNBQTJCOzs7QUFJL0IsYUFBTzs7QUFHVCw4Q0FBMEMsMEJBQTBCLHlCQUF5QjtBQUMzRixVQUFNLFFBQVEseUJBQXlCLFFBQVEsMEJBQzNDLFFBQVEsR0FDUixjQUFjO0FBRWxCLCtCQUF5QixPQUFPLE9BQU87O0FBR3pDLDhEQUEwRCxzQkFBc0I7QUFDOUUsVUFBSSwyQkFBMkI7QUFFL0IsTUFBQSxJQUFBLE9BQUEsZ0JBQWUsc0JBQXNCLFNBQUMscUJBQXdCO0FBQzVELFlBQU0sNkNBQWlFLFlBQW5CLHFCQUErQixNQUFBO0FBRW5GLFlBQUksNENBQTRDO0FBQzlDLGNBQU0sMEJBQTBCO0FBRWhDLG1DQUF5QixRQUFRO0FBRWpDLGlCQUFPOzs7QUFJWCxVQUFNLGlDQUFpQyx5QkFBeUI7QUFFaEUsVUFBSSxpQ0FBaUMsR0FBRztBQUN0QyxtQ0FBMkI7O0FBRzdCLGFBQU87Ozs7O0FDL1JUOzs7Ozs7Ozs7Ozs7O01BT2dCLDRCQUEwQixXQUFBO2VBQTFCOztNQU1BLDZCQUEyQixXQUFBO2VBQTNCOztNQU1BLDhCQUE0QixXQUFBO2VBQTVCOztNQWtCQSxnQ0FBOEIsV0FBQTtlQUE5Qjs7TUFNQSxxQ0FBbUMsV0FBQTtlQUFuQzs7TUEyQkEsc0NBQW9DLFdBQUE7ZUFBcEM7O01Bc0JBLHdDQUFzQyxXQUFBO2VBQXRDOztNQStCQSxtREFBaUQsV0FBQTtlQUFqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcEhULHdDQUFvQyw4QkFBOEIsU0FBUztBQUNoRixVQUFRLDJCQUE2QixRQUE3QjtBQUVSLCtCQUF5QixLQUFLOztBQUd6Qix5Q0FBcUMsK0JBQStCLFNBQVM7QUFDbEYsVUFBUSwyQkFBNkIsUUFBN0I7QUFFUixNQUFBLElBQUEsT0FBQSxNQUFLLDBCQUEwQjs7QUFHMUIsMENBQXNDLE1BQU0sU0FBUztBQUMxRCxVQUFNLDJCQUE2QixRQUE3QjtBQUVOLGlDQUEyQix5QkFBeUIsT0FBTyxTQUFDLHlCQUE0QjtBQUN0RixZQUFJLFNBQVMsTUFBTTtBQUNqQixpQkFBTzs7QUFHVCxZQUFNLCtCQUErQix3QkFBd0I7QUFFN0QsWUFBSSxpQ0FBaUMsTUFBTTtBQUN6QyxpQkFBTzs7O0FBSVgsYUFBTzs7QUFHRiw0Q0FBd0MsaUNBQWlDLFNBQVM7QUFDdkYsVUFBUSwyQkFBNkIsUUFBN0I7QUFFUixNQUFBLElBQUEsT0FBQSxnQkFBZSwwQkFBMEI7O0FBR3BDLGlEQUE2QyxNQUFNLFNBQVM7QUFDakUsVUFBSSxZQUFZLFFBQVc7QUFDekIsa0JBQVU7QUFDVixlQUFPOztBQUdULFVBQVEsMkJBQTZCLFFBQTdCLDBCQUNGLGtDQUFrQyx5QkFBeUIsS0FBSyxTQUFDLHlCQUE0QjtBQUMzRixZQUFNLHlEQUFpRixZQUF2Qix5QkFBbUMsVUFBQTtBQUVuRyxZQUFJLHdEQUF3RDtBQUMxRCxjQUFJLFNBQVMsTUFBTTtBQUNqQixtQkFBTzs7QUFHVCxjQUFNLG1DQUFrQyx5QkFDbEMsc0NBQXNDLGlDQUFnQztBQUU1RSxjQUFJLFNBQVMscUNBQXFDO0FBQ2hELG1CQUFPOzs7WUFHUDtBQUVaLGFBQU87O0FBR0Ysa0RBQThDLE1BQU0sU0FBUztBQUNsRSxVQUFRLDJCQUE2QixRQUE3QiwwQkFDSixtQ0FBbUMseUJBQXlCLE9BQU8sU0FBQyx5QkFBNEI7QUFDOUYsWUFBTSx5REFBaUYsWUFBdkIseUJBQW1DLFVBQUE7QUFFbkcsWUFBSSx3REFBd0Q7QUFDMUQsY0FBSSxTQUFTLE1BQU07QUFDakIsbUJBQU87O0FBR1QsY0FBTSxrQ0FBa0MseUJBQ3BDLHVDQUF1QyxnQ0FBZ0M7QUFFM0UsY0FBSSx5Q0FBeUMsTUFBTTtBQUNqRCxtQkFBTzs7OztBQUtqQixhQUFPOztBQUdGLG9EQUFnRCxNQUFNLFVBQVUsU0FBUztBQUM5RSxVQUFJLFlBQVksUUFBVztBQUN6QixrQkFBVTtBQUNWLG1CQUFXLFNBQUMsbUNBQUE7aUJBQXNDOzs7QUFHcEQsVUFBUSwyQkFBNkIsUUFBN0IsMEJBQ0YscUNBQXFDLHlCQUF5QixPQUFPLFNBQUMseUJBQTRCO0FBQ2hHLFlBQU0sMkRBQW1GLFlBQXZCLHlCQUFtQyxZQUFBO0FBRXJHLFlBQUksMERBQTBEO0FBQzVELGNBQUksU0FBUyxNQUFNO0FBQ2pCLG1CQUFPOztBQUdULGNBQU0sb0NBQW9DLHlCQUNwQyx3Q0FBd0Msa0NBQWtDO0FBRWhGLGNBQUksMENBQTBDLE1BQU07QUFDbEQsZ0JBQU0sUUFBUSxTQUFTO0FBRXZCLGdCQUFJLE9BQU87QUFDVCxxQkFBTzs7Ozs7QUFNckIsYUFBTzs7QUFHRiwrREFBMkQsU0FBUztBQUN6RSxVQUFJLDRDQUE0QztBQUVoRCxVQUFRLDJCQUE2QixRQUE3QjtBQUVSLCtCQUF5QixRQUFRLFNBQUMseUJBQTRCO0FBQzVELFlBQU0sMkRBQW1GLFlBQXZCLHlCQUFtQyxZQUFBO0FBRXJHLFlBQUksMERBQTBEO0FBQzVELGNBQU0sb0NBQW9DO0FBRTFDLGNBQUksOENBQThDLE1BQU07QUFDdEQsd0RBQTRDO2lCQUN2QztBQUNMLGdCQUFNLHdGQUF3RixrQ0FBa0MsY0FBYztBQUU5SSxnQkFBSSx1RkFBdUY7QUFDekYsMERBQTRDOzs7OztBQU1wRCxhQUFPOzs7OztBQ2xKVDs7Ozs7Ozs7ZUFRcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sK0JBQU4seUJBQUEsZUFBQTtnQkFBTSwrQkFBQTtnQ0FBQTsrQ0FBQTs4QkFBQTs7O21CQUFBLCtCQUFBOztVQUNuQixLQUFBO2lCQUFBLGVBQU0saUNBQWlDLGVBQWUsU0FBUztBQUM3RCxnQkFBUSxVQUFZLFFBQVosU0FDRixPQUFPLGdDQUFnQyxXQUN2QywyQkFBMkIsSUFBQSxTQUFBLDhCQUE2QixNQUFNLFVBQzlELHNCQUFzQixVQUFBLFFBQW9CLG9DQUFvQyxNQUFNLDBCQUEwQjtBQUVwSCxnQkFBSSx3QkFBd0IsTUFBTTtBQUNoQyxrQkFBTSwwQkFBMEIsb0JBQW9CO0FBRXBELHNCQUFRLDJCQUEyQjs7QUFHckMsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGtCQUFTLGlDQUFpQyxlQUFlLFNBQVM7QUFDaEUsZ0JBQVEsVUFBWSxRQUFaLFNBQ0YsT0FBTyxnQ0FBZ0MsV0FDdkMsV0FBVyxLQUFLLFdBQ2hCLDBCQUEwQixJQUFBLFVBQUEscUNBQW9DLFdBQzlELHNCQUFzQixRQUFRLDRCQUE0QjtBQUVoRSxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLGlCQUFlLGlDQUFpQyxlQUFlLFNBQVM7QUFDdEUsZ0JBQU0sT0FBTyxnQ0FBZ0MsV0FDdkMsK0JBQStCLElBNUJwQiw4QkE0QnFELE9BQ2hFLHNCQUFzQiw2QkFBNkIsUUFBUSxpQ0FBaUMsZUFBZTtBQUVqSCxtQkFBTzs7OzthQS9CVTtNQUFxQyxNQUFBOzs7O0FFUjFEOzs7Ozs7OztlQVlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSx1QkFBTix5QkFBQSxNQUFBO2dCQUFNLHVCQUFBO2dDQUFBO3VDQUFBOzhCQUFBOzs7bUJBQUEsdUJBQUEsTUFBQTs7VUFDWixLQUFBO2lCQUFQLHFEQUFtRCxNQUFNLGtDQUFrQztBQUN6RixnQkFBTSxXQUFXLEtBQUs7QUFFdEIsZ0JBQUksY0FBYyxpQ0FBaUMsT0FBTyxTQUFDLGNBQWEsaUNBQW9DO0FBQzFHLGtCQUFNLGNBQWEsZ0NBQWdDLGlCQUM3QyxnQ0FBZ0MsYUFBWSxTQUFTO0FBRTNELGtCQUFJLENBQUMsK0JBQStCO0FBQ2xDLDZCQUFZLEtBQUs7O0FBR25CLHFCQUFPO2VBQ047QUFFSCxnQkFBTSxrQkFBa0IsSUFBQSxPQUFBLE9BQU0sY0FDeEIsYUFBYSxpQkFDYixRQUFRLFdBQVcsWUFDbkIsWUFBWSxJQUFBLE9BQUEsT0FBTSxRQUNsQixvQkFBb0I7QUFFMUIsMEJBQWMsWUFBWSxJQUFJLFNBQUMsYUFBZTtBQUM1QyxrQkFBSSxTQUFRLFlBQVc7QUFFdkIsa0JBQU0sYUFBWSxJQUFBLE9BQUEsT0FBTSxTQUNsQixZQUFZLElBQUEsT0FBQSxNQUFLO0FBRXZCLGtCQUFNLFVBQVUsSUFBQSxNQUFBLFlBQVcsWUFBVyxvQkFDaEMsa0JBQWtCLElBQUEsWUFBQSxtQkFBa0I7QUFFMUMsa0JBQUksQ0FBQyxTQUFTO0FBQ1osb0JBQU0sbUJBQW1CLFlBQVc7QUFFcEMsc0JBQU0sSUFBSSxNQUFPLFFBQXVFLE9BQWhFLGtCQUFpQixpREFBd0QsT0FBVCxVQUFTOztBQUduRyxrQkFBSSxpQkFBaUI7QUFDbkIsb0JBQU0sb0JBQW1CLFlBQVc7QUFFcEMsc0JBQU0sSUFBSSxNQUFPLFFBQXVFLE9BQWhFLG1CQUFpQixpREFBd0QsT0FBVCxVQUFTOztBQUduRyx1QkFBUTtBQUVSLHVCQUFRLElBQUEsT0FBQSxZQUFXO0FBRW5CLDRCQUFhLElBQUksY0FBQSxXQUFXO0FBRTVCLHFCQUFPOztBQUdULGdCQUFNLDJCQUEyQixJQUFBLFVBQUEsc0NBQXFDLFdBQ2hFLE9BQU8sMEJBQ1AsWUFBWSxPQUNaLGtCQUFrQixVQUFBLFNBQ2xCLHVCQUF1QixJQXZEWixzQkF1RHFDLE1BQU0sV0FBVyxhQUFhO0FBRXBGLG1CQUFPOzs7O2FBekRVO01BQTZCLGNBQUE7Ozs7QUVabEQ7Ozs7Ozs7O2VBUXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGdDQUFOLHlCQUFBLGVBQUE7Z0JBQU0sZ0NBQUE7Z0NBQUE7Z0RBQUE7OEJBQUE7OzttQkFBQSxnQ0FBQTs7VUFDbkIsS0FBQTtpQkFBQSxlQUFNLGlDQUFpQyxTQUFTO0FBQzlDLGdCQUFRLFVBQVksUUFBWixTQUNGLE9BQU8sZ0NBQWdDLFdBQ3ZDLG1DQUFtQyxJQUFBLFNBQUEsc0NBQXFDLE1BQU0sVUFDOUUsdUJBQXVCLFVBQUEsUUFBcUIsNENBQTRDLE1BQU07QUFFcEcsZ0JBQUkseUJBQXlCLE1BQU07QUFDakMsa0JBQU0sMkJBQTJCLHFCQUFxQjtBQUV0RCxzQkFBUSw0QkFBNEI7O0FBR3RDLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxrQkFBUyxpQ0FBaUMsU0FBUztBQUNqRCxnQkFBUSxVQUFZLFFBQVosU0FDRixPQUFPLGdDQUFnQyxXQUN2QyxXQUFXLEtBQUssV0FDaEIsMkJBQTJCLElBQUEsVUFBQSxzQ0FBcUMsV0FDaEUsdUJBQXVCLFFBQVEsNkJBQTZCO0FBRWxFLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsaUJBQWUsaUNBQWlDLFNBQVM7QUFDdkQsZ0JBQU0sT0FBTyxnQ0FBZ0MsV0FDdkMsZ0NBQWdDLElBNUJyQiwrQkE0QnVELE9BQ2xFLHVCQUF1Qiw4QkFBOEIsUUFBUSxpQ0FBaUM7QUFFcEcsbUJBQU87Ozs7YUEvQlU7TUFBc0MsTUFBQTs7OztBRVIzRDs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sc0JBQU4seUJBQUEsV0FBQTtnQkFBTSxzQkFBQTtnQ0FBQTtvQ0FDUCxNQUFNLFlBQVU7OEJBRFQ7OztBQUlqQixjQUFLLE9BQU87QUFDWixjQUFLLGFBQWE7OzttQkFMRCxzQkFBQTs7VUFRbkIsS0FBQTtpQkFBQSxtQkFBVTtBQUNSLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGlCQUFRLHFCQUFxQjtBQUMzQixnQkFBTSxhQUFhLG9CQUFvQixpQkFDakMsYUFBYyxLQUFLLGVBQWU7QUFFeEMsbUJBQU87Ozs7YUFwQlU7TUFBNEIsV0FBQTs7OztBRUpqRDs7Ozs7Ozs7ZUFXcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFGckIsUUFBUSxzQkFBd0IsY0FBQSxNQUF4QjtBQUVPLFFBQU0sd0JBQU4seUJBQUEsWUFBQTtnQkFBTSx3QkFBQTtnQ0FBQTt3Q0FBQTs4QkFBQTs7O21CQUFBLHdCQUFBOztVQUNuQixLQUFBO2lCQUFBLG1CQUFVLE1BQU07QUFDZCxnQkFBTSxTQUFTLEtBQUssWUFDZCxjQUFjLEtBQUssa0JBQ25CLHlCQUF5QixZQUFZLE9BQU8sU0FBQyxZQUFlO0FBQzFELGtCQUFNLGtDQUxHLFlBS2dDLFlBTGhDO0FBT1Qsa0JBQUksaUNBQWlDO0FBQ25DLHVCQUFPOztnQkFHWCxVQUFVLHVCQUF1QixLQUFLLFNBQUMsdUJBQTBCO0FBQy9ELGtCQUFNLDhCQUE4QixzQkFBc0I7QUFFMUQsa0JBQUksZ0NBQWdDLFFBQVE7QUFDMUMsdUJBQU87OztBQUlqQixtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLCtDQUE2QyxtQ0FBbUM7QUFDOUUsZ0JBQU0sT0FBTyxrQ0FBa0MsV0FDekMsd0JBQXdCLGtDQUFrQyw0QkFDMUQsV0FBVyxLQUFLLFdBQ2hCLDRCQUE0QixJQUFBLE1BQUEsMEJBQXlCLHdCQUNyRCw2QkFBNkIsSUFBQSxVQUFBLGdFQUErRCxVQUFVLHdCQUN0RyxpQ0FBaUMsSUFBQSxNQUFBLDBCQUF5QjtBQUVoRSxnQkFBSSxRQUFRO2NBQ1Y7Y0FDQTs7QUFHRixvQkFBUSxJQUFBLE9BQUEsWUFBVztBQUVuQixnQkFBSSx3QkFBd0IsSUFyQ1gsdUJBcUNxQztBQUV0RCxnQkFBTSxVQUFVLHNCQUFzQixVQUFVO0FBRWhELGdCQUFJLFNBQVM7QUFDWCxzQ0FBd0I7O0FBRzFCLG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCw2REFBMkQseUJBQXlCLHVCQUF1QjtBQUN6RyxnQkFBSSx3QkFBd0I7QUFFNUIsZ0JBQUksMEJBQTBCLE1BQU07QUFDbEMsa0JBQU0sNEJBQTRCLHNCQUFzQixXQUNsRCwrQkFBK0Isd0JBQXdCLFlBQ3ZELG1DQUFtQyxJQUFBLE9BQUEsTUFBSywrQkFDeEMsa0JBQWtCLDJCQUNsQixzQkFBc0IsSUFBQSxNQUFBLDBCQUF5QjtBQUVyRCxrQkFBSSxRQUFRO2dCQUNWO2dCQURVLE9BRVYsbUJBQUc7QUFHTCxzQkFBUSxJQUFBLE9BQUEsWUFBVztBQUVuQixzQ0FBd0IsSUFqRVQsdUJBaUVtQzs7QUFHcEQsbUJBQU87Ozs7VUFHRixLQUFBO2lCQUFQLG1FQUFpRSxpQ0FBaUMscUJBQXFCO0FBQ3JILGdCQUFJLHdCQUF3QjtBQUU1QixnQkFBSSx3QkFBd0IsTUFBTTtBQUNoQyxrQkFBTSxXQUFXLGdDQUFnQyxlQUMzQyx1Q0FBdUMsZ0NBQWdDLFlBQ3ZFLDRDQUE0QyxJQUFBLE9BQUEsT0FBTSx1Q0FDbEQsT0FBTywyQ0FDUCxzQkFBc0IsSUFBQSxNQUFBLDZCQUE0QixPQUNsRCwyQkFBMkIsSUFBQSxVQUFBLHNDQUFxQyxXQUNoRSwrQkFBK0IsSUFBQSxNQUFBLDBCQUF5QiwyQkFDeEQsNkNBQTZDLElBQUksb0JBQW9CO0FBRTNFLGtCQUFJLFFBQVE7Z0JBQ1Y7Z0JBQ0E7O0FBR0Ysc0JBQVEsSUFBQSxPQUFBLFlBQVc7QUFFbkIsc0NBQXdCLElBM0ZULHVCQTJGbUM7O0FBR3BELG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCxzRUFBb0UsbUNBQW1DLHNCQUFzQjtBQUMzSCxnQkFBSTtBQUVKLGdCQUFNLGFBQWEsa0NBQWtDLGlCQUMvQywyQkFBMkIscUJBQXFCLFdBQ2hELCtCQUErQixJQUFBLE1BQUEsMEJBQXlCLDJCQUN4RCw4Q0FBOEMsSUFBSSxvQkFBb0I7QUFFNUUsb0JBQVEsV0FBVztBQUVuQixvQkFDRSxtQkFBRyxPQUFBLE9BREc7Y0FFTjs7QUFHRixvQkFBUSxJQUFBLE9BQUEsWUFBVztBQUVuQixnQkFBTSx3QkFBd0IsSUFsSGIsdUJBa0h1QztBQUV4RCxtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAsd0VBQXNFLG1DQUFtQyx3QkFBd0I7QUFDL0gsZ0JBQU0sMEJBQTBCLGtDQUFrQyw4QkFDNUQsNkJBQTZCLHVCQUF1QixXQUNwRCwrQkFBK0Isd0JBQXdCLFlBQ3ZELGlDQUFpQyxJQUFBLE1BQUEsMEJBQXlCLDZCQUMxRCxtQ0FBbUMsSUFBQSxPQUFBLE1BQUssK0JBQ3hDLHlDQUF5QyxrQ0FBa0MsWUFDM0UsNkNBQTZDLElBQUEsT0FBQSxNQUFLO0FBRXhELGdCQUFJLFFBQ0YsbUJBQUcsNENBQUEsT0FETztjQUVWO2VBQ0EsbUJBQUc7QUFHTCxvQkFBUSxJQUFBLE9BQUEsWUFBVztBQUVuQixnQkFBTSx3QkFBd0IsSUF4SWIsdUJBd0l1QztBQUV4RCxtQkFBTzs7OzthQTFJVTtNQUE4QixjQUFBOzs7O0FFWG5EOzs7Ozs7OztlQVNxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSwyQ0FBTix5QkFBQSxxQkFBQTtnQkFBTSwyQ0FBQTtnQ0FBQTsyREFBQTs4QkFBQTs7O21CQUFBLDJDQUFBOztVQUNuQixLQUFBO2lCQUFBLGVBQU0saUNBQWlDLHNCQUFzQixxQkFBcUIsU0FBUztBQUN6RixnQkFBTSxPQUFPLGdDQUFnQztBQUU3QyxnQkFBSSxxQ0FBcUMsSUFBQSxTQUFBLHdDQUF1QyxNQUFNO0FBRXRGLGlCQUFLO0FBRUwsZ0JBQU0sd0JBQXdCLGFBQUEsUUFBc0IsMERBQTBELGlDQUFpQztBQUUvSSxnQkFBSSwwQkFBMEIsTUFBTTtBQUNsQyxrQkFBTSxhQUFhO0FBRW5CLG1CQUFLLGNBQWM7O0FBR3JCLGlEQUFxQyxtQ0FBbUMsSUFBSSxTQUFDLG1DQUFzQztBQUNqSCxrQkFBTSwyQkFBMkIsa0NBQWtDLCtCQUM3RCx5QkFBd0IsYUFBQSxRQUFzQiw2REFBNkQsbUNBQW1DLHVCQUM5SSxjQUFhO0FBRW5CLG1CQUFLLGNBQWM7QUFFbkIsa0RBQW9DLFlBQUEsUUFBa0MsOENBQThDLE1BQU0sYUFBWTtBQUV0SSxxQkFBTzs7QUFHVCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsa0JBQVMsaUNBQWlDLHNCQUFzQixxQkFBcUIsU0FBUzs7Ozs7VUFJdkYsS0FBQTtpQkFBUCxpQkFBZSxpQ0FBaUMsc0JBQXNCLHFCQUFxQixTQUFTO0FBQ2xHLGdCQUFNLE9BQU8sZ0NBQWdDLFdBQ3ZDLGFBQWEsZ0NBQWdDLGlCQUM3QywyQ0FBMkMsSUF0Q2hDLDBDQXNDNkUsTUFBTSxhQUM5RixxQ0FBcUMseUNBQXlDLFFBQVEsaUNBQWlDLHNCQUFzQixxQkFBcUI7QUFFeEssbUJBQU87Ozs7YUF6Q1U7TUFBaUQsWUFBQTs7OztBRVR0RTs7Ozs7bUNBVUEsV0FBQTs7O2VBQXdCOzs7Ozs7Ozs7Ozs7QUFBVCwwQ0FBc0MsU0FBUztBQUM1RCxVQUFJLGtDQUFrQyxJQUFBLFNBQUEscUNBQW9DO0FBRTFFLGFBQU8sb0NBQW9DLE1BQU07QUFDL0MsbUNBQTJCLGlDQUFpQztBQUU1RCwwQ0FBa0MsSUFBQSxTQUFBLHFDQUFvQzs7O0FBSTFFLHdDQUFvQyxpQ0FBaUMsU0FBUztBQUM1RSxVQUFNLGdCQUFnQixPQUNoQixzQkFBc0IsaUJBQUEsUUFBNkIsUUFBUSxpQ0FBaUMsZUFBZSxVQUMzRyx1QkFBdUIsa0JBQUEsUUFBOEIsUUFBUSxpQ0FBaUM7QUFFcEcsNkJBQUEsUUFBeUMsUUFBUSxpQ0FBaUMsc0JBQXNCLHFCQUFxQjtBQUU3SCxVQUFNLE9BQU8sZ0NBQWdDLFdBQ3ZDLG1DQUFtQyxJQUFBLFNBQUEsc0NBQXFDLE1BQU0sVUFDOUUsa0NBQWtDO0FBRXhDLE1BQUEsSUFBQSxTQUFBLGdDQUErQixpQ0FBaUM7Ozs7O0FDL0JsRTs7Ozs7Ozs7ZUFRcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSx3QkFBTix5QkFBQSxNQUFBO2dCQUFNLHdCQUFBO2dDQUFBO3dDQUFBOzhCQUFBOzs7bUJBQUEsd0JBQUEsTUFBQTs7VUFDWixLQUFBO2lCQUFQLHVEQUFxRCxNQUFNLG9DQUFvQztBQUM3RixnQkFBSSx3QkFBd0I7QUFFNUIsZ0JBQUksY0FBYyxLQUFLO0FBRXZCLDBCQUFjLFlBQVksTUFBTTtBQUVoQywrQ0FBbUMsUUFBUSxTQUFDLG1DQUFzQztBQUNoRixrQkFBTSxhQUFhLGtDQUFrQyxpQkFDL0MsUUFBUSxZQUFZLFFBQVE7QUFFbEMsa0JBQUksUUFBUSxJQUFJO0FBQ2Qsb0JBQU0sUUFBUSxPQUNSLGNBQWM7QUFFcEIsNEJBQVksT0FBTyxPQUFPOzs7QUFJOUIsZ0JBQU0sb0JBQW9CLFlBQVk7QUFFdEMsZ0JBQUksb0JBQW9CLEdBQUc7QUFDekIsa0JBQU0sV0FBVyxLQUFLLFdBQ2hCLDRCQUE0QixJQUFBLFVBQUEsdUNBQXNDLFdBQ2xFLE9BQU8sMkJBQ1AsWUFBWSxPQUNaLGtCQUFrQixZQUFBO0FBRXhCLHNDQUF3QixJQTdCVCx1QkE2Qm1DLE1BQU0sV0FBVyxhQUFhOztBQUdsRixtQkFBTzs7OzthQWhDVTtNQUE4QixjQUFBOzs7O0FFUm5EOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxpQ0FBTix5QkFBQSxlQUFBO2dCQUFNLGlDQUFBO2dDQUFBO2lEQUFBOzhCQUFBOzs7bUJBQUEsaUNBQUE7O1VBQ25CLEtBQUE7aUJBQUEsZUFBTSxtQ0FBbUMsU0FBUztBQUNoRCxnQkFBUSxVQUFZLFFBQVosU0FDRixPQUFPLGtDQUFrQyxXQUN6QyxxQ0FBcUMsSUFBQSxTQUFBLHdDQUF1QyxNQUFNLFVBQ2xGLHdCQUF3QixZQUFBLFFBQXNCLDhDQUE4QyxNQUFNO0FBRXhHLGdCQUFJLDBCQUEwQixNQUFNO0FBQ2xDLGtCQUFNLDRCQUE0QixzQkFBc0I7QUFFeEQsc0JBQVEsNkJBQTZCOztBQUd2QyxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsa0JBQVMsbUNBQW1DLFNBQVM7QUFDbkQsZ0JBQVEsVUFBWSxRQUFaLFNBQ0YsT0FBTyxrQ0FBa0MsV0FDekMsV0FBVyxLQUFLLFdBQ2hCLDRCQUE0QixJQUFBLFVBQUEsdUNBQXNDLFdBQ2xFLHdCQUF3QixRQUFRLDhCQUE4QjtBQUVwRSxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLGlCQUFlLG1DQUFtQyxTQUFTO0FBQ3pELGdCQUFNLE9BQU8sa0NBQWtDLFdBQ3pDLGlDQUFpQyxJQTVCdEIsZ0NBNEJ5RCxPQUNwRSx3QkFBd0IsK0JBQStCLFFBQVEsbUNBQW1DO0FBRXhHLG1CQUFPOzs7O2FBL0JVO01BQXVDLE1BQUE7Ozs7QUVSNUQ7Ozs7Ozs7O2VBYXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUZyQixRQUFRLGNBQWdCLGNBQUEsTUFBaEI7QUFFTyxRQUFNLHlCQUFOLHlCQUFBLE1BQUE7Z0JBQU0seUJBQUE7Z0NBQUE7eUNBQUE7OEJBQUE7OzttQkFBQSx5QkFBQSxNQUFBOztVQUNaLEtBQUE7aUJBQVAsNEVBQTBFLE1BQU0sdUJBQXVCLG9DQUFvQztBQUN6SSxnQkFBTSx5Q0FBeUMsSUFBQSxPQUFBLE9BQU0scUNBQy9DLG9DQUFvQztBQUUxQyxnQkFBSSxjQUFjLG1DQUFtQyxPQUFPLFNBQUMsY0FBYSxvQ0FBc0M7QUFDOUcsa0JBQU0sY0FBYSxtQ0FBa0MsaUJBQy9DLGdDQUFnQyxhQUFZLFNBQVM7QUFFM0Qsa0JBQUksQ0FBQywrQkFBK0I7QUFDbEMsNkJBQVksS0FBSzs7QUFHbkIscUJBQU87ZUFDTjtBQUVILGdCQUFNLGtCQUFrQixJQUFBLE9BQUEsT0FBTSxjQUN4QixhQUFhLGlCQUNiLFFBQVEsV0FBVyxZQUNuQixZQUFZLElBQUEsT0FBQSxPQUFNLFFBQ2xCLG9CQUFvQjtBQUUxQiwwQkFBYyxZQUFZLE9BQU8sU0FBQyxjQUFhLGFBQWU7QUFDNUQsa0JBQUksU0FBUyxZQUFXO0FBRXhCLGtCQUFNLGFBQVksSUFBQSxPQUFBLE9BQU0sU0FDbEIsVUFBVSxJQUFBLE1BQUEsWUFBVyxZQUFXO0FBRXRDLGtCQUFJLENBQUMsU0FBUztBQUNaLG9CQUFNLFlBQVcsa0NBQWtDLGVBQzdDLG1CQUFtQixZQUFXO0FBRXBDLHNCQUFNLElBQUksTUFBTyxRQUF5RSxPQUFsRSxrQkFBaUIsbURBQTBELE9BQVQsV0FBUzs7QUFHckcsa0JBQU0sY0FBYyxPQUFNO0FBRTFCLGtCQUFJLGNBQWMsR0FBRztBQUNuQixvQkFBTSxZQUFZLElBQUEsT0FBQSxNQUFLO0FBRXZCLHlCQUFRO0FBRVIseUJBQVEsSUFBQSxPQUFBLFlBQVc7QUFFbkIsOEJBQWEsSUFBSSxjQUFBLFdBQVc7QUFFNUIsNkJBQVksS0FBSzs7QUFHbkIscUJBQU87ZUFDTjtBQUVILGdCQUFNLG9CQUFvQixZQUFZO0FBRXRDLGdCQUFJLHNCQUFzQixHQUFHO0FBQzNCLGtCQUFNLGNBQWMsSUFBSSxlQUNsQixTQUFRO2dCQUNOO2lCQUVGLGNBQWEsSUFBSSxjQUFBLFdBQVc7QUFFbEMsMEJBQVksS0FBSzs7QUFHbkIsZ0JBQU0sV0FBVyxrQ0FBa0MsZUFDN0MsNkJBQTZCLElBQUEsVUFBQSxnRUFBK0QsVUFBVSx3QkFDdEcsT0FBTyw0QkFDUCxZQUFZLE9BQ1osa0JBQWtCLFlBQUEsU0FDbEIseUJBQXlCLElBckVkLHdCQXFFeUMsTUFBTSxXQUFXLGFBQWE7QUFFeEYsbUJBQU87Ozs7YUF2RVU7TUFBK0IsY0FBQTs7OztBRWJwRDs7Ozs7Ozs7ZUFRcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sa0NBQU4seUJBQUEsZUFBQTtnQkFBTSxrQ0FBQTtnQ0FBQTtnREFDUCxNQUFNLHVCQUFxQjs4QkFEcEI7O2tDQUVYO0FBRU4sY0FBSyx3QkFBd0I7OzttQkFKWixrQ0FBQTs7VUFPbkIsS0FBQTtpQkFBQSxvQ0FBMkI7QUFDekIsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsZUFBTSxtQ0FBbUMsU0FBUztBQUNoRCxnQkFBUSxVQUFZLFFBQVosU0FDRixPQUFPLGtDQUFrQyxXQUN6Qyx3QkFBd0Isa0NBQWtDLDRCQUMxRCxxQ0FBcUMsSUFBQSxTQUFBLHdDQUF1QyxNQUFNLFNBQUMsb0NBQXNDO0FBQ3ZILGtCQUFNLHlEQUF5RCxtQ0FBa0M7QUFFakcsa0JBQUksMkRBQTJELHVCQUF1QjtBQUNwRix1QkFBTzs7ZUFFUixVQUNILHlCQUF5QixZQUFBLFFBQXVCLG1FQUFtRSxNQUFNLHVCQUF1QjtBQUV0SixnQkFBSSwyQkFBMkIsTUFBTTtBQUNuQyxrQkFBTSw2QkFBNkIsdUJBQXVCO0FBRTFELHNCQUFRLDhCQUE4Qjs7QUFHeEMsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGtCQUFTLG1DQUFtQyxTQUFTO0FBQ25ELGdCQUFRLFVBQVksUUFBWixTQUNGLE9BQU8sa0NBQWtDLFdBQ3pDLFdBQVcsS0FBSyxXQUNoQix3QkFBd0Isa0NBQWtDLDRCQUMxRCw2QkFBNkIsSUFBQSxVQUFBLGdFQUErRCxVQUFVLHdCQUN0Ryx5QkFBeUIsUUFBUSwrQkFBK0I7QUFFdEUsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRLGlDQUFpQztBQUN2QyxnQkFBTSxPQUFPLEtBQUssV0FDWixzQ0FBc0MsZ0NBQWdDLFdBQ3RFLHVEQUF1RCxnQ0FBZ0MsNEJBQ3ZGLGFBQWUsU0FBUyx1Q0FBeUMsS0FBSywwQkFBMEI7QUFFdEcsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxpQkFBZSxtQ0FBbUMsU0FBUztBQUN6RCxnQkFBTSxPQUFPLGtDQUFrQyxXQUN6Qyx3QkFBd0Isa0NBQWtDLDRCQUMxRCxrQ0FBa0MsSUF4RHZCLGlDQXdEMkQsTUFBTSx3QkFDNUUseUJBQXlCLGdDQUFnQyxRQUFRLG1DQUFtQztBQUUxRyxtQkFBTzs7OzthQTNEVTtNQUF3QyxNQUFBOzs7O0FFUjdEOzs7Ozs7OztlQVFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxtQ0FBTix5QkFBQSxxQkFBQTtnQkFBTSxtQ0FBQTtnQ0FBQTtpREFDUCxNQUFNLFlBQVksdUJBQXVCLHlCQUF1Qjs4QkFEekQ7O2tDQUVYLE1BQU07QUFFWixjQUFLLHdCQUF3QjtBQUM3QixjQUFLLDBCQUEwQjs7O21CQUxkLG1DQUFBOztVQVFuQixLQUFBO2lCQUFBLG9DQUEyQjtBQUN6QixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxzQ0FBNkI7QUFDM0IsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsZUFBTSxtQ0FBbUMsd0JBQXdCLHVCQUF1QixTQUFTO0FBQy9GLGdCQUFJLDBCQUEwQixrQ0FBa0M7QUFFaEUsZ0JBQU0sT0FBTyx3QkFBd0I7QUFFckMsZ0JBQUksd0JBQXdCLGFBQUEsUUFBc0Isb0RBQW9ELHlCQUF5QjtBQUUvSCxnQkFBSSwwQkFBMEIsTUFBTTtBQUNsQyxrQkFBTSxhQUFhO0FBRW5CLG1CQUFLLGNBQWM7O0FBR3JCLGdCQUFJLGNBQWEsd0JBQXdCO0FBRXpDLGdCQUFNLGNBQWMsS0FBSyxrQkFDbkIsZ0NBQWdDLFlBQVksU0FBUztBQUUzRCxvQ0FBd0IsYUFBQSxRQUFzQiwrREFBK0QsbUNBQW1DO0FBRWhKLGdCQUFNLHFCQUFxQjtBQUUzQiwwQkFBYTtBQUViLGdCQUFNLFFBQVEsa0NBQWtDLFdBQzFDLDJCQUEyQixrQ0FBa0M7QUFFbkUsc0NBQTBCLFFBQ0UsVUFBQSxRQUFnQyxzQkFBc0IsTUFBTSxlQUMxRCxZQUFBLFFBQWtDLDBDQUEwQyxhQUFZO0FBRXRILDRDQUNFLEtBQUssa0JBQWtCLG9CQUFvQix5QkFDekMsS0FBSyxjQUFjO0FBRXZCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxrQkFBUyxtQ0FBbUMsd0JBQXdCLHVCQUF1QixTQUFTOzs7O1VBSXBHLEtBQUE7aUJBQUEsaUJBQVEsa0NBQWtDO0FBQ3hDLGdCQUFNLHdCQUF3QixpQ0FBaUMsNEJBQ3pELDBCQUEwQixpQ0FBaUMsOEJBQzNELGFBQWUsS0FBSywwQkFBMEIseUJBQTJCLEtBQUssNEJBQTRCO0FBRWhILG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsaUJBQWUsbUNBQW1DLHdCQUF3Qix1QkFBdUIsU0FBUztBQUN4RyxnQkFBTSxPQUFPLGtDQUFrQyxXQUN6QyxhQUFhLGtDQUFrQyxpQkFDL0Msd0JBQXdCLGtDQUFrQztBQUVoRSxnQkFBSSwwQkFBMEIsa0NBQWtDO0FBRWhFLGdCQUFNLG1DQUFtQyxJQXpFeEIsa0NBeUU2RCxNQUFNLFlBQVksdUJBQXVCO0FBRXZILHNDQUEwQixpQ0FBaUMsUUFBUSxtQ0FBbUMsd0JBQXdCLHVCQUF1QjtBQUVySixtQkFBTzs7OzthQTdFVTtNQUF5QyxZQUFBOzs7O0FFUjlEOzs7Ozs7OztlQU9xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLDZDQUFOLHlCQUFBLHFCQUFBO2dCQUFNLDZDQUFBO2dDQUFBOzJEQUNQLE1BQU0sWUFBWSx1QkFBdUIseUJBQXVCOzhCQUR6RDs7a0NBRVgsTUFBTTtBQUVaLGNBQUssd0JBQXdCO0FBQzdCLGNBQUssMEJBQTBCOzs7bUJBTGQsNkNBQUE7O1VBUW5CLEtBQUE7aUJBQUEsb0NBQTJCO0FBQ3pCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHNDQUE2QjtBQUMzQixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxlQUFNLG1DQUFtQyxTQUFTO0FBQ2hELGdCQUFNLE9BQU8sa0NBQWtDLFdBQ3pDLHdCQUF3QixrQ0FBa0MsNEJBQzFELDBCQUEwQixrQ0FBa0MsOEJBQzVELHFDQUFxQyxJQUFBLFNBQUEsd0NBQXVDLE1BQU0sU0FBQyxvQ0FBc0M7QUFDdkgsa0JBQU0seURBQXlELG1DQUFrQyw0QkFDM0YsMkRBQTJELG1DQUFrQztBQUVuRyxrQkFBSyw0QkFBNEIsNERBQThELDBCQUEwQix3REFBeUQ7QUFDaEwsdUJBQU87O2VBRVIsVUFDSCxjQUFjLG1DQUFtQyxJQUFJLFNBQUMsb0NBQXNDO0FBQzFGLGtCQUFNLGNBQWEsbUNBQWtDO0FBRXJELHFCQUFPOztBQUdmLGlCQUFLLGtCQUFrQjtBQUV2QixnQkFBTSx3QkFBd0IsYUFBQSxRQUFzQixzQ0FBc0M7QUFFMUYsZ0JBQUksMEJBQTBCLE1BQU07QUFDbEMsa0JBQU0sYUFBYTtBQUVuQixtQkFBSyxjQUFjOzs7OztVQUl2QixLQUFBO2lCQUFBLGtCQUFTLG1DQUFtQyxTQUFTOzs7O1VBSXJELEtBQUE7aUJBQUEsaUJBQVEsNENBQTRDO0FBQ2xELGdCQUFNLE9BQU8sS0FBSyxXQUNaLGlEQUFpRCwyQ0FBMkMsV0FDNUYsa0VBQWtFLDJDQUEyQyw0QkFDN0csb0VBQW9FLDJDQUEyQyw4QkFDL0csYUFBZSxTQUFTLGtEQUNULEtBQUssMEJBQTBCLG1FQUMvQixLQUFLLDRCQUE0QjtBQUV0RCxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLGlCQUFlLG1DQUFtQyxTQUFTO0FBQ3pELGdCQUFNLE9BQU8sa0NBQWtDLFdBQ3pDLGFBQWEsa0NBQWtDLGlCQUMvQyx3QkFBd0Isa0NBQWtDLDRCQUMxRCwwQkFBMEIsa0NBQWtDLDhCQUM1RCw2Q0FBNkMsSUFsRWxDLDRDQWtFaUYsTUFBTSxZQUFZLHVCQUF1QjtBQUUzSSx1REFBMkMsUUFBUSxtQ0FBbUM7Ozs7YUFwRXJFO01BQW1ELFlBQUE7Ozs7QUVQeEU7Ozs7O21DQW9CQSxXQUFBOzs7ZUFBd0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRnhCLFFBQUksUUFBUTtBQUVHLDRDQUF3QyxTQUFTO0FBQzlELFVBQUksNENBQTRDLElBQUEsU0FBQSxtREFBa0Q7QUFFbEcsYUFBTyw4Q0FBOEMsTUFBTTtBQUN6RCxZQUFNLG9DQUFvQywyQ0FDcEMsT0FBTyxrQ0FBa0MsV0FDekMsa0NBQWtDLElBQUEsU0FBQSxxQ0FBb0MsTUFBTTtBQUVqRiw0Q0FBb0MsT0FDbkMsMkJBQTJCLGlDQUFpQyxtQ0FBbUMsV0FDN0YsNkJBQTZCLG1DQUFtQztBQUVwRSxvREFBNEMsRUFBRSxRQUFRLFdBQVcsT0FBTyxJQUFBLFNBQUEsbURBQWtEOzs7QUFJOUgsd0NBQW9DLGlDQUFpQyxtQ0FBbUMsU0FBUztBQUMvRyxVQUFNLGdCQUFnQixNQUNoQixzQkFBc0IsaUJBQUEsUUFBNkIsUUFBUSxpQ0FBaUMsZUFBZSxVQUMzRyx1QkFBdUIsa0JBQUEsUUFBOEIsUUFBUSxpQ0FBaUM7QUFFcEcsVUFBTSxPQUFPLGdDQUFnQztBQUU3QyxVQUFJLHFDQUFxQyxJQUFBLFNBQUEsd0NBQXVDLE1BQU07QUFFdEYsVUFBTSxtQ0FBbUMsSUFBQSxTQUFBLHNDQUFxQyxNQUFNLFVBQzlFLGtDQUNFLG1CQUFHLGtDQUFBLE9BQ0gsbUJBQUc7QUFHWCwyQ0FBcUMsdUJBQUEsUUFBeUMsUUFBUSxpQ0FBaUMsc0JBQXNCLHFCQUFxQjtBQUVsSyxVQUFNLGdDQUFnQztBQUV0QyxNQUFBLElBQUEsU0FBQSxnQ0FBK0IsaUNBQWlDO0FBRWhFLE1BQUEsSUFBQSxTQUFBLDZCQUE0QiwrQkFBK0I7O0FBRzdELDBDQUFzQyxtQ0FBbUMsU0FBUztBQUNoRixVQUFNLHdCQUF3QixtQkFBQSxRQUErQixRQUFRLG1DQUFtQyxVQUNsRyx5QkFBeUIsb0JBQUEsUUFBZ0MsUUFBUSxtQ0FBbUM7QUFFMUcsK0JBQUEsUUFBMkMsUUFBUSxtQ0FBbUM7QUFFdEYsVUFBTSxPQUFPLGtDQUFrQztBQUUvQyxVQUFJLDBCQUEwQixrQ0FBa0M7QUFFaEUsVUFBTSx3QkFBd0Isa0NBQWtDLDRCQUMxRCxxQ0FBcUMsSUFBQSxTQUFBLHdDQUF1QyxNQUFNLFNBQUMsb0NBQXNDO0FBQ3ZILFlBQU0seURBQXlELG1DQUFrQyw0QkFDM0YsMkRBQTJELG1DQUFrQztBQUVuRyxZQUFLLDRCQUE0Qiw0REFBOEQsMEJBQTBCLHdEQUF5RDtBQUNoTCxpQkFBTzs7U0FFUjtBQUVULGdDQUEwQixlQUFBLFFBQWlDLFFBQVEsbUNBQW1DLHdCQUF3Qix1QkFBdUI7QUFFckosVUFBTSwrQkFBK0IseUJBQy9CLGtDQUFrQztBQUV4QyxNQUFBLElBQUEsU0FBQSxnQ0FBK0IsaUNBQWlDO0FBRWhFLE1BQUEsSUFBQSxTQUFBLDRCQUEyQiw4QkFBOEI7Ozs7O0FDdkYzRDs7Ozs7bUNBT0EsV0FBQTs7O2VBQXdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFULDhDQUEwQyxNQUFNLFNBQW9DO1VBQTNCLHVCQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBdUI7QUFDN0YsVUFBTSxjQUFjLEtBQUs7QUFFekIsa0JBQVksUUFBUSxTQUFDLFlBQWU7QUFDbEMsWUFBTSxzQkFBc0IsZ0NBQWdDLE1BQU0sWUFBWSxTQUFTO0FBRXZGLFlBQUksd0JBQXdCLE1BQU07QUFDaEMsY0FBTSwrQkFBaUMsbUJBQUcsc0JBQUEsT0FBTDtZQUEyQjtjQUMxRCw2QkFBNkIsNkJBQTZCLElBQUksU0FBQyw2QkFBZ0M7QUFDN0YsZ0JBQU0sc0NBQXNDLDRCQUE0QixlQUNsRSw0QkFBNEI7QUFFbEMsbUJBQU87Y0FFVCxxQkFBcUIsb0JBQW9CO0FBRS9DLDZCQUFtQixRQUFRLFNBQUMsbUJBQXNCO0FBQ2hELGdCQUFNLHNEQUFzRCwyQkFBMkIsU0FBUztBQUVoRyxnQkFBSSxDQUFDLHFEQUFxRDtBQUN4RCxrQkFBUSxVQUFZLFFBQVosU0FDRixXQUFXLG1CQUNYLFNBQU8sUUFBUSxhQUFhO0FBRWxDLGtCQUFJLFdBQVMsTUFBTTtBQUNqQixvQkFBTSx3QkFBdUI7QUFFN0IsaURBQWlDLFFBQU0sU0FBUzs7Ozs7OztBQVE1RCw2Q0FBeUMsTUFBTSxZQUFZLFNBQVMsc0JBQXNCO0FBQ3hGLFVBQUksc0JBQXNCO0FBRTFCLFVBQUksd0JBQXdCLE1BQU07QUFDaEMsWUFBSSxvQ0FBb0MsWUFBQSxRQUFrQywwQ0FBMEMsTUFBTSxZQUFZO0FBRXRJLFlBQUksc0NBQXNDLE1BQU07QUFDOUMsY0FBUSwyQkFBNkIsUUFBN0I7QUFFUixtQ0FBeUIsS0FBSyxTQUFDLDBCQUE0QjtBQUN6RCxnQkFBMkIsWUFBdkIsMEJBQW1DLFlBQUEsVUFBbUM7QUFDeEUsa0JBQU0scUNBQXFDLDBCQUNyQyxxQ0FBcUMsbUNBQ3JDLHFFQUFxRSxtQ0FBbUMsZUFBZTtBQUU3SCxrQkFBSSxvRUFBb0U7QUFDdEUsb0RBQW9DO0FBRXBDLHVCQUFPOzs7O0FBS2IsY0FBSSxzQ0FBc0MsTUFBTTtBQUM5QyxnQkFBTSwwQkFBMEI7QUFFaEMscUNBQXlCLEtBQUs7OztBQUlsQyw4QkFBc0I7O0FBR3hCLFVBQUksd0JBQXdCLE1BQU07QUFDaEMsWUFBTSxrQ0FBa0MsVUFBQSxRQUFnQyxzQkFBc0IsTUFBTTtBQUVwRyxZQUFJLG9DQUFvQyxNQUFNO0FBQzVDLGNBQVEsNEJBQTZCLFFBQTdCLDBCQUNGLDJCQUEwQjtBQUVoQyxvQ0FBeUIsS0FBSzs7QUFHaEMsOEJBQXNCOztBQUd4QixVQUFJLHdCQUF3QixNQUFNO0FBQ2hDLFlBQU0sMkJBQTBCLE1BQUEsUUFBd0Isc0JBQXNCLE1BQU07QUFFcEYsOEJBQXNCOztBQUd4QixVQUFJLHdCQUF3QixNQUFNO0FBQ2hDLDhCQUFzQixxQkFBQSxRQUFvQixzQkFBc0IsTUFBTTs7QUFHeEUsYUFBTzs7Ozs7QUNsR1Q7Ozs7O21DQVVBLFdBQUE7OztlQUF3Qjs7Ozs7Ozs7Ozs7O0FBRnhCLFFBQVEsbUJBQXVFLGNBQUEsZUFBdkU7QUFBUixRQUEwQixxQkFBcUQsY0FBQSxlQUFyRDtBQUExQixRQUE4QywrQkFBaUMsY0FBQSxlQUFqQztBQUUvQixvQ0FBZ0MsT0FBTztBQUNwRCxVQUFNLFlBQVksbUJBQW1CLFFBQy9CLFVBQVUsaUJBQWlCLFFBQzNCLE9BQU8sV0FDUCxhQUFhLElBQ2IsMkJBQTJCLElBQzNCLFVBQVU7UUFDUjtRQUNBO1FBQ0E7O0FBR1IsTUFBQSxJQUFBLGtDQUFBLFNBQWlDLE1BQU07QUFFdkMsTUFBQSxJQUFBLGdDQUFBLFNBQStCO0FBRS9CLE1BQUEsSUFBQSw4QkFBQSxTQUE2QjtBQUU3QixjQUFRLDZCQUE2QixXQUFXO0FBRWhELGFBQU87Ozs7O0FDOUJUOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGVBQU4seUJBQUEsYUFBQTtnQkFBTSxlQUFBO2dDQUFBOytCQUFBOzhCQUFBOzs7bUJBQUEsZUFBQSxNQUFBOztVQXFCWixLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sYUFBQSxZQUFZLFlBckI5QixlQXFCd0Q7Ozs7YUFyQnhEO01BQXFCLGFBQUE7QUFDeEMsb0JBRG1CLGNBQ1osa0JBQWlCLGFBQUE7QUFFeEIsb0JBSG1CLGNBR1osbUJBQWtCO0FBRXpCLG9CQUxtQixjQUtaLDBCQUF5QjtBQUVoQyxvQkFQbUIsY0FPWix5QkFBd0I7QUFFL0Isb0JBVG1CLGNBU1osMEJBQXlCO0FBRWhDLG9CQVhtQixjQVdaLDhCQUE2QjtBQUVwQyxvQkFibUIsY0FhWixnQ0FBK0I7QUFFdEMsb0JBZm1CLGNBZVosaUNBQWdDO0FBRXZDLG9CQWpCbUIsY0FpQlosa0NBQWlDO0FBRXhDLG9CQW5CbUIsY0FtQlosa0NBQWlDOzs7O0FFdkIxQzs7Ozs7Ozs7ZUFJcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxnQkFBTix5QkFBQSxjQUFBO2dCQUFNLGdCQUFBO2dDQUFBO2dDQUFBOzhCQUFBOzs7YUFBQTtNQUFzQixjQUFBOzs7O0FFSjNDOzs7Ozs7Ozs7Ozs7O01BRW9CLGNBQVksV0FBQTtlQUFaLGNBQUE7O01BQ0Esd0JBQXNCLFdBQUE7ZUFBdEIsd0JBQUE7O01BRUEsY0FBWSxXQUFBO2VBQVosU0FBQTs7TUFDQSxlQUFhLFdBQUE7ZUFBYixVQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUNOcEI7Ozs7Ozs7Ozs7Ozs7TUFVZ0IsMkJBQXlCLFdBQUE7ZUFBekI7O01BU0EseUNBQXVDLFdBQUE7ZUFBdkM7O01BUUEsK0NBQTZDLFdBQUE7ZUFBN0M7O01BT0EsNERBQTBELFdBQUE7ZUFBMUQ7O01BT2hCLFNBS0UsV0FBQTtlQUxGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBakNBLFFBQVEsZUFBbUUsY0FBQSxnQkFBbkU7QUFBUixRQUFzQixrQkFBcUQsY0FBQSxnQkFBckQ7QUFBdEIsUUFBdUMsa0NBQW9DLGNBQUEsZ0JBQXBDO0FBRWhDLHlDQUFxQztBQUMxQyxVQUFRLE1BQVEsZUFBQSxlQUFSLEtBQ0Ysd0JBQXdCLHVCQUFBLFFBQXNCLGVBQzlDLFFBQVEscUNBQXFDLEtBQUssd0JBQ2xELGlCQUFpQixnQkFBZ0IsZUFBQSxnQkFBZ0I7QUFFdkQsYUFBTzs7QUFHRixxREFBaUQsdUJBQXVCO0FBQzdFLFVBQVEsTUFBUSxlQUFBLGVBQVIsS0FDRixRQUFRLHFDQUFxQyxLQUFLLHdCQUNsRCxpQkFBaUIsZ0JBQWdCLGVBQUEsZ0JBQWdCO0FBRXZELGFBQU87O0FBR0YsMkRBQXVELEtBQUssdUJBQXVCO0FBQ3hGLFVBQU0sUUFBUSxxQ0FBcUMsS0FBSyx3QkFDbEQsaUJBQWlCLGdCQUFnQixlQUFBLGdCQUFnQjtBQUV2RCxhQUFPOztBQUdGLHdFQUFvRSxLQUFLLGVBQWUsdUJBQXVCO0FBQ3BILFVBQU0sUUFBUSxxQ0FBcUMsS0FBSyx3QkFDbEQsaUJBQWlCLGdDQUFnQyxlQUFBLGdCQUFnQixPQUFPO0FBRTlFLGFBQU87O1FBR1QsV0FBZTtNQUNiO01BQ0E7TUFDQTtNQUNBOztBQUdGLGtEQUE4QyxLQUFLLHVCQUF1QjtBQUN4RSxVQUFJLFFBQVEsYUFBYTtBQUV6QixVQUFNLDZCQUE2QixzQkFBc0I7QUFFekQsY0FDRSxtQkFBRyxPQUFBLE9BQ0gsbUJBQUc7QUFHTCxjQUFRLElBQUEsdUJBQUEsd0JBQXVCO0FBRS9CLGFBQU87Ozs7O0FDNURUOzs7Ozs7Ozs7Ozs7O01BRVMsNkJBQTJCLFdBQUE7ZUFBM0IsY0FBQTs7TUFFVyxXQUFTLFdBQUE7ZUFBVCxXQUFBOztNQUNBLGNBQVksV0FBQTtlQUFaLGNBQUE7O01BRUEsZUFBYSxXQUFBO2VBQWIsZUFBQTs7TUFDQSxpQkFBZSxXQUFBO2VBQWYsUUFBQTs7TUFDQSxrQkFBZ0IsV0FBQTtlQUFoQixTQUFBOztNQUNBLHNCQUFvQixXQUFBO2VBQXBCLHNCQUFBOztNQUNBLHVCQUFxQixXQUFBO2VBQXJCLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWHBCOzs7OzttQ0FlQSxXQUFBOzs7ZUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVhBLFFBQU0sYUFBYSxlQUFBLFFBQVUsR0FBRTtRQVcvQixXQUFlOzs7O0FDZmY7Ozs7O21DQU1BLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUFBLFdBQWUsSUFBQSxlQUFBLFNBQVUsTUFBQSxRQUFNOzs7O0FDTi9COzs7Ozs7Ozs7Ozs7O01BRVMsNkJBQTJCLFdBQUE7ZUFBM0IsY0FBQTs7TUFFSSxvQ0FBa0MsV0FBQTtlQUFsQzs7TUFDQSxvQ0FBa0MsV0FBQTtlQUFsQzs7OztBQUROLFFBQU0scUNBQXFDO0FBQzNDLFFBQU0scUNBQXFDOzs7O0FDTGxEOzs7Ozs7OztlQU1xQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxhQUFOLHlCQUFBLFFBQUE7Z0JBQU0sYUFBQTtnQ0FBQTs2QkFBQTs4QkFBQTs7O21CQUFBLGFBQUE7O1VBQ25CLEtBQUE7aUJBQUEsbUJBQVU7QUFDUixnQkFBTSxRQUFRLEtBQUssWUFDYixPQUFPO0FBRWIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLGdCQUFNLFFBQVE7Y0FDTixjQUFBO2NBQ0EsY0FBQTtjQUNBLGNBQUE7ZUFFRixVQUFVLE1BQU0sSUFBSSxTQUFDLE1BQU0sT0FBVTtBQUNuQyxrQkFBTSxRQUFRLE1BQ1IsV0FBWSxVQUFVO0FBRTVCLHFCQUVFLHNCQUFBLGNBQUMsVUFBQTtnQkFBTztnQkFBYztpQkFDbkI7Z0JBS1AsaUJBQ0UsbUJBQUc7QUFHWCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEseUJBQWdCO0FBQ2QsZ0JBQU0sVUFBVSxLQUFLLFFBQVEsS0FBSztBQUVsQyxtQkFBUTtjQUNOOzs7OzthQXJDZTtNQUFtQixRQUFBO0FBeUN0QyxvQkF6Q21CLFlBeUNaLHFCQUFvQjtNQUN6QixXQUFXO01BQ1gsWUFBWTs7Ozs7QUVqRGhCOzs7OzttQ0FNQSxXQUFBOzs7ZUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFBQSxXQUFlLElBQUEsZUFBQSxTQUFVLFlBQUEsYUFBVzs7OztBQ05wQzs7Ozs7bUNBTUEsV0FBQTs7O2VBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBQUEsV0FBZSxJQUFBLGVBQUEsU0FBVSxNQUFBLFVBQVE7Ozs7QUNOakM7Ozs7Ozs7O2VBSXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxjQUFOLHlCQUFBLFVBQUE7Z0JBQU0sY0FBQTtnQ0FBQTs4QkFBQTs4QkFBQTs7O21CQUFBLGNBQUE7O1VBQ25CLEtBQUE7aUJBQUEsa0JBQVM7QUFDUCxnQkFBTSxRQUFRLEtBQUssWUFDYixNQUFNO0FBRVosbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGdCQUFPLEtBQUs7QUFDVixnQkFBTSxRQUFRO0FBRWQsaUJBQUssU0FBUzs7OztVQUdoQixLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLGdCQUFNLFNBQVMsS0FBSyxPQUFPLEtBQUssT0FDMUIsU0FBUyxLQUFLLE9BQU8sS0FBSztBQUVoQyxtQkFBUTtjQUNOO2NBQ0E7Ozs7O2FBcEJlO01BQW9CLFVBQUE7QUF3QnZDLG9CQXhCbUIsYUF3QloscUJBQW9CO01BQ3pCLFdBQVc7TUFDWCxZQUFZOzs7OztBRTlCaEI7Ozs7O21DQU1BLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUFBLFdBQWUsSUFBQSxlQUFBLFNBQVUsTUFBQSxPQUFLOzs7O0FDTjlCOzs7Ozs7OztlQUlxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLFFBQU0sZUFBTix5QkFBQSxPQUFBO2dCQUFNLGVBQUE7Z0NBQUE7K0JBQUE7OEJBQUE7OzttQkFBQSxlQUFBOztVQUNuQixLQUFBO2lCQUFBLHNCQUFhO0FBQ1gsZ0JBQU0sUUFBUSxLQUFLLFlBQ2IsVUFBVTtBQUVoQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsb0JBQVcsU0FBUztBQUNsQixnQkFBTSxRQUFRO0FBRWQsaUJBQUssU0FBUzs7OztVQUdoQixLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLGdCQUFNLGFBQWEsS0FBSyxXQUFXLEtBQUssT0FDbEMsYUFBYSxLQUFLLFdBQVcsS0FBSztBQUV4QyxtQkFBUTtjQUNOO2NBQ0E7Ozs7O2FBcEJlO01BQXFCLE9BQUE7QUF3QnhDLG9CQXhCbUIsY0F3QloscUJBQW9CO01BQ3pCLFdBQVc7TUFDWCxZQUFZOzs7OztBRTlCaEI7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLGlCQUFOLHlCQUFBLFFBQUE7Z0JBQU0saUJBQUE7Z0NBQUE7aUNBQUE7OEJBQUE7OzttQkFBQSxpQkFBQTs7VUFDbkIsS0FBQTtpQkFBQSx1QkFBYztBQUNaLGdCQUFNLFFBQVEsS0FBSyxZQUNiLFdBQVc7QUFFakIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLGdCQUFNLFlBQVk7Y0FDVixXQUFBO2NBQ0EsV0FBQTtjQUNBLFdBQUE7ZUFFRixVQUFVLFVBQVUsSUFBSSxTQUFDLFVBQVUsT0FBVTtBQUMzQyxrQkFBTSxRQUFRLFVBQ1IsV0FBWSxVQUFVO0FBRTVCLHFCQUVFLHNCQUFBLGNBQUMsVUFBQTtnQkFBTztnQkFBYztpQkFDbkI7Z0JBS1AsaUJBQ0UsbUJBQUc7QUFHWCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEseUJBQWdCO0FBQ2QsZ0JBQU0sY0FBYyxLQUFLLFlBQVksS0FBSztBQUUxQyxtQkFBUTtjQUNOOzs7OzthQXJDZTtNQUF1QixRQUFBO0FBeUMxQyxvQkF6Q21CLGdCQXlDWixxQkFBb0I7TUFDekIsV0FBVztNQUNYLFlBQVk7Ozs7O0FFakRoQjs7Ozs7bUNBb0NBLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE5QkEsUUFBTSxrQkFBTix5QkFBQSxVQUFBO2dCQUFNLGtCQUFBO2dDQUFBO2tDQUFBOzhCQUFBOzs7bUJBQUEsa0JBQUE7O1VBQ0osS0FBQTtpQkFBQSxzQkFBYTtBQUNYLGdCQUFNLFFBQVEsS0FBSyxZQUNiLFVBQVU7QUFFaEIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG9CQUFXLFNBQVM7QUFDbEIsZ0JBQU0sUUFBUTtBQUVkLGlCQUFLLFNBQVM7Ozs7VUFHaEIsS0FBQTtpQkFBQSx5QkFBZ0I7QUFDZCxnQkFBTSxhQUFhLEtBQUssV0FBVyxLQUFLLE9BQ2xDLGFBQWEsS0FBSyxXQUFXLEtBQUs7QUFFeEMsbUJBQVE7Y0FDTjtjQUNBOzs7OzthQXBCQTtNQUF3QixVQUFBO0FBd0I1QixvQkF4QkksaUJBd0JHLHFCQUFvQjtNQUN6QixXQUFXO01BQ1gsWUFBWTs7UUFJaEIsV0FBZSxJQUFBLGVBQUEsU0FBVSxpQkFBQTs7OztBQ3BDekI7Ozs7Ozs7O2VBTXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLG9CQUFOLHlCQUFBLFFBQUE7Z0JBQU0sb0JBQUE7Z0NBQUE7b0NBQUE7OEJBQUE7OzttQkFBQSxvQkFBQTs7VUFDbkIsS0FBQTtpQkFBQSwwQkFBaUI7QUFDZixnQkFBTSxRQUFRLEtBQUssWUFDYixjQUFjO0FBRXBCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSx5QkFBZ0I7QUFDZCxnQkFBTSxlQUFlO2NBQ2IsY0FBQTtjQUNBLGNBQUE7Y0FDQSxjQUFBO2VBRUYsVUFBVyxhQUFhLElBQUksU0FBQyxhQUFhLE9BQVU7QUFDbEQsa0JBQU0sUUFBUSxhQUNSLFdBQVksVUFBVTtBQUU1QixxQkFFRSxzQkFBQSxjQUFDLFVBQUE7Z0JBQU87Z0JBQWM7aUJBQ25CO2dCQUtQLGlCQUNFLG1CQUFHO0FBSVgsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLGdCQUFNLGlCQUFpQixLQUFLLGVBQWUsS0FBSztBQUVoRCxtQkFBUTtjQUNOOzs7OzthQXRDZTtNQUEwQixRQUFBO0FBMEM3QyxvQkExQ21CLG1CQTBDWixxQkFBb0I7TUFDekIsV0FBVztNQUNYLFlBQVk7Ozs7O0FFbERoQjs7Ozs7Ozs7ZUFNcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxvQkFBTix5QkFBQSxVQUFBO2dCQUFNLG9CQUFBO2dDQUFBO29DQUFBOzhCQUFBOzs7bUJBQUEsb0JBQUE7O1VBQ25CLEtBQUE7aUJBQUEsc0JBQWEsV0FBVztBQUN0QixnQkFBSSxjQUFjLE1BQU07QUFDdEIsd0JBQVU7QUFFVixrQkFBTSxrQkFBa0IsVUFBVSxZQUM1QixRQUFRO0FBRWQsbUJBQUssU0FBUzttQkFDVDtBQUNMLG1CQUFLOzs7OztVQUlULEtBQUE7aUJBQUEsMEJBQWlCO0FBQ2YsZ0JBQU0sUUFBUSxXQUFBO0FBRWQsaUJBQUssU0FBUzs7OztVQUdoQixLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLGdCQUFNLGVBQWUsS0FBSyxhQUFhLEtBQUssT0FDdEMsaUJBQWlCLEtBQUssZUFBZSxLQUFLO0FBRWhELG1CQUFRO2NBQ047Y0FDQTs7Ozs7YUExQmU7TUFBMEIsVUFBQTtBQThCN0Msb0JBOUJtQixtQkE4QloscUJBQW9CO01BQ3pCLFdBQVc7TUFDWCxZQUFZO01BQ1osVUFBVTs7Ozs7QUV2Q2Q7Ozs7Ozs7O2VBSXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxxQkFBTix5QkFBQSxPQUFBO2dCQUFNLHFCQUFBO2dDQUFBO3FDQUFBOzhCQUFBOzs7bUJBQUEscUJBQUE7O1VBQ25CLEtBQUE7aUJBQUEsNEJBQW1CO0FBQ2pCLGdCQUFNLFFBQVEsS0FBSyxZQUNiLGdCQUFnQjtBQUV0QixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEseUJBQWdCO0FBQ2QsZ0JBQU0sbUJBQW1CLEtBQUssaUJBQWlCLEtBQUs7QUFFcEQsbUJBQVE7Y0FDTjs7Ozs7YUFaZTtNQUEyQixPQUFBO0FBZ0I5QyxvQkFoQm1CLG9CQWdCWixxQkFBb0I7TUFDekIsV0FBVztNQUNYLFlBQVk7Ozs7O0FFdEJoQjs7Ozs7bUNBOENBLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdENBLFFBQU0sc0JBQU4seUJBQUEsVUFBQTtnQkFBTSxzQkFBQTtnQ0FBQTtzQ0FBQTs4QkFBQTs7O21CQUFBLHNCQUFBOztVQUNKLEtBQUE7aUJBQUEsMEJBQWlCO0FBQ2YsZ0JBQU0sUUFBUSxLQUFLLFlBQ2IsY0FBYztBQUVwQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsd0JBQWUsYUFBYTtBQUMxQixnQkFBTSxRQUFRO0FBRWQsaUJBQUssU0FBUzs7OztVQUdoQixLQUFBO2lCQUFBLDRCQUFtQjtBQUNqQixnQkFBTSxRQUFRLFdBQUE7QUFFZCxpQkFBSyxTQUFTOzs7O1VBR2hCLEtBQUE7aUJBQUEseUJBQWdCO0FBQ2QsZ0JBQU0saUJBQWlCLEtBQUssZUFBZSxLQUFLLE9BQzFDLGlCQUFpQixLQUFLLGVBQWUsS0FBSyxPQUMxQyxtQkFBbUIsS0FBSyxpQkFBaUIsS0FBSztBQUVwRCxtQkFBUTtjQUNOO2NBQ0E7Y0FDQTs7Ozs7YUE1QkE7TUFBNEIsVUFBQTtBQWdDaEMsb0JBaENJLHFCQWdDRyxxQkFBb0I7TUFDekIsV0FBVztNQUNYLFlBQVk7O1FBSWhCLFdBQWUsSUFBQSxlQUFBLFNBQVUscUJBQUE7Ozs7QUM5Q3pCOzs7OzttQ0FzQkEsV0FBQTs7O2VBQUE7Ozs7O0FBaEJBLFFBQU0sT0FBTyxjQUFBO0FBQWIsUUFDTSxjQUFjO0FBRHBCLFFBRU0sa0JBQWtCO0FBRnhCLFFBR00sVUFBVztBQUhqQixRQUlNLGVBQWdCO0FBSnRCLFFBS00sbUJBQW9CO0FBTDFCLFFBTU0sT0FBTztNQUNMO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7QUFaUixRQWNNLDRCQUE0QixPQUFBLGNBQWMsU0FBUztRQUV6RCxXQUFlOzs7O0FDdEJmOzs7OzttQ0FzQkEsV0FBQTs7O2VBQUE7Ozs7O0FBaEJBLFFBQU0sT0FBTyxjQUFBO0FBQWIsUUFDTSxjQUFjO0FBRHBCLFFBRU0sa0JBQWtCO0FBRnhCLFFBR00sVUFBVztBQUhqQixRQUlNLGVBQWdCO0FBSnRCLFFBS00sbUJBQW9CO0FBTDFCLFFBTU0sT0FBTztNQUNMO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7QUFaUixRQWNNLDRCQUE0QixPQUFBLGNBQWMsU0FBUztRQUV6RCxXQUFlOzs7O0FDdEJmOzs7OzttQ0FNZ0IsbUJBQUE7OztlQUFBOzs7O0FBRmhCLFFBQVEsU0FBVyxXQUFBLGVBQVg7QUFFRCw2QkFBeUIsUUFBUTtBQUN0QyxVQUFNLFVBQVUsT0FBTyxjQUNqQixZQUFZLE9BQU8sZ0JBQ25CLGdCQUFnQixVQUFVLFdBQzFCLGdCQUFnQixPQUFPLE9BQU8sVUFDOUIsUUFBUTtBQUVkLGFBQU8sT0FBTyxTQUFDLE1BQVM7QUFDdEIsWUFBTSxXQUFXLEtBQUs7QUFFdEIsWUFBSSxhQUFhLGVBQWU7QUFDOUIsaUJBQU87OztBQUlYLFlBQU0sUUFBUTtBQUVkLGFBQU87Ozs7O0FDdkJUOzs7OzttQ0FnTUEsV0FBQTs7O2VBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF0S0EsUUFBUSxnQkFBa0IsY0FBQSxlQUFsQjtBQUFSLFFBQ1EseUNBQTJDLE9BQUEsZ0JBQTNDO0FBRFIsUUFFUSwwQ0FBNEMsT0FBQSxpQkFBNUM7QUFFUixRQUFNLE9BQU4seUJBQUEsU0FBQTtnQkFBTSxPQUFBO2dDQUFBO3VCQUFBOzhCQUFBOzs7QUFDSix3QkFBQSx1QkFBQSxRQUFBLGdCQUFlLFNBQUMsT0FBTyxTQUFZO0FBQ2pDLGNBQUk7QUFDRixnQkFBTSxPQUFPLE1BQUssV0FDWixNQUFNLE1BQUssVUFDWCxVQUFVLE1BQUssY0FDZixXQUFXLE1BQUssZUFDaEIsY0FBYyxNQUFLO0FBRXpCLGdCQUFJLFNBQVMsY0FBQSxvQ0FBb0M7QUFDL0MseUNBQUEsUUFBMEIsT0FBTyxVQUFVO0FBQzNDLHlDQUFBLFFBQTBCLFdBQVcsYUFBYTs7QUFHcEQsZ0JBQUksU0FBUyxjQUFBLG9DQUFvQztBQUMvQyx5Q0FBQSxRQUEwQixPQUFPLFVBQVU7QUFDM0MseUNBQUEsUUFBMEIsV0FBVyxhQUFhOztBQUdwRCxnQkFBTSxpQkFBaUI7Y0FDZiwyQkFBQTtjQUNBLDJCQUFBO2VBRUYsd0JBQXdCLE9BQUEsc0JBQXNCLG1CQUFtQixpQkFDakUsZ0JBQWdCLHVDQUF1Qyx3QkFDdkQsaUJBQWlCLHdDQUF3Qyx3QkFDekQsVUFBVSxlQUFlLGNBQ3pCLGdCQUFnQixNQUFLLG9CQUNyQixZQUFZLFFBQVEsZ0JBQ3BCLFVBQVUsTUFBSyxjQUNmLFNBQVMsY0FBYyxTQUFTLFVBQ2hDLE9BQU8sZUFBZSxNQUFNLFFBQVE7QUFFMUMsZ0JBQUksWUFBWTtBQUVoQixnQkFBSSxTQUFTLE1BQU07QUFDakIsMEJBQVksS0FBSyxZQUFZOztBQUcvQixrQkFBSyxhQUFhO0FBRWxCLGdCQUFNLGdCQUFnQixJQUFBLE9BQUEsaUJBQWdCLGlCQUNoQyxZQUFZLE1BQ1osY0FBYyxjQUFjLGVBQWUsWUFDM0MsY0FBYztBQUVwQixrQkFBSyxlQUFlO21CQUNiLE9BQVA7QUFDQSxvQkFBUSxJQUFJO0FBRVosa0JBQUs7QUFFTCxrQkFBSzs7O0FBSVQsd0JBQUEsdUJBQUEsUUFBQSxpQkFBZ0IsU0FBQyxPQUFPLFNBQVk7QUFDbEMsY0FBSTtBQUVKLGNBQU0sT0FBTyxNQUFLLFdBQ1osV0FBVyxNQUFLLGVBQ2hCLGNBQWMsTUFBSztBQUV6QixrQkFBUTtpQkFDRCxjQUFBO0FBQ0gsOEJBQWdCLE9BQUE7QUFFaEI7aUJBRUcsY0FBQTtBQUNILDhCQUFnQiwyQkFBQTtBQUVoQjtpQkFFRyxjQUFBO0FBQ0gsOEJBQWdCLDJCQUFBO0FBRWhCOztBQUdKLGNBQU0sTUFBTSxjQUFjLE9BQU8sV0FDM0IsVUFBVSxjQUFjLFdBQVc7QUFFekMsZ0JBQUssT0FBTztBQUVaLGdCQUFLLFdBQVc7Ozs7bUJBckZkLE9BQUE7O1VBd0ZKLEtBQUE7aUJBQUEseUJBQWdCO0FBQ2QsZ0JBQU0sZUFBZSxLQUFLLGFBQWEsS0FBSyxPQUN0QyxnQkFBZ0IsS0FBSyxjQUFjLEtBQUs7QUFFOUMsbUJBQVE7Y0FFTixzQkFBQSxjQUFDLFlBQUEsWUFBVSxNQUNULHNCQUFBLGNBQUMsVUFBQSxTQUFXLE1BQ1Ysc0JBQUEsY0FBQyxZQUFBLFNBQU8sTUFDTixzQkFBQSxjQUFDLFlBQUEsU0FBVSxNQUFDLG1CQUdaLHNCQUFBLGNBQUMsTUFBQSxTQUFVO2dCQUFDLFVBQVU7a0JBQ3RCLHNCQUFBLGNBQUMsWUFBQSxTQUFVLE1BQUMsUUFHWixzQkFBQSxjQUFDLFVBQUEsU0FBYztnQkFBQyxVQUFVO2tCQUMxQixzQkFBQSxjQUFDLEtBQUEsU0FBVztnQkFBQyxTQUFTO2tCQUN0QixzQkFBQSxjQUFDLFlBQUEsU0FBVSxNQUFDLFlBR1osc0JBQUEsY0FBQyxhQUFBLFNBQWlCO2dCQUFDLFVBQVU7a0JBQzdCLHNCQUFBLGNBQUMsU0FBQSxTQUFZO2dCQUFDLFNBQVM7a0JBQ3ZCLHNCQUFBLGNBQUMsWUFBQSxTQUFVLE1BQUMsZUFHWixzQkFBQSxjQUFDLGVBQUEsU0FBa0I7Z0JBQUMsU0FBUztvQkFHakMsc0JBQUEsY0FBQyxZQUFBLHFCQUFtQixPQUNwQixzQkFBQSxjQUFDLFlBQUEsV0FBUyxNQUNSLHNCQUFBLGNBQUMsWUFBQSxTQUFPLE1BQ04sc0JBQUEsY0FBQyxZQUFBLFNBQVUsTUFBQyxZQUdaLHNCQUFBLGNBQUMsU0FBQSxTQUFlO2dCQUFDLFNBQVM7a0JBQzFCLHNCQUFBLGNBQUMsWUFBQSxTQUFVLE1BQUMsZUFHWixzQkFBQSxjQUFDLFdBQUEsU0FBaUIsT0FDbEIsc0JBQUEsY0FBQyxZQUFBLFNBQVUsTUFBQyxpQkFHWixzQkFBQSxjQUFDLGFBQUEsU0FBbUI7Ozs7O1VBUTlCLEtBQUE7aUJBQUEsc0JBQWE7QUFDWCxpQkFBSztBQUVMLGdCQUFRLGlCQUFtQixLQUFLLFlBQXhCO0FBRVIsZ0JBQU0sVUFBVTtBQUVoQixpQkFBSyxXQUFXO0FBRWhCLGlCQUFLO0FBRUwsaUJBQUs7Ozs7YUF0Skg7dUJBQWEsTUFBQTtBQXlKakIsb0JBekpJLE1BeUpHLGtCQUFrQjtBQUV6QixvQkEzSkksTUEySkcsV0FBVTtBQUVqQixvQkE3SkksTUE2SkcscUJBQW9CO01BQ3pCLFdBQVc7O1FBSWYsV0FBZSxJQUFBLGVBQUEsU0FBVSxNQUFBOzs7O0FDaE16Qjs7Ozs7Ozs7Ozs7Ozs7QUFVQSxRQUFRLGVBQWlCLGVBQUEsUUFBakI7QUFFUixRQUFNLE9BQU8sSUFBSSxNQUFBO0FBRWpCO0FBRUEsU0FBSyxNQUVILHNCQUFBLGNBQUMsTUFBQSxTQUFJOzsiLAogICJuYW1lcyI6IFtdCn0K
42695
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ib3VuZHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvZG9tLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdGV4dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9lbGVtZW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2pzeC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZXZlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2tleS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2NsaWNrLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvc3RhdGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2NvbnRlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3Jlc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvbW91c2UuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3JlYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2JvZHkuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2xpbmsuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2hhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2lucHV0RWxlbWVudC9pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvaW5wdXRFbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9idXR0b24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L3NlbGVjdC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9jaGVja2JveC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvaW5wdXRFbGVtZW50L3RleHRhcmVhLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L2xpYi9pbnB1dEVsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvd2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy93aW5kb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2J1dHRvbnMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvanV4dGFwb3NlL3NyYy9qdXh0YXBvc2UuanMiLCAibm9kZV9tb2R1bGVzL2p1eHRhcG9zZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvc3BlY2lhbFN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvY29tbW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvYmFzaWMvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3N0YXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2hvcml6b250YWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9jaGlsZE5vZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2xvb2tBaGVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uL3BhcnRSdWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi9wYXJ0UnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9lcnJvci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9lcHNpbG9uTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvcGFydC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvdGVybWluYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3BhcnQvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL21vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vYW1iaWd1b3VzTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9hbWJpZ3VvdXNNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9vcHRpb25hbFF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3plcm9Pck1vcmVRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvY29tbW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9iYXNpYy88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvc3ByZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9kZWNsYXJhdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXRzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9tZWRpYS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWFzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL3N0eWxlcy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzTmFtZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy93aXRoU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9jdXJzb3JzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvY3Vyc29yLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3Jvdy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9yb3dzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L2NvbHVtbi5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9jb2x1bW5zLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL2V2ZW50VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL3V0aWxpdGllcy9ldmVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9taXhpbnMvZHJhZy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9taXhpbnMvZHJvcC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9lbGVtZW50L2RyYWcuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvZWxlbWVudC9kcm9wLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3NpemVhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3NwbGl0dGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3NwbGl0dGVyL3ZlcnRpY2FsLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvZGl2L3NwbGl0dGVyL2hvcml6b250YWwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9pbmRleC5qcyIsICJzcmMvZ3JhbW1hck5hbWVzLmpzIiwgInNyYy9ydWxlTmFtZXMuanMiLCAic3JjL3BhdHRlcm5OYW1lcy5qcyIsICJzcmMvY29uc3RhbnRzLmpzIiwgInNyYy9jdXN0b21HcmFtbWFyLmpzIiwgImxpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy90ZVgvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvc3JjL3RlWC9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvbGliL3RlWC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy90ZVgvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvdGVYL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvbGliL3RlWC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9wbGFpbi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvcGxhaW4vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9wbGFpbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9wbGFpbi9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9wbGFpbi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9wbGFpbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9yZWFkbWUvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvc3JjL3JlYWRtZS9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvbGliL3JlYWRtZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9yZWFkbWUvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvcmVhZG1lL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvbGliL3JlYWRtZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9tZXRhSlNPTi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvbWV0YUpTT04vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9tZXRhSlNPTi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9tZXRhSlNPTi9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9tZXRhSlNPTi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9tZXRhSlNPTi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9mbG9yZW5jZS9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvZmxvcmVuY2UvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9mbG9yZW5jZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9mbG9yZW5jZS9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9mbG9yZW5jZS9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL2xpYi9mbG9yZW5jZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9jdXN0b21HcmFtbWFyQk5GL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9saWIvY3VzdG9tR3JhbW1hckJORi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXJzL3NyYy9jdXN0b21HcmFtbWFyQk5GL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvbGliL2N1c3RvbUdyYW1tYXJCTkYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvY3VzdG9tR3JhbW1hclBhdHRlcm4vZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hcnMvc3JjL2N1c3RvbUdyYW1tYXJQYXR0ZXJuL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9saWIvY3VzdG9tR3JhbW1hclBhdHRlcm4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvY3VzdG9tR3JhbW1hclBhdHRlcm4vYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvY3VzdG9tR3JhbW1hclBhdHRlcm4vcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9saWIvY3VzdG9tR3JhbW1hclBhdHRlcm4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFycy9zcmMvaW5kZXguanMiLCAic3JjL2RlZmF1bHRDdXN0b21HcmFtbWFyLmpzIiwgInNyYy9jb21iaW5lZEN1c3RvbUdyYW1tYXIuanMiLCAic3JjL3V0aWxpdGllcy9sZXhlcnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ub2RlL3Jld3JpdHRlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL25vZGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZWR1Y2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvbm9kZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ub2RlL3JlZHVjZWQvZGlyZWN0bHkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ub2RlL3JlZHVjZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZXBlYXRlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL25vZGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZXBlYXRlZC9kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL25vZGUvcmVwZWF0ZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZWR1Y2VkL2luZGlyZWN0bHkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ub2RlL3JlZHVjZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbm9kZS9yZXBlYXRlZC9pbmRpcmVjdGx5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvbm9kZS9yZXBlYXRlZC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9yZXdyaXRlTm9kZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9vcGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9vcGVyYXRpb24vcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL29wZXJhdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ydWxlL3JlZHVjZWQvZGlyZWN0bHkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9ydWxlL3JlZHVjZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL3BhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvcGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy91dGlsaXRpZXMvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3JlY3Vyc2l2ZURlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9yZWN1cnNpdmVEZWZpbml0aW9uL2xlZnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9yZWN1cnNpdmVEZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdC9kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9yZWN1cnNpdmVEZWZpbml0aW9uL2xlZnQvaW5kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3V0aWxpdGllcy9jb250ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvb3BlcmF0aW9uL3J1bGUvZGlyZWN0bHlSZWR1Y2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvb3BlcmF0aW9uL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvcnVsZS9yZXBlYXRlZC9kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3J1bGUvcmVwZWF0ZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvb3BlcmF0aW9uL3J1bGUvZGlyZWN0bHlSZXBlYXRlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL29wZXJhdGlvbi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL29wZXJhdGlvbi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvb3BlcmF0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL2RlZmluaXRpb24vcmVwbGFjZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL29wZXJhdGlvbi9kZWZpbml0aW9uL2RpcmVjdGx5TGVmdFJlY3Vyc2l2ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL29wZXJhdGlvbi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL2VsaW1pbmF0ZURpcmVjdExlZnRSZWN1cnNpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9ydWxlL3JlZHVjZWQvaW5kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3J1bGUvcmVkdWNlZC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9vcGVyYXRpb24vcnVsZS9pbmRpcmVjdGx5UmVkdWNlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL29wZXJhdGlvbi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3J1bGUvcmVwZWF0ZWQvaW5kaXJlY3RseS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL3J1bGUvcmVwZWF0ZWQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvb3BlcmF0aW9uL3J1bGUvaW5kaXJlY3RseVJlcGVhdGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvb3BlcmF0aW9uL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvb3BlcmF0aW9uL2RlZmluaXRpb24vbGVmdFJlY3Vyc2l2ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL29wZXJhdGlvbi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL29wZXJhdGlvbi9kZWZpbml0aW9uL2luZGlyZWN0bHlMZWZ0UmVjdXJzaXZlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvb3BlcmF0aW9uL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvZWxpbWluYXRlSW5kaXJlY3RMZWZ0UmVjdXJzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvcmV0cmlldmVMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWdyYW1tYXItdXRpbGl0aWVzL3NyYy9lbGltaW5hdGVMZWZ0UmVjdXJzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9zcmMvbGV4ZXIvZXhhbXBsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvbGliL2xleGVyLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL3BhcnNlci9leGFtcGxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1ncmFtbWFyLXV0aWxpdGllcy9saWIvcGFyc2VyLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZ3JhbW1hci11dGlsaXRpZXMvc3JjL2luZGV4LmpzIiwgInNyYy91dGlsaXRpZXMvcGFyc2Vycy5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUvc3ViSGVhZGluZy5qcyIsICJzcmMvZXhhbXBsZS9zZWxlY3QuanMiLCAic3JjL2V4YW1wbGUvZ3JhbW1hck5hbWVzLmpzIiwgInNyYy9leGFtcGxlL3NlbGVjdC9uYW1lLmpzIiwgImxpYi9leGFtcGxlL3NlbGVjdC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvZGl2L3NpemVhYmxlLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2JuZi5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvaW5wdXQuanMiLCAic3JjL2V4YW1wbGUvaW5wdXQvcGF0dGVybi5qcyIsICJsaWIvZXhhbXBsZS9pbnB1dC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvc2VsZWN0L3J1bGVOYW1lLmpzIiwgImxpYi9leGFtcGxlL3NlbGVjdC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvY29udGVudC5qcyIsICJzcmMvZXhhbXBsZS9zZWxlY3QvcGF0dGVybk5hbWUuanMiLCAibGliL2V4YW1wbGUvc2VsZWN0Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9wYXJzZVRyZWUuanMiLCAibGliL2V4YW1wbGUvdGV4dGFyZWEvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL2lucHV0L3N0YXJ0UnVsZU5hbWUuanMiLCAibGliL2V4YW1wbGUvaW5wdXQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL3RleHRhcmVhL2Zsb3JlbmNlQk5GLmpzIiwgInNyYy9leGFtcGxlL3VzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjEuanMiLCAic3JjL2V4YW1wbGUvdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMi5qcyIsICJzcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcuanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPZmZzZXQge1xuICBjb25zdHJ1Y3Rvcih0b3AsIGxlZnQpIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICB9XG5cbiAgZ2V0VG9wKCkge1xuICAgIHJldHVybiB0aGlzLnRvcDtcbiAgfVxuXG4gIGdldExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvdW5kcyB7XG4gIGNvbnN0cnVjdG9yKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSkge1xuICAgIHRoaXMudG9wID0gdG9wO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICB9XG5cbiAgZ2V0VG9wKCkge1xuICAgIHJldHVybiB0aGlzLnRvcDtcbiAgfVxuXG4gIGdldExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxuXG4gIGdldFJpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0O1xuICB9XG5cbiAgZ2V0Qm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGNvbnN0IHdpZHRoID0gKHRoaXMucmlnaHQgLSB0aGlzLmxlZnQpO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGhlaWdodCA9ICh0aGlzLmJvdHRvbSAtIHRoaXMudG9wKTtcblxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cbiAgXG4gIHNldFRvcCh0b3ApIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgfVxuXG4gIHNldExlZnQobGVmdCkge1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gIH1cblxuICBzZXRSaWdodChyaWdodCkge1xuICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgfVxuXG4gIHNldEJvdHRvbShib3R0b20pIHtcbiAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgfVxuXG4gIHNoaWZ0KGhvcml6b250YWxPZmZzZXQsIHZlcnRpY2FsT2Zmc2V0KSB7XG4gICAgdGhpcy50b3AgKz0gdmVydGljYWxPZmZzZXQ7XG4gICAgdGhpcy5sZWZ0ICs9IGhvcml6b250YWxPZmZzZXQ7XG4gICAgdGhpcy5yaWdodCArPSBob3Jpem9udGFsT2Zmc2V0O1xuICAgIHRoaXMuYm90dG9tICs9IHZlcnRpY2FsT2Zmc2V0O1xuICB9XG5cbiAgaXNPdmVybGFwcGluZ01vdXNlKG1vdXNlVG9wLCBtb3VzZUxlZnQpIHtcbiAgICByZXR1cm4gKCAgKHRoaXMudG9wIDw9IG1vdXNlVG9wKVxuICAgICAgICAgICAmJiAodGhpcy5sZWZ0IDw9IG1vdXNlTGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMucmlnaHQgPiBtb3VzZUxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLmJvdHRvbSA+IG1vdXNlVG9wKSAgKTtcbiAgfVxuXG4gIGFyZU92ZXJsYXBwaW5nKGJvdW5kcykge1xuICAgIHJldHVybiAoICAodGhpcy50b3AgPCBib3VuZHMuYm90dG9tKVxuICAgICAgICAgICAmJiAodGhpcy5sZWZ0IDwgYm91bmRzLnJpZ2h0KVxuICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IGJvdW5kcy5sZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiBib3VuZHMudG9wKSAgKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQm91bmRpbmdDbGllbnRSZWN0KGJvdW5kaW5nQ2xpZW50UmVjdCkge1xuICAgIGNvbnN0IHdpbmRvd1Njcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCwgLy8vXG4gICAgICAgICAgd2luZG93U2Nyb2xsTGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCwgIC8vL1xuICAgICAgICAgIHRvcCA9IGJvdW5kaW5nQ2xpZW50UmVjdC50b3AgKyB3aW5kb3dTY3JvbGxUb3AsXG4gICAgICAgICAgbGVmdCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICByaWdodCA9IGJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCArIHdpbmRvd1Njcm9sbExlZnQsXG4gICAgICAgICAgYm90dG9tID0gYm91bmRpbmdDbGllbnRSZWN0LmJvdHRvbSArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBib3VuZHMgPSBuZXcgQm91bmRzKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub3BMZWZ0V2lkdGhBbmRIZWlnaHQodG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0LFxuICAgICAgICAgIHJpZ2h0ID0gbGVmdCArIHdpZHRoLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRk9SID0gXCJmb3JcIjtcbmV4cG9ydCBjb25zdCBCT0RZID0gXCJib2R5XCI7XG5leHBvcnQgY29uc3QgTk9ORSA9IFwibm9uZVwiO1xuZXhwb3J0IGNvbnN0IFNQQUNFID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ0xBU1MgPSBcImNsYXNzXCI7XG5leHBvcnQgY29uc3QgV0lEVEggPSBcIndpZHRoXCI7XG5leHBvcnQgY29uc3QgQkxPQ0sgPSBcImJsb2NrXCI7XG5leHBvcnQgY29uc3QgSEVJR0hUID0gXCJoZWlnaHRcIjtcbmV4cG9ydCBjb25zdCBPQkpFQ1QgPSBcIm9iamVjdFwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgRElTUExBWSA9IFwiZGlzcGxheVwiO1xuZXhwb3J0IGNvbnN0IEJPT0xFQU4gPSBcImJvb2xlYW5cIjtcbmV4cG9ydCBjb25zdCBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcbmV4cG9ydCBjb25zdCBGVU5DVElPTiA9IFwiZnVuY3Rpb25cIjtcbmV4cG9ydCBjb25zdCBXSUxEQ0FSRCA9IFwiKlwiO1xuZXhwb3J0IGNvbnN0IEhUTUxfRk9SID0gXCJodG1sRm9yXCI7XG5leHBvcnQgY29uc3QgVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRSA9IFwiY2xhc3NOYW1lXCI7XG5leHBvcnQgY29uc3QgQUJPVVRfQkxBTksgPSBcImFib3V0OmJsYW5rXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBTVkdfTkFNRVNQQUNFX1VSSSA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BST1BFUlRJRVMgPSBcImRlZmF1bHRQcm9wZXJ0aWVzXCI7XG5leHBvcnQgY29uc3QgSUdOT1JFRF9QUk9QRVJUSUVTID0gXCJpZ25vcmVkUHJvcGVydGllc1wiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCT09MRUFOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YXJnZXQsIHNvdXJjZSA9IHt9KSB7XG4gIHRhcmdldCA9IHsgLi4udGFyZ2V0IH07ICAvLy9cblxuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7ICAvLy9cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0YXJnZXRbbmFtZV0sXG4gICAgICAgICAgc291cmNlVmFsdWUgPSBzb3VyY2VbbmFtZV0sXG4gICAgICAgICAgdGFyZ2V0SGFzT3duUHJvcGVydHkgPSB0YXJnZXQuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cbiAgICB0YXJnZXRbbmFtZV0gPSB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA/XG4gICAgICAgICAgICAgICAgICAgICBjb21iaW5lVmFsdWVzKHRhcmdldFZhbHVlLCBzb3VyY2VWYWx1ZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VWYWx1ZTsgLy8vXG4gIH0pO1xuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZSh0YXJnZXQsIG5hbWVzID0gW10pIHtcbiAgdGFyZ2V0ID0geyAuLi50YXJnZXQgfTsgIC8vL1xuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA9IHRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblxuICAgIGlmICh0YXJnZXRIYXNPd25Qcm9wZXJ0eSkge1xuICAgICAgZGVsZXRlIHRhcmdldFtuYW1lXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVWYWx1ZXModGFyZ2V0VmFsdWUsIHNvdXJjZVZhbHVlKSB7XG4gIGNvbnN0IHRhcmdldFZhbHVlQm9vbGVhbiA9IGlzVmFsdWVCb29sZWFuKHRhcmdldFZhbHVlKSxcbiAgICAgICAgc291cmNlVmFsdWVCb29sZWFuID0gaXNWYWx1ZUJvb2xlYW4oc291cmNlVmFsdWUpLFxuICAgICAgICBjb21iaW5lZFZhbHVlID0gKHRhcmdldFZhbHVlQm9vbGVhbiAmJiBzb3VyY2VWYWx1ZUJvb2xlYW4pID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0YXJnZXRWYWx1ZX0gJHtzb3VyY2VWYWx1ZX1gO1xuXG4gIHJldHVybiBjb21iaW5lZFZhbHVlO1xufVxuXG5mdW5jdGlvbiBpc1ZhbHVlQm9vbGVhbih2YWx1ZSkge1xuICBjb25zdCB2YWx1ZUJvb2xlYW4gPSAodHlwZW9mIHZhbHVlID09PSBCT09MRUFOKTtcblxuICByZXR1cm4gdmFsdWVCb29sZWFuO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzBdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoKGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYXVnbWVudChhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheTEgPSBbIC4uLmFycmF5MSBdOyAvLy9cblxuICBhcnJheTIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGFycmF5MTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LnJlZHVjZSgoYXJyYXksIGVsZW1lbnQpID0+IHtcbiAgICBhcnJheSA9IGFycmF5LmNvbmNhdChlbGVtZW50KTsgIC8vL1xuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBndWFyYW50ZWUoYXJyYXlPckVsZW1lbnQpIHtcbiAgYXJyYXlPckVsZW1lbnQgPSBhcnJheU9yRWxlbWVudCB8fCBbXTtcblxuICByZXR1cm4gKGFycmF5T3JFbGVtZW50IGluc3RhbmNlb2YgQXJyYXkpID9cbiAgICAgICAgICAgIGFycmF5T3JFbGVtZW50IDpcbiAgICAgICAgICAgICAgW2FycmF5T3JFbGVtZW50XTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU1ZHVGFnTmFtZSh0YWdOYW1lKSB7XG4gIHJldHVybiBzdmdUYWdOYW1lcy5pbmNsdWRlcyh0YWdOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU1ZHQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gIHJldHVybiBzdmdBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSFRNTEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkge1xuICByZXR1cm4gaHRtbEF0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5jb25zdCBzdmdUYWdOYW1lcyA9IFtcbiAgICAgICAgXCJhbHRHbHlwaFwiLCBcImFuaW1hdGVcIiwgXCJhbmltYXRlQ29sb3JcIiwgXCJhbmltYXRlTW90aW9uXCIsIFwiYW5pbWF0ZVRyYW5zZm9ybVwiLCBcImFuaW1hdGlvblwiLCBcImF1ZGlvXCIsXG4gICAgICAgIFwiY2lyY2xlXCIsIFwiY2xpcFBhdGhcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY3Vyc29yXCIsXG4gICAgICAgIFwiZGVmc1wiLCBcImRlc2NcIiwgXCJkaXNjYXJkXCIsXG4gICAgICAgIFwiZWxsaXBzZVwiLFxuICAgICAgICBcImZlQmxlbmRcIiwgXCJmZUNvbG9yTWF0cml4XCIsIFwiZmVDb21wb25lbnRUcmFuc2ZlclwiLCBcImZlQ29tcG9zaXRlXCIsIFwiZmVDb252b2x2ZU1hdHJpeFwiLCBcImZlRGlmZnVzZUxpZ2h0aW5nXCIsIFwiZmVEaXNwbGFjZW1lbnRNYXBcIiwgXCJmZURpc3RhbnRMaWdodFwiLCBcImZlRHJvcFNoYWRvd1wiLCBcImZlRmxvb2RcIiwgXCJmZUZ1bmNBXCIsIFwiZmVGdW5jQlwiLCBcImZlRnVuY0dcIiwgXCJmZUZ1bmNSXCIsIFwiZmVHYXVzc2lhbkJsdXJcIiwgXCJmZUltYWdlXCIsIFwiZmVNZXJnZVwiLCBcImZlTWVyZ2VOb2RlXCIsIFwiZmVNb3JwaG9sb2d5XCIsIFwiZmVPZmZzZXRcIiwgXCJmZVBvaW50TGlnaHRcIiwgXCJmZVNwZWN1bGFyTGlnaHRpbmdcIiwgXCJmZVNwb3RMaWdodFwiLCBcImZlVGlsZVwiLCBcImZlVHVyYnVsZW5jZVwiLCBcImZpbHRlclwiLCBcImZvbnRcIiwgXCJmb250LWZhY2VcIiwgXCJmb250LWZhY2UtZm9ybWF0XCIsIFwiZm9udC1mYWNlLW5hbWVcIiwgXCJmb250LWZhY2UtdXJpXCIsIFwiZm9yZWlnbk9iamVjdFwiLFxuICAgICAgICBcImdcIiwgXCJnbHlwaFwiLCBcImdseXBoUmVmXCIsXG4gICAgICAgIFwiaGFuZGxlclwiLCBcImhhdGNoXCIsIFwiaGF0Y2hwYXRoXCIsIFwiaGtlcm5cIixcbiAgICAgICAgXCJpbWFnZVwiLCBcImxpbmVcIiwgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICBcImxpc3RlbmVyXCIsXG4gICAgICAgIFwibWFya2VyXCIsIFwibWFza1wiLCBcIm1lc2hcIiwgXCJtZXNoZ3JhZGllbnRcIiwgXCJtZXNocGF0Y2hcIiwgXCJtZXNocm93XCIsIFwibWV0YWRhdGFcIiwgXCJtaXNzaW5nLWdseXBoXCIsIFwibXBhdGhcIixcbiAgICAgICAgXCJwYXRoXCIsIFwicGF0dGVyblwiLCBcInBvbHlnb25cIiwgXCJwb2x5bGluZVwiLCBcInByZWZldGNoXCIsXG4gICAgICAgIFwicmFkaWFsR3JhZGllbnRcIiwgXCJyZWN0XCIsXG4gICAgICAgIFwic2NyaXB0XCIsIFwic2V0XCIsIFwic29saWRjb2xvclwiLCBcInN0b3BcIiwgXCJzdHlsZVwiLCBcInN2Z1wiLCBcInN3aXRjaFwiLCBcInN5bWJvbFwiLFxuICAgICAgICBcInRicmVha1wiLCBcInRleHRcIiwgXCJ0ZXh0QXJlYVwiLCBcInRleHRQYXRoXCIsIFwidGl0bGVcIiwgXCJ0cmVmXCIsIFwidHNwYW5cIixcbiAgICAgICAgXCJ1bmtub3duXCIsIFwidXNlXCIsXG4gICAgICAgIFwidmlkZW9cIiwgXCJ2aWV3XCIsIFwidmtlcm5cIlxuICAgICAgXSxcbiAgICAgIHN2Z0F0dHJpYnV0ZU5hbWVzID0gW1xuICAgICAgICBcImFjY2VudC1oZWlnaHRcIiwgXCJhY2N1bXVsYXRlXCIsIFwiYWRkaXRpdmVcIiwgXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJhbHBoYWJldGljXCIsIFwiYW1wbGl0dWRlXCIsIFwiYXJhYmljLWZvcm1cIiwgXCJhc2NlbnRcIiwgXCJhdHRyaWJ1dGVOYW1lXCIsIFwiYXR0cmlidXRlVHlwZVwiLCBcImF6aW11dGhcIixcbiAgICAgICAgXCJiYW5kd2lkdGhcIiwgXCJiYXNlRnJlcXVlbmN5XCIsIFwiYmFzZVByb2ZpbGVcIiwgXCJiYXNlbGluZS1zaGlmdFwiLCBcImJib3hcIiwgXCJiZWdpblwiLCBcImJpYXNcIiwgXCJieVwiLFxuICAgICAgICBcImNhbGNNb2RlXCIsIFwiY2FwLWhlaWdodFwiLCBcImNsaXBcIiwgXCJjbGFzc05hbWVcIiwgXCJjbGlwLXBhdGhcIiwgXCJjbGlwLXJ1bGVcIiwgXCJjbGlwUGF0aFVuaXRzXCIsIFwiY29sb3JcIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCIsIFwiY29sb3ItcHJvZmlsZVwiLCBcImNvbG9yLXJlbmRlcmluZ1wiLCBcImNvbnRlbnRTY3JpcHRUeXBlXCIsIFwiY29udGVudFN0eWxlVHlwZVwiLCBcImNyb3Nzb3JpZ2luXCIsIFwiY3Vyc29yXCIsIFwiY3hcIiwgXCJjeVwiLFxuICAgICAgICBcImRcIiwgXCJkZWZhdWx0QWN0aW9uXCIsIFwiZGVzY2VudFwiLCBcImRpZmZ1c2VDb25zdGFudFwiLCBcImRpcmVjdGlvblwiLCBcImRpc3BsYXlcIiwgXCJkaXZpc29yXCIsIFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJkb3dubG9hZFwiLCBcImR1clwiLCBcImR4XCIsIFwiZHlcIixcbiAgICAgICAgXCJlZGdlTW9kZVwiLCBcImVkaXRhYmxlXCIsIFwiZWxldmF0aW9uXCIsIFwiZW5hYmxlLWJhY2tncm91bmRcIiwgXCJlbmRcIiwgXCJldmVudFwiLCBcImV4cG9uZW50XCIsIFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFxuICAgICAgICBcImZpbGxcIiwgXCJmaWxsLW9wYWNpdHlcIiwgXCJmaWxsLXJ1bGVcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJSZXNcIiwgXCJmaWx0ZXJVbml0c1wiLCBcImZsb29kLWNvbG9yXCIsIFwiZmxvb2Qtb3BhY2l0eVwiLCBcImZvY3VzSGlnaGxpZ2h0XCIsIFwiZm9jdXNhYmxlXCIsIFwiZm9udC1mYW1pbHlcIiwgXCJmb250LXNpemVcIiwgXCJmb250LXNpemUtYWRqdXN0XCIsIFwiZm9udC1zdHJldGNoXCIsIFwiZm9udC1zdHlsZVwiLCBcImZvbnQtdmFyaWFudFwiLCBcImZvbnQtd2VpZ2h0XCIsIFwiZm9ybWF0XCIsIFwiZnJcIiwgXCJmcm9tXCIsIFwiZnhcIiwgXCJmeVwiLFxuICAgICAgICBcImcxXCIsIFwiZzJcIiwgXCJnbHlwaC1uYW1lXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiLCBcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCIsIFwiZ2x5cGhSZWZcIiwgXCJncmFkaWVudFRyYW5zZm9ybVwiLCBcImdyYWRpZW50VW5pdHNcIixcbiAgICAgICAgXCJoYW5kbGVyXCIsIFwiaGFuZ2luZ1wiLCBcImhhdGNoQ29udGVudFVuaXRzXCIsIFwiaGF0Y2hVbml0c1wiLCBcImhlaWdodFwiLCBcImhvcml6LWFkdi14XCIsIFwiaG9yaXotb3JpZ2luLXhcIiwgXCJob3Jpei1vcmlnaW4teVwiLCBcImhyZWZcIiwgXCJocmVmbGFuZ1wiLFxuICAgICAgICBcImlkXCIsIFwiaWRlb2dyYXBoaWNcIiwgXCJpbWFnZS1yZW5kZXJpbmdcIiwgXCJpblwiLCBcImluMlwiLCBcImluaXRpYWxWaXNpYmlsaXR5XCIsIFwiaW50ZXJjZXB0XCIsXG4gICAgICAgIFwia1wiLCBcImsxXCIsIFwiazJcIiwgXCJrM1wiLCBcIms0XCIsIFwia2VybmVsTWF0cml4XCIsIFwia2VybmVsVW5pdExlbmd0aFwiLCBcImtlcm5pbmdcIiwgXCJrZXlQb2ludHNcIiwgXCJrZXlTcGxpbmVzXCIsIFwia2V5VGltZXNcIixcbiAgICAgICAgXCJsZW5ndGhBZGp1c3RcIiwgXCJsZXR0ZXItc3BhY2luZ1wiLCBcImxpZ2h0aW5nLWNvbG9yXCIsIFwibGltaXRpbmdDb25lQW5nbGVcIiwgXCJsb2NhbFwiLFxuICAgICAgICBcIm1hcmtlci1lbmRcIiwgXCJtYXJrZXItbWlkXCIsIFwibWFya2VyLXN0YXJ0XCIsIFwibWFya2VySGVpZ2h0XCIsIFwibWFya2VyVW5pdHNcIiwgXCJtYXJrZXJXaWR0aFwiLCBcIm1hc2tcIiwgXCJtYXNrQ29udGVudFVuaXRzXCIsIFwibWFza1VuaXRzXCIsIFwibWF0aGVtYXRpY2FsXCIsIFwibWF4XCIsIFwibWVkaWFcIiwgXCJtZWRpYUNoYXJhY3RlckVuY29kaW5nXCIsIFwibWVkaWFDb250ZW50RW5jb2RpbmdzXCIsIFwibWVkaWFTaXplXCIsIFwibWVkaWFUaW1lXCIsIFwibWV0aG9kXCIsIFwibWluXCIsIFwibW9kZVwiLFxuICAgICAgICBcIm5hbWVcIiwgXCJuYXYtZG93blwiLCBcIm5hdi1kb3duLWxlZnRcIiwgXCJuYXYtZG93bi1yaWdodFwiLCBcIm5hdi1sZWZ0XCIsIFwibmF2LW5leHRcIiwgXCJuYXYtcHJldlwiLCBcIm5hdi1yaWdodFwiLCBcIm5hdi11cFwiLCBcIm5hdi11cC1sZWZ0XCIsIFwibmF2LXVwLXJpZ2h0XCIsIFwibnVtT2N0YXZlc1wiLFxuICAgICAgICBcIm9ic2VydmVyXCIsIFwib2Zmc2V0XCIsIFwib3BhY2l0eVwiLCBcIm9wZXJhdG9yXCIsIFwib3JkZXJcIiwgXCJvcmllbnRcIiwgXCJvcmllbnRhdGlvblwiLCBcIm9yaWdpblwiLCBcIm92ZXJmbG93XCIsIFwib3ZlcmxheVwiLCBcIm92ZXJsaW5lLXBvc2l0aW9uXCIsIFwib3ZlcmxpbmUtdGhpY2tuZXNzXCIsXG4gICAgICAgIFwicGFub3NlLTFcIiwgXCJwYXRoXCIsIFwicGF0aExlbmd0aFwiLCBcInBhdHRlcm5Db250ZW50VW5pdHNcIiwgXCJwYXR0ZXJuVHJhbnNmb3JtXCIsIFwicGF0dGVyblVuaXRzXCIsIFwicGhhc2VcIiwgXCJwaXRjaFwiLCBcInBsYXliYWNrT3JkZXJcIiwgXCJwbGF5YmFja29yZGVyXCIsIFwicG9pbnRlci1ldmVudHNcIiwgXCJwb2ludHNcIiwgXCJwb2ludHNBdFhcIiwgXCJwb2ludHNBdFlcIiwgXCJwb2ludHNBdFpcIiwgXCJwcmVzZXJ2ZUFscGhhXCIsIFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInByaW1pdGl2ZVVuaXRzXCIsIFwicHJvcGFnYXRlXCIsXG4gICAgICAgIFwiclwiLCBcInJhZGl1c1wiLCBcInJlZlhcIiwgXCJyZWZZXCIsIFwicmVuZGVyaW5nLWludGVudFwiLCBcInJlcGVhdENvdW50XCIsIFwicmVwZWF0RHVyXCIsIFwicmVxdWlyZWRFeHRlbnNpb25zXCIsIFwicmVxdWlyZWRGZWF0dXJlc1wiLCBcInJlcXVpcmVkRm9udHNcIiwgXCJyZXF1aXJlZEZvcm1hdHNcIiwgXCJyZXN0YXJ0XCIsIFwicmVzdWx0XCIsIFwicm90YXRlXCIsIFwicnhcIiwgXCJyeVwiLFxuICAgICAgICBcInNjYWxlXCIsIFwic2VlZFwiLCBcInNoYXBlLXJlbmRlcmluZ1wiLCBcInNpZGVcIiwgXCJzbG9wZVwiLCBcInNuYXBzaG90VGltZVwiLCBcInNwYWNpbmdcIiwgXCJzcGVjdWxhckNvbnN0YW50XCIsIFwic3BlY3VsYXJFeHBvbmVudFwiLCBcInNwcmVhZE1ldGhvZFwiLCBcInNyY1wiLCBcInN0YXJ0T2Zmc2V0XCIsIFwic3RkRGV2aWF0aW9uXCIsIFwic3RlbWhcIiwgXCJzdGVtdlwiLCBcInN0aXRjaFRpbGVzXCIsIFwic3RvcC1jb2xvclwiLCBcInN0b3Atb3BhY2l0eVwiLCBcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIiwgXCJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzc1wiLCBcInN0cmluZ1wiLCBcInN0cm9rZVwiLCBcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCJzdHJva2UtZGFzaG9mZnNldFwiLCBcInN0cm9rZS1saW5lY2FwXCIsIFwic3Ryb2tlLWxpbmVqb2luXCIsIFwic3Ryb2tlLW1pdGVybGltaXRcIiwgXCJzdHJva2Utb3BhY2l0eVwiLCBcInN0cm9rZS13aWR0aFwiLCBcInN0eWxlXCIsIFwic3VyZmFjZVNjYWxlXCIsIFwic3luY0JlaGF2aW9yXCIsIFwic3luY0JlaGF2aW9yRGVmYXVsdFwiLCBcInN5bmNNYXN0ZXJcIiwgXCJzeW5jVG9sZXJhbmNlXCIsIFwic3luY1RvbGVyYW5jZURlZmF1bHRcIiwgXCJzeXN0ZW1MYW5ndWFnZVwiLFxuICAgICAgICBcInRhYmxlVmFsdWVzXCIsIFwidGFyZ2V0XCIsIFwidGFyZ2V0WFwiLCBcInRhcmdldFlcIiwgXCJ0ZXh0LWFuY2hvclwiLCBcInRleHQtZGVjb3JhdGlvblwiLCBcInRleHQtcmVuZGVyaW5nXCIsIFwidGV4dExlbmd0aFwiLCBcInRpbWVsaW5lQmVnaW5cIiwgXCJ0aW1lbGluZWJlZ2luXCIsIFwidGl0bGVcIiwgXCJ0b1wiLCBcInRyYW5zZm9ybVwiLCBcInRyYW5zZm9ybUJlaGF2aW9yXCIsIFwidHlwZVwiLFxuICAgICAgICBcInUxXCIsIFwidTJcIiwgXCJ1bmRlcmxpbmUtcG9zaXRpb25cIiwgXCJ1bmRlcmxpbmUtdGhpY2tuZXNzXCIsIFwidW5pY29kZVwiLCBcInVuaWNvZGUtYmlkaVwiLCBcInVuaWNvZGUtcmFuZ2VcIiwgXCJ1bml0cy1wZXItZW1cIixcbiAgICAgICAgXCJ2LWFscGhhYmV0aWNcIiwgXCJ2LWhhbmdpbmdcIiwgXCJ2LWlkZW9ncmFwaGljXCIsIFwidi1tYXRoZW1hdGljYWxcIiwgXCJ2YWx1ZXNcIiwgXCJ2ZXJzaW9uXCIsIFwidmVydC1hZHYteVwiLCBcInZlcnQtb3JpZ2luLXhcIiwgXCJ2ZXJ0LW9yaWdpbi15XCIsIFwidmlld0JveFwiLCBcInZpZXdUYXJnZXRcIiwgXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgIFwid2lkdGhcIiwgXCJ3aWR0aHNcIiwgXCJ3b3JkLXNwYWNpbmdcIiwgXCJ3cml0aW5nLW1vZGVcIixcbiAgICAgICAgXCJ4XCIsIFwieC1oZWlnaHRcIiwgXCJ4MVwiLCBcIngyXCIsIFwieENoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICBcInlcIiwgXCJ5MVwiLCBcInkyXCIsIFwieUNoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICBcInpcIiwgXCJ6b29tQW5kUGFuXCJcbiAgICAgIF0sXG4gICAgICBodG1sQXR0cmlidXRlTmFtZXMgPSBbXG4gICAgICAgIFwiYWNjZXB0XCIsIFwiYWNjZXB0Q2hhcnNldFwiLCBcImFjY2Vzc0tleVwiLCBcImFjdGlvblwiLCBcImFsbG93XCIsIFwiYWxsb3dGdWxsU2NyZWVuXCIsIFwiYWxsb3dUcmFuc3BhcmVuY3lcIiwgXCJhbHRcIiwgXCJhc3luY1wiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImF1dG9QbGF5XCIsXG4gICAgICAgIFwiY2FwdHVyZVwiLCBcImNlbGxQYWRkaW5nXCIsIFwiY2VsbFNwYWNpbmdcIiwgXCJjaGFsbGVuZ2VcIiwgXCJjaGFyU2V0XCIsIFwiY2hlY2tlZFwiLCBcImNpdGVcIiwgXCJjbGFzc0lEXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sU3BhblwiLCBcImNvbHNcIiwgXCJjb250ZW50XCIsIFwiY29udGVudEVkaXRhYmxlXCIsIFwiY29udGV4dE1lbnVcIiwgXCJjb250cm9sc1wiLCBcImNvb3Jkc1wiLCBcImNyb3NzT3JpZ2luXCIsXG4gICAgICAgIFwiZGF0YVwiLCBcImRhdGVUaW1lXCIsIFwiZGVmYXVsdFwiLCBcImRlZmVyXCIsIFwiZGlyXCIsIFwiZGlzYWJsZWRcIiwgXCJkb3dubG9hZFwiLCBcImRyYWdnYWJsZVwiLFxuICAgICAgICBcImVuY1R5cGVcIixcbiAgICAgICAgXCJmb3JtXCIsIFwiZm9ybUFjdGlvblwiLCBcImZvcm1FbmNUeXBlXCIsIFwiZm9ybU1ldGhvZFwiLCBcImZvcm1Ob1ZhbGlkYXRlXCIsIFwiZm9ybVRhcmdldFwiLCBcImZyYW1lQm9yZGVyXCIsXG4gICAgICAgIFwiaGVhZGVyc1wiLCBcImhlaWdodFwiLCBcImhpZGRlblwiLCBcImhpZ2hcIiwgXCJocmVmXCIsIFwiaHJlZkxhbmdcIiwgXCJodG1sRm9yXCIsIFwiaHR0cEVxdWl2XCIsXG4gICAgICAgIFwiaWNvblwiLCBcImlkXCIsIFwiaW5wdXRNb2RlXCIsIFwiaW50ZWdyaXR5XCIsIFwiaXNcIixcbiAgICAgICAgXCJrZXlQYXJhbXNcIiwgXCJrZXlUeXBlXCIsIFwia2luZFwiLFxuICAgICAgICBcImxhYmVsXCIsIFwibGFuZ1wiLCBcImxpc3RcIiwgXCJsb29wXCIsIFwibG93XCIsXG4gICAgICAgIFwibWFuaWZlc3RcIiwgXCJtYXJnaW5IZWlnaHRcIiwgXCJtYXJnaW5XaWR0aFwiLCBcIm1heFwiLCBcIm1heExlbmd0aFwiLCBcIm1lZGlhXCIsIFwibWVkaWFHcm91cFwiLCBcIm1ldGhvZFwiLCBcIm1pblwiLCBcIm1pbkxlbmd0aFwiLCBcIm11bHRpcGxlXCIsIFwibXV0ZWRcIixcbiAgICAgICAgXCJuYW1lXCIsIFwibm9WYWxpZGF0ZVwiLCBcIm5vbmNlXCIsXG4gICAgICAgIFwib3BlblwiLCBcIm9wdGltdW1cIixcbiAgICAgICAgXCJwYXR0ZXJuXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJwb3N0ZXJcIiwgXCJwcmVsb2FkXCIsIFwicHJvZmlsZVwiLFxuICAgICAgICBcInJhZGlvR3JvdXBcIiwgXCJyZWFkT25seVwiLCBcInJlbFwiLCBcInJlcXVpcmVkXCIsIFwicmV2ZXJzZWRcIiwgXCJyb2xlXCIsIFwicm93U3BhblwiLCBcInJvd3NcIixcbiAgICAgICAgXCJzYW5kYm94XCIsIFwic2NvcGVcIiwgXCJzY29wZWRcIiwgXCJzY3JvbGxpbmdcIiwgXCJzZWFtbGVzc1wiLCBcInNlbGVjdGVkXCIsIFwic2hhcGVcIiwgXCJzaXplXCIsIFwic2l6ZXNcIiwgXCJzcGFuXCIsIFwic3BlbGxDaGVja1wiLCBcInNyY1wiLCBcInNyY0RvY1wiLCBcInNyY0xhbmdcIiwgXCJzcmNTZXRcIiwgXCJzdGFydFwiLCBcInN0ZXBcIiwgXCJzdHlsZVwiLCBcInN1bW1hcnlcIixcbiAgICAgICAgXCJ0YWJJbmRleFwiLCBcInRhcmdldFwiLCBcInRpdGxlXCIsIFwidHlwZVwiLFxuICAgICAgICBcInVzZU1hcFwiLFxuICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgXCJ3bW9kZVwiLFxuICAgICAgICBcIndyYXBcIlxuICAgICAgXTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFdJTERDQVJEIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZG9tRWxlbWVudHMpIHtcbiAgY29uc3QgZG9tRWxlbWVudHNXaXRoRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlcyhkb21FbGVtZW50cywgKGRvbUVsZW1lbnQpID0+IChkb21FbGVtZW50Ll9fZWxlbWVudF9fICE9PSB1bmRlZmluZWQpKSxcbiAgICAgICAgZWxlbWVudHMgPSBkb21FbGVtZW50c1dpdGhFbGVtZW50cy5tYXAoKGRvbUVsZW1lbnQpID0+IGRvbUVsZW1lbnQuX19lbGVtZW50X18pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgaGVpZ2h0LCBhc2NlbmRhbnRET01Ob2RlcyA9IFtdKSB7XG4gIGlmIChoZWlnaHQgPiAwKSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IGRvbU5vZGUucGFyZW50RWxlbWVudDsgIC8vL1xuXG4gICAgaWYgKHBhcmVudERPTU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGFzY2VuZGFudERPTU5vZGVzLnB1c2gocGFyZW50RE9NTm9kZSk7XG5cbiAgICAgIGhlaWdodC0tO1xuXG4gICAgICBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKHBhcmVudERPTU5vZGUsIGhlaWdodCwgYXNjZW5kYW50RE9NTm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhc2NlbmRhbnRET01Ob2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGRlcHRoLCBkZXNjZW5kYW50RE9NTm9kZXMgPSBbXSkge1xuICBpZiAoZGVwdGggPiAwKSB7XG4gICAgY29uc3QgY2hpbGRET01Ob2RlcyA9IGRvbU5vZGUuY2hpbGROb2RlczsgIC8vL1xuXG4gICAgcHVzaChkZXNjZW5kYW50RE9NTm9kZXMsIGNoaWxkRE9NTm9kZXMpO1xuXG4gICAgZGVwdGgtLTtcblxuICAgIGNoaWxkRE9NTm9kZXMuZm9yRWFjaCgoY2hpbGRET01Ob2RlKSA9PiBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShjaGlsZERPTU5vZGUsIGRlcHRoLCBkZXNjZW5kYW50RE9NTm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBkZXNjZW5kYW50RE9NTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IoZG9tTm9kZXMsIHNlbGVjdG9yKSB7XG4gIGNvbnN0IGZpbHRlcmVkRE9NTm9kZXMgPSBmaWx0ZXJET01Ob2Rlcyhkb21Ob2RlcywgKGRvbU5vZGUpID0+IGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IoZG9tTm9kZSwgc2VsZWN0b3IpKTtcblxuICByZXR1cm4gZmlsdGVyZWRET01Ob2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IoZG9tTm9kZSwgc2VsZWN0b3IpIHtcbiAgY29uc3QgZG9tTm9kZVR5cGUgPSBkb21Ob2RlLm5vZGVUeXBlO1xuXG4gIHN3aXRjaCAoZG9tTm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICBjb25zdCBkb21FbGVtZW50ID0gZG9tTm9kZTsgLy8vXG5cbiAgICAgIHJldHVybiBkb21FbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgIGlmIChzZWxlY3RvciA9PT0gV0lMRENBUkQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRE9NTm9kZXMoZG9tTm9kZXMsIHRlc3QpIHtcbiAgY29uc3QgZmlsdGVyZWRET01Ob2RlcyA9IFtdLFxuICAgICAgICBkb21Ob2Rlc0xlbmd0aCA9IGRvbU5vZGVzLmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZG9tTm9kZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBkb21Ob2RlID0gZG9tTm9kZXNbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IHRlc3QoZG9tTm9kZSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBmaWx0ZXJlZERPTU5vZGVzLnB1c2goZG9tTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRE9NTm9kZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgV0lMRENBUkQgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yLCBlbGVtZW50c0Zyb21ET01FbGVtZW50cywgZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yLCBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlLCBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZG9tXCI7XG5cbmZ1bmN0aW9uIGdldFBhcmVudEVsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgcGFyZW50RWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgcGFyZW50RE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gIGlmIChwYXJlbnRET01FbGVtZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKHBhcmVudERPTUVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgIGNvbnN0IHBhcmVudERPTUVsZW1lbnRzID0gW3BhcmVudERPTUVsZW1lbnRdLFxuICAgICAgICAgICAgcGFyZW50RWxlbWVudHMgPSBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhwYXJlbnRET01FbGVtZW50cyksXG4gICAgICAgICAgICBmaXJzdFBhcmVudEVsZW1lbnQgPSBmaXJzdChwYXJlbnRFbGVtZW50cyk7XG5cbiAgICAgIHBhcmVudEVsZW1lbnQgPSBmaXJzdFBhcmVudEVsZW1lbnQgfHwgbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyZW50RWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRFbGVtZW50cyhzZWxlY3RvciA9IFdJTERDQVJEKSB7XG4gIGNvbnN0IGNoaWxkRE9NTm9kZXMgPSB0aGlzLmRvbUVsZW1lbnQuY2hpbGROb2RlcyxcbiAgICAgICAgY2hpbGRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvcihjaGlsZERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhjaGlsZERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0QXNjZW5kYW50RWxlbWVudHMoc2VsZWN0b3IgPSBXSUxEQ0FSRCwgbWF4aW11bUhlaWdodCA9IEluZmluaXR5KSB7XG4gIGNvbnN0IGhlaWdodCA9IG1heGltdW1IZWlnaHQsIC8vL1xuICAgICAgICBkb21Ob2RlID0gdGhpcy5kb21FbGVtZW50LCAgLy8vXG4gICAgICAgIGFzY2VuZGFudERPTU5vZGVzID0gYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBoZWlnaHQpLFxuICAgICAgICBhc2NlbmRhbnRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3Rvcihhc2NlbmRhbnRET01Ob2Rlcywgc2VsZWN0b3IpLFxuICAgICAgICBhc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGFzY2VuZGFudERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gYXNjZW5kYW50RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldERlc2NlbmRhbnRFbGVtZW50cyhzZWxlY3RvciA9IFdJTERDQVJELCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICBjb25zdCBkZXB0aCA9IG1heGltdW1EZXB0aCwgLy8vXG4gICAgICAgIGRvbU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQsICAvLy9cbiAgICAgICAgZGVzY2VuZGFudERPTU5vZGVzID0gZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgZGVwdGgpLFxuICAgICAgICBkZXNjZW5kYW50RE9NRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IoZGVzY2VuZGFudERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGRlc2NlbmRhbnRET01FbGVtZW50cyk7XG5cbiAgcmV0dXJuIGRlc2NlbmRhbnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgbGV0IG5leHRTaWJsaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgbmV4dFNpYmxpbmdET01Ob2RlID0gdGhpcy5kb21FbGVtZW50Lm5leHRTaWJsaW5nO1xuXG4gIGlmICgobmV4dFNpYmxpbmdET01Ob2RlICE9PSBudWxsKSAmJiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKG5leHRTaWJsaW5nRE9NTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgbmV4dFNpYmxpbmdFbGVtZW50ID0gbmV4dFNpYmxpbmdET01Ob2RlLl9fZWxlbWVudF9fIHx8IG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV4dFNpYmxpbmdFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50KHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgbGV0IHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHByZXZpb3VzU2libGluZ0RPTU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQucHJldmlvdXNTaWJsaW5nOyAgLy8vXG5cbiAgaWYgKChwcmV2aW91c1NpYmxpbmdET01Ob2RlICE9PSBudWxsKSAmJiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKHByZXZpb3VzU2libGluZ0RPTU5vZGUsIHNlbGVjdG9yKSkge1xuICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSBwcmV2aW91c1NpYmxpbmdET01Ob2RlLl9fZWxlbWVudF9fIHx8IG51bGw7XG4gIH1cblxuICByZXR1cm4gcHJldmlvdXNTaWJsaW5nRWxlbWVudDtcbn1cblxuY29uc3QgZWxlbWVudE1peGlucyA9IHtcbiAgZ2V0UGFyZW50RWxlbWVudCxcbiAgZ2V0Q2hpbGRFbGVtZW50cyxcbiAgZ2V0QXNjZW5kYW50RWxlbWVudHMsXG4gIGdldERlc2NlbmRhbnRFbGVtZW50cyxcbiAgZ2V0TmV4dFNpYmxpbmdFbGVtZW50LFxuICBnZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50XG59O1xuXG5leHBvcnQgZGVmYXVsdCBlbGVtZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgT2Zmc2V0IGZyb20gXCIuL29mZnNldFwiO1xuaW1wb3J0IEJvdW5kcyBmcm9tIFwiLi9ib3VuZHNcIjtcbmltcG9ydCBlbGVtZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9lbGVtZW50XCI7XG5cbmNsYXNzIFRleHRFbGVtZW50IHtcbiAgY29uc3RydWN0b3IodGV4dCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOyAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IHRoaXM7XG4gIH1cblxuICBnZXRUZXh0KCkge1xuICAgIGNvbnN0IG5vZGVWYWx1ZSA9IHRoaXMuZG9tRWxlbWVudC5ub2RlVmFsdWUsXG4gICAgICAgICAgdGV4dCA9IG5vZGVWYWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHNldFRleHQodGV4dCkge1xuICAgIGNvbnN0IG5vZGVWYWx1ZSA9IHRleHQ7IC8vL1xuXG4gICAgdGhpcy5kb21FbGVtZW50Lm5vZGVWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgfVxuXG4gIGdldE9mZnNldCgpIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0VG9wLCAgLy8vXG4gICAgICAgICAgbGVmdCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRMZWZ0LCAgLy8vXG4gICAgICAgICAgb2Zmc2V0ID0gbmV3IE9mZnNldCh0b3AsIGxlZnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIGdldEJvdW5kcygpIHtcbiAgICBjb25zdCBib3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgYm91bmRzID0gQm91bmRzLmZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBjb25zdCBjbGllbnRXaWR0aCA9IHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCxcbiAgICAgICAgICB3aWR0aCA9IGNsaWVudFdpZHRoOyAgLy8vXG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXRIZWlnaHQoKSB7XG4gICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICAgICAgICBoZWlnaHQgPSBjbGllbnRIZWlnaHQ7ICAvLy9cblxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cblxuICBwcmVwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LnByZXBlbmQodGhpcyk7IH1cblxuICBhcHBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYXBwZW5kKHRoaXMpOyB9XG5cbiAgYWRkVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFkZCh0aGlzKTsgfVxuXG4gIHJlbW92ZUZyb20ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LnJlbW92ZSh0aGlzKTsgfVxuXG4gIGluc2VydEJlZm9yZShzaWJsaW5nRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICAgICAgc2libGluZ0RPTUVsZW1lbnQgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50O1xuXG4gICAgcGFyZW50RE9NTm9kZS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCBzaWJsaW5nRE9NRWxlbWVudCk7XG4gIH1cblxuICBpbnNlcnRBZnRlcihzaWJsaW5nRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICAgICAgc2libGluZ0RPTUVsZW1lbnQgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50O1xuXG4gICAgcGFyZW50RE9NTm9kZS5pbnNlcnRCZWZvcmUodGhpcy5kb21FbGVtZW50LCBzaWJsaW5nRE9NRWxlbWVudC5uZXh0U2libGluZyk7ICAvLy9cbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlKCk7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihUZXh0RWxlbWVudC5wcm90b3R5cGUsIGVsZW1lbnRNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0RWxlbWVudDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRFbGVtZW50IGZyb20gXCIuLi90ZXh0RWxlbWVudFwiO1xuXG5pbXBvcnQgeyBTVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGYWxzZXlFbGVtZW50cyhlbGVtZW50cykge1xuICBlbGVtZW50cyA9IGVsZW1lbnRzLnJlZHVjZSgoZWxlbWVudHMsIGVsZW1lbnQpID0+IHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMoZWxlbWVudHMpIHtcbiAgZWxlbWVudHMgPSBlbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+IHsgIC8vL1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gU1RSSU5HKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gZWxlbWVudCwgIC8vL1xuICAgICAgICAgICAgdGV4dEVsZW1lbnQgPSBuZXcgVGV4dEVsZW1lbnQodGV4dCk7XG5cbiAgICAgIGVsZW1lbnQgPSB0ZXh0RWxlbWVudDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY29tYmluZSwgcHJ1bmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL29iamVjdFwiO1xuaW1wb3J0IHsgZmlyc3QsIGd1YXJhbnRlZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzSFRNTEF0dHJpYnV0ZU5hbWUsIGlzU1ZHQXR0cmlidXRlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgcmVtb3ZlRmFsc2V5RWxlbWVudHMsIHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudHNcIjtcbmltcG9ydCB7IEZPUiwgQ0xBU1MsIE9CSkVDVCwgSFRNTF9GT1IsIENMQVNTX05BTUUsIEJPT0xFQU4sIEZVTkNUSU9OLCBTVkdfTkFNRVNQQUNFX1VSSSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZnVuY3Rpb24gYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcykge1xuICB0aGlzLnByb3BlcnRpZXMgPSBjb21iaW5lKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzKTtcblxuICBwcm9wZXJ0aWVzID0gcHJ1bmUodGhpcy5wcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcyk7IC8vL1xuXG4gIGNvbnN0IHsgbmFtZXNwYWNlVVJJIH0gPSB0aGlzLmRvbUVsZW1lbnQsXG4gICAgICAgIHN2ZyA9IChuYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0VfVVJJKSwgLy8vXG4gICAgICAgIHByb3BlcnRpZXNLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksXG4gICAgICAgIG5hbWVzID0gcHJvcGVydGllc0tleXM7ICAvLy89XG5cbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvcGVydGllc1tuYW1lXSxcbiAgICAgICAgICBuYW1lSGFuZGxlck5hbWUgPSBpc05hbWVIYW5kbGVyTmFtZShuYW1lKTtcblxuICAgIGlmIChuYW1lSGFuZGxlck5hbWUpIHtcbiAgICAgIGFkZEhhbmRsZXIodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lQXR0cmlidXRlTmFtZSA9IGlzTmFtZUF0dHJpYnV0ZU5hbWUobmFtZSwgc3ZnKTtcblxuICAgICAgaWYgKG5hbWVBdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgIGFkZEF0dHJpYnV0ZSh0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjaGlsZEVsZW1lbnRzID0gY2hpbGRFbGVtZW50c0Zyb21FbGVtZW50KHRoaXMpIHx8IHByb3BlcnRpZXMuY2hpbGRFbGVtZW50cywgIC8vL1xuICAgICAgICBjb250ZXh0ID0ge307XG5cbiAgY2hpbGRFbGVtZW50cy5mb3JFYWNoKChjaGlsZEVsZW1lbnQpID0+IHtcbiAgICB1cGRhdGVDb250ZXh0KGNoaWxkRWxlbWVudCwgY29udGV4dCk7XG5cbiAgICB0aGlzLmFkZChjaGlsZEVsZW1lbnQpO1xuICB9KTtcblxuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzKCkge1xuICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICByZXR1cm4gdGhpcy5jb250ZXh0O1xufVxuXG5mdW5jdGlvbiBhc3NpZ25Db250ZXh0KG5hbWVzLCB0aGVuRGVsZXRlKSB7XG4gIGNvbnN0IGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGZpcnN0QXJndW1lbnQgPSBmaXJzdChhcmd1bWVudHMpO1xuXG4gICAgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBCT09MRUFOKSB7XG4gICAgICBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udGV4dCk7XG5cbiAgICAgIHRoZW5EZWxldGUgPSBmaXJzdEFyZ3VtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGVuRGVsZXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAwKSB7XG4gICAgbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhlbkRlbGV0ZSA9IHRydWU7XG4gIH1cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnRleHRbbmFtZV0sXG4gICAgICAgICAgcHJvcGVydHlOYW1lID0gbmFtZSwgIC8vL1xuICAgICAgICAgIGRlc2NyaXB0b3IgPSB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XG5cbiAgICBpZiAodGhlbkRlbGV0ZSkge1xuICAgICAgZGVsZXRlIHRoaXMuY29udGV4dFtuYW1lXTtcbiAgICB9XG4gIH0sIFtdKTtcbn1cblxuY29uc3QganN4TWl4aW5zID0ge1xuICBhcHBseVByb3BlcnRpZXMsXG4gIGdldFByb3BlcnRpZXMsXG4gIGdldENvbnRleHQsXG4gIGFzc2lnbkNvbnRleHRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGpzeE1peGlucztcblxuZnVuY3Rpb24gY2hpbGRFbGVtZW50c0Zyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgbGV0IGNoaWxkRWxlbWVudHMgPSBudWxsO1xuXG4gIGlmICh0eXBlb2YgZWxlbWVudC5jaGlsZEVsZW1lbnRzID09PSBGVU5DVElPTikge1xuICAgIGNoaWxkRWxlbWVudHMgPSBlbGVtZW50LmNoaWxkRWxlbWVudHMuY2FsbChlbGVtZW50KTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSBndWFyYW50ZWUoY2hpbGRFbGVtZW50cyk7XG5cbiAgICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG5cbiAgICBjaGlsZEVsZW1lbnRzID0gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoY2hpbGRFbGVtZW50LCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSAodHlwZW9mIGNoaWxkRWxlbWVudC5wYXJlbnRDb250ZXh0ID09PSBGVU5DVElPTikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQucGFyZW50Q29udGV4dCgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnQuY29udGV4dDsgLy8vXG5cbiAgT2JqZWN0LmFzc2lnbihjb250ZXh0LCBwYXJlbnRDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBldmVudFR5cGUgPSBuYW1lLnN1YnN0cigyKS50b0xvd2VyQ2FzZSgpLCAvLy9cbiAgICAgICAgaGFuZGxlciA9IHZhbHVlOyAgLy8vXG5cbiAgZWxlbWVudC5vbihldmVudFR5cGUsIGhhbmRsZXIpO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKG5hbWUgPT09IENMQVNTX05BTUUpIHtcbiAgICBuYW1lID0gQ0xBU1M7XG4gIH1cblxuICBpZiAobmFtZSA9PT0gSFRNTF9GT1IpIHtcbiAgICBuYW1lID0gRk9SO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gT0JKRUNUKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcblxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBlbGVtZW50LmRvbUVsZW1lbnRbbmFtZV1ba2V5XSA9IHZhbHVlW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBCT09MRUFOKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IG5hbWU7IC8vL1xuXG4gICAgICBlbGVtZW50LmFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc05hbWVIYW5kbGVyTmFtZShuYW1lKSB7XG4gIHJldHVybiAvXm9uLy50ZXN0KG5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc05hbWVBdHRyaWJ1dGVOYW1lKG5hbWUsIHN2Zykge1xuICByZXR1cm4gc3ZnID8gaXNTVkdBdHRyaWJ1dGVOYW1lKG5hbWUpIDogaXNIVE1MQXR0cmlidXRlTmFtZShuYW1lKVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQkxVUl9FVkVOVF9UWVBFID0gXCJibHVyXCI7XG5leHBvcnQgY29uc3QgV0hFRUxfRVZFTlRfVFlQRSA9IFwid2hlZWxcIjtcbmV4cG9ydCBjb25zdCBJTlBVVF9FVkVOVF9UWVBFID0gXCJpbnB1dFwiO1xuZXhwb3J0IGNvbnN0IEZPQ1VTX0VWRU5UX1RZUEUgPSBcImZvY3VzXCI7XG5leHBvcnQgY29uc3QgQ0xJQ0tfRVZFTlRfVFlQRSA9IFwiY2xpY2tcIjtcbmV4cG9ydCBjb25zdCBLRVlVUF9FVkVOVF9UWVBFID0gXCJrZXl1cFwiO1xuZXhwb3J0IGNvbnN0IENIQU5HRV9FVkVOVF9UWVBFID0gXCJjaGFuZ2VcIjtcbmV4cG9ydCBjb25zdCBSRVNJWkVfRVZFTlRfVFlQRSA9IFwicmVzaXplXCI7XG5leHBvcnQgY29uc3QgU0NST0xMX0VWRU5UX1RZUEUgPSBcInNjcm9sbFwiO1xuZXhwb3J0IGNvbnN0IEtFWURPV05fRVZFTlRfVFlQRSA9IFwia2V5ZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFVVBfRVZFTlRfVFlQRSA9IFwibW91c2V1cFwiO1xuZXhwb3J0IGNvbnN0IEFVWENMSUNLX0VWRU5UX1RZUEUgPSBcImF1eGNsaWNrXCI7XG5leHBvcnQgY29uc3QgTU9VU0VPVVRfRVZFTlRfVFlQRSA9IFwibW91c2VvdXRcIjtcbmV4cG9ydCBjb25zdCBEQkxDTElDS19FVkVOVF9UWVBFID0gXCJkYmxjbGlja1wiO1xuZXhwb3J0IGNvbnN0IE1PVVNFT1ZFUl9FVkVOVF9UWVBFID0gXCJtb3VzZW92ZXJcIjtcbmV4cG9ydCBjb25zdCBNT1VTRURPV05fRVZFTlRfVFlQRSA9IFwibW91c2Vkb3duXCI7XG5leHBvcnQgY29uc3QgTU9VU0VNT1ZFX0VWRU5UX1RZUEUgPSBcIm1vdXNlbW92ZVwiO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRNRU5VX0VWRU5UX1RZUEUgPSBcImNvbnRleHRtZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgQkxVUl9FVkVOVF9UWVBFLFxuICBXSEVFTF9FVkVOVF9UWVBFLFxuICBJTlBVVF9FVkVOVF9UWVBFLFxuICBGT0NVU19FVkVOVF9UWVBFLFxuICBDTElDS19FVkVOVF9UWVBFLFxuICBLRVlVUF9FVkVOVF9UWVBFLFxuICBDSEFOR0VfRVZFTlRfVFlQRSxcbiAgUkVTSVpFX0VWRU5UX1RZUEUsXG4gIFNDUk9MTF9FVkVOVF9UWVBFLFxuICBLRVlET1dOX0VWRU5UX1RZUEUsXG4gIE1PVVNFVVBfRVZFTlRfVFlQRSxcbiAgQVVYQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgREJMQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICBNT1VTRU1PVkVfRVZFTlRfVFlQRSxcbiAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgS0VZVVBfRVZFTlRfVFlQRSwgS0VZRE9XTl9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25LZXlVcChrZXlVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihLRVlVUF9FVkVOVF9UWVBFLCBrZXlVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleVVwKGtleVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihLRVlVUF9FVkVOVF9UWVBFLCBrZXlVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uS2V5RG93bihrZXlEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwga2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleURvd24oa2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoS0VZRE9XTl9FVkVOVF9UWVBFLCBrZXlEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3Qga2V5TWl4aW5zID0ge1xuICBvbktleVVwLFxuICBvZmZLZXlVcCxcbiAgb25LZXlEb3duLFxuICBvZmZLZXlEb3duXG59O1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENMSUNLX0VWRU5UX1RZUEUsIERCTENMSUNLX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbkNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Eb3VibGVDbGljayhjbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihEQkxDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkRvdWJsZUNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihEQkxDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IGNsaWNrTWl4aW5zID0ge1xuICBvbkNsaWNrLFxuICBvZmZDbGljayxcbiAgb25Eb3VibGVDbGljayxcbiAgb2ZmRG91YmxlQ2xpY2tcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsaWNrTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgcmV0dXJuIHRoaXMuc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlKSB7XG4gIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RhdGUoc3RhdGUpIHtcbiAgT2JqZWN0LmFzc2lnbih0aGlzLnN0YXRlLCBzdGF0ZSk7XG59XG5cbmNvbnN0IHN0YXRlTWl4aW5zID0ge1xuICBnZXRTdGF0ZSxcbiAgc2V0U3RhdGUsXG4gIHVwZGF0ZVN0YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdGF0ZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRFWFRfSFRNTF9DT05URU5UX1RZUEUgPSBcInRleHQvaHRtbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSRVNJWkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5pbXBvcnQgeyBPQkpFQ1QsIEFCT1VUX0JMQU5LIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihSRVNJWkVfRVZFTlRfVFlQRSwgcmVzaXplSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBhZGRSZXNpemVPYmplY3QoKSB7XG4gIGNvbnN0IHJlc2l6ZU9iamVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoT0JKRUNUKSxcbiAgICAgICAgc3R5bGUgPSBgZGlzcGxheTogYmxvY2s7IFxuICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgICAgICAgICAgICB0b3A6IDA7IFxuICAgICAgICAgICAgICAgICBsZWZ0OiAwOyBcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOyBcbiAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7IFxuICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyBcbiAgICAgICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IFxuICAgICAgICAgICAgICAgICB6LWluZGV4OiAtMTtgLFxuICAgICAgICBkYXRhID0gQUJPVVRfQkxBTkssXG4gICAgICAgIHR5cGUgPSBURVhUX0hUTUxfQ09OVEVOVF9UWVBFO1xuXG4gIHJlc2l6ZU9iamVjdC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBzdHlsZSk7XG5cbiAgcmVzaXplT2JqZWN0LmRhdGEgPSBkYXRhO1xuXG4gIHJlc2l6ZU9iamVjdC50eXBlID0gdHlwZTtcblxuICB0aGlzLl9fcmVzaXplT2JqZWN0X18gPSByZXNpemVPYmplY3Q7XG5cbiAgcmVzaXplT2JqZWN0Lm9ubG9hZCA9ICgpID0+IHJlc2l6ZU9iamVjdExvYWRIYW5kbGVyKHRoaXMpO1xuXG4gIHRoaXMuZG9tRWxlbWVudC5hcHBlbmRDaGlsZChyZXNpemVPYmplY3QpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVSZXNpemVPYmplY3QoKSB7XG4gIGNvbnN0IHJlc2l6ZU9iamVjdCA9IHRoaXMuX19yZXNpemVPYmplY3RfXyxcbiAgICAgICAgb2JqZWN0V2luZG93ID0gcmVzaXplT2JqZWN0LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldzsgIC8vL1xuXG4gIG9iamVjdFdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVFdmVudExpc3RlbmVyKTtcblxuICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQ2hpbGQocmVzaXplT2JqZWN0KTtcblxuICBkZWxldGUgdGhpcy5fX3Jlc2l6ZU9iamVjdF9fO1xufVxuXG5jb25zdCByZXNpemVNaXhpbnMgPSB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemUsXG4gIGFkZFJlc2l6ZU9iamVjdCxcbiAgcmVtb3ZlUmVzaXplT2JqZWN0XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZXNpemVNaXhpbnM7XG5cbmZ1bmN0aW9uIHJlc2l6ZU9iamVjdExvYWRIYW5kbGVyKGVsZW1lbnQpIHtcbiAgY29uc3QgcmVzaXplT2JqZWN0ID0gZWxlbWVudC5fX3Jlc2l6ZU9iamVjdF9fLFxuICAgICAgICByZXNpemVPYmplY3RXaW5kb3cgPSByZXNpemVPYmplY3QuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3OyAgLy8vXG5cbiAgcmVzaXplT2JqZWN0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoUkVTSVpFX0VWRU5UX1RZUEUsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHJlc2l6ZUV2ZW50TGlzdGVuZXJzID0gZWxlbWVudC5maW5kRXZlbnRMaXN0ZW5lcnMoUkVTSVpFX0VWRU5UX1RZUEUpO1xuXG4gICAgcmVzaXplRXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgocmVzaXplRXZlbnRMaXN0ZW5lcikgPT4gcmVzaXplRXZlbnRMaXN0ZW5lcihldmVudCkpO1xuICB9KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU1BBQ0UgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBSRVNJWkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5pbXBvcnQgeyByZW1vdmVSZXNpemVPYmplY3QgfSBmcm9tIFwiLi4vbWl4aW5zL3Jlc2l6ZVwiO1xuXG5mdW5jdGlvbiBvbihldmVudFR5cGVzLCBoYW5kbGVyLCBlbGVtZW50ID0gdGhpcykge1xuICBldmVudFR5cGVzID0gZXZlbnRUeXBlcy5zcGxpdChTUEFDRSk7XG5cbiAgZXZlbnRUeXBlcy5mb3JFYWNoKChldmVudFR5cGUpID0+IHtcbiAgICBpZiAoZXZlbnRUeXBlID09PSBSRVNJWkVfRVZFTlRfVFlQRSkge1xuICAgICAgY29uc3QgcmVzaXplRXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhSRVNJWkVfRVZFTlRfVFlQRSksXG4gICAgICAgICAgICByZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9IHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgaWYgKHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuYWRkUmVzaXplT2JqZWN0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuXG4gICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9mZihldmVudFR5cGVzLCBoYW5kbGVyLCBlbGVtZW50ID0gdGhpcykge1xuICBldmVudFR5cGVzID0gZXZlbnRUeXBlcy5zcGxpdChTUEFDRSk7XG5cbiAgZXZlbnRUeXBlcy5mb3JFYWNoKChldmVudFR5cGUpID0+IHtcbiAgICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIpO1xuXG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gUkVTSVpFX0VWRU5UX1RZUEUpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZUV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoUkVTSVpFX0VWRU5UX1RZUEUpLFxuICAgICAgICAgICAgcmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPSByZXNpemVFdmVudExpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIGlmIChyZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICByZW1vdmVSZXNpemVPYmplY3QodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgaWYgKHRoaXMuZXZlbnRMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goZXZlbnRMaXN0ZW5lcik7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCksXG4gICAgICAgIGluZGV4ID0gdGhpcy5ldmVudExpc3RlbmVycy5pbmRleE9mKGV2ZW50TGlzdGVuZXIpLFxuICAgICAgICBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICB0aGlzLmV2ZW50TGlzdGVuZXJzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIGRlbGV0ZSB0aGlzLmV2ZW50TGlzdGVuZXJzO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5ldmVudExpc3RlbmVycy5maW5kKChldmVudExpc3RlbmVyKSA9PiB7XG4gICAgaWYgKChldmVudExpc3RlbmVyLmVsZW1lbnQgPT09IGVsZW1lbnQpICYmIChldmVudExpc3RlbmVyLmhhbmRsZXIgPT09IGhhbmRsZXIpICYmIChldmVudExpc3RlbmVyLmV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkge1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IFtdO1xuXG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gKGV2ZW50TGlzdGVuZXIuZXZlbnRUeXBlID09PSBldmVudFR5cGUpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMucHVzaChldmVudExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgbGV0IGV2ZW50TGlzdGVuZXI7XG5cbiAgY29uc3QgaGFuZGxlckVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCBldmVudCwgZWxlbWVudCk7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihldmVudExpc3RlbmVyLCB7XG4gICAgZWxlbWVudCxcbiAgICBoYW5kbGVyLFxuICAgIGV2ZW50VHlwZVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuY29uc3QgZXZlbnRNaXhpbnMgPSB7XG4gIG9uLFxuICBvZmYsXG4gIGFkZEV2ZW50TGlzdGVuZXIsXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIsXG4gIGNyZWF0ZUV2ZW50TGlzdGVuZXIsXG4gIGZpbmRFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcnNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV2ZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBNT1VTRVVQX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU9VVF9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VET1dOX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU9WRVJfRVZFTlRfVFlQRSxcbiAgICAgICAgIE1PVVNFTU9WRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25Nb3VzZVVwKG1vdXNlVXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oTU9VU0VVUF9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRVVQX0VWRU5UX1RZUEUsIG1vdXNlVXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFT1VUX0VWRU5UX1RZUEUsIG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VPdXQobW91c2VPdXRIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKE1PVVNFT1VUX0VWRU5UX1RZUEUsIG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFRE9XTl9FVkVOVF9UWVBFLCBtb3VzZURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRURPV05fRVZFTlRfVFlQRSwgbW91c2VEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFT1ZFUl9FVkVOVF9UWVBFLCBtb3VzZU92ZXJIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU9WRVJfRVZFTlRfVFlQRSwgbW91c2VPdmVySGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFTU9WRV9FVkVOVF9UWVBFLCBtb3VzZU1vdmVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgbW91c2VNaXhpbnMgPSB7XG4gIG9uTW91c2VVcCxcbiAgb2ZmTW91c2VVcCxcbiAgb25Nb3VzZU91dCxcbiAgb2ZmTW91c2VPdXQsXG4gIG9uTW91c2VEb3duLFxuICBvZmZNb3VzZURvd24sXG4gIG9uTW91c2VPdmVyLFxuICBvZmZNb3VzZU92ZXIsXG4gIG9uTW91c2VNb3ZlLFxuICBvZmZNb3VzZU1vdmVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1vdXNlTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTQ1JPTExfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgc2Nyb2xsSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoU0NST0xMX0VWRU5UX1RZUEUsIHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIGdldFNjcm9sbFRvcCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsTGVmdCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0OyB9XG5cbmZ1bmN0aW9uIHNldFNjcm9sbFRvcChzY3JvbGxUb3ApIHsgdGhpcy5kb21FbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpIHsgdGhpcy5kb21FbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OyB9XG5cbmNvbnN0IHNjcm9sbE1peGlucyA9IHtcbiAgb25TY3JvbGwsXG4gIG9mZlNjcm9sbCxcbiAgZ2V0U2Nyb2xsVG9wLFxuICBnZXRTY3JvbGxMZWZ0LFxuICBzZXRTY3JvbGxUb3AsXG4gIHNldFNjcm9sbExlZnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNjcm9sbE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE9mZnNldCBmcm9tIFwiLi9vZmZzZXRcIjtcbmltcG9ydCBCb3VuZHMgZnJvbSBcIi4vYm91bmRzXCI7XG5pbXBvcnQganN4TWl4aW5zIGZyb20gXCIuL21peGlucy9qc3hcIjtcbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHN0YXRlTWl4aW5zIGZyb20gXCIuL21peGlucy9zdGF0ZVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IHJlc2l6ZU1peGlucyBmcm9tIFwiLi9taXhpbnMvcmVzaXplXCI7XG5pbXBvcnQgc2Nyb2xsTWl4aW5zIGZyb20gXCIuL21peGlucy9zY3JvbGxcIjtcbmltcG9ydCBlbGVtZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGNvbWJpbmUgfSBmcm9tIFwiLi91dGlsaXRpZXMvb2JqZWN0XCI7XG5pbXBvcnQgeyBpc1NWR1RhZ05hbWUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgZmlyc3QsIGF1Z21lbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IE5PTkUsXG4gICAgICAgICBCTE9DSyxcbiAgICAgICAgIFdJRFRILFxuICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgSEVJR0hULFxuICAgICAgICAgRElTUExBWSxcbiAgICAgICAgIERJU0FCTEVELFxuICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgU1ZHX05BTUVTUEFDRV9VUkksXG4gICAgICAgICBERUZBVUxUX1BST1BFUlRJRVMsXG4gICAgICAgICBJR05PUkVEX1BST1BFUlRJRVMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY2xhc3MgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yKSB7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgICAgdGhpcy5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gdGhpczsgLy8vXG4gICAgfVxuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50O1xuICB9XG5cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRUb3AsICAvLy9cbiAgICAgICAgICBsZWZ0ID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldExlZnQsICAvLy9cbiAgICAgICAgICBvZmZzZXQgPSBuZXcgT2Zmc2V0KHRvcCwgbGVmdCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgZ2V0Qm91bmRzKCkge1xuICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICBib3VuZHMgPSBCb3VuZHMuZnJvbUJvdW5kaW5nQ2xpZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QpO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIGdldFdpZHRoKGluY2x1ZGVCb3JkZXIgPSB0cnVlKSB7XG4gICAgY29uc3Qgd2lkdGggPSBpbmNsdWRlQm9yZGVyID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50Lm9mZnNldFdpZHRoIDpcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBzZXRXaWR0aCh3aWR0aCkge1xuICAgIHdpZHRoID0gYCR7d2lkdGh9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoV0lEVEgsIHdpZHRoKTtcbiAgfVxuXG4gIGdldEhlaWdodChpbmNsdWRlQm9yZGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IGhlaWdodCA9IGluY2x1ZGVCb3JkZXIgP1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50Lm9mZnNldEhlaWdodCA6XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgc2V0SGVpZ2h0KGhlaWdodCkge1xuICAgIGhlaWdodCA9IGAke2hlaWdodH1weGA7IC8vL1xuXG4gICAgdGhpcy5zdHlsZShIRUlHSFQsIGhlaWdodCk7XG4gIH1cblxuICBoYXNBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGdldEF0dHJpYnV0ZShuYW1lKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7IHRoaXMuZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOyB9XG5cbiAgY2xlYXJBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7IHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIHJlbW92ZUF0dHJpYnV0ZShuYW1lKSB7IHRoaXMuY2xlYXJBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBzZXRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuXG4gIGFkZENsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9XG5cbiAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7IH1cblxuICB0b2dnbGVDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lKTsgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpOyB9XG5cbiAgY2xlYXJDbGFzc2VzKCkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HOyB9XG5cbiAgcHJlcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5wcmVwZW5kKHRoaXMpOyB9XG5cbiAgYXBwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFwcGVuZCh0aGlzKTsgfVxuXG4gIGFkZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hZGQodGhpcyk7IH1cblxuICByZW1vdmVGcm9tKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5yZW1vdmUodGhpcyk7IH1cblxuICBpbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQubmV4dFNpYmxpbmcpOyAgLy8vXG4gIH1cblxuICBwcmVwZW5kKGVsZW1lbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50ID0gZWxlbWVudC5kb21FbGVtZW50LFxuICAgICAgICAgIGZpcnN0Q2hpbGRET01FbGVtZW50ID0gdGhpcy5kb21FbGVtZW50LmZpcnN0Q2hpbGQ7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIGZpcnN0Q2hpbGRET01FbGVtZW50KTtcbiAgfVxuXG4gIGFwcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUoZG9tRWxlbWVudCwgbnVsbCk7IC8vL1xuICB9XG5cbiAgYWRkKGVsZW1lbnQpIHsgdGhpcy5hcHBlbmQoZWxlbWVudCk7IH1cblxuICByZW1vdmUoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBjb25zdCBkb21FbGVtZW50ID0gZWxlbWVudC5kb21FbGVtZW50O1xuXG4gICAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQ2hpbGQoZG9tRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmUoKTtcbiAgICB9XG4gIH1cblxuICBtb3VudChlbGVtZW50KSB7XG4gICAgY29uc3QgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudC5nZXREZXNjZW5kYW50RWxlbWVudHMoKSxcbiAgICAgICAgICBlbGVtZW50cyA9IFtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAuLi5kZXNjZW5kYW50RWxlbWVudHNcbiAgICAgICAgICBdO1xuXG4gICAgdGhpcy5hZGQoZWxlbWVudCk7XG5cbiAgICBlbGVtZW50cy5yZXZlcnNlKCk7IC8vL1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gKGVsZW1lbnQuZGlkTW91bnQgJiYgZWxlbWVudC5kaWRNb3VudCgpKSk7ICAvLy9cbiAgfVxuXG4gIHVubW91bnQoZWxlbWVudCkge1xuICAgIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgICAgZWxlbWVudHMgPSBbXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgICAgXTtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IChlbGVtZW50LndpbGxVbm1vdW50ICYmIGVsZW1lbnQud2lsbFVubW91bnQoKSkpOyAgLy8vXG5cbiAgICB0aGlzLnJlbW92ZShlbGVtZW50KTtcbiAgfVxuXG4gIHNob3coZGlzcGxheVN0eWxlID0gQkxPQ0spIHsgdGhpcy5kaXNwbGF5KGRpc3BsYXlTdHlsZSk7IH1cblxuICBoaWRlKCkgeyB0aGlzLnN0eWxlKERJU1BMQVksIE5PTkUpOyB9XG5cbiAgZGlzcGxheShkaXNwbGF5KSB7IHRoaXMuc3R5bGUoRElTUExBWSwgZGlzcGxheSk7IH1cblxuICBlbmFibGUoKSB7IHRoaXMuY2xlYXJBdHRyaWJ1dGUoRElTQUJMRUQpOyB9XG5cbiAgZGlzYWJsZSgpIHsgdGhpcy5zZXRBdHRyaWJ1dGUoRElTQUJMRUQsIERJU0FCTEVEKTsgfVxuXG4gIGlzRW5hYmxlZCgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpLFxuICAgICAgICAgIGVuYWJsZWQgPSAhZGlzYWJsZWQ7XG5cbiAgICByZXR1cm4gZW5hYmxlZDtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmhhc0F0dHJpYnV0ZShESVNBQkxFRCk7XG5cbiAgICByZXR1cm4gZGlzYWJsZWQ7XG4gIH1cbiAgXG4gIGlzRGlzcGxheWVkKCkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSB0aGlzLmNzcyhESVNQTEFZKSxcbiAgICAgICAgICBkaXNwbGF5ZWQgPSAoZGlzcGxheSAhPT0gTk9ORSk7XG4gICAgXG4gICAgcmV0dXJuIGRpc3BsYXllZDtcbiAgfVxuXG4gIGlzU2hvd2luZygpIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSB0aGlzLmlzRGlzcGxheWVkKCksXG4gICAgICAgICAgc2hvd2luZyA9IGRpc3BsYXllZDsgIC8vL1xuXG4gICAgcmV0dXJuIHNob3dpbmc7XG4gIH1cblxuICBpc0hpZGRlbigpIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSB0aGlzLmlzRGlzcGxheWVkKCksXG4gICAgICAgICAgaGlkZGVuID0gIWRpc3BsYXllZDtcblxuICAgIHJldHVybiBoaWRkZW47XG4gIH1cblxuICBzdHlsZShuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV07XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG4gIH1cblxuICBodG1sKGh0bWwpIHtcbiAgICBpZiAoaHRtbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSB0aGlzLmRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuXG4gICAgICBodG1sID0gaW5uZXJIVE1MOyAvLy9cblxuICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlubmVySFRNTCA9IGh0bWw7IC8vL1xuXG4gICAgICB0aGlzLmRvbUVsZW1lbnQuaW5uZXJIVE1MID0gaW5uZXJIVE1MXG4gICAgfVxuICB9XG5cbiAgY3NzKGNzcykge1xuICAgIGlmIChjc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5kb21FbGVtZW50KSxcbiAgICAgICAgICAgIGNzcyA9IHt9O1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29tcHV0ZWRTdHlsZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZmlyc3RDb21wdXRlZFN0eWxlID0gZmlyc3RbY29tcHV0ZWRTdHlsZV0sXG4gICAgICAgICAgICAgIG5hbWUgPSBmaXJzdENvbXB1dGVkU3R5bGUsICAvLy9cbiAgICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICAgIGNzc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNzcyA9PT0gU1RSSU5HKSB7XG4gICAgICBsZXQgbmFtZSA9IGNzczsgLy8vXG5cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsgLy8vXG5cbiAgICAgIGNzcyA9IHZhbHVlOyAgLy8vXG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoY3NzKTsgLy8vXG5cbiAgICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjc3NbbmFtZV07XG5cbiAgICAgICAgdGhpcy5zdHlsZShuYW1lLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIGJsdXIoKSB7IHRoaXMuZG9tRWxlbWVudC5ibHVyKCk7IH1cblxuICBmb2N1cygpIHsgdGhpcy5kb21FbGVtZW50LmZvY3VzKCk7IH1cblxuICBoYXNGb2N1cygpIHtcbiAgICBjb25zdCBmb2N1cyA9IChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnQpOyAgLy8vXG5cbiAgICByZXR1cm4gZm9jdXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCB7IHRhZ05hbWUgfSA9IENsYXNzLFxuICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50RnJvbVRhZ05hbWUoQ2xhc3MsIHRhZ05hbWUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyksXG4gICAgICAgICAgZGVmYXVsdFByb3BlcnRpZXMgPSBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcyksXG4gICAgICAgICAgaWdub3JlZFByb3BlcnRpZXMgPSBpZ25vcmVkUHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcyk7XG5cbiAgICBlbGVtZW50LmFwcGx5UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpO1xuXG4gICAgZWxlbWVudC5pbml0aWFsaXNlICYmIGVsZW1lbnQuaW5pdGlhbGlzZSgpOyAvLy9cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21UYWdOYW1lKHRhZ05hbWUsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IENsYXNzID0gRWxlbWVudCwgIC8vL1xuICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50RnJvbVRhZ05hbWUoQ2xhc3MsIHRhZ05hbWUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyksXG4gICAgICAgICAgZGVmYXVsdFByb3BlcnRpZXMgPSB7fSwgLy8vXG4gICAgICAgICAgaWdub3JlZFByb3BlcnRpZXMgPSBbXTsgLy8vXG5cbiAgICBlbGVtZW50LmFwcGx5UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpO1xuXG4gICAgZWxlbWVudC5pbml0aWFsaXNlICYmIGVsZW1lbnQuaW5pdGlhbGlzZSgpOyAvLy9cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGpzeE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBrZXlNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgY2xpY2tNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgc3RhdGVNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgbW91c2VNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgcmVzaXplTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHNjcm9sbE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBlbGVtZW50TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgRWxlbWVudDtcblxuZnVuY3Rpb24gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBudWxsLFxuICAgICAgICBlbGVtZW50ID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5jYWxsKENsYXNzLCBudWxsLCBzZWxlY3RvciwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSk7XG5cbiAgZWxlbWVudC5kb21FbGVtZW50ID0gaXNTVkdUYWdOYW1lKHRhZ05hbWUpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05BTUVTUEFDRV9VUkksIHRhZ05hbWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cbiAgZWxlbWVudC5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gZWxlbWVudDsgLy8vXG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzLCBkZWZhdWx0UHJvcGVydGllcyA9IHt9KSB7XG4gIGlmIChDbGFzcy5oYXNPd25Qcm9wZXJ0eShERUZBVUxUX1BST1BFUlRJRVMpKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXMgPSBjb21iaW5lKGRlZmF1bHRQcm9wZXJ0aWVzLCBDbGFzc1tERUZBVUxUX1BST1BFUlRJRVNdKTtcbiAgfVxuXG4gIGNvbnN0IHN1cGVyQ2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ2xhc3MpO1xuXG4gIGlmIChzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXMgPSBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhzdXBlckNsYXNzLCBkZWZhdWx0UHJvcGVydGllcyk7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzLCBpZ25vcmVkUHJvcGVydGllcyA9IFtdKSB7XG4gIGlmIChDbGFzcy5oYXNPd25Qcm9wZXJ0eShJR05PUkVEX1BST1BFUlRJRVMpKSB7XG4gICAgaWdub3JlZFByb3BlcnRpZXMgPSBhdWdtZW50KGlnbm9yZWRQcm9wZXJ0aWVzLCBDbGFzc1tJR05PUkVEX1BST1BFUlRJRVNdLCAoaWdub3JlZFByb3BlcnR5KSA9PiAhaWdub3JlZFByb3BlcnRpZXMuaW5jbHVkZXMoaWdub3JlZFByb3BlcnR5KSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTtcblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgaWdub3JlZFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGlnbm9yZWRQcm9wZXJ0aWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFNUUklORywgRlVOQ1RJT04gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHJlbW92ZUZhbHNleUVsZW1lbnRzLCByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZWxlbWVudHNcIjtcblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudChmaXJzdEFyZ3VtZW50LCBwcm9wZXJ0aWVzLCAuLi5jaGlsZEVsZW1lbnRzKSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICBpZiAoZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IHNhbml0aXNlQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIHByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGNoaWxkRWxlbWVudHNcbiAgICB9LCBwcm9wZXJ0aWVzKTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzT2YoZmlyc3RBcmd1bWVudCwgRWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IENsYXNzID0gZmlyc3RBcmd1bWVudDsgIC8vL1xuXG4gICAgICBlbGVtZW50ID0gQ2xhc3MuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSBmaXJzdEFyZ3VtZW50OyAvLy9cblxuICAgICAgZWxlbWVudCA9IEVsZW1lbnQuZnJvbVRhZ05hbWUodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gRlVOQ1RJT04pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRGdW5jdGlvbiA9IGZpcnN0QXJndW1lbnQ7ICAvLy9cblxuICAgICAgZWxlbWVudCA9IGVsZW1lbnRGdW5jdGlvbihwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuY29uc3QgUmVhY3QgPSB7XG4gIGNyZWF0ZUVsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0O1xuXG5mdW5jdGlvbiBzYW5pdGlzZUNoaWxkRWxlbWVudHMoY2hpbGRFbGVtZW50cykge1xuICBjaGlsZEVsZW1lbnRzID0gZmxhdHRlbihjaGlsZEVsZW1lbnRzKTtcblxuICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG5cbiAgY2hpbGRFbGVtZW50cyA9IHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuXG5mdW5jdGlvbiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKSB7XG4gIGNvbnN0IHN1YmNsYXNzT2YgPSAoYXJndW1lbnQucHJvdG90eXBlIGluc3RhbmNlb2YgQ2xhc3MpO1xuXG4gIHJldHVybiBzdWJjbGFzc09mO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBCT0RZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2R5IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yID0gQk9EWSkge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJib2R5XCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGluayBleHRlbmRzIEVsZW1lbnQge1xuICBnZXRIUmVmKCkgeyByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpOyB9XG5cbiAgc2V0SFJlZihocmVmKSB7IHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaHJlZik7IH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgY2hhbmdlTWl4aW5zID0ge1xuICBvbkNoYW5nZSxcbiAgb2ZmQ2hhbmdlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjaGFuZ2VNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NoYW5nZVwiO1xuXG5pbXBvcnQgeyBDSEFOR0VfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcblxuY2xhc3MgSW5wdXRFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAvLy9cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge30gIC8vL1xuXG4gIGdldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnZhbHVlOyB9XG5cbiAgZ2V0U2VsZWN0aW9uU3RhcnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7IH1cblxuICBnZXRTZWxlY3Rpb25FbmQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kOyB9XG4gIFxuICBpc1JlYWRPbmx5KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnJlYWRPbmx5OyB9XG5cbiAgc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuICBzZXRTZWxlY3Rpb25TdGFydChzZWxlY3Rpb25TdGFydCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsgfVxuXG4gIHNldFNlbGVjdGlvbkVuZChzZWxlY3Rpb25FbmQpIHsgdGhpcy5kb21FbGVtZW50LnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZDsgfVxuXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5KSB7IHRoaXMuZG9tRWxlbWVudC5yZWFkT25seSA9IHJlYWRPbmx5OyB9XG5cbiAgc2VsZWN0KCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0KCk7IH1cbn1cblxuT2JqZWN0LmFzc2lnbihJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBJbnB1dEVsZW1lbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiYnV0dG9uXCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4uL21peGlucy9jaGFuZ2VcIjtcblxuY2xhc3MgU2VsZWN0IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHt9IC8vL1xuXG4gIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAgLy8vXG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJzZWxlY3RcIjtcbn1cblxuT2JqZWN0LmFzc2lnbihTZWxlY3QucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvY2hhbmdlXCI7XG5cbmNsYXNzIENoZWNrYm94IGV4dGVuZHMgRWxlbWVudCB7XG4gIGlzQ2hlY2tlZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jaGVja2VkOyB9XG5cbiAgY2hlY2soY2hlY2tlZCA9IHRydWUpIHsgdGhpcy5kb21FbGVtZW50LmNoZWNrZWQgPSBjaGVja2VkOyB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImlucHV0XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHR5cGU6IFwiY2hlY2tib3hcIlxuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKENoZWNrYm94LnByb3RvdHlwZSwgY2hhbmdlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0YXJlYSBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IG9uUmVzaXplLCBvZmZSZXNpemUgfSBmcm9tIFwiLi4vbWl4aW5zL3Jlc2l6ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHdpbmRvd01peGlucyBmcm9tIFwiLi9taXhpbnMvd2luZG93XCI7XG5cbmltcG9ydCB7IFVOREVGSU5FRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jbGFzcyBXaW5kb3cge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSB3aW5kb3c7IC8vL1xuICB9XG5cbiAgYXNzaWduKC4uLnNvdXJjZXMpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRvbUVsZW1lbnQ7IC8vL1xuXG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpO1xuICB9XG5cbiAgYWRkUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgcmVtb3ZlUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgZ2V0V2lkdGgoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuaW5uZXJXaWR0aDsgfSAvLy9cbiAgXG4gIGdldEhlaWdodCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5pbm5lckhlaWdodDsgfSAvLy9cblxuICBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVlPZmZzZXQ7IH0gIC8vL1xuXG4gIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVhPZmZzZXQ7IH0gLy8vXG5cbiAgZ2V0U2VsZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldFNlbGVjdGlvbigpOyB9XG59XG5cbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgd2luZG93TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgKHR5cGVvZiB3aW5kb3cgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgV2luZG93KCk7ICAvLy9cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IExFRlRfTU9VU0VfQlVUVE9OID0gMDtcbmV4cG9ydCBjb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyO1xuZXhwb3J0IGNvbnN0IE1JRERMRV9NT1VTRV9CVVRUT04gPSAxO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIExFRlRfTU9VU0VfQlVUVE9OLFxuICBSSUdIVF9NT1VTRV9CVVRUT04sXG4gIE1JRERMRV9NT1VTRV9CVVRUT05cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuXG5pbXBvcnQgeyBVTkRFRklORUQgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY2xhc3MgRG9jdW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudDsgLy8vXG4gIH1cblxuICBjcmVhdGVSYW5nZSgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jcmVhdGVSYW5nZSgpOyB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlb2YgZG9jdW1lbnQgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgRG9jdW1lbnQoKTsgIC8vL1xuXG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFjdCB9IGZyb20gXCIuL3JlYWN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvdW5kcyB9IGZyb20gXCIuL2JvdW5kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBPZmZzZXQgfSBmcm9tIFwiLi9vZmZzZXRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb2R5IH0gZnJvbSBcIi4vZWxlbWVudC9ib2R5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpbmsgfSBmcm9tIFwiLi9lbGVtZW50L2xpbmtcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5wdXQgfSBmcm9tIFwiLi9pbnB1dEVsZW1lbnQvaW5wdXRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcIi4vZWxlbWVudC9idXR0b25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0IH0gZnJvbSBcIi4vZWxlbWVudC9zZWxlY3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9lbGVtZW50L2NoZWNrYm94XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHRhcmVhIH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50L3RleHRhcmVhXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHRFbGVtZW50IH0gZnJvbSBcIi4vdGV4dEVsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5wdXRFbGVtZW50IH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJ1dHRvbnMgfSBmcm9tIFwiLi9idXR0b25zXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRvY3VtZW50IH0gZnJvbSBcIi4vZG9jdW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlbnRUeXBlcyB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUmVhY3QsIHdpbmRvdyB9IGZyb20gXCJlYXN5XCI7XG5cbndpbmRvdy5hc3NpZ24oe1xuICBSZWFjdFxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBcIi4vanV4dGFwb3NlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHRhZ05hbWVzID0gW1xuICBcImFcIiwgXCJhYmJyXCIsIFwiYWRkcmVzc1wiLCBcImFzaWRlXCIsIFwiYXVkaW9cIixcbiAgXCJiXCIsIFwiYmFzZVwiLCBcImJkaVwiLCBcImJkb1wiLCBcImJsb2NrcXVvdGVcIiwgXCJib2R5XCIsIFwiYnJcIiwgXCJidXR0b25cIixcbiAgXCJjYW52YXNcIiwgXCJjYXB0aW9uXCIsIFwiY2l0ZVwiLCBcImNvZGVcIiwgXCJjb2xcIiwgXCJjb2xncm91cFwiLFxuICBcImRhdGFcIiwgXCJkYXRhbGlzdFwiLCBcImRkXCIsIFwiZGVsXCIsIFwiZGV0YWlsc1wiLCBcImRmblwiLCBcImRpYWxvZ1wiLCBcImRpdlwiLCBcImRsXCIsIFwiZHRcIiwgXCJlbVwiLCBcImVtYmVkXCIsIFwiZmllbGRzZXRcIiwgXCJmaWdjYXB0aW9uXCIsIFwiZmlndXJlXCIsIFwiZm9vdGVyXCIsIFwiZm9ybVwiLFxuICBcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJoNlwiLCBcImhlYWRcIiwgXCJoZWFkZXJcIiwgXCJoclwiLCBcImh0bWxcIixcbiAgXCJpXCIsIFwiaWZyYW1lXCIsIFwiaW1nXCIsIFwiaW5wdXRcIiwgXCJpbnNcIiwgXCJrYmRcIiwgXCJsYWJlbFwiLCBcImxlZ2VuZFwiLCBcImxpXCIsIFwibGlua1wiLFxuICBcIm1haW5cIiwgXCJtYXBcIiwgXCJtYXJrXCIsIFwibWV0YVwiLCBcIm1ldGVyXCIsIFwibmF2XCIsIFwibm9zY3JpcHRcIixcbiAgXCJvYmplY3RcIiwgXCJvbFwiLCBcIm9wdGdyb3VwXCIsIFwib3B0aW9uXCIsIFwib3V0cHV0XCIsXG4gIFwicFwiLCBcInBhcmFtXCIsIFwicGljdHVyZVwiLCBcInByZVwiLCBcInByb2dyZXNzXCIsXG4gIFwicVwiLCBcInJwXCIsIFwicnRcIiwgXCJydWJ5XCIsXG4gIFwic1wiLCBcInNhbXBcIiwgXCJzY3JpcHRcIiwgXCJzZWN0aW9uXCIsIFwic2VsZWN0XCIsIFwic21hbGxcIiwgXCJzb3VyY2VcIiwgXCJzcGFuXCIsIFwic3Ryb25nXCIsIFwic3R5bGVcIiwgXCJzdWJcIiwgXCJzdW1tYXJ5XCIsIFwic3VwXCIsIFwic3ZnXCIsXG4gIFwidGFibGVcIiwgXCJ0Ym9keVwiLCBcInRkXCIsIFwidGVtcGxhdGVcIiwgXCJ0ZXh0YXJlYVwiLCBcInRmb290XCIsIFwidGhcIiwgXCJ0aGVhZFwiLCBcInRpbWVcIiwgXCJ0aXRsZVwiLCBcInRyXCIsIFwidHJhY2tcIixcbiAgXCJ1XCIsIFwidWxcIixcbiAgXCJ2YXJcIiwgXCJ2aWRlb1wiLFxuICBcIndiclwiXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdOYW1lcztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRSQUNFX0xFVkVMID0gXCJ0cmFjZVwiO1xuZXhwb3J0IGNvbnN0IERFQlVHX0xFVkVMID0gXCJkZWJ1Z1wiO1xuZXhwb3J0IGNvbnN0IElORk9fTEVWRUwgPSBcImluZm9cIjtcbmV4cG9ydCBjb25zdCBXQVJOSU5HX0xFVkVMID0gXCJ3YXJuaW5nXCI7XG5leHBvcnQgY29uc3QgRVJST1JfTEVWRUwgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRkFUQUxfTEVWRUwgPSBcImZhdGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUxcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBHRVRfTUVUSE9EID0gXCJHRVRcIjtcbmV4cG9ydCBjb25zdCBQT1NUX01FVEhPRCA9IFwiUE9TVFwiO1xuZXhwb3J0IGNvbnN0IFBBVENIX01FVEhPRCA9IFwiUEFUQ0hcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBQQVRDSF9NRVRIT0QsXG4gIERFTEVURV9NRVRIT0QsXG4gIE9QVElPTlNfTUVUSE9EXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUFJBR01BX0hFQURFUiA9IFwicHJhZ21hXCI7XG5leHBvcnQgY29uc3QgQUNDRVBUX0hFQURFUiA9IFwiYWNjZXB0XCI7XG5leHBvcnQgY29uc3QgTE9DQVRJT05fSEVBREVSID0gXCJsb2NhdGlvblwiO1xuZXhwb3J0IGNvbnN0IFVTRVJfQUdFTlRfSEVBREVSID0gXCJ1c2VyLWFnZW50XCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9UWVBFX0hFQURFUiA9IFwiY29udGVudC10eXBlXCI7XG5leHBvcnQgY29uc3QgQVVUSE9SSVpBVElPTl9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbmV4cG9ydCBjb25zdCBDQUNIRV9DT05UUk9MX0hFQURFUiA9IFwiY2FjaGUtY29udHJvbFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfTEVOR1RIX0hFQURFUiA9IFwiY29udGVudC1sZW5ndGhcIjtcbmV4cG9ydCBjb25zdCBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIgPSBcInRyYW5zZmVyLWVuY29kaW5nXCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9ESVNQT1NJVElPTl9IRUFERVIgPSBcImNvbnRlbnQtZGlzcG9zaXRpb25cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfUkVRVUVTVF9NRVRIT0RfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFBSQUdNQV9IRUFERVIsXG4gIEFDQ0VQVF9IRUFERVIsXG4gIExPQ0FUSU9OX0hFQURFUixcbiAgVVNFUl9BR0VOVF9IRUFERVIsXG4gIENPTlRFTlRfVFlQRV9IRUFERVIsXG4gIEFVVEhPUklaQVRJT05fSEVBREVSLFxuICBDQUNIRV9DT05UUk9MX0hFQURFUixcbiAgQ09OVEVOVF9MRU5HVEhfSEVBREVSLFxuICBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIsXG4gIENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfSEVBREVSU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUlxufTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBTSElGVF9LRVlfQ09ERSA9IDE2O1xuZXhwb3J0IGNvbnN0IEVTQ0FQRV9LRVlfQ09ERSA9IDI3O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNISUZUX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5leHBvcnQgY29uc3QgVVRGXzhfRU5DT0RJTkcgPSBcInV0Zi04XCI7XG5leHBvcnQgY29uc3QgQkFTRTY0X0VOQ09ESU5HID0gXCJiYXNlNjRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVVEY4X0VOQ09ESU5HLFxuICBVVEZfOF9FTkNPRElORyxcbiAgQkFTRTY0X0VOQ09ESU5HXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVVBfQ0hBUkFDVEVSID0gXCJcdTAwMWJbQVwiO1xuZXhwb3J0IGNvbnN0IEVUWF9DSEFSQUNURVIgPSBcIlxcdTAwMDNcIjtcbmV4cG9ydCBjb25zdCBCQVJfQ0hBUkFDVEVSID0gXCJ8XCI7XG5leHBvcnQgY29uc3QgREFTSF9DSEFSQUNURVIgPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBET1dOX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0JcIjtcbmV4cG9ydCBjb25zdCBMRUZUX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0RcIjtcbmV4cG9ydCBjb25zdCBSSUdIVF9DSEFSQUNURVIgPSBcIlx1MDAxYltDXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IENUUkxfQ19DSEFSQUNURVIgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkRfQ0hBUkFDVEVSID0gXCIqXCI7XG5leHBvcnQgY29uc3QgQkFDS1RJQ0tfREVMSU1JVEVSID0gXCJgXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQ0hBUkFDVEVSID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiA9IFwiJmd0O1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgQ0FSUklBR0VfUkVUVVJOX0NIQVJBQ1RFUiA9IFwiXFxyXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgPSBcIiFcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVUF9DSEFSQUNURVIsXG4gIEVUWF9DSEFSQUNURVIsXG4gIEJBUl9DSEFSQUNURVIsXG4gIERBU0hfQ0hBUkFDVEVSLFxuICBET1dOX0NIQVJBQ1RFUixcbiAgTEVGVF9DSEFSQUNURVIsXG4gIFJJR0hUX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgV0lMRENBUkRfQ0hBUkFDVEVSLFxuICBCQUNLVElDS19ERUxJTUlURVIsXG4gIE5FV19MSU5FX0NIQVJBQ1RFUixcbiAgQU1QRVJTQU5EX0NIQVJBQ1RFUixcbiAgQkFDS1NQQUNFX0NIQVJBQ1RFUixcbiAgTEVTU19USEFOX0NIQVJBQ1RFUixcbiAgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19DT0RFID0gMDtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX0NPREUgPSAyMDA7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19DT0RFID0gMzAyO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19DT0RFID0gMjAxO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19DT0RFID0gNDA4O1xuZXhwb3J0IGNvbnN0IFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSA9IDQyOTtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfQ09ERSA9IDUwMztcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19DT0RFID0gNTAwO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFpFUk9fMF9TVEFUVVNfQ09ERSxcbiAgT0tfMjAwX1NUQVRVU19DT0RFLFxuICBGT1VORF8zMDJfU1RBVFVTX0NPREUsXG4gIENSRUFURURfMjAxX1NUQVRVU19DT0RFLFxuICBTRUVfT1RIRVJfMzAzX1NUQVRVU19DT0RFLFxuICBGT1JCSURERU5fNDAzX1NUQVRVU19DT0RFLFxuICBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFLFxuICBOT19DT05URU5UXzIwNF9TVEFUVVNfQ09ERSxcbiAgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19DT0RFLFxuICBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUsXG4gIFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX0NPREUsXG4gIFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX0NPREUsXG4gIFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSxcbiAgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9PQ1RFVF9TVFJFQU1fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9KU09OX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFpFUk9fMF9TVEFUVVNfTUVTU0FHRSA9IFwiXCI7XG5leHBvcnQgY29uc3QgT0tfMjAwX1NUQVRVU19NRVNTQUdFID0gXCJPS1wiO1xuZXhwb3J0IGNvbnN0IEZPVU5EXzMwMl9TVEFUVVNfTUVTU0FHRSA9IFwiRm91bmRcIjtcbmV4cG9ydCBjb25zdCBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSA9IFwiQ3JlYXRlZFwiO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlZSBvdGhlclwiO1xuZXhwb3J0IGNvbnN0IEZPUkJJRERFTl80MDNfU1RBVFVTX01FU1NBR0UgPSBcIkZvcmJpZGRlblwiO1xuZXhwb3J0IGNvbnN0IE5PVF9GT1VORF80MDRfU1RBVFVTX01FU1NBR0UgPSBcIk5vdCBmb3VuZFwiO1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19NRVNTQUdFID0gXCJObyBjb250ZW50XCI7XG5leHBvcnQgY29uc3QgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19NRVNTQUdFID0gXCJCYWQgZ2F0ZXdheVwiO1xuZXhwb3J0IGNvbnN0IEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIHJlcXVlc3RcIjtcbmV4cG9ydCBjb25zdCBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19NRVNTQUdFID0gXCJVbmF1dGhvcml6ZWRcIjtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFID0gXCJSZXF1ZXN0IHRpbWVvdXRcIjtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UgPSBcIlRvbyBtYW55IHJlcXVlc3RzXCI7XG5leHBvcnQgY29uc3QgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlcnZpY2UgdW5hdmFpbGFibGVcIjtcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFID0gXCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX01FU1NBR0UsXG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFLFxuICBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19NRVNTQUdFLFxuICBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19NRVNTQUdFLFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzBdO31cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZChhcnJheSkgeyByZXR1cm4gYXJyYXlbMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoaXJkKGFycmF5KSB7IHJldHVybiBhcnJheVsyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZm91cnRoKGFycmF5KSB7IHJldHVybiBhcnJheVszXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlmdGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDVdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAzXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMl07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0TGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBoZWFkKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGFpbChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2soYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKGFycmF5Lmxlbmd0aCAtIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9udChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMCwgTWF0aC5tYXgoMSwgYXJyYXkubGVuZ3RoIC0gMSkpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoKGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zaGlmdChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdChhcnJheTEsIGVsZW1lbnRPckFycmF5Mikge1xuICBjb25zdCBhcnJheTIgPSAoZWxlbWVudE9yQXJyYXkyIGluc3RhbmNlb2YgQXJyYXkpID9cbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudE9yQXJyYXkyIDpcbiAgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50T3JBcnJheTJdO1xuICBcbiAgcHVzaChhcnJheTEsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhcihhcnJheSkge1xuICBjb25zdCBzdGFydCA9IDA7XG4gIFxuICByZXR1cm4gYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoYXJyYXkxLCBhcnJheTIpIHtcbiAgY29uc3Qgc3RhcnQgPSAwLFxuICAgICAgICBkZWxldGVDb3VudCA9IGFycmF5Mi5sZW5ndGg7ICAvLy9cbiAgXG4gIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCwgYXJyYXkyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaWNlKGFycmF5MSwgc3RhcnQsIGRlbGV0ZUNvdW50ID0gSW5maW5pdHksIGFycmF5MiA9IFtdKSB7XG4gIGNvbnN0IGFyZ3MgPSBbc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5hcnJheTJdLFxuICAgICAgICBkZWxldGVkSXRlbXNBcnJheSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYXJyYXkxLCBhcmdzKTtcblxuICByZXR1cm4gZGVsZXRlZEl0ZW1zQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlKGFycmF5LCBlbGVtZW50LCBjYWxsYmFjaykge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgc3RhcnQgPSBpbmRleDsgIC8vL1xuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgaWYgKGZvdW5kKSB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGZpbHRlcmVkRWxlbWVudHMgPSBbXTtcbiAgXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBlbGVtZW50cyA9IFtdO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lKGFycmF5LCBjYWxsYmFjaykge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG4gICAgICBcbiAgICAgIHBydW5lZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gcHJ1bmVkRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoKGFycmF5LCBlbGVtZW50LCBjYWxsYmFjaykge1xuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBhcnJheTIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGUoYXJyYXksIGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Mi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNGaW5kLFxuICBiYWNrd2FyZHNGaW5kLFxuICBmb3J3YXJkc1NvbWUsXG4gIGJhY2t3YXJkc1NvbWUsXG4gIGZvcndhcmRzRXZlcnksXG4gIGJhY2t3YXJkc0V2ZXJ5LFxuICBmb3J3YXJkc1JlZHVjZSxcbiAgYmFja3dhcmRzUmVkdWNlLFxuICBmb3J3YXJkc0ZvckVhY2gsXG4gIGJhY2t3YXJkc0ZvckVhY2hcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPID0gXCIwXCI7XG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENPTE9OX0NIQVJBQ1RFUiwgQU1QRVJTQU5EX0NIQVJBQ1RFUiB9IGZyb20gXCIuLi9jaGFyYWN0ZXJzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvdmVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZXhpc3RpbmdOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLCAgLy8vXG4gICAgICAgIGV4aXN0aW5nTmFtZSA9IGV4aXN0aW5nTmFtZXMuZmluZCgoZXhpc3RpbmdOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdMb3dlckNhc2VOYW1lID0gZXhpc3RpbmdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdMb3dlckNhc2VOYW1lID09PSBsb3dlckNhc2VOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGV4aXN0aW5nTmFtZSAhPT0gbnVsbCkge1xuICAgIGhlYWRlcnNbZXhpc3RpbmdOYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgPT09IG51bGwpIHtcbiAgICBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcnRGcm9tSG9zdChob3N0KSB7XG4gIGxldCBwb3J0O1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eaHR0cHM/OlxcL1xcLyhbXlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaW5kZXggPSBzZWNvbmRNYXRjaC5pbmRleE9mKENPTE9OX0NIQVJBQ1RFUik7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIGNvbnN0IHNlY3VyZSA9IHNlY3VyZUZyb21Ib3N0KGhvc3QpO1xuXG4gICAgcG9ydCA9IHNlY3VyZSA/IDQ0MyA6IDgwOyAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdGFydCA9IGluZGV4ICsgMSxcbiAgICAgICAgICBwb3J0U3RyaW5nID0gc2Vjb25kTWF0Y2guc3Vic3RyaW5nKHN0YXJ0KTtcblxuICAgIHBvcnQgPSBOdW1iZXIocG9ydFN0cmluZyk7XG4gIH1cblxuICByZXR1cm4gcG9ydDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3VyZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3Qgc2VjdXJlID0gL15odHRwczpcXC9cXC8vLnRlc3QoaG9zdCk7XG5cbiAgcmV0dXJuIHNlY3VyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lRnJvbUhvc3QoaG9zdCkge1xuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW146XFwvXSspLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBob3N0bmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gaG9zdG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSkge1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5KSxcbiAgICAgICAgbmFtZXNMZW5ndGggPSBuYW1lcy5sZW5ndGgsXG4gICAgICAgIGxhc3RJbmRleCA9IG5hbWVzTGVuZ3RoIC0gMSxcbiAgICAgICAgcXVlcnlTdHJpbmcgPSBuYW1lcy5yZWR1Y2UoKHF1ZXJ5U3RyaW5nLCBuYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlbbmFtZV0sXG4gICAgICAgICAgICAgICAgZW5jb2RlZE5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSksXG4gICAgICAgICAgICAgICAgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBhbXBlcnNhbmRPck5vdGhpbmcgPSAoaW5kZXggIT09IGxhc3RJbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1QRVJTQU5EX0NIQVJBQ1RFUiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcbiAgXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7ZW5jb2RlZE5hbWV9PSR7ZW5jb2RlZFZhbHVlfSR7YW1wZXJzYW5kT3JOb3RoaW5nfWA7XG4gIFxuICAgICAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gcXVlcnlTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpIHtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSksXG4gICAgICAgIHVybCA9IChxdWVyeVN0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgYCR7aG9zdH0ke3VyaX1gIDpcbiAgICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9PyR7cXVlcnlTdHJpbmd9YDtcblxuICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG92ZXJ3cml0ZSxcbiAgdW5kZXJ3cml0ZSxcbiAgcG9ydEZyb21Ib3N0LFxuICBzZWN1cmVGcm9tSG9zdCxcbiAgaG9zdG5hbWVGcm9tSG9zdCxcbiAgcXVlcnlTdHJpbmdGcm9tUXVlcnksXG4gIHVybEZyb21Ib3N0VVJJQW5kUXVlcnlcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEdFVF9NRVRIT0QsIFBPU1RfTUVUSE9EIH0gZnJvbSBcIi4uL21ldGhvZHNcIjtcbmltcG9ydCB7IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFIH0gZnJvbSBcIi4uL2NvbnRlbnRUeXBlc1wiO1xuaW1wb3J0IHsgQUNDRVBUX0hFQURFUiwgQ09OVEVOVF9UWVBFX0hFQURFUiB9IGZyb20gXCIuLi9oZWFkZXJzXCI7XG5pbXBvcnQgeyB1bmRlcndyaXRlLCB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9odHRwXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGhlYWRlcnM7IC8vL1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IEdFVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50ID0gbnVsbDtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3QoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGNvbnRlbnQ7XG4gICAgY29udGVudCA9IGhlYWRlcnM7XG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gUE9TVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50VHlwZSA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KTtcblxuICB1bmRlcndyaXRlQ29udGVudFR5cGVIZWFkZXIoaGVhZGVycywgY29udGVudFR5cGUpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgdXJsID0gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSxcbiAgICAgICAgYWNjZXB0ID0gaGVhZGVyc1tBQ0NFUFRfSEVBREVSXSB8fCBudWxsLFxuICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbQ09OVEVOVF9UWVBFX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgeG1sSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICBpZiAoY29udGVudFR5cGUgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgY29uc3QganNvbiA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG5cbiAgICBjb250ZW50ID0ganNvblN0cmluZzsgIC8vL1xuICB9XG5cbiAgeG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSwgc3RhdHVzLCByZXNwb25zZSB9ID0geG1sSHR0cFJlcXVlc3QsXG4gICAgICAgICAgc3RhdHVzQ29kZSA9IHN0YXR1cztcblxuICAgIGlmIChyZWFkeVN0YXRlID09IDQpIHtcbiAgICAgIGxldCBjb250ZW50ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChhY2NlcHQgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblN0cmluZyA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblxuICAgICAgICAgIGNvbnRlbnQgPSBqc29uOyAgLy8vXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soY29udGVudCwgc3RhdHVzQ29kZSk7XG4gICAgfVxuICB9O1xuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwpO1xuXG4gIGlmIChhY2NlcHQgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKEFDQ0VQVF9IRUFERVIsIGFjY2VwdCk7XG4gIH1cblxuICBpZiAoY29udGVudFR5cGUgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKENPTlRFTlRfVFlQRV9IRUFERVIsIGNvbnRlbnRUeXBlKTtcbiAgfVxuXG4gIChjb250ZW50ICE9PSBudWxsKSA/XG4gICAgeG1sSHR0cFJlcXVlc3Quc2VuZChjb250ZW50KSA6XG4gICAgICB4bWxIdHRwUmVxdWVzdC5zZW5kKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0LFxuICBwb3N0LFxuICByZXF1ZXN0XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KSB7XG4gIGNvbnN0IG5hbWUgPSBBQ0NFUFRfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gYWNjZXB0OyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUWXBlKSB7XG4gIGNvbnN0IG5hbWUgPSBDT05URU5UX1RZUEVfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gY29udGVudFRZcGU7IC8vL1xuXG4gIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbnN0IGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdoaWxzdChvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgdGVybWluYXRlID0gb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlKG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25zW2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBldmVudHVhbGx5KG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZGx5KG9wZXJhdGlvbiwgbGVuZ3RoLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSBsZW5ndGg7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudC0tO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gLTEpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHdoaWxzdCxcclxuICBmb3JFYWNoLFxyXG4gIHNlcXVlbmNlLFxyXG4gIGV2ZW50dWFsbHksXHJcbiAgcmVwZWF0ZWRseSxcclxuICBmb3J3YXJkc0ZvckVhY2gsXHJcbiAgYmFja3dhcmRzRm9yRWFjaFxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV2ZWxzIH0gZnJvbSBcIi4vbGV2ZWxzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1ldGhvZHMgfSBmcm9tIFwiLi9tZXRob2RzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhlYWRlcnMgfSBmcm9tIFwiLi9oZWFkZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtleUNvZGVzIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW5jb2RpbmdzIH0gZnJvbSBcIi4vZW5jb2RpbmdzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoYXJhY3RlcnMgfSBmcm9tIFwiLi9jaGFyYWN0ZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c0NvZGVzIH0gZnJvbSBcIi4vc3RhdHVzQ29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29udGVudFR5cGVzIH0gZnJvbSBcIi4vY29udGVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c01lc3NhZ2VzIH0gZnJvbSBcIi4vc3RhdHVzTWVzc2FnZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBhamF4VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FqYXhcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXRoVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhdGhcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaHR0cFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9odHRwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3luY2hyb25vdXNcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5jb25zdCB7IExFU1NfVEhBTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIsIEdSRUFURVJfVEhBTl9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcclxuICBjb25zdCBzYW5pdGlzZWRDb250ZW50ID0gY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvLCBBTVBFUlNBTkRfQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwvLCBMRVNTX1RIQU5fQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLz4vLCBHUkVBVEVSX1RIQU5fQ0hBUkFDVEVSKTtcclxuXHJcbiAgcmV0dXJuIHNhbml0aXNlZENvbnRlbnQ7XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZVR5cGUgPSBcInR5cGVcIjtcbmV4cG9ydCBjb25zdCBuYW1lVHlwZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IGNvbW1lbnRUeXBlID0gXCJjb21tZW50XCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lVHlwZSA9IFwiZW5kLW9mLWxpbmVcIjtcbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlVHlwZSA9IFwid2hpdGVzcGFjZVwiO1xuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxUeXBlID0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZUNvbW1lbnRUeXBlID0gYCR7ZW5kT2ZMaW5lVHlwZX0gJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25UeXBlID0gXCJyZWd1bGFyLWV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYGVuZC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgc3RhcnQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBtaWRkbGUtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHlwZVR5cGUsXG4gIG5hbWVUeXBlLFxuICBjb21tZW50VHlwZSxcbiAgZW5kT2ZMaW5lVHlwZSxcbiAgd2hpdGVzcGFjZVR5cGUsXG4gIHN0cmluZ0xpdGVyYWxUeXBlLFxuICBlbmRPZkxpbmVDb21tZW50VHlwZSxcbiAgc2luZ2xlTGluZUNvbW1lbnRUeXBlLFxuICByZWd1bGFyRXhwcmVzc2lvblR5cGUsXG4gIGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuL3V0aWxpdGllcy9jb250ZW50XCI7XG5pbXBvcnQgeyBjb21tZW50VHlwZSwgZW5kT2ZMaW5lVHlwZSwgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuaW5uZXJIVE1MID0gaW5uZXJIVE1MO1xuICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuICBcbiAgZ2V0SW5uZXJIVE1MKCkge1xuICAgIHJldHVybiB0aGlzLmlubmVySFRNTDtcbiAgfVxuXG4gIGdldENvbnRlbnRMZW5ndGgoKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG5cbiAgICByZXR1cm4gY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGlzU2lnbmlmaWNhbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnQ7XG4gIH1cbiAgXG4gIGlzQ29tbWVudFRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKGNvbW1lbnRUeXBlKSxcbiAgICAgICAgICBjb21tZW50VG9rZW4gPSB0eXBlSW5jbHVkZXNDb21tZW50VHlwZTsgLy8vXG5cbiAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICB9XG5cbiAgaXNFbmRPZkxpbmVUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlRW5kT2ZMaW5lVHlwZSA9ICh0aGlzLnR5cGUuaW5jbHVkZXMoZW5kT2ZMaW5lVHlwZSkpLFxuICAgICAgICAgIGVuZE9mTGluZVRva2VuID0gdHlwZUVuZE9mTGluZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICB9XG5cbiAgaXNXaGl0ZXNwYWNlVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZVdoaXRlc3BhY2VUeXBlID0gKHRoaXMudHlwZSA9PT0gd2hpdGVzcGFjZVR5cGUpLFxuICAgICAgICAgIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gd2hpdGVzcGFjZVRva2VuO1xuICB9XG5cbiAgaXNFcXVhbFRvKHRva2VuKSB7XG4gICAgY29uc3QgZXF1YWxUb1Rva2VuID0gKHRoaXMgPT09IHRva2VuKTtcblxuICAgIHJldHVybiBlcXVhbFRvVG9rZW47XG4gIH1cblxuICBtYXRjaCh0b2tlbikge1xuICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgY29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gKCh0aGlzLnR5cGUgPT09IHR5cGUpICYmICh0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQpICYmICh0aGlzLnNpZ25pZmljYW50ID09PSBzaWduaWZpY2FudCkpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlLCAgLy8vXG4gICAgICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPiR7dGhpcy5pbm5lckhUTUx9PC9zcGFuPmA7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBpZiAoc3RhcnRQb3NpdGlvbiAhPT0gZW5kUG9zaXRpb24pIHtcbiAgICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG5cbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7ICAvLy9cblxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpLFxuICAgICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuXG4gICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBDbGFzcyxcbiAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50OyAvLy9cblxuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IENsYXNzLFxuICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgaW5uZXJIVE1MID0gc2FuaXRpc2VkQ29udGVudCwgLy8vXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOyAgLy8vXG4gICAgICBzdGFydFBvc2l0aW9uID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSBjb250ZW50OyAvLy9cbiAgICAgIGNvbnRlbnQgPSBDbGFzczsgIC8vL1xuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgVSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcmVndWxhckV4cHJlc3Npb24pIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuICBcbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG4gIFxuICBnZXRSZWd1bGFyRXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIG1hdGNoKGNvbnRlbnQpIHtcbiAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKGNvbnRlbnQsIHRoaXMudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgYXNFbnRyeSgpIHtcbiAgICBjb25zdCBlbnRyeSA9IHt9LFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiA9IGAke3RoaXMucmVndWxhckV4cHJlc3Npb259YDtcblxuICAgIGVudHJ5W3RoaXMudHlwZV0gPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm47XG5cbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRva2VuKFRva2VuKSB7XG4gICAgY29uc3QgeyB0eXBlLCByZWd1bGFyRXhwcmVzc2lvbiB9ID0gVG9rZW4sXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21FbnRyeShlbnRyeSkge1xuICAgIGNvbnN0IGVudHJ5S2V5cyA9IE9iamVjdC5rZXlzKGVudHJ5KSxcbiAgICAgICAgICBmaXJzdEVudHJ5S2V5ID0gZmlyc3QoZW50cnlLZXlzKSxcbiAgICAgICAgICB0eXBlID0gZmlyc3RFbnRyeUtleSwgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gZW50cnlbdHlwZV0sXG4gICAgICAgICAgcnVsZSA9IFJ1bGUuZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKTtcbiAgICAgICAgXG4gICAgcmV0dXJuIHJ1bGU7IFxuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlQW5kUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICAgIGNvbnN0IHVuaWNvZGUgPSBpc1VuaWNvZGUocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSxcbiAgICAgICAgICBmbGFncyA9IHVuaWNvZGUgP1xuICAgICAgICAgICAgICAgICAgICBVIDpcbiAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgcmVnRXhwID0gbmV3IFJlZ0V4cChyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4sIGZsYWdzKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ0V4cCwgLy8vXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgY29uc3QgdW5pY29kZVJlZ3VsYXJFeHByZXNzaW9uID0gL3V7LywgLy8vXG4gICAgICAgIGluZGV4ID0gcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuLnNlYXJjaCh1bmljb2RlUmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICB1bmljb2RlID0gKGluZGV4ICE9PSAtMSk7XG5cbiAgcmV0dXJuIHVuaWNvZGU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgcGx1cyA9IFwiK1wiO1xyXG5leHBvcnQgY29uc3QgZXBzaWxvbiA9ICdcdTAzQjUnO1xyXG5leHBvcnQgY29uc3Qgd2lsZGNhcmQgPSBcIi5cIjtcclxuZXhwb3J0IGNvbnN0IGFzdGVyaXNrID0gXCIqXCI7XHJcbmV4cG9ydCBjb25zdCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbmV4cG9ydCBjb25zdCBzZXBhcmF0b3IgPSBcIjo6PVwiO1xyXG5leHBvcnQgY29uc3QgdGVybWluYXRvciA9IFwiO1wiO1xyXG5leHBvcnQgY29uc3QgdmVydGljYWxCYXIgPSBcInxcIjtcclxuZXhwb3J0IGNvbnN0IG9wZW5CcmFja2V0ID0gXCIoXCI7XHJcbmV4cG9ydCBjb25zdCBjbG9zZUJyYWNrZXQgPSBcIilcIjtcclxuZXhwb3J0IGNvbnN0IHF1ZXN0aW9uTWFyayA9IFwiP1wiO1xyXG5leHBvcnQgY29uc3QgZXhjbGFtYXRpb25NYXJrID0gXCIhXCI7XHJcbmV4cG9ydCBjb25zdCBOT19XSElURVNQQUNFID0gXCI8Tk9fV0hJVEVTUEFDRT5cIjtcclxuZXhwb3J0IGNvbnN0IEVORF9PRl9MSU5FID0gXCI8RU5EX09GX0xJTkU+XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgcGx1cyxcclxuICBlcHNpbG9uLFxyXG4gIHdpbGRjYXJkLFxyXG4gIGFzdGVyaXNrLFxyXG4gIGVsbGlwc2lzLFxyXG4gIHNlcGFyYXRvcixcclxuICB0ZXJtaW5hdG9yLFxyXG4gIHZlcnRpY2FsQmFyLFxyXG4gIG9wZW5CcmFja2V0LFxyXG4gIGNsb3NlQnJhY2tldCxcclxuICBxdWVzdGlvbk1hcmssXHJcbiAgZXhjbGFtYXRpb25NYXJrLFxyXG4gIE5PX1dISVRFU1BBQ0UsXHJcbiAgRU5EX09GX0xJTkVcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tRW50cmllcyhlbnRyaWVzKSB7XG4gIGNvbnN0IHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiB7XG4gICAgY29uc3QgcnVsZSA9IFJ1bGUuZnJvbUVudHJ5KGVudHJ5KTtcblxuICAgIHJldHVybiBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZXhlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgY29uc3QgSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxuICAgICAgICBOb3RJbkNvbW1lbnRDbGFzc2VzID0gTm90SW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXG4gICAgICAgIGxleGVyID0gbmV3IENsYXNzKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKTtcblxuICByZXR1cm4gbGV4ZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcnVsZXNGcm9tRW50cmllcyxcbiAgbGV4ZXJGcm9tUnVsZXNcbn07XG5cbmZ1bmN0aW9uIEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpIHtcbiAgY29uc3QgeyBFbmRPZkxpbmVDb21tZW50VG9rZW4sIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9ID0gQ2xhc3M7XG5cbiAgY29uc3QgSW5Db21tZW50Q2xhc3NlcyA9IFtcbiAgICBFbmRPZkxpbmVDb21tZW50VG9rZW4sXG4gICAgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXG4gICAgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW5cbiAgXTtcblxuICByZXR1cm4gSW5Db21tZW50Q2xhc3Nlcztcbn1cblxuZnVuY3Rpb24gTm90SW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcykge1xuICBjb25zdCB7IEVuZE9mTGluZVRva2VuLFxuICAgICAgICAgIFdoaXRlc3BhY2VUb2tlbixcbiAgICAgICAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxuICAgICAgICAgIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sXG4gICAgICAgICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcbiAgICAgICAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXG4gICAgICAgICAgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gPSBDbGFzcztcblxuICBjb25zdCBOb3RJbkNvbW1lbnRDbGFzc2VzID0gW1xuICAgIEVuZE9mTGluZVRva2VuLFxuICAgIFdoaXRlc3BhY2VUb2tlbixcbiAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxuICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXG4gICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcbiAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXG4gICAgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuXG4gIF07XG5cbiAgcmV0dXJuIE5vdEluQ29tbWVudENsYXNzZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzo6Oj18XFxcXHx8XFxcXCh8XFxcXCl8XFxcXD98XFxcXCF8XFxcXCp8XFxcXCt8XFxcXC5cXFxcLlxcXFwufFxcXFwufFx1MDNCNXw7fDxOT19XSElURVNQQUNFPnw8RU5EX09GX0xJTkU+KVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInR5cGVcIjogXCJeXFxcXFtbXlxcXFxdXStcXFxcXVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCJeW1xcXFx3fl0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCh0b2tlbiwgaW5Db21tZW50KSB7XG4gIGNvbnN0IHRva2VuQ29tbWVudFRva2VuID0gdG9rZW4uaXNDb21tZW50VG9rZW4oKTtcblxuICBpZiAodG9rZW5Db21tZW50VG9rZW4pIHtcbiAgICBjb25zdCBjb21tZW50VG9rZW4gPSB0b2tlbiwgLy8vXG4gICAgICAgICAgY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZyA9IGNvbW1lbnRUb2tlbi5pc0luQ29tbWVudFByZXNlcnZpbmcoKTtcblxuICAgIGluQ29tbWVudCA9IGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmc7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBpbkNvbW1lbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IHJ1bGVzRnJvbUVudHJpZXMsIGxleGVyRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9sZXhlclwiO1xyXG5pbXBvcnQgeyBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3Rva2VuXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25MZXhlciB7XHJcbiAgY29uc3RydWN0b3IocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpIHtcclxuICAgIHRoaXMucnVsZXMgPSBydWxlcztcclxuICAgIHRoaXMuSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXM7XHJcbiAgICB0aGlzLk5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuICBcclxuICBnZXRSdWxlcygpIHtcclxuICAgIHJldHVybiB0aGlzLnJ1bGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5Db21tZW50Q2xhc3NlcygpIHtcclxuICAgIHJldHVybiB0aGlzLkluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG5cclxuICBnZXROb3RJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIHRva2VuaXNlKGNvbnRlbnQsIGluQ29tbWVudCA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcclxuXHJcbiAgICB3aGlsZSAoY29udGVudCAhPT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIGxldCB0b2tlbiA9IG51bGw7XHJcblxyXG4gICAgICBjb25zdCBDbGFzc2VzID0gaW5Db21tZW50ID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLk5vdEluQ29tbWVudENsYXNzZXM7XHJcblxyXG4gICAgICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XHJcbiAgICAgICAgaWYgKENsYXNzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0b2tlbiA9IENsYXNzLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgIGlmICh0b2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHtcclxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBydWxlLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgY29udGVudCAnJHtjb250ZW50fScgY2Fubm90IGJlIHRva2VuaXNlZC5gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xyXG5cclxuICAgICAgaW5Db21tZW50ID0gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpO1xyXG5cclxuICAgICAgY29uc3QgdG9rZW5Db250ZW50TGVuZ3RoID0gdG9rZW4uZ2V0Q29udGVudExlbmd0aCgpLFxyXG4gICAgICAgICAgICBzdGFydCA9IHRva2VuQ29udGVudExlbmd0aDsgLy8vXHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcclxuICAgIGNvbnN0IHsgZW50cmllcyB9ID0gQ2xhc3MsXHJcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUVudHJpZXMoZW50cmllcyksXHJcbiAgICAgICAgICBsZXhlciA9IGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcclxuICAgIGNvbnN0IGxleGVyID0gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoQ2xhc3MsIGVudHJpZXMpIHtcclxuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tRW50cmllcyhlbnRyaWVzKSxcclxuICAgICAgICAgIGxleGVyID0gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlKSB7IHJldHVybiBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyB3aGl0ZXNwYWNlVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGl0ZXNwYWNlVG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoV2hpdGVzcGFjZVRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHdoaXRlc3BhY2VUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eW1xcdCBdKy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgcmVndWxhckV4cHJlc3Npb25UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyB0eXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvKD86XFxcXFteXFxzXXxbXlxcL1xcclxcbl0pKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICBzdGFydCA9IDEsXG4gICAgICAgICAgZW5kID0gY29udGVudExlbmd0aCAtIDEsXG4gICAgICAgICAgc3RyaW5nID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cIig/OlxcXFxbXlxcc118W15cIlxcXFxcXHJcXG5dKSpcIi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuaW1wb3J0IENvbW1vbkxleGVyIGZyb20gXCIuLi9jb21tb24vbGV4ZXJcIjtcclxuaW1wb3J0IFdoaXRlc3BhY2VUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xyXG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgdG9rZW5zRnJvbUJORihibmYpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBibmYsICAvLy9cclxuICAgICAgICAgIHRva2VucyA9IHN1cGVyLnRva2VuaXNlKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBSZWd1bGFyRXhwcmVzc2lvblRva2VuO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJORkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQk5GTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQk5GTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGlnaXRcIjogXCJeXFxcXGQrXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYnJhY2tldFwiOiBcIl4oPzpcXFxcKHxcXFxcKSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJvcGVyYXRvclwiOiBcIl4oPzpcXFxcK3xcXFxcLXxcXFxcKnxcXFxcLylcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eJyg/OlxcXFxbXlxcc118W14nXFxcXFxcclxcbl0pKicvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4uZnJvbUNvbnRlbnQoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzaW5nbGVMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHNpbmdsZUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eI1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXiMjIy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86W15cXHJcXG5dKz8oPz0jIyMpfFteXFxyXFxuXSspLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJhc2ljTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCYXNpY0xleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKEJhc2ljTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXC9bXlxcclxcbl0qLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcbl0rPyg/PVxcKlxcLyl8W15cXHJcXG5dKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIi4vc3BlY2lhbFN5bWJvbHNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBsZXhlclV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9sZXhlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORkxleGVyIH0gZnJvbSBcIi4vYm5mL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljTGV4ZXIgfSBmcm9tIFwiLi9iYXNpYy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tb25MZXhlciB9IGZyb20gXCIuL2NvbW1vbi9sZXhlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZVwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFdoaXRlc3BhY2VUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG5cclxuICB7IFwiY29sb3VyXCI6IFwiXiMoPzpbMC05YS1mQS1GXXs2fXxbMC05YS1mQS1GXXszfSlcIiB9LFxyXG5cclxuICB7IFwia2V5d29yZFwiOiBcIl4oPzohaW1wb3J0YW50fEBtZWRpYSlcIiB9LFxyXG5cclxuICB7IFwicGVyY2VudGFnZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspXFxcXCVcIiB9LFxyXG5cclxuICB7IFwiZnJlcXVlbmN5XCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpoenxraHopXCIgfSxcclxuXHJcbiAgeyBcImZyYWN0aW9uXCI6IFwiXlsxLTldWzAtOV0qP2ZyXCIgfSxcclxuXHJcbiAgeyBcImxlbmd0aFwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86cHh8Y218bW18aW58cHR8cGMpXCIgfSxcclxuXHJcbiAgeyBcImFuZ2xlXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpkZWd8cmFkfGdyYWQpXCIgfSxcclxuXHJcbiAgeyBcInRpbWVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnN8bXMpXCIgfSxcclxuXHJcbiAgeyBcInJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKXJlbVwiIH0sXHJcblxyXG4gIHsgXCJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKWVtXCIgfSxcclxuXHJcbiAgeyBcIm51bWJlclwiOiBcIl5bMC05XSt8WzAtOV0qXFxcXC5bMC05XStcIiB9LFxyXG5cclxuICB7IFwic3BlY2lhbFwiOiBcIl47fDo6fDp8XFxcXC58LHwvfFxcXFx8PXx+PXw9fD58XFxcXHt8XFxcXH18XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF1cIiB9LFxyXG5cclxuICB7IFwib3BlcmF0b3JcIjogXCJeXig/OmFuZHxub3R8b25seSkkXCIgfSxcclxuXHJcbiAgeyBcImlkZW50aWZpZXJcIjogXCJeW19hLXpBLVowLTktXStcIiB9LFxyXG5cclxuICB7IFwidW5hcnktb3BlcmF0b3JcIjogXCJeXFxcXCt8XFxcXC1cIiB9LFxyXG5cclxuICB7IFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIiB9XHJcblxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKENTU0xleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQ1NTTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQ1NTTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBhbWJpZ3VvdXNNb2RpZmllcj8gXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgIDo6PSAgcGFydCsgO1xuIFxuICAgICAgcGFydCAgICAgICAgICAgICAgICAgICAgIDo6PSAgbm9uVGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBub1doaXRlc3BhY2VQYXJ0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbm9uVGVybWluYWxQYXJ0ICAgICAgICAgIDo6PSAgY2hvaWNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzZXF1ZW5jZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcnVsZU5hbWUgbG9va0FoZWFkTW9kaWZpZXI/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgdGVybWluYWxQYXJ0ICAgICAgICAgICAgIDo6PSAgc2lnbmlmaWNhbnRUb2tlblR5cGVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByZWd1bGFyRXhwcmVzc2lvblxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxTeW1ib2xcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlbmRPZkxpbmVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB3aWxkY2FyZFxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGVwc2lsb25cbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIG5vV2hpdGVzcGFjZVBhcnQgICAgICAgICA6Oj0gIFwiPE5PX1dISVRFU1BBQ0U+XCIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICBjaG9pY2VPZlBhcnRzICAgICAgICAgICAgOjo9ICBcIihcIiBwYXJ0ICggXCJ8XCIgcGFydCApKyBcIilcIiA7XG5cbiAgICAgIHNlcXVlbmNlT2ZQYXJ0cyAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgcGFydCsgXCIpXCIgO1xuXG4gICAgICBydWxlTmFtZSAgICAgICAgICAgICAgICAgOjo9ICBbbmFtZV0gO1xuXG4gICAgICBzaWduaWZpY2FudFRva2VuVHlwZSAgICAgOjo9ICBbdHlwZV0gO1xuXG4gICAgICByZWd1bGFyRXhwcmVzc2lvbiAgICAgICAgOjo9ICBbcmVndWxhci1leHByZXNzaW9uXSA7XG5cbiAgICAgIHRlcm1pbmFsU3ltYm9sICAgICAgICAgICA6Oj0gIFtzdHJpbmctbGl0ZXJhbF0gO1xuXG4gICAgICBlbmRPZkxpbmUgICAgICAgICAgICAgICAgOjo9ICBcIjxFTkRfT0ZfTElORT5cIiA7XG5cbiAgICAgIHdpbGRjYXJkICAgICAgICAgICAgICAgICA6Oj0gIFwiLlwiIDtcblxuICAgICAgZXBzaWxvbiAgICAgICAgICAgICAgICAgIDo6PSAgXCJcdTAzQjVcIiA7XG5cbiAgICAgIHF1YW50aWZpZXIgICAgICAgICAgICAgICA6Oj0gIG9wdGlvbmFsUXVhbnRpZmllclxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgb25lT3JNb3JlUXVhbnRpZmllclxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHplcm9Pck1vcmVRdWFudGlmaWVyXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICBhbWJpZ3VvdXNNb2RpZmllciAgICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIiFcIiA7XG5cbiAgICAgIGxvb2tBaGVhZE1vZGlmaWVyICAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiLi4uXCIgO1xuXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXIgICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIj9cIiA7XG5cbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXIgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiK1wiIDtcblxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXIgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIqXCIgO1xuXG4gICAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChwYWRkaW5nTGVuZ3RoKSB7XG4gIGxldCBwYWRkaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBwYWRkaW5nTGVuZ3RoOyBwb3NpdGlvbisrKSB7XG4gICAgcGFkZGluZyArPSBTUEFDRV9DSEFSQUNURVI7XG4gIH1cblxuICByZXR1cm4gcGFkZGluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGggfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmNvbnN0IHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGV4Y2xhbWF0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuYW1iaWd1b3VzID0gYW1iaWd1b3VzO1xuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICB0aGlzLk5vblRlcm1pbmFsTm9kZSA9IE5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGlzQW1iaWd1b3VzKCkge1xuICAgIHJldHVybiB0aGlzLmFtYmlndW91cztcbiAgfVxuXG4gIGdldERlZmluaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb25zO1xuICB9XG5cbiAgZ2V0Tm9uVGVybWluYWxOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLk5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGFkZERlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgIHRoaXMuZGVmaW5pdGlvbnMucHVzaChkZWZpbml0aW9uKTtcbiAgfVxuXG4gIGFkZERlZmluaXRpb25zKGRlZmluaXRpb25zKSB7XG4gICAgcHVzaCh0aGlzLmRlZmluaXRpb25zLCBkZWZpbml0aW9ucyk7XG4gIH1cblxuICByZW1vdmVEZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZGVmaW5pdGlvbnMuaW5kZXhPZihkZWZpbml0aW9uKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7ICAvLy9cblxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVEZWZpbml0aW9ucyhkZWZpbml0aW9ucykge1xuICAgIGRlZmluaXRpb25zLmZvckVhY2goKGRlZmluaXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kZWZpbml0aW9ucy5pbmRleE9mKGRlZmluaXRpb24pO1xuXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVwbGFjZURlZmluaXRpb24ocmVwbGFjZURlZmluaXRpb24sIC4uLnJlcGxhY2VtZW50RGVmaW5pdGlvbnMpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZGVmaW5pdGlvbnMuaW5kZXhPZihyZXBsYWNlRGVmaW5pdGlvbiksXG4gICAgICAgICAgc3RhcnQgPSBpbmRleCwgLy8vXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5yZXBsYWNlbWVudERlZmluaXRpb25zKVxuICB9XG5cbiAgcmVtb3ZlQWxsRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3Qgc3RhcnQgPSAwLFxuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gSW5maW5pdHk7XG5cbiAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICB9XG5cbiAgcmVwbGFjZUFsbERlZmluaXRpb25zKC4uLnJlcGxhY2VtZW50RGVmaW5pdGlvbnMpIHtcbiAgICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgICAgbGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBsZW5ndGg7IC8vL1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5yZXBsYWNlbWVudERlZmluaXRpb25zKVxuICB9XG5cbiAgcGFyc2VEZWZpbml0aW9uKGRlZmluaXRpb24sIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKTtcblxuICAgIHBhcnNlZCA9IGRlZmluaXRpb24ucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBwYXJzZShzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkLFxuICAgICAgICBub2RlcztcblxuICAgIGxldCBydWxlTm9kZSA9IG51bGw7XG5cbiAgICB0aGlzLmRlZmluaXRpb25zLnNvbWUoKGRlZmluaXRpb24pID0+IHtcbiAgICAgIG5vZGVzID0gW107XG5cbiAgICAgIHBhcnNlZCA9IHRoaXMucGFyc2VEZWZpbml0aW9uKGRlZmluaXRpb24sIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChub2Rlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHBhcnNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9kZXMsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IHRoaXMuTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuXG4gICAgICBydWxlTm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVOb2RlO1xuICB9XG5cbiAgYXNTdHJpbmcobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBtdWx0aUxpbmUgPSB0cnVlKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgIG11bHRpTGluZSA9IG11bHRpTGluZSAmJiAoZGVmaW5pdGlvbnNMZW5ndGggPiAxKTsgIC8vL1xuXG4gICAgY29uc3QgbWF4aW11bVBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgobWF4aW11bVJ1bGVOYW1lTGVuZ3RoKSxcbiAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IHRoaXMuZGVmaW5pdGlvbnMucmVkdWNlKChkZWZpbml0aW9uc1N0cmluZywgZGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IGRlZmluaXRpb24uYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25zU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSBkZWZpbml0aW9uU3RyaW5nOyAvLy9cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gbXVsdGlMaW5lID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZGVmaW5pdGlvbnNTdHJpbmd9XG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgfCAke2RlZmluaXRpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZGVmaW5pdGlvbnNTdHJpbmd9IHwgJHtkZWZpbml0aW9uU3RyaW5nfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uc1N0cmluZztcbiAgICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5uYW1lLCAvLy9cbiAgICAgICAgICBydWxlTmFtZUxlbmd0aCA9IHJ1bGVOYW1lLmxlbmd0aCxcbiAgICAgICAgICBhbWJpZ3VvdXNTdHJpbmcgPSB0aGlzLmFtYmlndW91cyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsYW1hdGlvbk1hcmsgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgYW1iaWd1b3VzU3RyaW5nTGVuZ3RoID0gYW1iaWd1b3VzU3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nTGVuZ3RoID0gbWF4aW11bVJ1bGVOYW1lTGVuZ3RoIC0gcnVsZU5hbWVMZW5ndGggLSBhbWJpZ3VvdXNTdHJpbmdMZW5ndGgsXG4gICAgICAgICAgcGFkZGluZyA9IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChwYWRkaW5nTGVuZ3RoKTtcblxuICAgIGNvbnN0IHNlbWljb2xvblN0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcblxuJHttYXhpbXVtUGFkZGluZ30gICA7YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgO1wiLFxuICAgICAgICAgIHN0cmluZyA9IGBcblxuJHt0aGlzLm5hbWV9JHthbWJpZ3VvdXNTdHJpbmd9JHtwYWRkaW5nfSA6Oj0gJHtkZWZpbml0aW9uc1N0cmluZ30ke3NlbWljb2xvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlIHtcbiAgY29uc3RydWN0b3IocnVsZU1hcCwgdG9rZW5zLCBpbmRleCkge1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG5cdFx0dGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG5cdGdldEluZGV4KCkge1xuXHRcdHJldHVybiB0aGlzLmluZGV4O1xuXHR9XG5cblx0Z2V0U2F2ZWRJbmRleCgpIHtcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gdGhpcy5pbmRleDsgLy8vXG4gIFxuICAgIHJldHVybiBzYXZlZEluZGV4O1xuICB9XG5cbiAgZ2V0TmV4dFRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgdG9rZW5zTGVuZ3RoID0gdGhpcy50b2tlbnMubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuaW5kZXggPCB0b2tlbnNMZW5ndGgpIHtcbiAgICAgIG5leHRUb2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK107XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbjtcbiAgfVxuXG4gIGdldE5leHRTaWduaWZpY2FudFRva2VuKCkge1xuXHRcdGxldCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgXHRjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgXHR3aGlsZSAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICBcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4KytdLFxuXHRcdFx0XHRcdFx0dG9rZW5TaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKTtcblxuICBcdFx0aWYgKHRva2VuU2lnbmlmaWNhbnQpIHtcbiAgXHRcdCAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRva2VuOyAvLy9cblxuXHRcdFx0XHRuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XHQvLy9cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cbiAgXHR9XG5cblx0XHRyZXR1cm4gbmV4dFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBpc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpIHtcbiAgICBsZXQgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gZmFsc2U7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cbiAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IG5leHRUb2tlbi5pc1doaXRlc3BhY2VUb2tlbigpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW47XG4gIH1cblxuXHRiYWNrdHJhY2soc2F2ZWRJbmRleCkge1xuXHRcdHRoaXMuaW5kZXggPSBzYXZlZEluZGV4OyAgLy8vXG5cdH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHJ1bGVNYXApIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG5cdFx0XHRcdFx0c3RhdGUgPSBuZXcgU3RhdGUocnVsZU1hcCwgdG9rZW5zLCBpbmRleCk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgbGFzdCwgcHVzaCwgZmlsdGVyLCBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gZXZlbihhcnJheSkgeyByZXR1cm4gYXJyYXkuZmlsdGVyKChlbnRyeSwgaW5kZXgpID0+IGlzRXZlbihpbmRleCkpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxCdXRGaXJzdEFuZExhc3QoYXJyYXkpIHtcbiAgYXJyYXkgPSBhcnJheS5zbGljZSgpOyAgLy8vXG5cbiAgYXJyYXkuc2hpZnQoKTtcblxuICBhcnJheS5wb3AoKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGlzRXZlbihpbmRleCkge1xuICBjb25zdCBldmVuID0gKE1hdGguZmxvb3IoaW5kZXgvMikgPT09IGluZGV4LzIpO1xuXG4gIHJldHVybiBldmVuO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBsYXN0IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IE5FV19MSU5FX0NIQVJBQ1RFUiwgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJzZVRyZWUge1xuICBjb25zdHJ1Y3RvcihsaW5lcykge1xuICAgIHRoaXMubGluZXMgPSBsaW5lcztcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IGxpbmVzID0gdGhpcy5saW5lcy5zbGljZSgpLCAgLy8vXG4gICAgICAgICAgcGFyc2VUcmVlID0gbmV3IFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgbGV0IHdpZHRoO1xuXG4gICAgbGV0IGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBpZiAobGluZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHdpZHRoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGFzdExpbmUgPSBsYXN0KHRoaXMubGluZXMpLFxuICAgICAgICAgICAgbGFzdExpbmVMZW5ndGggPSBsYXN0TGluZS5sZW5ndGg7XG5cbiAgICAgIHdpZHRoID0gbGFzdExpbmVMZW5ndGg7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldERlcHRoKCkge1xuICAgIGNvbnN0IGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGgsXG4gICAgICAgICAgZGVwdGggPSBsaW5lc0xlbmd0aDsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcHRoO1xuICB9XG5cbiAgZm9yRWFjaExpbmUoY2FsbGJhY2spIHtcbiAgICB0aGlzLmxpbmVzLmZvckVhY2goY2FsbGJhY2spO1xuICB9XG5cbiAgYXBwZW5kVG9Ub3AocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzLnVuc2hpZnQobGluZSk7XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb0xlZnQocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSBsaW5lICsgdGhpcy5saW5lc1tpbmRleF07XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb1JpZ2h0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gdGhpcy5saW5lc1tpbmRleF0gKyBsaW5lO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9Cb3R0b20ocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzLnB1c2gobGluZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRUb3BNYXJnaW4odG9wTWFyZ2luRGVwdGgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB0b3BNYXJnaW5XaWR0aCA9IHdpZHRoLCAgLy8vXG4gICAgICAgICAgdG9wTWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKHRvcE1hcmdpbldpZHRoKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0b3BNYXJnaW5EZXB0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KHRvcE1hcmdpblN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCBsZWZ0TWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKGxlZnRNYXJnaW5XaWR0aCksXG4gICAgICAgICAgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lc0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSBsZWZ0TWFyZ2luU3RyaW5nICsgdGhpcy5saW5lc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCkge1xuICAgIGNvbnN0IHJpZ2h0TWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKHJpZ2h0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gdGhpcy5saW5lc1tpbmRleF0gKyByaWdodE1hcmdpblN0cmluZztcbiAgICB9XG4gIH1cblxuICBhZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICBib3R0b21NYXJnaW5XaWR0aCA9IHdpZHRoLCAgLy8vXG4gICAgICAgICAgYm90dG9tTWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKGJvdHRvbU1hcmdpbldpZHRoKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBib3R0b21NYXJnaW5EZXB0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGJvdHRvbU1hcmdpblN0cmluZyk7XG4gICAgfVxuICB9XG4gIFxuICBwb3BMaW5lKCkgeyByZXR1cm4gdGhpcy5saW5lcy5wb3AoKTsgfVxuICBcbiAgc2hpZnRMaW5lKCkgeyByZXR1cm4gdGhpcy5saW5lcy5zaGlmdCgpOyB9XG4gIFxuICBwdXNoTGluZShsaW5lKSB7IHRoaXMubGluZXMucHVzaChsaW5lKTsgfVxuICBcbiAgdW5zaGlmdExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnVuc2hpZnQobGluZSk7IH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmxpbmVzLnJlZHVjZSgoc3RyaW5nLCBsaW5lKSA9PiB7XG4gICAgICBzdHJpbmcgKz0gbGluZSArIE5FV19MSU5FX0NIQVJBQ1RFUjtcblxuICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobWFyZ2luV2lkdGgsIHNwYWNlQ2hhcmFjdGVyKSB7XG4gIHNwYWNlQ2hhcmFjdGVyID0gc3BhY2VDaGFyYWN0ZXIgfHwgU1BBQ0VfQ0hBUkFDVEVSO1xuXG4gIGxldCBtYXJnaW5TdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcmdpbldpZHRoOyBpbmRleCsrKSB7XG4gICAgbWFyZ2luU3RyaW5nICs9IHNwYWNlQ2hhcmFjdGVyO1xuICB9XG5cbiAgcmV0dXJuIG1hcmdpblN0cmluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBCQVJfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgc3VwZXIobGluZXMpO1xuICAgIFxuICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gIH1cbiAgXG4gIGdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgc3VwZXIuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxlZnRNYXJnaW5XaWR0aDsgLy8vXG4gIH1cblxuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gQkFSX0NIQVJBQ1RFUixcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gMCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pLFxuICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IE1hdGguZmxvb3Iod2lkdGgvMiksXG4gICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoIC0gMTtcblxuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBkZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIGNvbnN0IGxpbmVzID0gbGluZXNGcm9tRGVwdGgoZGVwdGgpLFxuICAgICAgICAgIGFyZ3MgPSBbIG51bGwsIGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uIF0sXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7ICAvLy9cblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHN0cmluZzsgIC8vL1xuICAgICAgc3RyaW5nID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBQYXJzZVRyZWU7ICAvLy9cbiAgICB9XG4gICAgXG4gICAgY29uc3QgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgYXJncyA9IFsgbnVsbCwgbGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gXSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ2xhc3MsIGFyZ3MpKTsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxpbmVzRnJvbURlcHRoKGRlcHRoKSB7XG4gIGNvbnN0IGxpbmVzID0gW107XG5cbiAgbGV0IGluZGV4ID0gMDtcblxuICB3aGlsZSAoaW5kZXggPCBkZXB0aCkge1xuICAgIGxpbmVzW2luZGV4KytdID0gRU1QVFlfU1RSSU5HO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RTaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICB0b2tlbkluZGV4ZXMgPSAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fS0ke2xhc3RTaWduaWZpY2FudFRva2VuSW5kZXh9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fWAsXG4gICAgICAgICAgc3RyaW5nID0gYWJyaWRnZWQgP1xuICAgICAgICAgICAgICAgICAgICAgYCR7cnVsZU5hbWV9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgIGAke3J1bGVOYW1lfSgke3Rva2VuSW5kZXhlc30pYCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgREFTSF9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aCh3aWR0aCwgREFTSF9DSEFSQUNURVIpLFxuICAgICAgICAgIGxpbmUgPSBzdHJpbmcsIC8vL1xuICAgICAgICAgIGxpbmVzID0gW2xpbmVdLFxuICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKGNoYXJhY3RlcnNXaWR0aCwgY2hhcmFjdGVyKSB7XG4gIGxldCBzdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJhY3RlcnNXaWR0aDsgaW5kZXgrKykge1xuICAgIHN0cmluZyArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcbmltcG9ydCBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL2hvcml6b250YWxCcmFuY2hcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoaWxkTm9kZXNQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tQ2hpbGROb2Rlc1Rva2Vuc0FuZEFicmlkZ2VkKGNoaWxkTm9kZXMsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBsZXQgY2hpbGROb2Rlc1BhcnNlVHJlZTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgoY2hpbGROb2RlUGFyc2VUcmVlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGUuYXNQYXJzZVRyZWUodG9rZW5zLCBhYnJpZGdlZCk7XG5cbiAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMucHVzaChjaGlsZE5vZGVQYXJzZVRyZWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2hpbGROb2RlUGFyc2VUcmVlcztcbiAgICAgICAgICB9LCBbXSksXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlID0gZmlyc3QoY2hpbGROb2RlUGFyc2VUcmVlcyk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZTsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdW5kZWZpbmVkLFxuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggPSAwLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCA9IDA7XG5cbiAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXREZXB0aCgpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLFxuICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICAgIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA9PT0gY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLFxuICAgICAgICAgICAgICAgIGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gY2hpbGROb2RlUGFyc2VUcmVlV2lkdGg7XG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gMTtcblxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoICs9IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoO1xuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSBNYXRoLm1heChjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgsIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB3aWR0aCA9IGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uIC0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICsgMSxcbiAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh3aWR0aCksXG4gICAgICAgICAgICBsZWZ0TWFyZ2luV2lkdGggPSBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24sXG4gICAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoIC0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGg7XG5cbiAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuXG4gICAgICBjb25zdCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbURlcHRoQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDaGlsZE5vZGVzUGFyc2VUcmVlLCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKGluZGV4IDwgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zdCByaWdodE1hcmdpbldpZHRoID0gMTtcblxuICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCkge1xuICAgICAgICAgIGNvbnN0IGJvdHRvbU1hcmdpbkRlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoIC0gY2hpbGROb2RlUGFyc2VUcmVlRGVwdGg7XG5cbiAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUuYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9Ub3AoaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSk7XG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGNoaWxkTm9kZXNQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJzZVRyZWUgZnJvbSBcIi4vcnVsZU5hbWVcIjtcbmltcG9ydCBDaGlsZE5vZGVzUGFyc2VUcmVlIGZyb20gXCIuL2NoaWxkTm9kZXNcIjtcbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBSdWxlTmFtZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSxcbiAgICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gQ2hpbGROb2Rlc1BhcnNlVHJlZS5mcm9tQ2hpbGROb2Rlc1Rva2Vuc0FuZEFicmlkZ2VkKGNoaWxkTm9kZXMsIHRva2VucywgYWJyaWRnZWQpO1xuICAgIFxuICAgIGxldCBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG4gICAgXG4gICAgY29uc3QgY2hpbGROb2Rlc1BhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBjaGlsZE5vZGVzUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICBcbiAgICBsZXQgbGVmdE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA8IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IC12ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9ICt2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVOYW1lUGFyc2VUcmVlV2lkdGggPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB3aWR0aHNEaWZmZXJlbmNlID0gcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCAtIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aDtcbiAgICBcbiAgICBsZXQgcmlnaHRNYXJnaW5XaWR0aCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICh3aWR0aHNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IC13aWR0aHNEaWZmZXJlbmNlO1xuICAgICAgXG4gICAgICBydWxlTmFtZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPiAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gK3dpZHRoc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZURlcHRoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQocnVsZU5hbWVQYXJzZVRyZWUpO1xuICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb0JvdHRvbShjaGlsZE5vZGVzUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlXCI7XG5cbmltcG9ydCB7IGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBnZXRDaGlsZE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBmb3J3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBjaGlsZE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGJhY2t3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBpZiAobGFzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cbiAgXG4gIHNldFJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuICBcbiAgYXNQYXJzZVRyZWUodG9rZW5zLCBhYnJpZGdlZCA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBjbG9uZShDbGFzcykge1xuICAgIGlmIChDbGFzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBDbGFzcyA9IE5vblRlcm1pbmFsTm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMucnVsZU5hbWUsXG4gICAgICAgICAgY2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2Rlcy5tYXAoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNsb25lKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE5vZGVzID0gcnVsZU5hbWU7ICAvLy9cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG5hbWUgPSB0ZXJtaW5hbE5vZGVDb250ZW50OyAvLy9cbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOYW1lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpO1xuXG4gIGlmIChwYXJ0UnVsZU5hbWVQYXJ0KSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IHJ1bGVOYW1lUGFydC5pc0xvb2tBaGVhZCgpO1xuXG4gICAgaWYgKGxvb2tBaGVhZCkge1xuICAgICAgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZDtcbn1cblxuZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0VGVybWluYWxQYXJ0ID0gcGFydC5pc1Rlcm1pbmFsUGFydCgpLFxuICAgICAgICBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gIXBhcnRUZXJtaW5hbFBhcnQ7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydC5pc1J1bGVOYW1lUGFydCgpO1xuXG4gICAgcGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgfSBmcm9tIFwiLi9wYXJ0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcnRzKHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICBwYXJzZWQgPSAoY2FsbGJhY2sgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpIDpcbiAgICAgICAgICAgICAgICAgIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2luZGV4XTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgY29uc3QgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgaW5kZXgrKztcblxuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBpc1BhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKHBhcnQpO1xuXG4gICAgaWYgKHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXTtcblxuICAgICAgaW5kZXgrKztcblxuICAgICAgcGFyc2VkID0gcnVsZU5hbWVQYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvbG9va0FoZWFkXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzKSB7XG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHM7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IGluZGV4ID0gMDtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydHModGhpcy5wYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7IC8vL1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHN0cmluZyA9IHBhcnRzU3RyaW5nOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnQge1xuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1Rlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFBhcnQgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVRlcm1pbmFsTm9kZVRva2Vuc0FuZEFicmlkZ2VkKHRlcm1pbmFsTm9kZSwgdG9rZW5zLCBhYnJpZGdlZCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKSxcbiAgICAgICAgICB0b2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2Yoc2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgICAgc3RyaW5nID0gYWJyaWRnZWQgP1xuICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH1bJHt0eXBlfV1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH1bJHt0eXBlfV0oJHt0b2tlbkluZGV4fSlgLFxuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihUZXJtaW5hbE5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuOyAgLy8vXG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgY29uc3QgbGFzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGlzRXBzaWxvbk5vZGUoKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7IHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpOyB9XG5cbiAgZ2V0Q29udGVudCgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7IH1cblxuICBzZXRTaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW4gPSBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zLCBhYnJpZGdlZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQodGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBtYXRjaChub2RlKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdGVybWluYWxOb2RlRXBzaWxvbk5vZGUgPSB0ZXJtaW5hbE5vZGUuaXNFcHNpbG9uTm9kZSgpLFxuICAgICAgICAgICAgdGVybWluYWxOb2RlTm9XaGl0ZXNwYWNlTm9kZSA9IHRlcm1pbmFsTm9kZS5pc05vV2hpdGVzcGFjZU5vZGUoKTtcblxuICAgICAgaWYgKCF0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSAmJiAhdGVybWluYWxOb2RlTm9XaGl0ZXNwYWNlTm9kZSkge1xuICAgICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgICBtYXRjaGVzID0gdGhpcy5zaWduaWZpY2FudFRva2VuLm1hdGNoKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgY2xvbmUoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgeyBjb25zdHJ1Y3RvciB9ID0gdGhpcztcblxuICAgICAgQ2xhc3MgPSBjb25zdHJ1Y3RvcjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldENvbnRlbnRMZW5ndGgoKSxcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gMCxcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IGNvbnRlbnRMZW5ndGgsICAvLy9cbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuLmNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBDbGFzcy5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuKTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7XG5cbiAgICAgIGlmIChzaWduaWZpY2FudFRva2VuVHlwZSA9PT0gdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBgWyR7dGhpcy5zaWduaWZpY2FudFRva2VuVHlwZX1dYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KHRoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGUpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmNvbnN0IHsgbmFtZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGUgPSBuYW1lVHlwZSwgIC8vL1xuICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IG5hbWVSdWxlTmFtZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IHBhcnRSdWxlTmFtZSA9IFwicGFydFwiO1xuZXhwb3J0IGNvbnN0IHJ1bGVSdWxlTmFtZSA9IFwicnVsZVwiO1xuZXhwb3J0IGNvbnN0IGVycm9yUnVsZU5hbWUgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgZXBzaWxvblJ1bGVOYW1lID0gXCJlcHNpbG9uXCI7XG5leHBvcnQgY29uc3QgcnVsZU5hbWVSdWxlTmFtZSA9IFwicnVsZU5hbWVcIjtcbmV4cG9ydCBjb25zdCBkb2N1bWVudFJ1bGVOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IGNvbnN0IHdpbGRjYXJkUnVsZU5hbWUgPSBcIndpbGRjYXJkXCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lUnVsZU5hbWUgPSBcImVuZE9mTGluZVwiO1xuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25SdWxlTmFtZSA9IFwiZGVmaW5pdGlvblwiO1xuZXhwb3J0IGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFwicXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25zUnVsZU5hbWUgPSBcImRlZmluaXRpb25zXCI7XG5leHBvcnQgY29uc3QgdGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcInRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IGNob2ljZU9mUGFydHNSdWxlTmFtZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgPSBcInRlcm1pbmFsU3ltYm9sXCI7XG5leHBvcnQgY29uc3QgYm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcIm5vblRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgPSBcIm5vV2hpdGVzcGFjZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gXCJsb29rQWhlYWRNb2RpZmllclwiO1xuZXhwb3J0IGNvbnN0IGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUgPSBcIkFtYmlndW91c01vZGlmaWVyXCI7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSA9IFwicmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IFwib3B0aW9uYWxRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3Qgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvbmVPck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwiemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lID0gXCJzaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL25hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IG5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gbmFtZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTsgIFxuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUnVsZU5hbWVQYXJ0VHlwZSA9IFwicnVsZU5hbWVQYXJ0XCI7XG5leHBvcnQgY29uc3QgT3B0aW9uYWxQYXJ0UGFydFR5cGUgPSBcIm9wdGlvbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IENob2ljZU9mUGFydHNQYXJ0VHlwZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgPSBcIm9uZU9yTW9yZVBhcnRzXCI7XG5leHBvcnQgY29uc3QgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgPSBcInplcm9Pck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBSdWxlTmFtZVBhcnRUeXBlLFxuICBPcHRpb25hbFBhcnRQYXJ0VHlwZSxcbiAgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlLFxuICBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlLFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBPcHRpb25hbFBhcnRQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFBhcnRQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPcHRpb25hbFBhcnRQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLFxuICAgICAgICAgIHN0cmluZyA9IGAke3BhcnRTdHJpbmd9JHtxdWVzdGlvbk1hcmt9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5wYXJ0LmNsb25lKCksXG4gICAgICAgICAgb3B0aW9uYWxQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KHBhcnQpO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGFydFBhcnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBwYXJzZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVBhcnRzUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gT25lT3JNb3JlUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke3BsdXN9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydC5jbG9uZSgpLFxuICAgICAgICAgIG9uZU9yTW9yZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICByZXR1cm4gb25lT3JNb3JlUGFydHNQYXJ0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsICgpID0+IHtcbiAgICAgIGxldCBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7YXN0ZXJpc2t9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydC5jbG9uZSgpLFxuICAgICAgICAgIHplcm9Pck1vcmVQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChwYXJ0KTtcblxuICAgIHJldHVybiB6ZXJvT3JNb3JlUGFydHNQYXJ0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLCBxdWFudGlmaWVyUnVsZU5hbWUsIHJ1bGVOYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVDaG9pY2VOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVOb0Nob2ljZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgbm9kZU5vQ2hvaWNlTm9kZSA9ICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBcInxcIik7XG4gIH1cblxuICByZXR1cm4gbm9kZU5vQ2hvaWNlTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVJ1bGVOYW1lTm9kZShub2RlKSB7XG4gIGxldCBub2RlUnVsZU5hbWVOb2RlID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIG5vZGVSdWxlTmFtZU5vZGUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lUnVsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVSdWxlTmFtZU5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVRdWFudGlmaWVyTm9kZShub2RlKSB7XG4gIGxldCBub2RlUXVhbnRpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVF1YW50aWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gcXVhbnRpZmllclJ1bGVOYW1lKTtcblxuICAgIG5vZGVRdWFudGlmaWVyTm9kZSA9IHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZUxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGU7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGU7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gcXVhbnRpZmllck5vZGU7IC8vL1xuXG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlOyAgLy8vXG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2Rlcykge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcyk7XG5cbiAgICBpZiAobGFzdE5vZGVRdWFudGlmaWVyTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgICAgcXVhbnRpZmllck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZShxdWFudGlmaWVyTm9kZSksXG4gICAgICAgICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKTtcblxuICAgICAgcGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydDsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnNoaWZ0KCk7XG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cblxuZnVuY3Rpb24gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKSB7XG4gIGNvbnN0IGxhc3ROb2RlID0gbGFzdChub2RlcyksXG4gICAgICAgIGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc05vZGVRdWFudGlmaWVyTm9kZShsYXN0Tm9kZSk7XG5cbiAgcmV0dXJuIGxhc3ROb2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpIHtcbiAgbGV0IGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcblxuICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgY2FzZSBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0OyAgLy8vXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJ1bGVOYW1lUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgZWxsaXBzaXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVBhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihydWxlTmFtZSwgbG9va0FoZWFkID0gZmFsc2UpIHtcbiAgICBjb25zdCB0eXBlID0gUnVsZU5hbWVQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcblxuICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICB9XG4gIFxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGlzTG9va0FoZWFkKCkge1xuICAgIHJldHVybiB0aGlzLmxvb2tBaGVhZDtcbiAgfVxuXG4gIGlzUnVsZU5hbWVQYXJ0KCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgc2V0TG9va0FoZWFkKGxvb2tBaGVhZCkge1xuICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICB9XG5cbiAgZmluZFJ1bGUoc3RhdGUpIHtcbiAgICBjb25zdCBydWxlTWFwID0gc3RhdGUuZ2V0UnVsZU1hcCgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3RoaXMucnVsZU5hbWVdIHx8IG51bGw7ICAvLy9cblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBydWxlID0gdGhpcy5maW5kUnVsZShzdGF0ZSk7XG5cbiAgICBpZiAocnVsZSA9PT0gbnVsbCkge1xuICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBwYXJzZWQgPSAocnVsZU5vZGUgIT09IG51bGwpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIG5vZGVzLnB1c2gocnVsZU5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBsb29rQWhlYWRTdHJpbmcgPSB0aGlzLmxvb2tBaGVhZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBzdHJpbmcgPSBgJHt0aGlzLnJ1bGVOYW1lfSR7bG9va0FoZWFkU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLnJ1bGVOYW1lLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IHRoaXMubG9va0FoZWFkLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCB0ZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSwgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gcGFydFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlKFJ1bGUpIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gdGhpcy5pc0FtYmlndW91cygpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsTm9kZSxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGlzQW1iaWd1b3VzKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBzZWNvbmRDaGlsZE5vZGUgPSBzZWNvbmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgc2Vjb25kQ2hpbGROb2RlVGVybWluYWxOb2RlID0gc2Vjb25kQ2hpbGROb2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gIXNlY29uZENoaWxkTm9kZVRlcm1pbmFsTm9kZTtcblxuICAgIHJldHVybiBhbWJpZ3VvdXM7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5hbWVCTkZOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZUJORk5vZGUuZ2V0TmFtZSgpO1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIFxuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgdGhpcmRDaGlsZE5vZGUgPSB0aGlyZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBmb3VydGhDaGlsZE5vZGUgPSBmb3VydGgoY2hpbGROb2RlcyksXG4gICAgICAgICAgZGVmaW5pdGlvbnNCTkZOb2RlID0gKGNoaWxkTm9kZXNMZW5ndGggPT09IDQpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXJkQ2hpbGROb2RlIDogIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VydGhDaGlsZE5vZGUsIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnNCTkZOb2RlLmdlbmVyYXRlRGVmaW5pdGlvbnMoKTtcbiAgICBcbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7XG5cbiAgICAgIGlmIChjb250ZW50ID09PSB0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIFxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLFxuICAgICAgICAgIHN0cmluZyA9IGBcIiR7Y29udGVudH1cImA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh0aGlzLmNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgbmFtZVJ1bGVOYW1lLCBkZWZpbml0aW9uc1J1bGVOYW1lLCBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHNlcGFyYXRvciwgdGVybWluYXRvciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHNlcGFyYXRvcixcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gdGVybWluYXRvcixcbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbEFtYmlndW91c1J1bGVOYW1lUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkZWZpbml0aW9uc1J1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5hbWVSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbEFtYmlndW91c1J1bGVOYW1lUGFydFBhcnQsXG4gICAgICAgICAgICBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZVwiO1xuaW1wb3J0IFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVcIjtcblxuaW1wb3J0IHsgcnVsZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBydWxlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFcnJvckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gd2lsZGNhcmQ7ICAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIG5ldyBXaWxkY2FyZFBhcnQoKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVycm9yQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZXJyb3JcIjtcbmltcG9ydCBFcnJvckRlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZXJyb3JcIjtcblxuaW1wb3J0IHsgZXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVycm9yRGVmaW5pdGlvbiA9IG5ldyBFcnJvckRlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gZXJyb3JSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlcnJvckRlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBFcnJvckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuY2xhc3MgRXBzaWxvbk5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBlcHNpbG9uLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRXBzaWxvbk5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlUGFyc2VUcmVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRXBzaWxvbk5vZGVQYXJzZVRyZWU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2Vwc2lsb25Ob2RlXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgaXNFcHNpbG9uTm9kZSgpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGU7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIGNvbnN0IHR5cGUgPSBudWxsOyAgLy8vXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGVwc2lsb247ICAvLy9cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSBFcHNpbG9uTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVwc2lsb25Ob2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZUVwc2lsb25Ob2RlID0gdGVybWluYWxOb2RlLmlzRXBzaWxvbk5vZGUoKTtcblxuICAgICAgaWYgKHRlcm1pbmFsTm9kZUVwc2lsb25Ob2RlKSB7XG4gICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBFcHNpbG9uTm9kZS5mcm9tTm90aGluZygpO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIGVwc2lsb25Ob2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKEVwc2lsb25Ob2RlLCBzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRXBzaWxvbkJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvZXBzaWxvblwiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBlcHNpbG9uQk5GTm9kZSA9IEVwc2lsb25CTkZOb2RlLmZyb21Ob3RoaW5nKCk7XG5cbiAgICBwYXJzZWQgPSAoZXBzaWxvbkJORk5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChlcHNpbG9uQk5GTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBlcHNpbG9uOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIG5ldyBFcHNpbG9uUGFydCgpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVwc2lsb25QYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvbkJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZXBzaWxvblBhcnQgPSBuZXcgRXBzaWxvblBhcnQoKTtcblxuICAgIHJldHVybiBlcHNpbG9uUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFcHNpbG9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVwc2lsb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9lcHNpbG9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IGVwc2lsb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZXBzaWxvblRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGVwc2lsb24sIC8vL1xuICAgICAgICAgIGVwc2lsb25UZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKGVwc2lsb25UZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBlcHNpbG9uUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVwc2lsb25CTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbVwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZXMoUnVsZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTm9kZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgocnVsZU5vZGVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IGNoaWxkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZVJ1bGVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gcnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5vZGUgPSBydWxlTmFtZVJ1bGVSdWxlTmFtZTsgIC8vL1xuXG4gICAgICAgICAgICAgIGlmIChub25UZXJtaW5hbE5vZGVSdWxlTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgICAgICAgICAgICAgIHJ1bGVOb2Rlcy5wdXNoKHJ1bGVOb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcnVsZU5vZGVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVOb2Rlcy5tYXAoKHJ1bGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZU5vZGUuZ2VuZXJhdGVSdWxlKFJ1bGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRG9jdW1lbnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IENob2ljZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcbmltcG9ydCB7IGV2ZW4sIGFsbEJ1dEZpcnN0QW5kTGFzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBDaG9pY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG4gICAgXG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG4gIFxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgdGhpcy5wYXJ0cy5zb21lKChwYXJ0KSA9PiB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuICAgIFxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9IHwgJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgbnVsbCksXG4gICAgICAgICAgc3RyaW5nID0gYCggJHtwYXJ0c1N0cmluZ30gKWA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5wYXJ0cy5tYXAoKHBhcnQpID0+IHBhcnQuY2xvbmUoKSksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1BhcnQocGFydHMpO1xuXG4gICAgcmV0dXJuIGNob2ljZU9mUGFydHNQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcblxuICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7ICAvLy9cbiAgICBcbiAgICBjb25zdCBldmVuTm9kZXMgPSBldmVuKG5vZGVzKTtcblxuICAgIG5vZGVzID0gZXZlbk5vZGVzOyAgLy8vXG5cbiAgICBjb25zdCBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBwYXJ0cyA9IG5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNQYXJ0ID0gbmV3IENob2ljZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUsIGVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChlcnJvclJ1bGVOYW1lKSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEb2N1bWVudEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RvY3VtZW50XCI7XG5pbXBvcnQgRG9jdW1lbnREZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RvY3VtZW50XCI7XG5cbmltcG9ydCB7IGRvY3VtZW50UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkb2N1bWVudERlZmluaXRpb24gPSBuZXcgRG9jdW1lbnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IGRvY3VtZW50UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERvY3VtZW50Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBydWxlTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlTmFtZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gbmV3IE5hbWVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IHJ1bGVOYW1lUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uICAvLy9cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSdWxlTmFtZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKTtcblxuICAgIHJldHVybiB3aWxkY2FyZFBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoV2lsZGNhcmRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBXaWxkY2FyZEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3dpbGRjYXJkXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IHdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB3aWxkY2FyZCwgLy8vXG4gICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKHdpbGRjYXJkVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gd2lsZGNhcmRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBXaWxkY2FyZEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEVORF9PRl9MSU5FLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZU5vZGUpOyB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihFbmRPZkxpbmVOb2RlLCBzaWduaWZpY2FudFRva2VuKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBlbmRPZkxpbmVOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbiA9IHNpZ25pZmljYW50VG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuKSB7XG4gICAgICAgIGVuZE9mTGluZU5vZGUgPSBFbmRPZkxpbmVOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9IChlbmRPZkxpbmVOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZW5kT2ZMaW5lTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBuZXcgRW5kT2ZMaW5lUGFydCgpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IG5ldyBFbmRPZkxpbmVQYXJ0KCk7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFbmRPZkxpbmVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFbmRPZkxpbmVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sQ29udGVudCA9IEVORF9PRl9MSU5FLFxuICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24oZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gZW5kT2ZMaW5lUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRW5kT2ZMaW5lQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IHF1YW50aWZpZXJSdWxlTmFtZSwgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IHF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ob3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSwgIC8vL1xuICAgICAgICAgIHBhcnRzID0gcGFydE5vZGVzLm1hcCgocGFydE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Tm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRGVmaW5pdGlvbkJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydFJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbkJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IGRlZmluaXRpb25SdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25EZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGV2ZW4gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGV2ZW5DaGlsZE5vZGVzID0gZXZlbihjaGlsZE5vZGVzKSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25CTkZOb2RlcyA9IGV2ZW5DaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25CTkZOb2Rlcy5tYXAoKGRlZmluaXRpb25CTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uc0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2xvb2tBaGVhZFwiO1xuaW1wb3J0IHsgYWxsQnV0Rmlyc3RBbmRMYXN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXSxcbiAgICAgICAgICBpbmRleCA9IDA7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5wYXJ0cy5tYXAoKHBhcnQpID0+IHBhcnQuY2xvbmUoKSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBzZXF1ZW5jZU9mUGFydHNQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcblxuICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7ICAvLy9cblxuICAgIGNvbnN0IGxvb2tBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIHBhcnRzID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBzZXF1ZW5jZU9mUGFydHNQYXJ0O1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBkZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhcixcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkZWZpbml0aW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5EZWZpbml0aW9uUnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uc0JORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25zXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0RlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbnNEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IGRlZmluaXRpb25zUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbnNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbnNCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IGVwc2lsb25SdWxlTmFtZSxcbiAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSB0ZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBlcHNpbG9uUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihlcHNpbG9uUnVsZU5hbWUpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih3aWxkY2FyZFJ1bGVOYW1lKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKGVuZE9mTGluZVJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24odGVybWluYWxTeW1ib2xSdWxlTmFtZSksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENob2ljZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIsIG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlblBhcnRSdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvbmVPck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCAvLy9cbiAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiA9IG5ldyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBDaG9pY2VPZlBhcnRzQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoKD86XFxcXC58W15cIlxcXFxdKSopXCIkLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCk7XG5cbiAgICByZXR1cm4gdGVybWluYWxTeW1ib2xQYXJ0O1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIGNvbnRlbnQgPSBzZWNvbmRNYXRjaC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIikucmVwbGFjZSgvXFxcXFwiL2csIFwiXFxcIlwiKTtcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlID0gc3RyaW5nTGl0ZXJhbFR5cGUsICAvLy9cbiAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gVGVybWluYWxTeW1ib2xCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb25UZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCk7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBub2Rlcy5wb3AoKTtcblxuICAgIGxvb2tBaGVhZCA9IHRydWU7XG5cbiAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lUnVsZU5hbWUsIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnQvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLCBjaG9pY2VPZlBhcnRzUnVsZU5hbWUsIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9uVGVybWluYWxQYXJ0Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0LmZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTZXF1ZW5jZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZU5vV2hpdGVzcGFjZU5vZGUgPSB0ZXJtaW5hbE5vZGUuaXNOb1doaXRlc3BhY2VOb2RlKCk7XG5cbiAgICAgIGlmICh0ZXJtaW5hbE5vZGVOb1doaXRlc3BhY2VOb2RlKSB7XG4gICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IE5vV2hpdGVzcGFjZU5vZGUuZnJvbU5vdGhpbmcoKTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oTm9XaGl0ZXNwYWNlTm9kZSwgc2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGlzTm9XaGl0ZXNwYWNlUGFydCgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgbm9XaGl0ZXNwYWNlTm9kZSA9IG51bGw7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IHN0YXRlLmlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCk7XG5cbiAgICBpZiAoIW5leHRUb2tlbldoaXRlc3BhY2VUb2tlbikge1xuICAgICAgbm9XaGl0ZXNwYWNlTm9kZSA9IE5vV2hpdGVzcGFjZU5vZGUuZnJvbU5vdGhpbmcoKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAobm9XaGl0ZXNwYWNlTm9kZSAhPT0gbnVsbClcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9XaGl0ZXNwYWNlTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBOT19XSElURVNQQUNFOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIG5ldyBOb1doaXRlc3BhY2VQYXJ0KCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBOT19XSElURVNQQUNFLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydFwiO1xuXG5pbXBvcnQgeyBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uID0gbmV3IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZGlmaWVyQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhNb2RpZmllckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZWxsaXBzaXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBlbGxpcHNpcywgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL21vZGlmaWVyXCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9sb29rQWhlYWRNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBNb2RpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXhjbGFtYXRpb25NYXJrLCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE1vZGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbW9kaWZpZXJcIjtcbmltcG9ydCBBbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2FtYmlndW91c01vZGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbWJpZ3VvdXNNb2RpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgQW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE1vZGlmaWVyQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25QYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocmVndWxhckV4cHJlc3Npb24pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgaWYgKGZpcnN0TWF0Y2ggPT09IGNvbnRlbnQpIHtcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nID0gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbi50b1N0cmluZygpLFxuXHRcdCAgICAgIHN0cmluZyA9IHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIG5ldyBSZWd1bGFyRXhwcmVzc2lvblBhcnQodGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oKD86XFxcXC58W15cXC9dKSopXFwvJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uID0gdGhpcy5nZXRSZWd1bGFyRXhwcmVzc2lvbigpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGFydCA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvblBhcnQocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uUGFydDtcbiAgfVxuXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgcGF0dGVybiA9IHNlY29uZE1hdGNoLCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAocGF0dGVybik7ICAvLy9cblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlLCAgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUmVndWxhckV4cHJlc3Npb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1YW50aWZpZXJCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFF1YW50aWZpZXJCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3Rvcih0ZXJtaW5hbFN5bWJvbENvbnRlbnQpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGVybWluYWxTeW1ib2xDb250ZW50LCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHF1ZXN0aW9uTWFyaywgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBwbHVzLCAvLy9cbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKG9uZU9yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUXVhbnRpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9xdWFudGlmaWVyXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGFzdGVyaXNrLCAvLy9cbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbih6ZXJvT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUXVhbnRpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcWyhbXlxcXV0rKV0kLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0aGlzLmdldFNpZ25pZmljYW50VG9rZW5UeXBlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcblxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB0eXBlVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0eXBlVHlwZSwgIC8vL1xuICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHR5cGVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpcnN0LCBmaWx0ZXIgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0FzU3RyaW5nKHJ1bGVzLCBtdWx0aUxpbmUpIHtcbiAgY29uc3QgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gcnVsZXMucmVkdWNlKChtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGg7XG5cbiAgICAgICAgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gTWF0aC5tYXgobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBydWxlTmFtZUxlbmd0aCk7XG5cbiAgICAgICAgcmV0dXJuIG1heGltdW1SdWxlTmFtZUxlbmd0aDtcbiAgICAgIH0sIDApLFxuICAgICAgcnVsZXNTdHJpbmcgPSBydWxlcy5yZWR1Y2UoKHJ1bGVzU3RyaW5nLCBydWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSBydWxlLmFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lKTtcblxuICAgICAgICBydWxlc1N0cmluZyArPSBydWxlU3RyaW5nO1xuXG4gICAgICAgIHJldHVybiBydWxlc1N0cmluZztcbiAgICAgIH0sIEVNUFRZX1NUUklORykucmVwbGFjZSgvXlxcblxcbi8sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHJ1bGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU1hcEZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBydWxlTWFwID0ge307XG5cbiAgcnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBydWxlTWFwW3J1bGVOYW1lXSA9IHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlTWFwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSB7XG4gIGNvbnN0IGZpcnN0UnVsZSA9IGZpcnN0KHJ1bGVzKSxcbiAgICAgICAgc3RhcnRSdWxlID0gZmlyc3RSdWxlOyAgLy8vXG5cbiAgcmV0dXJuIHN0YXJ0UnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbVN0YXJ0UnVsZUFuZFJ1bGVNYXAoc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gIGNvbnN0IHJ1bGVzID0gT2JqZWN0LnZhbHVlcyhydWxlTWFwKSxcbiAgICAgICAgc3RhcnRSdWxlTmFtZSA9IHN0YXJ0UnVsZS5nZXROYW1lKCk7XG5cbiAgZmlsdGVyKHJ1bGVzLCAocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBpZiAocnVsZU5hbWUgIT09IHN0YXJ0UnVsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcnVsZXMudW5zaGlmdChzdGFydFJ1bGUpO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUocnVsZXMsIHN0YXJ0UnVsZU5hbWUpIHtcbiAgbGV0IHN0YXJ0UnVsZSA9IHJ1bGVzLmZpbmQoKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgaWYgKHJ1bGVOYW1lID09PSBzdGFydFJ1bGVOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pIHx8IG51bGw7IC8vL1xuXG4gIGlmIChzdGFydFJ1bGUgPT09IG51bGwpIHtcbiAgICBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0UnVsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0FzU3RyaW5nLFxuICBydWxlTWFwRnJvbVJ1bGVzLFxuICBzdGFydFJ1bGVGcm9tUnVsZXMsXG4gIHJ1bGVzRnJvbVN0YXJ0UnVsZUFuZFJ1bGVNYXAsXG4gIHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFN0YXRlIGZyb20gXCIuLi9zdGF0ZVwiO1xuaW1wb3J0IE5hbWVSdWxlIGZyb20gXCIuLi9ydWxlL25hbWVcIjtcbmltcG9ydCBQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcnVsZVwiO1xuaW1wb3J0IEVycm9yUnVsZSBmcm9tIFwiLi4vcnVsZS9lcnJvclwiO1xuaW1wb3J0IEVwc2lsb25SdWxlIGZyb20gXCIuLi9ydWxlL2Vwc2lsb25cIjtcbmltcG9ydCBEb2N1bWVudFJ1bGUgZnJvbSBcIi4uL3J1bGUvZG9jdW1lbnRcIjtcbmltcG9ydCBSdWxlTmFtZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcnVsZU5hbWVcIjtcbmltcG9ydCBXaWxkY2FyZFJ1bGUgZnJvbSBcIi4uL3J1bGUvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVSdWxlIGZyb20gXCIuLi9ydWxlL2VuZE9mTGluZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3F1YW50aWZpZXJcIjtcbmltcG9ydCBEZWZpbml0aW9uUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNSdWxlIGZyb20gXCIuLi9ydWxlL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS90ZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi4vcnVsZS9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xSdWxlIGZyb20gXCIuLi9ydWxlL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9ub25UZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNSdWxlIGZyb20gXCIuLi9ydWxlL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBMb29rQWhlYWRNb2RpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvbG9va0FoZWFkTW9kaWZpZXJcIjtcbmltcG9ydCBBbWJpZ3VvdXNNb2RpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvYW1iaWd1b3VzTW9kaWZpZXJcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZnJvbSBcIi4uL3J1bGUvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL29wdGlvbmFsUXVhbnRpZmllclwiO1xuaW1wb3J0IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZnJvbSBcIi4uL3J1bGUvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgcnVsZU1hcEZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBTdGF0ZS5mcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHRoaXMucnVsZU1hcCksXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spLFxuICAgICAgICAgIG5vZGUgPSBydWxlTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG5cdHJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpIHtcblx0ICBsZXQgcnVsZXM7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5wYXJzZSh0b2tlbnMpO1xuXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gbm9kZS5gKTtcbiAgICB9XG5cbiAgICBydWxlcyA9IG5vZGUuZ2VuZXJhdGVSdWxlcyhSdWxlKTtcblxuICAgIGNvbnN0IHJ1bGVzTGVuZ3RoID0gcnVsZXMubGVuZ3RoO1xuXG4gICAgaWYgKHJ1bGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBydWxlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lUnVsZSA9IG5ldyBOYW1lUnVsZSgpLFxuICAgICAgICAgIHBhcnRSdWxlID0gbmV3IFBhcnRSdWxlKCksXG4gICAgICAgICAgcnVsZVJ1bGUgPSBuZXcgUnVsZVJ1bGUoKSxcbiAgICAgICAgICBlcnJvclJ1bGUgPSBuZXcgRXJyb3JSdWxlKCksXG4gICAgICAgICAgZXBzaWxvblJ1bGUgPSBuZXcgRXBzaWxvblJ1bGUoKSxcbiAgICAgICAgICBkb2N1bWVudFJ1bGUgPSBuZXcgRG9jdW1lbnRSdWxlKCksXG4gICAgICAgICAgcnVsZU5hbWVSdWxlID0gbmV3IFJ1bGVOYW1lUnVsZSgpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZSA9IG5ldyBXaWxkY2FyZFJ1bGUoKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlID0gbmV3IEVuZE9mTGluZVJ1bGUoKSxcbiAgICAgICAgICBxdWFudGlmaWVyUnVsZSA9IG5ldyBRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25SdWxlID0gbmV3IERlZmluaXRpb25SdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlID0gbmV3IERlZmluaXRpb25zUnVsZSgpLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgVGVybWluYWxQYXJ0UnVsZSgpLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlID0gbmV3IENob2ljZU9mUGFydHNSdWxlKCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlID0gbmV3IFRlcm1pbmFsU3ltYm9sUnVsZSgpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgTm9uVGVybWluYWxQYXJ0UnVsZSgpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUnVsZSgpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlID0gbmV3IE5vV2hpdGVzcGFjZVBhcnRSdWxlKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uUnVsZSgpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZSA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGUoKSxcbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGUgPSBuZXcgQW1iaWd1b3VzTW9kaWZpZXJSdWxlKCksXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSA9IG5ldyBPcHRpb25hbFF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUgPSBuZXcgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgPSBuZXcgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSgpO1xuXG4gICAgbGV0IHJ1bGVzID0gW1xuICAgICAgZG9jdW1lbnRSdWxlLFxuICAgICAgcnVsZVJ1bGUsXG4gICAgICBuYW1lUnVsZSxcbiAgICAgIGRlZmluaXRpb25zUnVsZSxcbiAgICAgIGRlZmluaXRpb25SdWxlLFxuICAgICAgcGFydFJ1bGUsXG4gICAgICBub25UZXJtaW5hbFBhcnRSdWxlLFxuICAgICAgdGVybWluYWxQYXJ0UnVsZSxcbiAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlLFxuICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSxcbiAgICAgIGNob2ljZU9mUGFydHNSdWxlLFxuICAgICAgcnVsZU5hbWVSdWxlLFxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlLFxuICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlLFxuICAgICAgdGVybWluYWxTeW1ib2xSdWxlLFxuICAgICAgZW5kT2ZMaW5lUnVsZSxcbiAgICAgIHdpbGRjYXJkUnVsZSxcbiAgICAgIGVwc2lsb25SdWxlLFxuICAgICAgcXVhbnRpZmllclJ1bGUsXG4gICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGUsXG4gICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUsXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlLFxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICBlcnJvclJ1bGVcbiAgICBdO1xuXG4gICAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgYm5mUGFyc2VyID0gbmV3IEJORlBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuICAgIFxuICAgIHJldHVybiBibmZQYXJzZXI7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgZXhwcmVzc2lvbiAgIDo6PSBleHByZXNzaW9uXyBvcGVyYXRvciBleHByZXNzaW9uIGV4cHJlc3Npb25+KlxuXG4gICAgICAgICAgICAgICAgIHwgZXhwcmVzc2lvbl9cblxuICAgICAgICAgICAgICAgICA7XG5cbiAgb3BlcmF0b3IgICAgIDo6PSBcIitcIlxuXG4gICAgICAgICAgICAgICAgIHwgXCItXCJcblxuICAgICAgICAgICAgICAgICB8IFwiL1wiXG5cbiAgICAgICAgICAgICAgICAgfCBcIipcIlxuXG4gICAgICAgICAgICAgICAgIDtcblxuICB0ZXJtICAgICAgICAgOjo9IC9cXFxcZCsvIDtcblxuICBleHByZXNzaW9uXyAgOjo9IFwiKFwiIGV4cHJlc3Npb24gXCIpXCJcblxuICAgICAgICAgICAgICAgICB8IHRlcm1cblxuICAgICAgICAgICAgICAgICA7XG5cbiAgZXhwcmVzc2lvbn4gIDo6PSBvcGVyYXRvciBleHByZXNzaW9uIDtcbiAgXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJORkxleGVyIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQk5GUGFyc2VyIGZyb20gXCIuLi9ibmYvcGFyc2VyXCI7XG5cbmltcG9ydCB7IHJ1bGVNYXBGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuY29uc3QgYm5mTGV4ZXIgPSBCTkZMZXhlci5mcm9tTm90aGluZygpLFxuICAgICAgYm5mUGFyc2VyID0gQk5GUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21CTkYoYm5mKSB7XG4gIGNvbnN0IHRva2VucyA9IGJuZkxleGVyLnRva2Vuc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgcnVsZXMgPSBibmZQYXJzZXIucnVsZXNGcm9tVG9rZW5zKHRva2Vucyk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICBjb25zdCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHBhcnNlciA9IG5ldyBDbGFzcyhzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gIHJldHVybiBwYXJzZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZXJGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lKENsYXNzLCBydWxlcywgc3RhcnRSdWxlTmFtZSkge1xuICBjb25zdCBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lKHJ1bGVzLCBzdGFydFJ1bGVOYW1lKSxcbiAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBwYXJzZXIgPSBuZXcgQ2xhc3Moc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICByZXR1cm4gcGFyc2VyO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJ1bGVzRnJvbUJORixcbiAgcGFyc2VyRnJvbVJ1bGVzLFxuICBwYXJzZXJGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhdGUgZnJvbSBcIi4uL3N0YXRlXCI7XG5cbmltcG9ydCB7IHJ1bGVzRnJvbUJORiwgcGFyc2VyRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbW9uUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSkge1xuICAgIGNvbnN0IHN0YXRlID0gU3RhdGUuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbCxcbiAgICAgICAgICBydWxlTm9kZSA9IHJ1bGUucGFyc2Uoc3RhdGUsIGNhbGxiYWNrKSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcbiAgICBjb25zdCB7IGJuZiB9ID0gQ2xhc3MsXG4gICAgICAgICAgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbUJORihDbGFzcywgYm5mKSB7XG4gICAgY29uc3QgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICAgIGNvbnN0IHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5pbXBvcnQgQ29tbW9uUGFyc2VyIGZyb20gXCIuLi9jb21tb24vcGFyc2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2ljUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQmFzaWNQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihCYXNpY1BhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQmFzaWNQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcHNpbG9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgRXBzaWxvblBhcnQsXG4gIFdpbGRjYXJkUGFydCxcbiAgRW5kT2ZMaW5lUGFydCxcbiAgVGVybWluYWxTeW1ib2xQYXJ0LFxuICBSZWd1bGFyRXhwcmVzc2lvblBhcnQsXG4gIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCxcbiAgUnVsZU5hbWVQYXJ0LFxuICBPcHRpb25hbFBhcnRQYXJ0LFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0LFxuICBPbmVPck1vcmVQYXJ0c1BhcnQsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gIENob2ljZU9mUGFydHNQYXJ0XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORlBhcnNlciB9IGZyb20gXCIuL2JuZi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzaWNQYXJzZXIgfSBmcm9tIFwiLi9iYXNpYy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHJ1bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnNlclV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL3BhcnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRUeXBlcyB9IGZyb20gXCIuL3BhcnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFcHNpbG9uTm9kZSB9IGZyb20gXCIuL25vZGUvdGVybWluYWwvZXBzaWxvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvbm9uVGVybWluYWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cblxuICAgIHN0eWxlc2hlZXQgICAgICAgICAgICAgICAgIDo6PSAoIG1lZGlhIHwgcnVsZVNldCB8IGRlY2xhcmF0aW9uIHwgZXJyb3IgKSsgO1xuXG5cblxuXG5cbiAgICBtZWRpYSAgICAgICAgICAgICAgICAgICAgICA6Oj0gXCJAbWVkaWFcIiBtZWRpYVF1ZXJpZXMgXCJ7XCIgKCBydWxlU2V0IHwgZGVjbGFyYXRpb24gKSogXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyaWVzICAgICAgICAgICAgICAgOjo9ICBtZWRpYVF1ZXJ5ICggXCIsXCIgbWVkaWFRdWVyeSApKiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJ5ICAgICAgICAgICAgICAgICA6Oj0gIFwibm90XCI/ICggXCJvbmx5XCI/IG1lZGlhVHlwZSBcImFuZFwiICk/IG1lZGlhRXhwcmVzc2lvbiAoIFwiYW5kXCIgbWVkaWFFeHByZXNzaW9uICkqIDtcblxuXG4gICAgbWVkaWFUeXBlICAgICAgICAgICAgICAgICAgOjo9ICBcImFsbFwiIHwgXCJwcmludFwiIHwgXCJzY3JlZW5cIiB8IFwic3BlZWNoXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFFeHByZXNzaW9uICAgICAgICAgICAgOjo9ICBcIihcIiBbaWRlbnRpZmllcl0gKCBcIjpcIiBleHByZXNzaW9uICk/IFwiKVwiIDtcblxuXG5cblxuXG4gICAgcnVsZVNldCAgICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvcnMgXCJ7XCIgZGVjbGFyYXRpb24qIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCIsXCIgc2VsZWN0b3IgKSogO1xuXG5cbiAgICBzZWxlY3RvciAgICAgICAgICAgICAgICAgICA6Oj0gICggY2xhc3MgfCBwc2V1ZG9DbGFzcyB8IHBzZXVkb0VsZW1lbnQgfCBhdHRyaWJ1dGUgKSsgO1xuXG5cblxuXG5cbiAgICBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5IFwiOlwiIGV4cHJlc3Npb24gKCBcIixcIiBleHByZXNzaW9uICkqIHByaW9yaXR5PyBcIjtcIiA7XG5cblxuICAgIGNsYXNzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0NsYXNzICAgICAgICAgICAgICAgIDo6PSAgXCI6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0VsZW1lbnQgICAgICAgICAgICAgIDo6PSAgXCI6OlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwYXJlbnRoZXNpc2VkU2VsZWN0b3IgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKFwiIHNlbGVjdG9yIDxOT19XSElURVNQQUNFPlwiKVwiIDtcblxuXG4gICAgYXR0cmlidXRlICAgICAgICAgICAgICAgICAgOjo9ICBcIltcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCI9XCIgfCBcIn49XCIgfCBcInw9XCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl0gO1xuXG5cbiAgICBleHByZXNzaW9uICAgICAgICAgICAgICAgICA6Oj0gIHRlcm0gKCBcIixcIj8gdGVybSApKiA7XG5cblxuICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgIDo6PSAgXCIhaW1wb3J0YW50XCIgO1xuXG5cblxuXG5cbiAgICB0ZXJtICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFt1bmFyeS1vcGVyYXRvcl0/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtwZXJjZW50YWdlXSB8IFtmcmVxdWVuY3ldIHwgW2ZyYWN0aW9uXSB8IFtsZW5ndGhdIHwgW2FuZ2xlXSB8IFtyZW1zXSB8IFtlbXNdIHwgW3RpbWVdIHwgW251bWJlcl0gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cmluZy1saXRlcmFsXStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvdXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICB1cmkgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwidXJsXCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBbc3RyaW5nLWxpdGVyYWxdIFwiKVwiIDtcblxuXG4gICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl08Tk9fV0hJVEVTUEFDRT5cIihcIiBleHByZXNzaW9uIFwiKVwiIDtcblxuXG5cblxuXG4gICAgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQ1NTUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQ1NTUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhDU1NQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgY2xlYXIsIHB1c2gsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyAvLy9cblxuICAgIHN0YXJ0SW5kZXggPSBsZW5ndGggKyBzdGFydEluZGV4OyAvLy9cblxuICAgIGVuZEluZGV4ID0gbGVuZ3RoICsgZW5kSW5kZXg7IC8vL1xuICB9XG5cbiAgaWYgKGVuZEluZGV4ICE9PSBJbmZpbml0eSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gZW5kSW5kZXggKyAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBzdGFydEluZGV4OyAvLy9cblxuICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCAuLi5lbGVtZW50cykge1xuICByZXR1cm4gZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gYXJyYXkuaW5jbHVkZXMoZWxlbWVudCkpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBjbGVhciwgdHJpbSwgc2Vjb25kLCB0aGlyZCwgZm91cnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwcmVhZCB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpIHtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICB0aGlzLnVuaXF1ZSA9IHVuaXF1ZTtcbiAgfVxuXG4gIGFkanVzdE5vZGVzKG5vZGVzKSB7XG4gICAgaWYgKHRoaXMudW5pcXVlKSB7XG4gICAgICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVzTGVuZ3RoID4gMSkge1xuICAgICAgICBjbGVhcihub2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyaW0obm9kZXMsIHRoaXMuc3RhcnRJbmRleCwgdGhpcy5lbmRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TcHJlYWRFeHByZXNzaW9uKHNwcmVhZEV4cHJlc3Npb24pIHtcbiAgICBsZXQgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgIGVuZEluZGV4ID0gSW5maW5pdHksXG4gICAgICAgIHVuaXF1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIGlmIChzcHJlYWRFeHByZXNzaW9uID09PSBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUikge1xuICAgICAgICB1bmlxdWUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVnRXhwID0gL1xcWygtP1xcZCspPyhcXC5cXC5cXC4pPygtP1xcZCspP10vLFxuICAgICAgICAgICAgICBtYXRjaGVzID0gc3ByZWFkRXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSB8fCBudWxsLFxuICAgICAgICAgICAgICB0aGlyZE1hdGNoID0gdGhpcmQobWF0Y2hlcykgfHwgbnVsbCxcbiAgICAgICAgICAgICAgZm91cnRoTWF0Y2ggPSBmb3VydGgobWF0Y2hlcykgfHwgbnVsbDtcblxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICBzdGFydEluZGV4ID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2gpO1xuXG4gICAgICAgICAgaWYgKHRoaXJkTWF0Y2ggPT09IG51bGwpIHtcbiAgICAgICAgICAgIGVuZEluZGV4ID0gc3RhcnRJbmRleDsgIC8vL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3VydGhNYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgIGVuZEluZGV4ID0gcGFyc2VJbnQoZm91cnRoTWF0Y2gpO1xuXG4gICAgICAgICAgaWYgKHRoaXJkTWF0Y2ggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBlbmRJbmRleDsgIC8vL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNwcmVhZCA9IG5ldyBTcHJlYWQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHVuaXF1ZSk7XG5cbiAgICByZXR1cm4gc3ByZWFkO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNwcmVhZCBmcm9tIFwiLi9zcHJlYWRcIjtcblxuaW1wb3J0IHsgaW5jbHVkZXMsIHB1c2gsIGNsZWFyLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgQkFSX0NIQVJBQ1RFUiwgV0lMRENBUkRfQ0hBUkFDVEVSLCBGT1JXQVJEX1NMQVNIX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlcnkge1xuICBjb25zdHJ1Y3Rvcih0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgIHJ1bGVOYW1lcywgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKSB7XG4gICAgdGhpcy50eXBlcyA9IHR5cGVzO1xuICAgIHRoaXMuc3ByZWFkID0gc3ByZWFkO1xuICAgIHRoaXMuc3ViUXVlcnkgPSBzdWJRdWVyeTtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLm1heGltdW1EZXB0aCA9IG1heGltdW1EZXB0aDtcbiAgICB0aGlzLmluZmluaXRlRGVzY2VudCA9IGluZmluaXRlRGVzY2VudDtcbiAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzID0gaW50ZXJtZWRpYXRlTm9kZXM7XG4gIH1cblxuICBleGVjdXRlKG5vZGUsIGRlcHRoID0gMCwgbWF4aW11bURlcHRoID0gdGhpcy5tYXhpbXVtRGVwdGgpIHtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuXG4gICAgdGhpcy5jbGVhcigpO1xuXG4gICAgdGhpcy5maW5kKG5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuXG4gICAgdGhpcy5hcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICBjbGVhcih0aGlzLmludGVybWVkaWF0ZU5vZGVzKTtcbiAgfVxuXG4gIGZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIGlmIChkZXB0aCA+IG1heGltdW1EZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gICAgbGV0IGZvdW5kO1xuXG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHR5cGUgPSB0ZXJtaW5hbE5vZGUuZ2V0VHlwZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHRoaXMudHlwZXMsIHR5cGUsIFdJTERDQVJEX0NIQVJBQ1RFUik7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnJ1bGVOYW1lcywgcnVsZU5hbWUsIFdJTERDQVJEX0NIQVJBQ1RFUik7XG4gICAgfVxuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICBjb25zdCBpbnRlcm1lZGlhdGVOb2RlID0gbm9kZTsgLy8vXG5cbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMucHVzaChpbnRlcm1lZGlhdGVOb2RlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbmZpbml0ZURlc2NlbnQpIHtcbiAgICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgdGhpcy5maW5kKGNoaWxkTm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgdGhpcy5zcHJlYWQuYWRqdXN0Tm9kZXModGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG5cbiAgICBpZiAodGhpcy5zdWJRdWVyeSA9PT0gbnVsbCkge1xuICAgICAgcHVzaChub2RlcywgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMuZm9yRWFjaCgoaW50ZXJtZWRpYXRlTm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBpbnRlcm1lZGlhdGVOb2RlTm9uVGVybWluYWxOb2RlID0gaW50ZXJtZWRpYXRlTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgIGlmIChpbnRlcm1lZGlhdGVOb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgZGVwdGgrKztcblxuICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgICAgdGhpcy5zdWJRdWVyeS5jbGVhcigpO1xuXG4gICAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3ViUXVlcnkuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5zdWJRdWVyeS5hcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGxldCBxdWVyeSA9IG51bGw7XG5cbiAgICBpZiAoZXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVnRXhwID0gL15cXC8oXFwvKT8oW14vXFxbIV0rKShcXFtbXlxcXV0rXXwhKT8oXFwvLiopPyQvLFxuICAgICAgICAgICAgbWF0Y2hlcyA9IGV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpLFxuICAgICAgICAgICAgZm91cnRoTWF0Y2ggPSBmb3VydGgobWF0Y2hlcyksXG4gICAgICAgICAgICBmaWZ0aE1hdGNoID0gZmlmdGgobWF0Y2hlcyksXG4gICAgICAgICAgICBzZWxlY3RvcnMgPSB0aGlyZE1hdGNoLnNwbGl0KEJBUl9DSEFSQUNURVIpLFxuICAgICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IGZpZnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICAgIHNwcmVhZEV4cHJlc3Npb24gPSBmb3VydGhNYXRjaCB8fCBudWxsLFxuICAgICAgICAgICAgdHlwZXMgPSB0eXBlc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHNwcmVhZCA9IFNwcmVhZC5mcm9tU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSxcbiAgICAgICAgICAgIHN1YlF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oc3ViRXhwcmVzc2lvbiksXG4gICAgICAgICAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyksXG4gICAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSAoc2Vjb25kTWF0Y2ggPT09IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSKSxcbiAgICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW107XG5cbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHR5cGVzLCBzcHJlYWQsIHN1YlF1ZXJ5LCBydWxlTmFtZXMsIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG59XG5cbmZ1bmN0aW9uIHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHtcbiAgY29uc3QgdHlwZXMgPSBbXTtcblxuICBzZWxlY3RvcnMuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICBjb25zdCBzZWxlY3RvclR5cGVTZWxlY3RvciA9IGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgaWYgKHNlbGVjdG9yVHlwZVNlbGVjdG9yKSB7XG4gICAgICBjb25zdCB0eXBlID0gc2VsZWN0b3Iuc3Vic3RyaW5nKDEpO1xuXG4gICAgICB0eXBlcy5wdXNoKHR5cGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5mdW5jdGlvbiBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCBydWxlTmFtZXMgPSBbXTtcblxuICBzZWxlY3RvcnMuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICBjb25zdCBzZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IgPSBpc1NlbGVjdG9yUnVsZU5hbWVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKSB7XG4gICAgICBjb25zdCBydWxlTmFtZSA9IHNlbGVjdG9yOyAgLy8vXG5cbiAgICAgIHJ1bGVOYW1lcy5wdXNoKHJ1bGVOYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBydWxlTmFtZXM7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eQC8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eW15AXS8udGVzdChzZWxlY3Rvcik7IH1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFF1ZXJ5IGZyb20gXCIuLi9xdWVyeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzKG5vZGUsIENsYXNzLCBub2RlcyA9IFtdKSB7XG4gIGlmIChub2RlIGluc3RhbmNlb2YgQ2xhc3MpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9XG5cbiAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiBxdWVyeUJ5Q2xhc3MoY2hpbGROb2RlLCBDbGFzcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlDbGFzc2VzKG5vZGUsIENsYXNzZXMsIG5vZGVzID0gW10pIHtcbiAgQ2xhc3Nlcy5zb21lKChDbGFzcykgPT4ge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2xhc3MpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiBxdWVyeUJ5Q2xhc3NlcyhjaGlsZE5vZGUsIENsYXNzZXMsIG5vZGVzKSk7XG4gIH1cblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5RXhwcmVzc2lvbihub2RlLCBleHByZXNzaW9uLCBtYXhpbXVtRGVwdGgpIHtcbiAgY29uc3QgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGgpLFxuICAgICAgICBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSk7XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHF1ZXJ5QnlDbGFzcyxcbiAgcXVlcnlCeUNsYXNzZXMsXG4gIHF1ZXJ5QnlFeHByZXNzaW9uXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFF1ZXJ5IH0gZnJvbSBcIi4vcXVlcnlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcXVlcnlVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEhFQUQgPSBcImhlYWRcIjtcbmV4cG9ydCBjb25zdCBTVFlMRSA9IFwic3R5bGVcIjtcbmV4cG9ydCBjb25zdCBDSEFSQUNURVJTID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXCI7XG5leHBvcnQgY29uc3QgVFdPX1NQQUNFUyA9IFwiICBcIjtcbmV4cG9ydCBjb25zdCBGT1VSX1NQQUNFUyA9IFwiICAgIFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRV9MRU5HVEggPSA2O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHF1ZXJ5LCBub2RlLCB0b2tlbnMpIHtcbiAgbGV0IGNvbnRlbnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICAgIG5vZGUgPSBmaXJzdE5vZGU7IC8vL1xuXG4gICAgY29udGVudCA9IGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBsYXN0VG9rZW4gPSBsYXN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGZpcnN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0VG9rZW4pLFxuICAgICAgICBsYXN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RUb2tlbik7XG5cbiAgbGV0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBmaXJzdFRva2VuSW5kZXg7IGluZGV4IDw9IGxhc3RUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwcmlvcml0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcmlvcml0eVwiKSxcbiAgICAgIHByb3BlcnR5UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3Byb3BlcnR5XCIpLFxuICAgICAgZXhwcmVzc2lvblF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9leHByZXNzaW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5LCBleHByZXNzaW9uLCBwcmlvcml0eSkge1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgIHRoaXMucHJpb3JpdHkgPSBwcmlvcml0eTtcbiAgfVxuXG4gIGdldFByb3BlcnR5KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5O1xuICB9XG5cbiAgZ2V0RXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UHJpb3JpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJpb3JpdHk7XG4gIH1cblxuICBjaGVja01hdGNoZXMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgcHJvcGVydGllc01hdGNoID0gKHByb3BlcnR5ID09PSB0aGlzLnByb3BlcnR5KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNDU1MoaW5kZW50LCBsYXN0KSB7XG4gICAgY29uc3QgY3NzID0gbGFzdCA/XG4gICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufSR7dGhpcy5wcmlvcml0eX07YCA6XG4gICAgICAgICAgICAgICAgICBgJHtpbmRlbnR9JHt0aGlzLnByb3BlcnR5fTogJHt0aGlzLmV4cHJlc3Npb259JHt0aGlzLnByaW9yaXR5fTtcXG5gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2Vucyhwcm9wZXJ0eVF1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGV4cHJlc3Npb25Db250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoZXhwcmVzc2lvblF1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHByaW9yaXR5Q29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHByaW9yaXR5UXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUNvbnRlbnQsIC8vL1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uQ29udGVudCwgLy8vXG4gICAgICAgICAgcHJpb3JpdHkgPSAocHJpb3JpdHlDb250ZW50ID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyA6XG4gICAgICAgICAgICAgICAgICAgICAgICBgICR7cHJpb3JpdHlDb250ZW50fWAsXG4gICAgICAgICAgZGVjbGFyYXRpb24gPSBuZXcgRGVjbGFyYXRpb24ocHJvcGVydHksIGV4cHJlc3Npb24sIHByaW9yaXR5KTtcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gXCIuL2RlY2xhcmF0aW9uXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgZGVjbGFyYXRpb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZGVjbGFyYXRpb25cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2xhcmF0aW9ucyB7XG4gIGNvbnN0cnVjdG9yKGFycmF5KSB7XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xuICB9XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gZmlyc3RJbmRleDsgaW5kZXggPD0gbGFzdEluZGV4OyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGJhY2t3YXJkc0ZvckVhY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBmaXJzdEluZGV4ID0gMCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSBsYXN0SW5kZXg7IGluZGV4ID49IGZpcnN0SW5kZXg7IGluZGV4LS0pIHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gdGhpcy5hcnJheVtpbmRleF07XG5cbiAgICAgIGNhbGxiYWNrKGRlY2xhcmF0aW9uLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMpIHtcbiAgICBkZWNsYXJhdGlvbnMuYmFja3dhcmRzRm9yRWFjaCgoZGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbi5jaGVja01hdGNoZXModGhpcy5hcnJheSk7IC8vL1xuXG4gICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgdGhpcy5hcnJheS51bnNoaWZ0KGRlY2xhcmF0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgaWYgKGluZGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRlbnQgPSBjbGFzc05hbWU7IC8vL1xuXG4gICAgICBjbGFzc05hbWUgPSBudWxsOyAvLy9cbiAgICB9XG5cbiAgICBsZXQgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuYXJyYXkucmVkdWNlKChkZWNsYXJhdGlvbnNDU1MsIGRlY2xhcmF0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBsYXN0ID0gKGluZGV4ID09PSBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbkNTUyA9IGRlY2xhcmF0aW9uLmFzQ1NTKGluZGVudCwgbGFzdCk7XG5cbiAgICAgICAgICAgICAgZGVjbGFyYXRpb25zQ1NTICs9IGRlY2xhcmF0aW9uQ1NTO1xuXG4gICAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbnNDU1M7XG4gICAgICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgICBpZiAoY2xhc3NOYW1lID09PSBudWxsKSB7XG4gICAgICAgIGNzcyA9IGRlY2xhcmF0aW9uc0NTUzsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3NzID0gYC4ke2NsYXNzTmFtZX0ge1xuJHtkZWNsYXJhdGlvbnNDU1N9XG59XG5cbmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbk5vZGVzID0gZGVjbGFyYXRpb25RdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0gZGVjbGFyYXRpb25Ob2Rlcy5tYXAoKGRlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9IERlY2xhcmF0aW9uLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbjtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBuZXcgRGVjbGFyYXRpb25zKGFycmF5KTtcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbnM7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHNlbGVjdG9yc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL3NlbGVjdG9yc1wiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKSB7XG4gICAgdGhpcy5zZWxlY3RvcnMgPSBzZWxlY3RvcnM7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRTZWxlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldCkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHJ1bGVTZXQuZ2V0RGVjbGFyYXRpb25zKCk7XG5cbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gIH1cblxuICBmaW5kTWF0Y2hpbmdSdWxlU2V0KHJ1bGVTZXRzKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldHMuZmluZCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3JzID0gcnVsZVNldC5nZXRTZWxlY3RvcnMoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yc01hdGNoID0gKHNlbGVjdG9ycyA9PT0gdGhpcy5zZWxlY3RvcnMpLFxuICAgICAgICAgICAgcnVsZVNldHNNYXRjaCA9IHNlbGVjdG9yc01hdGNoOyAvLy9cblxuICAgICAgaWYgKHJ1bGVTZXRzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgICByZXR1cm4gbWF0Y2hpbmdSdWxlU2V0O1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBsZXQgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoYCAgJHtpbmRlbnR9YCk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zQ1NTICE9PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICBjc3MgPSBgJHtpbmRlbnR9LiR7Y2xhc3NOYW1lfSR7dGhpcy5zZWxlY3RvcnN9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxuJHtpbmRlbnR9fVxuXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYSA9IG5ldyBSdWxlU2V0KHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKTtcblxuICAgIHJldHVybiBtZWRpYTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWxlY3RvcnNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgc2VsZWN0b3JzTm9kZUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhzZWxlY3RvcnNRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgc2VsZWN0b3JzID0gYCR7c2VsZWN0b3JzTm9kZUNvbnRlbnR9YDtcblxuICByZXR1cm4gc2VsZWN0b3JzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXQgZnJvbSBcIi4vcnVsZVNldFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHJ1bGVTZXRRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovcnVsZVNldFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldHMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldHMpIHtcbiAgICBydWxlU2V0cy5mb3JFYWNoKChydWxlU2V0KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1J1bGVTZXQgPSBydWxlU2V0LmZpbmRNYXRjaGluZ1J1bGVTZXQodGhpcy5hcnJheSk7IC8vL1xuXG4gICAgICAobWF0Y2hpbmdSdWxlU2V0ID09PSBudWxsKSA/XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChydWxlU2V0KSA6XG4gICAgICAgICAgbWF0Y2hpbmdSdWxlU2V0LnVuc2hpZnQocnVsZVNldCk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgY29uc3QgY3NzID0gdGhpcy5hcnJheS5yZWR1Y2UoKGNzcywgcnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgcnVsZVNldENTUyA9IHJ1bGVTZXQuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpO1xuXG4gICAgICBjc3MgKz0gcnVsZVNldENTUztcblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBydWxlU2V0Tm9kZXMgPSBydWxlU2V0UXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IHJ1bGVTZXROb2Rlcy5tYXAoKHJ1bGVTZXROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcnVsZVNldE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZVNldCA9IFJ1bGVTZXQuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVsZVNldHMgPSBuZXcgUnVsZVNldHMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIHJ1bGVTZXRzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XG5cbmltcG9ydCB7IFRXT19TUEFDRVMsIEZPVVJfU1BBQ0VTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcblxuY29uc3QgbWVkaWFRdWVyaWVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9tZWRpYS9tZWRpYVF1ZXJpZXNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lZGlhIHtcbiAgY29uc3RydWN0b3IobWVkaWFRdWVyaWVzLCBkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzKSB7XG4gICAgdGhpcy5tZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJpZXM7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFRdWVyaWVzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhUXVlcmllcztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRSdWxlU2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlU2V0cztcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSkge1xuICAgIGxldCBjc3MgPSBcIlwiO1xuXG4gICAgY29uc3QgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgVFdPX1NQQUNFUyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoY2xhc3NOYW1lLCBGT1VSX1NQQUNFUyk7XG5cbiAgICBpZiAoKHJ1bGVTZXRzQ1NTICE9PSBudWxsKSB8fCAoZGVjbGFyYXRpb25zQ1NTICE9PSBudWxsKSkge1xuICAgICAgY3NzID0gYEBtZWRpYSAke3RoaXMubWVkaWFRdWVyaWVzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU30ke3J1bGVTZXRzQ1NTfVxufVxuXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgTWVkaWEobWVkaWFRdWVyaWVzLCBkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzKTtcblxuICAgIHJldHVybiBtZWRpYTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZWRpYVF1ZXJpZXNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgbWVkaWFRdWVyaWVzTm9kZUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhtZWRpYVF1ZXJpZXNRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgbWVkaWFRdWVyaWVzID0gYCR7bWVkaWFRdWVyaWVzTm9kZUNvbnRlbnR9YDtcblxuICByZXR1cm4gbWVkaWFRdWVyaWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IE1lZGlhIGZyb20gXCIuL21lZGlhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgbWVkaWFRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiL3N0eWxlc2hlZXQvbWVkaWFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lZGlhcyB7XG4gIGNvbnN0cnVjdG9yKGFycmF5KSB7XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xuICB9XG5cbiAgdW5zaGlmdChtZWRpYXMpIHtcbiAgICBtZWRpYXMuZm9yRWFjaCgobWVkaWEpID0+IHtcbiAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChtZWRpYSk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIG1lZGlhKSA9PiB7XG4gICAgICBjb25zdCBtZWRpYUNTUyA9IG1lZGlhLmFzQ1NTKGNsYXNzTmFtZSk7XG5cbiAgICAgIGNzcyArPSBtZWRpYUNTUztcblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBtZWRpYU5vZGVzID0gbWVkaWFRdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0gbWVkaWFOb2Rlcy5tYXAoKG1lZGlhTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG1lZGlhTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBtZWRpYSA9IE1lZGlhLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBtZWRpYTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtZWRpYXMgPSBuZXcgTWVkaWFzKGFycmF5KTtcblxuICAgIHJldHVybiBtZWRpYXM7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lZGlhcyBmcm9tIFwiLi9zdHlsZS9tZWRpYXNcIjtcbmltcG9ydCBSdWxlU2V0cyBmcm9tIFwiLi9zdHlsZS9ydWxlU2V0c1wiO1xuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9zdHlsZS9kZWNsYXJhdGlvbnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3R5bGUge1xuICBjb25zdHJ1Y3RvcihkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgICB0aGlzLnJ1bGVTZXRzID0gcnVsZVNldHM7XG4gICAgdGhpcy5tZWRpYXMgPSBtZWRpYXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBnZXRNZWRpYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVkaWFzO1xuICB9XG5cbiAgZXh0ZW5kcyhzdXBlclN0eWxlKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gc3VwZXJTdHlsZS5nZXREZWNsYXJhdGlvbnMoKSxcbiAgICAgICAgICBydWxlU2V0cyA9IHN1cGVyU3R5bGUuZ2V0UnVsZVNldHMoKSxcbiAgICAgICAgICBtZWRpYXMgPSBzdXBlclN0eWxlLmdldE1lZGlhcygpO1xuXG4gICAgdGhpcy51bnNoaWZ0KGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIG1lZGlhcyk7XG4gIH1cblxuICB1bnNoaWZ0KGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIG1lZGlhcykge1xuICAgIHRoaXMuZGVjbGFyYXRpb25zLnVuc2hpZnQoZGVjbGFyYXRpb25zKTtcbiAgICB0aGlzLnJ1bGVTZXRzLnVuc2hpZnQocnVsZVNldHMpO1xuICAgIHRoaXMubWVkaWFzLnVuc2hpZnQobWVkaWFzKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgXCIgIFwiKSxcbiAgICAgICAgICBydWxlU2V0c0NTUyA9IHRoaXMucnVsZVNldHMuYXNDU1MoY2xhc3NOYW1lLCBcIlwiKSxcbiAgICAgICAgICBtZWRpYXNDU1MgPSB0aGlzLm1lZGlhcy5hc0NTUyhjbGFzc05hbWUpLFxuICAgICAgICAgIGNzcyA9IGAke2RlY2xhcmF0aW9uc0NTU30ke3J1bGVTZXRzQ1NTfSR7bWVkaWFzQ1NTfWA7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IERlY2xhcmF0aW9ucy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHJ1bGVTZXRzID0gUnVsZVNldHMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYXMgPSBNZWRpYXMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBzdHlsZSA9IG5ldyBTdHlsZShkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHlsZSBmcm9tIFwiLi4vc3R5bGVcIjtcbmltcG9ydCBDU1NMZXhlciBmcm9tIFwiLi4vY3NzL2xleGVyXCI7XG5pbXBvcnQgQ1NTUGFyc2VyIGZyb20gXCIuLi9jc3MvcGFyc2VyXCI7XG5cbmltcG9ydCB7IEhFQUQsIFNUWUxFLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGNzc0xleGVyID0gQ1NTTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGNzc1BhcnNlciA9IENTU1BhcnNlci5mcm9tTm90aGluZygpO1xuXG5pZiAoIWdsb2JhbFRoaXMuc3R5bGVNYXApIHtcbiAgZ2xvYmFsVGhpcy5zdHlsZU1hcCA9IHt9O1xufVxuXG5jb25zdCB7IHN0eWxlTWFwIH0gPSBnbG9iYWxUaGlzO1xuXG5mdW5jdGlvbiByZW5kZXJTdHlsZShzdHlsZSkge1xuICBjb25zdCBoZWFkRE9NRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoSEVBRCksXG4gICAgICAgIHN0eWxlRE9NRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoU1RZTEUpLFxuICAgICAgICBpbm5lckhUTUwgPSBgXG4gICAgICAgIFxuJHtzdHlsZX1gO1xuXG4gIE9iamVjdC5hc3NpZ24oc3R5bGVET01FbGVtZW50LCB7XG4gICAgaW5uZXJIVE1MXG4gIH0pO1xuXG4gIGhlYWRET01FbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlRE9NRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0eWxlcygpIHtcbiAgY29uc3Qgc3R5bGVzQ1NTID0gcmV0cmlldmVTdHlsZXNDU1MoKSxcbiAgICAgICAgc3R5bGUgPSBzdHlsZXNDU1M7ICAvLy9cblxuICByZW5kZXJTdHlsZShzdHlsZSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lLCBzdXBlclN0eWxlID0gbnVsbCkge1xuICBjb25zdCBzdHJpbmdzID0gYXJncy5zaGlmdCgpLFx0Ly8vXG4gICAgICAgIGNvbnRlbnQgPSBzdHJpbmdzLnJlZHVjZSgoY29udGVudCwgc3RyaW5nLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaW5kZXhdO1xuXG4gICAgICAgICAgY29udGVudCA9IChhcmcgIT09IHVuZGVmaW5lZCkgP1xuICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9JHtzdHJpbmd9JHthcmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfWA7XG5cbiAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgdG9rZW5zID0gY3NzTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgIG5vZGUgPSBjc3NQYXJzZXIucGFyc2UodG9rZW5zKSxcbiAgICAgICAgc3R5bGUgPSBTdHlsZS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgIGlmIChzdXBlclN0eWxlICE9PSBudWxsKSB7XG4gICAgICAgICAgc3R5bGUuZXh0ZW5kcyhzdXBlclN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlTWFwW2NsYXNzTmFtZV0gPSBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpIHtcbiAgY29uc3Qgc3R5bGUgPSBzdHlsZU1hcFtjbGFzc05hbWVdIHx8IG51bGw7XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlbmRlclN0eWxlLFxuICByZW5kZXJTdHlsZXMsXG4gIGdlbmVyYXRlU3R5bGUsXG4gIHJldHJpZXZlU3R5bGVcbn07XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGVzQ1NTKCkge1xuICBjb25zdCBjbGFzc05hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVNYXApLFxuICAgICAgICBzdHlsZXNDU1MgPSBjbGFzc05hbWVzLnJlZHVjZSgoc3R5bGVzQ1NTLCBjbGFzc05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSxcbiAgICAgICAgICAgICAgICBzdHlsZUNTUyA9IHN0eWxlLmFzQ1NTKGNsYXNzTmFtZSk7XG5cbiAgICAgICAgICBzdHlsZXNDU1MgKz0gc3R5bGVDU1M7XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzQ1NTO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBzdHlsZXNDU1M7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQVJBQ1RFUlMsIEVNUFRZX1NUUklORywgQ0xBU1NfTkFNRV9MRU5HVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGxlbmd0aCA9IENMQVNTX05BTUVfTEVOR1RILFxuICAgICAgY2hhcmFjdGVycyA9IENIQVJBQ1RFUlMsXG4gICAgICBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XG5cbmNvbnN0IGNsYXNzTmFtZXMgPSBbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ2xhc3NOYW1lKCkge1xuICBsZXQgY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGNvdW50ID0gMDsgY291bnQgPCBsZW5ndGg7IGNvdW50KyspIHtcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpLFxuICAgICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaW5kZXhdO1xuXG4gICAgY2xhc3NOYW1lICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIGNvbnN0IGNsYXNzTmFtZXNJbmNsdWRlc0NsYXNzTmFtZSA9IGNsYXNzTmFtZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcblxuICBpZiAoIWNsYXNzTmFtZXNJbmNsdWRlc0NsYXNzTmFtZSkge1xuICAgIGNsYXNzTmFtZXMucHVzaChjbGFzc05hbWUpO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG4gIH1cblxuICByZXR1cm4gY2xhc3NOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0cmlldmVDbGFzc05hbWUoZWxlbWVudCkge1xuICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gZWxlbWVudC5yZWFjdEZ1bmN0aW9uIHx8IGVsZW1lbnQucmVhY3RDb21wb25lbnQuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZW5lcmF0ZUNsYXNzTmFtZSxcbiAgcmV0cmlldmVDbGFzc05hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGFnTmFtZXMgfSBmcm9tIFwiLi90YWdOYW1lc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1NMZXhlciB9IGZyb20gXCIuL2Nzcy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1NQYXJzZXIgfSBmcm9tIFwiLi9jc3MvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0eWxlc1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHlsZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NOYW1lVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzTmFtZVwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NsYXNzKGFyZ3VtZW50KSB7IHJldHVybiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIEVsZW1lbnQpOyB9ICAvLy9cblxuZnVuY3Rpb24gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcykge1xuICBjb25zdCBzdWJjbGFzc09mID0gKGFyZ3VtZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIENsYXNzKTtcblxuICByZXR1cm4gc3ViY2xhc3NPZjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyB0YWdOYW1lcywgc3R5bGVzVXRpbGl0aWVzLCBjbGFzc05hbWVVdGlsaXRpZXMgfSBmcm9tIFwid2l0aC1zdHlsZVwiO1xuXG5pbXBvcnQgeyBpc0NsYXNzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzXCI7XG5pbXBvcnQgeyBDTEFTU19OQU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZ2VuZXJhdGVDbGFzc05hbWUgfSA9IGNsYXNzTmFtZVV0aWxpdGllcyxcbiAgICAgIHsgcmVuZGVyU3R5bGUsIHJlbmRlclN0eWxlcywgZ2VuZXJhdGVTdHlsZSwgcmV0cmlldmVTdHlsZSB9ID0gc3R5bGVzVXRpbGl0aWVzO1xuXG5mdW5jdGlvbiB3aXRoU3R5bGUoQ2xhc3NPckZ1bmN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBhcmdzID0gWyAuLi5hcmd1bWVudHMgXTsgIC8vL1xuXG4gICAgbGV0IHsgY2xhc3NOYW1lID0gbnVsbCB9ID0gQ2xhc3NPckZ1bmN0aW9uO1xuXG4gICAgY29uc3Qgc3VwZXJTdHlsZSA9IHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKTtcblxuICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG5cbiAgICBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSk7XG5cbiAgICBjb25zdCBDbGFzc09yRnVuY3Rpb25DbGFzcyA9IGlzQ2xhc3MoQ2xhc3NPckZ1bmN0aW9uKTtcblxuICAgIGlmIChDbGFzc09yRnVuY3Rpb25DbGFzcykge1xuICAgICAgY29uc3QgQ2xhc3MgPSBDbGFzc09yRnVuY3Rpb247ICAvLy9cblxuICAgICAgQ2xhc3NPckZ1bmN0aW9uID0gY2xhc3MgZXh0ZW5kcyBDbGFzcyB7XG4gICAgICAgIHN0YXRpYyBmcm9tQ2xhc3MoX0NsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgICByZXR1cm4gQ2xhc3MuZnJvbUNsYXNzKF9DbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBGdW5jdGlvbiA9IENsYXNzT3JGdW5jdGlvbjsgLy8vXG5cbiAgICAgIENsYXNzT3JGdW5jdGlvbiA9IChwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICByZXR1cm4gRnVuY3Rpb24ocHJvcGVydGllcyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24oQ2xhc3NPckZ1bmN0aW9uLCB7XG4gICAgICBjbGFzc05hbWVcbiAgICB9KTtcblxuICAgIHJldHVybiBDbGFzc09yRnVuY3Rpb247XG4gIH07XG59XG5cbk9iamVjdC5hc3NpZ24od2l0aFN0eWxlLCB7XG4gIHJlbmRlclN0eWxlLFxuICByZW5kZXJTdHlsZXNcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGU7XG5cbnRhZ05hbWVzLmZvckVhY2goKHRhZ05hbWUpID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpdGhTdHlsZSwgdGFnTmFtZSwge1xuICAgIGdldDogKCkgPT4gZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBhcmdzID0gWy4uLmFyZ3VtZW50c10sICAvLy9cbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG5cbiAgICAgIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lKTtcblxuICAgICAgY29uc3QgRnVuY3Rpb24gPSAocHJvcGVydGllcykgPT4ge1xuICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgICB9O1xuXG4gICAgICBPYmplY3QuYXNzaWduKEZ1bmN0aW9uLCB7XG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBGdW5jdGlvbjtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpIHtcbiAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoQ0xBU1NfTkFNRSkgPyBwcm9wZXJ0aWVzIDogeyAuLi5wcm9wZXJ0aWVzLCBjbGFzc05hbWUgfTsgLy8vXG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4vd2l0aFN0eWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENVUlNPUiA9IFwiY3Vyc29yXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBBVVRPX0NVUlNPUiA9IFwiYXV0b1wiO1xuZXhwb3J0IGNvbnN0IFBPSU5URVJfQ1VSU09SID0gXCJwb2ludGVyXCI7XG5leHBvcnQgY29uc3QgQ09MX1JFU0laRV9DVVJTT1IgPSBcImNvbC1yZXNpemVcIjtcbmV4cG9ydCBjb25zdCBST1dfUkVTSVpFX0NVUlNPUiA9IFwicm93LXJlc2l6ZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCb2R5IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IHsgQ1VSU09SIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBBVVRPX0NVUlNPUiwgUE9JTlRFUl9DVVJTT1IsIENPTF9SRVNJWkVfQ1VSU09SLCBST1dfUkVTSVpFX0NVUlNPUiB9IGZyb20gXCIuL2N1cnNvcnNcIjtcblxuY29uc3QgYm9keSA9IG5ldyBCb2R5KCk7XG5cbmxldCBwcmV2aW91c0N1cnNvcjsgIC8vL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDdXJzb3IoKSB7XG4gIHNldEN1cnNvcihwcmV2aW91c0N1cnNvcik7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRlckN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGdldEN1cnJlbnRDdXJzb3IoKTtcblxuICBpZiAoY3VycmVudEN1cnNvciAhPT0gUE9JTlRFUl9DVVJTT1IpIHtcbiAgICBwcmV2aW91c0N1cnNvciA9IGN1cnJlbnRDdXJzb3I7IC8vL1xuXG4gICAgc2V0Q3Vyc29yKFBPSU5URVJfQ1VSU09SKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm93UmVzaXplQ3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gZ2V0Q3VycmVudEN1cnNvcigpO1xuXG4gIGlmIChjdXJyZW50Q3Vyc29yICE9PSBST1dfUkVTSVpFX0NVUlNPUikge1xuICAgIHByZXZpb3VzQ3Vyc29yID0gY3VycmVudEN1cnNvcjsgLy8vXG5cbiAgICBzZXRDdXJzb3IoUk9XX1JFU0laRV9DVVJTT1IpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2x1bW5SZXNpemVDdXJzb3IoKSB7XG4gIGNvbnN0IGN1cnJlbnRDdXJzb3IgPSBnZXRDdXJyZW50Q3Vyc29yKCk7XG5cbiAgaWYgKGN1cnJlbnRDdXJzb3IgIT09IENPTF9SRVNJWkVfQ1VSU09SKSB7XG4gICAgcHJldmlvdXNDdXJzb3IgPSBjdXJyZW50Q3Vyc29yOyAvLy9cblxuICAgIHNldEN1cnNvcihDT0xfUkVTSVpFX0NVUlNPUik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZXNldEN1cnNvcixcbiAgcG9pbnRlckN1cnNvcixcbiAgcm93UmVzaXplQ3Vyc29yLFxuICBjb2x1bW5SZXNpemVDdXJzb3Jcbn1cblxuZnVuY3Rpb24gc2V0Q3Vyc29yKGN1cnNvcikge1xuICBjb25zdCBjc3MgPSB7XG4gICAgY3Vyc29yXG4gIH07XG5cbiAgYm9keS5jc3MoY3NzKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGJvZHkuY3NzKENVUlNPUikgfHwgQVVUT19DVVJTT1I7XG5cbiAgcmV0dXJuIGN1cnJlbnRDdXJzb3I7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBSb3dEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicm93XCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFJvd0RpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgUm93c0RpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyb3dzXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFJvd3NEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIENvbHVtbkRpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb2x1bW5cIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoQ29sdW1uRGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBDb2x1bW5zRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbHVtbnNcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoQ29sdW1uc0RpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRFJBR19FVkVOVF9UWVBFID0gXCJkcmFnXCI7XG5leHBvcnQgY29uc3QgRFJPUF9FVkVOVF9UWVBFID0gXCJkcm9wXCI7XG5leHBvcnQgY29uc3QgRFJBR19PVVRfRVZFTlRfVFlQRSA9IFwiZHJhZ291dFwiO1xuZXhwb3J0IGNvbnN0IERSQUdfT1ZFUl9FVkVOVF9UWVBFID0gXCJkcmFnb3ZlclwiO1xuZXhwb3J0IGNvbnN0IFNUT1BfRFJBR19FVkVOVF9UWVBFID0gXCJzdG9wZHJhZ1wiO1xuZXhwb3J0IGNvbnN0IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSA9IFwic3RhcnRkcmFnXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgRFJBR19FVkVOVF9UWVBFLFxuICBEUk9QX0VWRU5UX1RZUEUsXG4gIERSQUdfT1VUX0VWRU5UX1RZUEUsXG4gIERSQUdfT1ZFUl9FVkVOVF9UWVBFLFxuICBTVE9QX0RSQUdfRVZFTlRfVFlQRSxcbiAgU1RBUlRfRFJBR19FVkVOVF9UWVBFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgU1RBUlRfRFJBR0dJTkdfREVMQVkgPSAxNzU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3VzZVRvcEZyb21FdmVudChldmVudCkge1xuICBjb25zdCB7IHBhZ2VZIH0gPSBldmVudCxcbiAgICAgICAgbW91c2VUb3AgPSBwYWdlWTsgLy8vXG5cbiAgcmV0dXJuIG1vdXNlVG9wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW91c2VMZWZ0RnJvbUV2ZW50KGV2ZW50KSB7XG4gIGNvbnN0IHsgcGFnZVggfSA9IGV2ZW50LFxuICAgICAgICBtb3VzZUxlZnQgPSBwYWdlWDsgIC8vL1xuXG4gIHJldHVybiBtb3VzZUxlZnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHdpbmRvdywgYnV0dG9ucywgZXZlbnRUeXBlcyB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBrZXlDb2RlcywgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiIDtcblxuaW1wb3J0IHsgU1RBUlRfRFJBR0dJTkdfREVMQVkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtb3VzZVRvcEZyb21FdmVudCwgbW91c2VMZWZ0RnJvbUV2ZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ldmVudFwiO1xuaW1wb3J0IHsgRFJBR19FVkVOVF9UWVBFLCBTVE9QX0RSQUdfRVZFTlRfVFlQRSwgU1RBUlRfRFJBR19FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBhc3luY2hyb25vdXNVdGlsaXRpZXMsXG4gICAgICB7IEVTQ0FQRV9LRVlfQ09ERSB9ID0ga2V5Q29kZXMsXG4gICAgICB7IEJMVVJfRVZFTlRfVFlQRSB9ID0gZXZlbnRUeXBlcyxcbiAgICAgIHsgTEVGVF9NT1VTRV9CVVRUT04gfSA9IGJ1dHRvbnM7XG5cbmNvbnN0IGRyYWdFbGVtZW50ID0gbnVsbDtcblxuT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gIGRyYWdFbGVtZW50XG59KTtcblxuZnVuY3Rpb24gb25EcmFnKGRyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZkRyYWcoZHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb25TdG9wRHJhZyhzdG9wRHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gU1RPUF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzdG9wRHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmU3RvcERyYWcoc3RvcERyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IFNUT1BfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gc3RvcERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uU3RhcnREcmFnKHN0YXJ0RHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gU1RBUlRfRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gc3RhcnREcmFnSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZTdGFydERyYWcoc3RhcnREcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzdGFydERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGVuYWJsZURyYWcoKSB7XG4gIGNvbnN0IHsgb25EcmFnLCBvblN0b3BEcmFnLCBvblN0YXJ0RHJhZyB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICBkcmFnSGFuZGxlciA9IG9uRHJhZywgLy8vXG4gICAgICAgIHN0b3BEcmFnSGFuZGxlciA9IG9uU3RvcERyYWcsIC8vL1xuICAgICAgICBzdGFydERyYWdIYW5kbGVyID0gb25TdGFydERyYWcsIC8vL1xuICAgICAgICB0aW1lb3V0ID0gbnVsbCxcbiAgICAgICAgdG9wT2Zmc2V0ID0gbnVsbCxcbiAgICAgICAgbGVmdE9mZnNldCA9IG51bGwsXG4gICAgICAgIHN0YXJ0TW91c2VUb3AgPSBudWxsLFxuICAgICAgICBzdGFydE1vdXNlTGVmdCA9IG51bGw7XG5cbiAgZHJhZ0hhbmRsZXIgJiYgdGhpcy5vbkRyYWcoZHJhZ0hhbmRsZXIpO1xuICBzdG9wRHJhZ0hhbmRsZXIgJiYgdGhpcy5vblN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlcik7XG4gIHN0YXJ0RHJhZ0hhbmRsZXIgJiYgdGhpcy5vblN0YXJ0RHJhZyhzdGFydERyYWdIYW5kbGVyKTtcblxuICB0aGlzLm9uTW91c2VEb3duKG1vdXNlRG93bkhhbmRsZXIsIHRoaXMpO1xuXG4gIHRoaXMuc2V0U3RhdGUoe1xuICAgIHRpbWVvdXQsXG4gICAgdG9wT2Zmc2V0LFxuICAgIGxlZnRPZmZzZXQsXG4gICAgc3RhcnRNb3VzZVRvcCxcbiAgICBzdGFydE1vdXNlTGVmdFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGlzYWJsZURyYWcoKSB7XG4gIGNvbnN0IHsgb25EcmFnLCBvblN0b3BEcmFnLCBvblN0YXJ0RHJhZyB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICBkcmFnSGFuZGxlciA9IG9uRHJhZywgLy8vXG4gICAgICAgIHN0b3BEcmFnSGFuZGxlciA9IG9uU3RvcERyYWcsIC8vL1xuICAgICAgICBzdGFydERyYWdIYW5kbGVyID0gb25TdGFydERyYWc7IC8vL1xuXG4gIGRyYWdIYW5kbGVyICYmIHRoaXMub2ZmRHJhZyhkcmFnSGFuZGxlcik7XG4gIHN0b3BEcmFnSGFuZGxlciAmJiB0aGlzLm9mZlN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlcik7XG4gIHN0YXJ0RHJhZ0hhbmRsZXIgJiYgdGhpcy5vZmZTdGFydERyYWcoc3RhcnREcmFnSGFuZGxlcik7XG5cbiAgdGhpcy5vZmZNb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIGlzRHJhZ2dpbmcoKSB7XG4gIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5oYXNDbGFzcyhcImRyYWdnaW5nXCIpO1xuXG4gIHJldHVybiBkcmFnZ2luZztcbn1cblxuZnVuY3Rpb24gc3RhcnRXYWl0aW5nVG9EcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpIHtcbiAgbGV0IHRpbWVvdXQgPSB0aGlzLmdldFRpbWVvdXQoKTtcblxuICBpZiAodGltZW91dCA9PT0gbnVsbCkge1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRUaW1lb3V0KCk7XG5cbiAgICAgIHRoaXMuc3RhcnREcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpO1xuICAgIH0sIFNUQVJUX0RSQUdHSU5HX0RFTEFZKTtcblxuICAgIHRoaXMudXBkYXRlVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wV2FpdGluZ1RvRHJhZygpIHtcbiAgY29uc3QgdGltZW91dCA9IHRoaXMuZ2V0VGltZW91dCgpO1xuXG4gIGlmICh0aW1lb3V0ICE9PSBudWxsKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXG4gICAgdGhpcy5yZXNldFRpbWVvdXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydERyYWcobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEJvdW5kcygpLFxuICAgICAgICBldmVudFR5cGUgPSBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGJvdW5kc1RvcCA9IGJvdW5kcy5nZXRUb3AoKSxcbiAgICAgICAgYm91bmRzTGVmdCA9IGJvdW5kcy5nZXRMZWZ0KCksXG4gICAgICAgIGJvdW5kc1JpZ2h0ID0gYm91bmRzLmdldFJpZ2h0KCksXG4gICAgICAgIGJvdW5kc0JvdHRvbSA9IGJvdW5kcy5nZXRCb3R0b20oKSxcbiAgICAgICAgYm91bmRzV2lkdGggPSBib3VuZHNSaWdodCAtIGJvdW5kc0xlZnQsXG4gICAgICAgIGJvdW5kc0hlaWdodCA9IGJvdW5kc0JvdHRvbSAtIGJvdW5kc1RvcCxcbiAgICAgICAgdG9wT2Zmc2V0ID0gTWF0aC5mbG9vcihib3VuZHNIZWlnaHQgLyAyKSxcbiAgICAgICAgbGVmdE9mZnNldCA9IE1hdGguZmxvb3IoYm91bmRzV2lkdGggLyAyKSxcbiAgICAgICAgZHJhZ0VsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgc3RhcnRNb3VzZVRvcCA9IG1vdXNlVG9wLCAvLy9cbiAgICAgICAgc3RhcnRNb3VzZUxlZnQgPSBtb3VzZUxlZnQ7IC8vL1xuXG4gIHdpbmRvdy5vbktleURvd24oa2V5RG93bkhhbmRsZXIsIHRoaXMpO1xuXG4gIHdpbmRvdy5vbk1vdXNlTW92ZShtb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcblxuICB0aGlzLmFkZENsYXNzKFwiZHJhZ2dpbmdcIik7XG5cbiAgT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gICAgZHJhZ0VsZW1lbnRcbiAgfSk7XG5cbiAgdGhpcy5zZXRUb3BPZmZzZXQodG9wT2Zmc2V0KTtcblxuICB0aGlzLnNldExlZnRPZmZzZXQobGVmdE9mZnNldCk7XG5cbiAgdGhpcy5zZXRTdGFydE1vdXNlVG9wKHN0YXJ0TW91c2VUb3ApO1xuXG4gIHRoaXMuc2V0U3RhcnRNb3VzZUxlZnQoc3RhcnRNb3VzZUxlZnQpO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSk7XG5cbiAgdGhpcy5kcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpO1xufVxuXG5mdW5jdGlvbiBzdG9wRHJhZyhhYm9ydGVkKSB7XG4gIGNvbnN0IHsgZHJvcEVsZW1lbnQgfSA9IGdsb2JhbFRoaXMsXG4gICAgICAgIGV2ZW50VHlwZSA9IFNUT1BfRFJBR19FVkVOVF9UWVBFO1xuXG4gIHdpbmRvdy5vZmZLZXlEb3duKGtleURvd25IYW5kbGVyLCB0aGlzKTtcblxuICB3aW5kb3cub2ZmTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIHRoaXMpO1xuXG4gIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgdGhpcy5jYWxsSGFuZGxlcnNBc3luYyhldmVudFR5cGUsIGRyb3BFbGVtZW50LCBhYm9ydGVkLCAoKSA9PiB7XG4gICAgICBjb25zdCBkcmFnRWxlbWVudCA9IG51bGw7XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgICAgICBkcmFnRWxlbWVudFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJkcmFnZ2luZ1wiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChkcm9wRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGRyYWdFbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBkcm9wRWxlbWVudC5kcm9wKGRyYWdFbGVtZW50LCBhYm9ydGVkLCBkb25lKTtcbiAgfSBlbHNlIHtcbiAgICBkb25lKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZHJhZyhtb3VzZVRvcCwgbW91c2VMZWZ0KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgc2Nyb2xsVG9wID0gd2luZG93LmdldFNjcm9sbFRvcCgpLFxuICAgICAgICBzY3JvbGxMZWZ0ID0gd2luZG93LmdldFNjcm9sbExlZnQoKSxcbiAgICAgICAgdG9wT2Zmc2V0ID0gdGhpcy5nZXRUb3BPZmZzZXQoKSxcbiAgICAgICAgbGVmdE9mZnNldCA9IHRoaXMuZ2V0TGVmdE9mZnNldCgpLFxuICAgICAgICBzdGFydE1vdXNlVG9wID0gdGhpcy5nZXRTdGFydE1vdXNlVG9wKCksXG4gICAgICAgIHN0YXJ0TW91c2VMZWZ0ID0gdGhpcy5nZXRTdGFydE1vdXNlTGVmdCgpLFxuICAgICAgICByZWxhdGl2ZU1vdXNlVG9wID0gbW91c2VUb3AgLSBzdGFydE1vdXNlVG9wLFxuICAgICAgICByZWxhdGl2ZU1vdXNlTGVmdCA9IG1vdXNlTGVmdCAtIHN0YXJ0TW91c2VMZWZ0O1xuXG4gIGxldCB0b3AgPSBzdGFydE1vdXNlVG9wICsgcmVsYXRpdmVNb3VzZVRvcCAtIHRvcE9mZnNldCAtIHNjcm9sbFRvcCxcbiAgICAgIGxlZnQgPSBzdGFydE1vdXNlTGVmdCArIHJlbGF0aXZlTW91c2VMZWZ0IC0gbGVmdE9mZnNldCAtIHNjcm9sbExlZnQ7XG5cbiAgdG9wID0gYCR7dG9wfXB4YDsgLy8vXG4gIGxlZnQgPSBgJHtsZWZ0fXB4YDsgLy8vXG5cbiAgY29uc3QgY3NzID0ge1xuICAgIHRvcCxcbiAgICBsZWZ0XG4gIH07XG5cbiAgdGhpcy5jc3MoY3NzKTtcblxuICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIHJlbGF0aXZlTW91c2VUb3AsIHJlbGF0aXZlTW91c2VMZWZ0KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZW91dCgpIHtcbiAgY29uc3QgeyB0aW1lb3V0IH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgcmV0dXJuIHRpbWVvdXQ7XG59XG5cbmZ1bmN0aW9uIHJlc2V0VGltZW91dCgpIHtcbiAgY29uc3QgdGltZW91dCA9IG51bGw7XG5cbiAgdGhpcy51cGRhdGVUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUaW1lb3V0KHRpbWVvdXQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgdGltZW91dFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9wT2Zmc2V0KCkge1xuICBjb25zdCB7IHRvcE9mZnNldCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gIHJldHVybiB0b3BPZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIGdldExlZnRPZmZzZXQoKSB7XG4gIGNvbnN0IHsgbGVmdE9mZnNldCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gIHJldHVybiBsZWZ0T2Zmc2V0O1xufVxuXG5mdW5jdGlvbiBnZXRTdGFydE1vdXNlVG9wKCkge1xuICBjb25zdCB7IHN0YXJ0TW91c2VUb3AgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcblxuICByZXR1cm4gc3RhcnRNb3VzZVRvcDtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhcnRNb3VzZUxlZnQoKSB7XG4gIGNvbnN0IHsgc3RhcnRNb3VzZUxlZnQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcblxuICByZXR1cm4gc3RhcnRNb3VzZUxlZnQ7XG59XG5cbmZ1bmN0aW9uIHNldFRvcE9mZnNldCh0b3BPZmZzZXQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgdG9wT2Zmc2V0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRMZWZ0T2Zmc2V0KGxlZnRPZmZzZXQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgbGVmdE9mZnNldFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0U3RhcnRNb3VzZVRvcChzdGFydE1vdXNlVG9wKSB7XG4gIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgIHN0YXJ0TW91c2VUb3BcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldFN0YXJ0TW91c2VMZWZ0KHN0YXJ0TW91c2VMZWZ0KSB7XG4gIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgIHN0YXJ0TW91c2VMZWZ0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVyc0FzeW5jKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGRvbmUgPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCksICAvLy9cbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGZvckVhY2goZXZlbnRMaXN0ZW5lcnMsIChldmVudExpc3RlbmVyLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgeyBoYW5kbGVyLCBlbGVtZW50OiBoYW5kbGVyRWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcywgLy8vXG4gICAgICAgICAgZG9uZSA9IG5leHQ7ICAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50LCBkb25lKTtcbiAgfSwgZG9uZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25EcmFnLFxuICBvZmZEcmFnLFxuICBvblN0b3BEcmFnLFxuICBvZmZTdG9wRHJhZyxcbiAgb25TdGFydERyYWcsXG4gIG9mZlN0YXJ0RHJhZyxcbiAgZW5hYmxlRHJhZyxcbiAgZGlzYWJsZURyYWcsXG4gIGlzRHJhZ2dpbmcsXG4gIHN0YXJ0V2FpdGluZ1RvRHJhZyxcbiAgc3RvcFdhaXRpbmdUb0RyYWcsXG4gIHN0YXJ0RHJhZyxcbiAgc3RvcERyYWcsXG4gIGRyYWcsXG4gIGdldFRpbWVvdXQsXG4gIHJlc2V0VGltZW91dCxcbiAgdXBkYXRlVGltZW91dCxcbiAgZ2V0VG9wT2Zmc2V0LFxuICBnZXRMZWZ0T2Zmc2V0LFxuICBnZXRTdGFydE1vdXNlVG9wLFxuICBnZXRTdGFydE1vdXNlTGVmdCxcbiAgc2V0VG9wT2Zmc2V0LFxuICBzZXRMZWZ0T2Zmc2V0LFxuICBzZXRTdGFydE1vdXNlVG9wLFxuICBzZXRTdGFydE1vdXNlTGVmdCxcbiAgY2FsbEhhbmRsZXJzLFxuICBjYWxsSGFuZGxlcnNBc3luY1xufTtcblxuZnVuY3Rpb24ga2V5RG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgeyBrZXlDb2RlIH0gPSBldmVudCxcbiAgICAgICAgZXNjYXBlS2V5ID0gKGtleUNvZGUgPT09IEVTQ0FQRV9LRVlfQ09ERSksXG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuXG4gIGlmIChlc2NhcGVLZXkpIHtcbiAgICB0aGlzLnN0b3BEcmFnKGFib3J0ZWQpO1xuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91c2VVcEhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKSxcbiAgICAgICAgYWJvcnRlZCA9IGZhbHNlO1xuXG4gIGRyYWdnaW5nID9cbiAgICB0aGlzLnN0b3BEcmFnKGFib3J0ZWQpIDpcbiAgICAgIHRoaXMuc3RvcFdhaXRpbmdUb0RyYWcoKTtcblxuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICB3aW5kb3cub2ZmKEJMVVJfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIHRoaXMpOyAgLy8vXG5cbiAgd2luZG93Lm9mZk1vdXNlVXAobW91c2VVcEhhbmRsZXIsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBtb3VzZURvd25IYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IHsgYnV0dG9uIH0gPSBldmVudDtcblxuICBpZiAoYnV0dG9uID09PSBMRUZUX01PVVNFX0JVVFRPTikge1xuICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nKCk7XG5cbiAgICBpZiAoIWRyYWdnaW5nKSB7XG4gICAgICBjb25zdCBtb3VzZVRvcCA9IG1vdXNlVG9wRnJvbUV2ZW50KGV2ZW50KSxcbiAgICAgICAgICAgIG1vdXNlTGVmdCA9IG1vdXNlTGVmdEZyb21FdmVudChldmVudCk7XG5cbiAgICAgIHRoaXMuc3RhcnRXYWl0aW5nVG9EcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpO1xuICAgIH1cbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gIHdpbmRvdy5vbihCTFVSX0VWRU5UX1RZUEUsIG1vdXNlVXBIYW5kbGVyLCB0aGlzKTsgLy8vXG5cbiAgd2luZG93Lm9uTW91c2VVcChtb3VzZVVwSGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIG1vdXNlTW92ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKTtcblxuICBpZiAoZHJhZ2dpbmcpIHtcbiAgICBjb25zdCBtb3VzZVRvcCA9IG1vdXNlVG9wRnJvbUV2ZW50KGV2ZW50KSxcbiAgICAgICAgICBtb3VzZUxlZnQgPSBtb3VzZUxlZnRGcm9tRXZlbnQoZXZlbnQpO1xuXG4gICAgdGhpcy5kcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpO1xuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIiA7XG5cbmltcG9ydCB7IERST1BfRVZFTlRfVFlQRSwgRFJBR19PVVRfRVZFTlRfVFlQRSwgRFJBR19PVkVSX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5jb25zdCB7IGZvckVhY2ggfSA9IGFzeW5jaHJvbm91c1V0aWxpdGllcztcblxuY29uc3QgZHJvcEVsZW1lbnQgPSBudWxsO1xuXG5PYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgZHJvcEVsZW1lbnRcbn0pO1xuXG5mdW5jdGlvbiBkcm9wKGRyYWdFbGVtZW50LCBhYm9ydGVkLCBkb25lKSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERST1BfRVZFTlRfVFlQRTtcblxuICB0aGlzLmNhbGxIYW5kbGVyc0FzeW5jKGV2ZW50VHlwZSwgZHJhZ0VsZW1lbnQsIGFib3J0ZWQsIGRvbmUpO1xufVxuXG5mdW5jdGlvbiBkcmFnT3V0KGRyYWdFbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1VUX0VWRU5UX1RZUEU7XG5cbiAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBkcmFnRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRyYWdPdmVyKGRyYWdFbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1ZFUl9FVkVOVF9UWVBFO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZHJhZ0VsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvbkRyb3AoZHJvcEhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJPUF9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJvcEhhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJvcChkcm9wSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUk9QX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcm9wSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvbkRyYWdPdXQoZHJhZ091dEhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdPdXRIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZkRyYWdPdXQoZHJhZ091dEhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdPdXRIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uRHJhZ092ZXIoZHJhZ092ZXJIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1ZFUl9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ092ZXJIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZkRyYWdPdmVyKGRyYWdPdmVySGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX09WRVJfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyYWdPdmVySGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBlbmFibGVEcm9wKCkge1xuICBjb25zdCB7IG9uRHJvcCwgb25EcmFnT3V0LCBvbkRyYWdPdmVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGRyb3BIYW5kbGVyID0gb25Ecm9wLCAvLy9cbiAgICAgICAgZHJhZ091dEhhbmRsZXIgPSBvbkRyYWdPdXQsIC8vL1xuICAgICAgICBkcmFnT3ZlckhhbmRsZXIgPSBvbkRyYWdPdmVyOyAvLy9cblxuICBkcm9wSGFuZGxlciAmJiB0aGlzLm9uRHJvcChkcm9wSGFuZGxlcik7XG4gIGRyYWdPdXRIYW5kbGVyICYmIHRoaXMub25EcmFnT3V0KGRyYWdPdXRIYW5kbGVyKTtcbiAgZHJhZ092ZXJIYW5kbGVyICYmIHRoaXMub25EcmFnT3ZlcihkcmFnT3ZlckhhbmRsZXIpO1xuXG4gIHRoaXMub25Nb3VzZU91dChtb3VzZU91dEhhbmRsZXIsIHRoaXMpO1xuICB0aGlzLm9uTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlRHJvcCgpIHtcbiAgY29uc3QgeyBvbkRyb3AsIG9uRHJhZ091dCwgb25EcmFnT3ZlciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICBkcm9wSGFuZGxlciA9IG9uRHJvcCwgLy8vXG4gICAgICAgIGRyYWdPdXRIYW5kbGVyID0gb25EcmFnT3V0LCAvLy9cbiAgICAgICAgZHJhZ092ZXJIYW5kbGVyID0gb25EcmFnT3ZlcjsgLy8vXG5cbiAgZHJvcEhhbmRsZXIgJiYgdGhpcy5vZmZEcm9wKGRyb3BIYW5kbGVyKTtcbiAgZHJhZ091dEhhbmRsZXIgJiYgdGhpcy5vZmZEcmFnT3V0KGRyYWdPdXRIYW5kbGVyKTtcbiAgZHJhZ092ZXJIYW5kbGVyICYmIHRoaXMub2ZmRHJhZ092ZXIoZHJhZ092ZXJIYW5kbGVyKTtcblxuICB0aGlzLm9mZk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgdGhpcyk7XG4gIHRoaXMub2ZmTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVyc0FzeW5jKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGNvbnN0IGRvbmUgPSByZW1haW5pbmdBcmd1bWVudHMucG9wKCksICAvLy9cbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xuXG4gIGZvckVhY2goZXZlbnRMaXN0ZW5lcnMsIChldmVudExpc3RlbmVyLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgeyBoYW5kbGVyLCBlbGVtZW50OiBoYW5kbGVyRWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcywgLy8vXG4gICAgICAgICAgZG9uZSA9IG5leHQ7ICAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50LCBkb25lKTtcbiAgfSwgZG9uZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJvcCxcbiAgZHJhZ091dCxcbiAgZHJhZ092ZXIsXG4gIG9uRHJvcCxcbiAgb2ZmRHJvcCxcbiAgb25EcmFnT3V0LFxuICBvZmZEcmFnT3V0LFxuICBvbkRyYWdPdmVyLFxuICBvZmZEcmFnT3ZlcixcbiAgZW5hYmxlRHJvcCxcbiAgZGlzYWJsZURyb3AsXG4gIGNhbGxIYW5kbGVycyxcbiAgY2FsbEhhbmRsZXJzQXN5bmNcbn1cblxuZnVuY3Rpb24gbW91c2VPdXRIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IHsgZHJhZ0VsZW1lbnQgfSA9IGdsb2JhbFRoaXM7XG5cbiAgaWYgKGRyYWdFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZHJvcEVsZW1lbnQgPSBudWxsOyAvLy9cblxuICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgICAgZHJvcEVsZW1lbnRcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ091dChkcmFnRWxlbWVudCk7XG4gIH1cblxuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuZnVuY3Rpb24gbW91c2VPdmVySGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCB7IGRyYWdFbGVtZW50IH0gPSBnbG9iYWxUaGlzO1xuXG4gIGlmIChkcmFnRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGRyb3BFbGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICBPYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgICAgIGRyb3BFbGVtZW50XG4gICAgfSk7XG5cbiAgICB0aGlzLmRyYWdPdmVyKGRyYWdFbGVtZW50KTtcbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCBkcmFnTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvZHJhZ1wiO1xuXG5jbGFzcyBEcmFnRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICBkaWRNb3VudCgpIHtcbiAgICB0aGlzLmVuYWJsZURyYWcoKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuZGlzYWJsZURyYWcoKTtcbiAgfVxuXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcbiAgICBcIm9uRHJhZ1wiLFxuICAgIFwib25TdGFydERyYWdcIixcbiAgICBcIm9mZlN0YXJ0RHJhZ1wiXG4gIF07XG59XG5cbk9iamVjdC5hc3NpZ24oRHJhZ0VsZW1lbnQucHJvdG90eXBlLCBkcmFnTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKERyYWdFbGVtZW50KWBcblxuICAuZHJhZ2dpbmcge1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCBkcm9wTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvZHJvcFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICBkaWRNb3VudCgpIHtcbiAgICB0aGlzLmVuYWJsZURyb3AoKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuZGlzYWJsZURyb3AoKTtcbiAgfVxuXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcbiAgICBcIm9uRHJvcFwiLFxuICAgIFwib25EcmFnT3V0XCIsXG4gICAgXCJvbkRyYWdPdmVyXCJcbiAgXTtcbn1cblxuT2JqZWN0LmFzc2lnbihEcm9wRWxlbWVudC5wcm90b3R5cGUsIGRyb3BNaXhpbnMpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJhZ01peGlucyB9IGZyb20gXCIuL21peGlucy9kcmFnXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRyb3BNaXhpbnMgfSBmcm9tIFwiLi9taXhpbnMvZHJvcFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmFnRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQvZHJhZ1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcm9wRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQvZHJvcFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgU2l6ZWFibGVEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwic2l6ZWFibGVcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoU2l6ZWFibGVEaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBkcmFnTWl4aW5zIH0gZnJvbSBcImVhc3ktZHJhZy1hbmQtZHJvcFwiO1xuXG5pbXBvcnQgU2l6ZWFibGVEaXYgZnJvbSBcIi4uL2Rpdi9zaXplYWJsZVwiO1xuXG5pbXBvcnQgeyByZXNldEN1cnNvciB9IGZyb20gXCIuLi9jdXJzb3JcIjtcblxuY2xhc3MgU3BsaXR0ZXJEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RvcERyYWdIYW5kbGVyID0gKGRyb3BFbGVtZW50LCBhYm9ydGVkLCBlbGVtZW50LCBkb25lKSA9PiB7XG4gICAgcmVzZXRDdXJzb3IoKTtcblxuICAgIGRvbmUoKTtcbiAgfVxuXG4gIG1vdXNlT3V0SGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHJlc2V0Q3Vyc29yKCk7XG4gIH1cblxuICBnZXRTaXplYWJsZURpdigpIHtcbiAgICBsZXQgc2l6ZWFibGVEaXY7XG5cbiAgICBjb25zdCBuZXh0U2libGluZ0VsZW1lbnQgPSB0aGlzLmdldE5leHRTaWJsaW5nRWxlbWVudCgpLFxuICAgICAgICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSB0aGlzLmdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBuZXh0U2libGluZ0VsZW1lbnRTaXplYWJsZURpdiA9IChuZXh0U2libGluZ0VsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZURpdiksXG4gICAgICAgICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2ID0gKHByZXZpb3VzU2libGluZ0VsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZURpdik7XG5cbiAgICBpZiAobmV4dFNpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYpIHtcbiAgICAgIHNpemVhYmxlRGl2ID0gbmV4dFNpYmxpbmdFbGVtZW50OyAvLy9cbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2KSB7XG4gICAgICBzaXplYWJsZURpdiA9IHByZXZpb3VzU2libGluZ0VsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzaXplYWJsZURpdjtcbiAgfVxuXG4gIGdldERpcmVjdGlvbigpIHtcbiAgICBsZXQgZGlyZWN0aW9uO1xuXG4gICAgY29uc3QgbmV4dFNpYmxpbmdFbGVtZW50ID0gdGhpcy5nZXROZXh0U2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gdGhpcy5nZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50KCksXG4gICAgICAgICAgbmV4dFNpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYgPSAobmV4dFNpYmxpbmdFbGVtZW50IGluc3RhbmNlb2YgU2l6ZWFibGVEaXYpLFxuICAgICAgICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnRTaXplYWJsZURpdiA9IChwcmV2aW91c1NpYmxpbmdFbGVtZW50IGluc3RhbmNlb2YgU2l6ZWFibGVEaXYpO1xuXG4gICAgaWYgKG5leHRTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2KSB7XG4gICAgICBkaXJlY3Rpb24gPSArMTtcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2KSB7XG4gICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0aW9uO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKTtcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5hZGRDbGFzcyhcImRpc2FibGVkXCIpO1xuICB9XG5cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaGFzQ2xhc3MoXCJkaXNhYmxlZFwiKTtcblxuICAgIHJldHVybiBkaXNhYmxlZDtcbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMuZW5hYmxlRHJhZygpO1xuXG4gICAgdGhpcy5vbkRyYWcodGhpcy5kcmFnSGFuZGxlcik7XG5cbiAgICB0aGlzLm9uU3RvcERyYWcodGhpcy5zdG9wRHJhZ0hhbmRsZXIpO1xuXG4gICAgdGhpcy5vblN0YXJ0RHJhZyh0aGlzLnN0YXJ0RHJhZ0hhbmRsZXIpO1xuXG4gICAgdGhpcy5vbk1vdXNlT3Zlcih0aGlzLm1vdXNlT3ZlckhhbmRsZXIpO1xuXG4gICAgdGhpcy5vbk1vdXNlT3V0KHRoaXMubW91c2VPdXRIYW5kbGVyKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMub2ZmTW91c2VPdXQodGhpcy5tb3VzZU91dEhhbmRsZXIpO1xuXG4gICAgdGhpcy5vZmZNb3VzZU92ZXIodGhpcy5tb3VzZU92ZXJIYW5kbGVyKTtcblxuICAgIHRoaXMub2ZmU3RhcnREcmFnKHRoaXMuc3RhcnREcmFnSGFuZGxlcik7XG5cbiAgICB0aGlzLm9mZlN0b3BEcmFnKHRoaXMuc3RvcERyYWdIYW5kbGVyKTtcblxuICAgIHRoaXMub2ZmRHJhZyh0aGlzLmRyYWdIYW5kbGVyKTtcblxuICAgIHRoaXMuZGlzYWJsZURyYWcoKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJvbkRyYWdcIixcbiAgICBcImRpc2FibGVkXCIsXG4gICAgXCJvblN0b3BEcmFnXCIsXG4gICAgXCJvblN0YXJ0RHJhZ1wiXG4gIF07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzcGxpdHRlclwiXG4gIH07XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHNwbGl0dGVyRGl2ID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMpO1xuXG4gICAgcmV0dXJuIHNwbGl0dGVyRGl2O1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oU3BsaXR0ZXJEaXYucHJvdG90eXBlLCBkcmFnTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFNwbGl0dGVyRGl2KWBcblxuICBmbGV4LXNocmluazogMDtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNwbGl0dGVyIGZyb20gXCIuLi9zcGxpdHRlclwiO1xuXG5pbXBvcnQgeyBjb2x1bW5SZXNpemVDdXJzb3IgfSBmcm9tIFwiLi4vLi4vY3Vyc29yXCI7XG5cbmNsYXNzIFZlcnRpY2FsU3BsaXR0ZXIgZXh0ZW5kcyBTcGxpdHRlciB7XG4gIG1vdXNlT3ZlckhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcbiAgICB0aGlzLnNldEN1cnNvcigpO1xuICB9XG5cbiAgc3RhcnREcmFnSGFuZGxlciA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IHNpemVhYmxlRGl2ID0gdGhpcy5nZXRTaXplYWJsZURpdigpLFxuICAgICAgICAgICAgc2l6ZWFibGVEaXZXaWR0aCA9IHNpemVhYmxlRGl2LmdldFdpZHRoKCksXG4gICAgICAgICAgICBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggPSBzaXplYWJsZURpdldpZHRoOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0UHJldmlvdXNTaXplYWJsZURpdldpZHRoKHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgfVxuXG4gIGRyYWdIYW5kbGVyID0gKHJlbGF0aXZlTW91c2VUb3AsIHJlbGF0aXZlTW91c2VMZWZ0KSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCksXG4gICAgICAgICAgICBzaXplYWJsZURpdiA9IHRoaXMuZ2V0U2l6ZWFibGVEaXYoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCA9IHRoaXMuZ2V0UHJldmlvdXNTaXplYWJsZURpdldpZHRoKCksXG4gICAgICAgICAgICBzaXplYWJsZURpdldpZHRoID0gcHJldmlvdXNTaXplYWJsZURpdldpZHRoIC0gZGlyZWN0aW9uICogcmVsYXRpdmVNb3VzZUxlZnQsXG4gICAgICAgICAgICB3aWR0aCA9IHNpemVhYmxlRGl2V2lkdGg7IC8vL1xuXG4gICAgICBzaXplYWJsZURpdi5zZXRXaWR0aCh3aWR0aCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Q3Vyc29yKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBjb2x1bW5SZXNpemVDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2aW91c1NpemVhYmxlRGl2V2lkdGgoKSB7XG4gICAgY29uc3QgeyBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggfSA9IHRoaXMuZ2V0U3RhdGUoKTtcblxuICAgIHJldHVybiBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGg7XG4gIH1cblxuICBzZXRQcmV2aW91c1NpemVhYmxlRGl2V2lkdGgocHJldmlvdXNTaXplYWJsZURpdldpZHRoKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGhcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggPSBudWxsO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGhcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidmVydGljYWxcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVmVydGljYWxTcGxpdHRlcilgXG5cbiAgd2lkdGg6IDFyZW07XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTcGxpdHRlciBmcm9tIFwiLi4vc3BsaXR0ZXJcIjtcblxuaW1wb3J0IHsgcm93UmVzaXplQ3Vyc29yIH0gZnJvbSBcIi4uLy4uL2N1cnNvclwiO1xuXG5jbGFzcyBIb3Jpem9udGFsU3BsaXR0ZXIgZXh0ZW5kcyBTcGxpdHRlciB7XG4gIG1vdXNlT3ZlckhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcbiAgICB0aGlzLnNldEN1cnNvcigpO1xuICB9XG5cbiAgc3RhcnREcmFnSGFuZGxlciA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IHNpemVhYmxlRGl2ID0gdGhpcy5nZXRTaXplYWJsZURpdigpLFxuICAgICAgICAgICAgc2l6ZWFibGVEaXZIZWlnaHQgPSBzaXplYWJsZURpdi5nZXRIZWlnaHQoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQgPSBzaXplYWJsZURpdkhlaWdodDsgIC8vL1xuXG4gICAgICB0aGlzLnNldFByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQocHJldmlvdXNTaXplYWJsZURpdkhlaWdodCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgfVxuXG4gIGRyYWdIYW5kbGVyID0gKHJlbGF0aXZlTW91c2VUb3AsIHJlbGF0aXZlTW91c2VMZWZ0KSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCksXG4gICAgICAgICAgICBzaXplYWJsZURpdiA9IHRoaXMuZ2V0U2l6ZWFibGVEaXYoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQgPSB0aGlzLmdldFByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQoKSxcbiAgICAgICAgICAgIHNpemVhYmxlRGl2SGVpZ2h0ID0gcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCAtIGRpcmVjdGlvbiAqIHJlbGF0aXZlTW91c2VUb3AsXG4gICAgICAgICAgICBoZWlnaHQgPSBzaXplYWJsZURpdkhlaWdodDsgLy8vXG5cbiAgICAgIHNpemVhYmxlRGl2LnNldEhlaWdodChoZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHNldEN1cnNvcigpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgcm93UmVzaXplQ3Vyc29yKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodCgpIHtcbiAgICBjb25zdCB7IHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcblxuICAgIHJldHVybiBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0O1xuICB9XG5cbiAgc2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodChwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0XG4gICAgfSk7XG4gIH1cblxuICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgY29uc3QgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiaG9yaXpvbnRhbFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShIb3Jpem9udGFsU3BsaXR0ZXIpYFxuXG4gIGhlaWdodDogMXJlbTtcblxuYDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3Vyc29yIH0gZnJvbSBcIi4vY3Vyc29yXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm93RGl2IH0gZnJvbSBcIi4vZGl2L3Jvd1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3dzRGl2IH0gZnJvbSBcIi4vZGl2L3Jvd3NcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sdW1uRGl2IH0gZnJvbSBcIi4vZGl2L2NvbHVtblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2x1bW5zRGl2IH0gZnJvbSBcIi4vZGl2L2NvbHVtbnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3BsaXR0ZXJEaXYgfSBmcm9tIFwiLi9kaXYvc3BsaXR0ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2l6ZWFibGVEaXYgfSBmcm9tIFwiLi9kaXYvc2l6ZWFibGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmVydGljYWxTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlci92ZXJ0aWNhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIb3Jpem9udGFsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiLi9kaXYvc3BsaXR0ZXIvaG9yaXpvbnRhbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DVVNUT01fR1JBTU1BUl9OQU1FID0gXCJEZWZhdWx0XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVJNX1JVTEVfTkFNRSA9IFwidGVybVwiO1xuZXhwb3J0IGNvbnN0IFNUQVRFTUVOVF9SVUxFX05BTUUgPSBcInN0YXRlbWVudFwiO1xuZXhwb3J0IGNvbnN0IE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FID0gXCJtZXRhc3RhdGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVSTV9SVUxFX05BTUUsXG4gIFNUQVRFTUVOVF9SVUxFX05BTUUsXG4gIE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVFlQRV9QQVRURVJOX05BTUUgPSBcInR5cGVcIjtcbmV4cG9ydCBjb25zdCBTWU1CT0xfUEFUVEVSTl9OQU1FID0gXCJzeW1ib2xcIjtcbmV4cG9ydCBjb25zdCBPUEVSQVRPUl9QQVRURVJOX05BTUUgPSBcIm9wZXJhdG9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVFlQRV9QQVRURVJOX05BTUUsXG4gIFNZTUJPTF9QQVRURVJOX05BTUUsXG4gIE9QRVJBVE9SX1BBVFRFUk5fTkFNRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgVkVSVElDQUxfQkFSID0gXCJ8XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgVEVSTV9SVUxFX05BTUUsIFNUQVRFTUVOVF9SVUxFX05BTUUsIE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FIH0gZnJvbSBcIi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBUWVBFX1BBVFRFUk5fTkFNRSwgU1lNQk9MX1BBVFRFUk5fTkFNRSwgT1BFUkFUT1JfUEFUVEVSTl9OQU1FIH0gZnJvbSBcIi4vcGF0dGVybk5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUdyYW1tYXIge1xuICBjb25zdHJ1Y3RvcihuYW1lLCB0ZXJtQk5GLCBzdGF0ZW1lbnRCTkYsIG1ldGFzdGF0ZW1lbnRCTkYsIHR5cGVQYXR0ZXJuLCBzeW1ib2xQYXR0ZXJuLCBvcGVyYXRvclBhdHRlcm4pIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudGVybUJORiA9IHRlcm1CTkY7XG4gICAgdGhpcy5zdGF0ZW1lbnRCTkYgPSBzdGF0ZW1lbnRCTkY7XG4gICAgdGhpcy5tZXRhc3RhdGVtZW50Qk5GID0gbWV0YXN0YXRlbWVudEJORjtcbiAgICB0aGlzLnR5cGVQYXR0ZXJuID0gdHlwZVBhdHRlcm47XG4gICAgdGhpcy5zeW1ib2xQYXR0ZXJuID0gc3ltYm9sUGF0dGVybjtcbiAgICB0aGlzLm9wZXJhdG9yUGF0dGVybiA9IG9wZXJhdG9yUGF0dGVybjtcbiAgfVxuICBcbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0Qk5GKHJ1bGVOYW1lID0gbnVsbCkge1xuICAgIGxldCBibmY7XG5cbiAgICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgICBjYXNlIFRFUk1fUlVMRV9OQU1FOiBibmYgPSB0aGlzLnRlcm1CTkY7IGJyZWFrO1xuICAgICAgY2FzZSBTVEFURU1FTlRfUlVMRV9OQU1FOiBibmYgPSB0aGlzLnN0YXRlbWVudEJORjsgYnJlYWs7XG4gICAgICBjYXNlIE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FOiBibmYgPSB0aGlzLm1ldGFzdGF0ZW1lbnRCTkY7IGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lcyA9IFtcbiAgICAgICAgICAgICAgICBURVJNX1JVTEVfTkFNRSxcbiAgICAgICAgICAgICAgICBTVEFURU1FTlRfUlVMRV9OQU1FLFxuICAgICAgICAgICAgICAgIE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNvbWJpbmVkQk5GID0gcnVsZU5hbWVzLnJlZHVjZSgoY29tYmluZWRCTkYsIHJ1bGVOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgYm5mID0gdGhpcy5nZXRCTkYocnVsZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKGJuZiAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICBjb21iaW5lZEJORiA9IGAke2NvbWJpbmVkQk5GfVxuICAgICAgICAgICAgXG4ke2JuZn1gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb21iaW5lZEJORjtcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgICBibmYgPSBjb21iaW5lZEJORjsgIC8vL1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBibmY7XG4gIH1cblxuICBnZXRQYXR0ZXJuKHBhdHRlcm5OYW1lKSB7XG4gICAgbGV0IHBhdHRlcm47XG5cbiAgICBzd2l0Y2ggKHBhdHRlcm5OYW1lKSB7XG4gICAgICBjYXNlIFRZUEVfUEFUVEVSTl9OQU1FOiBwYXR0ZXJuID0gdGhpcy50eXBlUGF0dGVybjsgYnJlYWs7XG4gICAgICBjYXNlIFNZTUJPTF9QQVRURVJOX05BTUU6IHBhdHRlcm4gPSB0aGlzLnN5bWJvbFBhdHRlcm47IGJyZWFrO1xuICAgICAgY2FzZSBPUEVSQVRPUl9QQVRURVJOX05BTUU6IHBhdHRlcm4gPSB0aGlzLm9wZXJhdG9yUGF0dGVybjsgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdHRlcm47XG4gIH1cblxuICBnZXRQYXR0ZXJucygpIHtcbiAgICBjb25zdCBwYXR0ZXJucyA9IFtcbiAgICAgIHRoaXMudHlwZVBhdHRlcm4sXG4gICAgICB0aGlzLnN5bWJvbFBhdHRlcm4sXG4gICAgICB0aGlzLm9wZXJhdG9yUGF0dGVyblxuICAgIF07XG5cbiAgICByZXR1cm4gcGF0dGVybnM7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0Qk5GKHJ1bGVOYW1lLCBibmYpIHtcbiAgICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgICBjYXNlIFRFUk1fUlVMRV9OQU1FOlxuICAgICAgICB0aGlzLnRlcm1CTkYgPSBibmY7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU1RBVEVNRU5UX1JVTEVfTkFNRTpcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRCTkYgPSBibmY7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTUVUQVNUQVRFTUVOVF9SVUxFX05BTUU6XG4gICAgICAgIHRoaXMubWV0YXN0YXRlbWVudEJORiA9IGJuZjtcblxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXRQYXR0ZXJuKHBhdHRlcm5OYW1lLCBwYXR0ZXJuKSB7XG4gICAgc3dpdGNoIChwYXR0ZXJuTmFtZSkge1xuICAgICAgY2FzZSBUWVBFX1BBVFRFUk5fTkFNRTpcbiAgICAgICAgdGhpcy50eXBlUGF0dGVybiA9IHBhdHRlcm47XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU1lNQk9MX1BBVFRFUk5fTkFNRTpcbiAgICAgICAgdGhpcy5zeW1ib2xQYXR0ZXJuID0gcGF0dGVybjtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBPUEVSQVRPUl9QQVRURVJOX05BTUU6XG4gICAgICAgIHRoaXMub3BlcmF0b3JQYXR0ZXJuID0gcGF0dGVybjtcblxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXNldEJORihydWxlTmFtZSkge1xuICAgIGNvbnN0IGJuZiA9IEVNUFRZX1NUUklORztcblxuICAgIHRoaXMuc2V0Qk5GKHJ1bGVOYW1lLCBibmYpO1xuICB9XG5cbiAgcmVzZXRQYXR0ZXJuKHBhdHRlcm5OYW1lKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IEVNUFRZX1NUUklORztcblxuICAgIHRoaXMuc2V0UGF0dGVybihwYXR0ZXJuTmFtZSwgcGF0dGVybik7XG4gIH1cblxuICB1cGRhdGUocnVsZU5hbWUsIGJuZiwgcGF0dGVybk5hbWUsIHBhdHRlcm4pIHtcbiAgICB0aGlzLnNldEJORihydWxlTmFtZSwgYm5mKTtcblxuICAgIHRoaXMuc2V0UGF0dGVybihwYXR0ZXJuTmFtZSwgcGF0dGVybik7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgICB0ZXJtQk5GID0gdGhpcy50ZXJtQk5GLFxuICAgICAgICAgIHN0YXRlbWVudEJORiA9IHRoaXMuc3RhdGVtZW50Qk5GLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnRCTkYgPSB0aGlzLm1ldGFzdGF0ZW1lbnRCTkYsXG4gICAgICAgICAgdHlwZVBhdHRlcm4gPSB0aGlzLnR5cGVQYXR0ZXJuLFxuICAgICAgICAgIHN5bWJvbFBhdHRlcm4gPSB0aGlzLnN5bWJvbFBhdHRlcm4sXG4gICAgICAgICAgb3BlcmF0b3JQYXR0ZXJuID0gdGhpcy5vcGVyYXRvclBhdHRlcm4sXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0ZXJtQk5GLFxuICAgICAgICAgICAgc3RhdGVtZW50Qk5GLFxuICAgICAgICAgICAgbWV0YXN0YXRlbWVudEJORixcbiAgICAgICAgICAgIHR5cGVQYXR0ZXJuLFxuICAgICAgICAgICAgc3ltYm9sUGF0dGVybixcbiAgICAgICAgICAgIG9wZXJhdG9yUGF0dGVyblxuICAgICAgICAgIH07XG4gICAgXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbikge1xuICAgIGNvbnN0IHsgbmFtZSwgdGVybUJORiwgc3RhdGVtZW50Qk5GLCBtZXRhc3RhdGVtZW50Qk5GLCB0eXBlUGF0dGVybiwgc3ltYm9sUGF0dGVybiwgb3BlcmF0b3JQYXR0ZXJuIH0gPSBqc29uLFxuICAgICAgICAgIGN1c3RvbUdyYW1tYXIgPSBuZXcgQ3VzdG9tR3JhbW1hcihuYW1lLCB0ZXJtQk5GLCBzdGF0ZW1lbnRCTkYsIG1ldGFzdGF0ZW1lbnRCTkYsIHR5cGVQYXR0ZXJuLCBzeW1ib2xQYXR0ZXJuLCBvcGVyYXRvclBhdHRlcm4pO1xuXG4gICAgcmV0dXJuIGN1c3RvbUdyYW1tYXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5hbWUobmFtZSkge1xuICAgIGNvbnN0IHRlcm1CTkYgPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgc3RhdGVtZW50Qk5GID0gRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnRCTkYgPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgdHlwZVBhdHRlcm4gPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgc3ltYm9sUGF0dGVybiA9IEVNUFRZX1NUUklORyxcbiAgICAgICAgICBvcGVyYXRvclBhdHRlcm4gPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgY3VzdG9tR3JhbW1hciA9IG5ldyBDdXN0b21HcmFtbWFyKG5hbWUsIHRlcm1CTkYsIHN0YXRlbWVudEJORiwgbWV0YXN0YXRlbWVudEJORiwgdHlwZVBhdHRlcm4sIHN5bWJvbFBhdHRlcm4sIG9wZXJhdG9yUGF0dGVybik7XG5cbiAgICByZXR1cm4gY3VzdG9tR3JhbW1hcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTmFtZVRlcm1CTkZTdGF0ZW1lbnRCTkZNZXRhc3RhdGVtZW50Qk5GVHlwZVBhdHRlcm5TeW1ib2xQYXR0ZXJuQW5kT3BlcmF0b3JQYXR0ZXJuKG5hbWUsIHRlcm1CTkYsIHN0YXRlbWVudEJORiwgbWV0YXN0YXRlbWVudEJORiwgdHlwZVBhdHRlcm4sIHN5bWJvbFBhdHRlcm4sIG9wZXJhdG9yUGF0dGVybikge1xuICAgIGNvbnN0IGN1c3RvbUdyYW1tYXIgPSBuZXcgQ3VzdG9tR3JhbW1hcihuYW1lLCB0ZXJtQk5GLCBzdGF0ZW1lbnRCTkYsIG1ldGFzdGF0ZW1lbnRCTkYsIHR5cGVQYXR0ZXJuLCBzeW1ib2xQYXR0ZXJuLCBvcGVyYXRvclBhdHRlcm4pO1xuXG4gICAgcmV0dXJuIGN1c3RvbUdyYW1tYXI7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86XFxcXCRcXFxcJHxcXFxcJHxcXFxcXFxcXFxcXFwofFxcXFxcXFxcXFxcXCl8XFxcXFxcXFxcXFxcW3xcXFxcXFxcXFxcXFxdKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeKD86Lis/KD89XFxcXCRcXFxcJHxcXFxcJHxcXFxcXFxcXFxcXFwofFxcXFxcXFxcXFxcXCl8XFxcXFxcXFxcXFxcW3xcXFxcXFxcXFxcXFxdKXwuKylcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcblxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVYTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuO1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhUZVhMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKFRlWExleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKFRlWExleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBkZWxpbWl0ZWRUZVggfCBldmVyeXRoaW5nRWxzZSApKyA7XG4gICAgXG4gICAgXG4gICAgXG4gICAgZGVsaW1pdGVkVGVYICAgICAgICAgICAgICAgICAgICA6Oj0gICBkb2xsYXJEZWxpbWl0ZXIgaW5saW5lVGVYIGRvbGxhckRlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGRvdWJsZURvbGxhckRlbGltaXRlciBkaXNwbGF5VGVYIGRvdWJsZURvbGxhckRlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZW5pbmdCcmFja2V0RGVsaW1pdGVyIGlubGluZVRlWCBjbG9zaW5nQnJhY2tldERlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZW5pbmdTcXVhcmVCcmFja2V0RGVsaW1pdGVyIGRpc3BsYXlUZVggY2xvc2luZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgXG5cbiAgICBcbiAgICBpbmxpbmVUZVggICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFt1bmFzc2lnbmVkXSogO1xuXG4gICAgZGlzcGxheVRlWCAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbdW5hc3NpZ25lZF0qIDtcblxuXG5cbiAgICBkb2xsYXJEZWxpbWl0ZXIgICAgICAgICAgICAgICAgIDo6PSAgIFwiJFwiIDtcbiBcbiAgICBkb3VibGVEb2xsYXJEZWxpbWl0ZXIgICAgICAgICAgIDo6PSAgIFwiJCRcIiA7XG4gICAgXG5cbiAgICBcbiAgICBvcGVuaW5nQnJhY2tldERlbGltaXRlciAgICAgICAgIDo6PSAgIFwiXFxcXChcIiA7XG5cbiAgICBjbG9zaW5nQnJhY2tldERlbGltaXRlciAgICAgICAgIDo6PSAgIFwiXFxcXClcIiA7XG5cbiAgICBvcGVuaW5nU3F1YXJlQnJhY2tldERlbGltaXRlciAgIDo6PSAgIFwiXFxcXFtcIiA7XG4gICAgXG4gICAgY2xvc2luZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgICA6Oj0gICBcIlxcXFxdXCIgO1xuICAgIFxuICAgIFxuICAgIFxuICAgIGV2ZXJ5dGhpbmdFbHNlICAgICAgICAgICAgICAgICAgOjo9ICAgLiA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZVhQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhUZVhQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihUZVhQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFRlWFBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuOyAgLy8uXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKFBsYWluTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhQbGFpbkxleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKFBsYWluTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuXG4gICAgZG9jdW1lbnQgICAgICAgOjo9ICAoIGxpbmUgfCB2ZXJ0aWNhbFNwYWNlICkrIDtcblxuXG4gICAgbGluZSAgICAgICAgICAgOjo9ICBbdW5hc3NpZ25lZF0rIDtcblxuXG4gICAgdmVydGljYWxTcGFjZSAgOjo9ICA8RU5EX09GX0xJTkU+KyA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbGFpblBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKFBsYWluUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoUGxhaW5QYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFBsYWluUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZG1lTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuO1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhSZWFkbWVMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKFJlYWRtZUxleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKFJlYWRtZUxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgIDo6PSAgKCBsaW5lIHwgdmVydGljYWxTcGFjZSApKyA7XG5cblxuICAgIGxpbmUgICAgICAgICAgIDo6PSAgW3VuYXNzaWduZWRdKyA7XG5cblxuICAgIHZlcnRpY2FsU3BhY2UgIDo6PSAgPEVORF9PRl9MSU5FPisgO1xuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZG1lUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoUmVhZG1lUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoUmVhZG1lUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhSZWFkbWVQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzosfDp8XFxcXFt8XFxcXF18XFxcXHt8XFxcXH0pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLFxyXG4gICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sXHJcbiAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFKU09OTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhNZXRhSlNPTkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoTWV0YUpTT05MZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhNZXRhSlNPTkxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICAgOjo9ICAoIG1ldGFKU09OIGVycm9yKiApIHwgZXJyb3IrIDtcblxuXG4gICAgbWV0YUpTT04gICAgICAgICAgICAgICAgICA6Oj0gIFwie1wiIFxuICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcXFxcInZlcnNpb25cXFxcXCJcIiBcIjpcIiB2ZXJzaW9uIFwiLFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxcXFwicmVwb3NpdG9yeVxcXFxcIlwiIFwiOlwiIHJlcG9zaXRvcnkgXCIsXCJcbiAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxcXFwiZGVwZW5kZW5jaWVzXFxcXFwiXCIgXCI6XCIgZGVwZW5kZW5jaWVzIFxuICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ9XCIgO1xuICAgICAgXG5cbiAgICB2ZXJzaW9uICAgICAgICAgICAgICAgICAgIDo6PSAgdmVyc2lvbk51bWJlciA7XG5cblxuICAgIHJlcG9zaXRvcnkgICAgICAgICAgICAgICAgOjo9ICBbc3RyaW5nLWxpdGVyYWxdIDtcblxuXG4gICAgZGVwZW5kZW5jeSAgICAgICAgICAgICAgICA6Oj0gIG5hbWUgXCI6XCIgc2hvcnRlbmVkVmVyc2lvbk51bWJlciA7XG5cblxuICAgIGRlcGVuZGVuY2llcyAgICAgICAgICAgICAgOjo9ICBcIntcIiBcbiAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGRlcGVuZGVuY3kgKCBcIixcIiBkZXBlbmRlbmN5ICkqICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ9XCIgO1xuICAgICAgXG5cbiAgICBuYW1lICAgICAgICAgICAgICAgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cblxuICAgIHZlcnNpb25OdW1iZXIgICAgICAgICAgICAgOjo9ICAvXCIoPzowfCg/OlsxLTldXFxcXGQqKSlcXFxcLig/OjB8KD86WzEtOV1cXFxcZCopKVxcXFwuKD86MHwoPzpbMS05XVxcXFxkKikpXFxcXFwiLyA7XG4gIFxuICBcbiAgICBzaG9ydGVuZWRWZXJzaW9uTnVtYmVyICAgIDo6PSAgL1wiKD86MHwoPzpbMS05XVxcXFxkKikpXFxcXC4oPzowfCg/OlsxLTldXFxcXGQqKSlcXFxcXCIvIDtcbiAgXG4gIFxuICAgIGVycm9yICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhSlNPTlBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKE1ldGFKU09OUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoTWV0YUpTT05QYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKE1ldGFKU09OUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86LHw6Onw6fFxcXFx8LXxcXFxcfD18XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF18XFxcXC5cXFxcLlxcXFwuKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImtleXdvcmRcIjogXCJeKD86UnVsZXxBeGlvbXxUaGVvcmVtfExlbW1hfENvbmplY3R1cmV8TWV0YWxlbW1hfE1ldGF0aGVvcmVtfFByZW1pc2VzfFByZW1pc2V8Q29uY2x1c2lvbnxQcm9vZnxUaGVyZWZvcmV8U3VwcG9zZXxIZW5jZXxUaGVufFR5cGV8VmFyaWFibGV8Q29uc3RydWN0b3J8Q29tYmluYXRvcnxEZXBlbmRlbnRUeXBlfERpc2pvaW50VHlwZXxNZXRhdmFyaWFibGV8ZnJvbXxieXx1bmRlZmluZWR8ZnJlZXxub3R8aW58aXMpXFxcXGJcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJtZXRhLXR5cGVcIjogXCJeKD86U3RhdGVtZW50fENvbnRleHQpXFxcXGJcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwiXltBLVphLXpcdTAzOTEtXHUwM0E5XHUwM0IxLVx1MDNDOV8wLTldK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlcixcclxuICAgICAgICAgV2hpdGVzcGFjZVRva2VuLFxyXG4gICAgICAgICBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLFxyXG4gICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXHJcbiAgICAgICAgIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuLFxyXG4gICAgICAgICBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3JlbmNlTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAgLy8vXHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47ICAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEZsb3JlbmNlTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhGbG9yZW5jZUxleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKEZsb3JlbmNlTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBkb2N1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCB0b3BMZXZlbERlY2xhcmF0aW9uIHwgdmVydGljYWxTcGFjZSB8IGVycm9yICkrIDtcblxuXG5cbnRvcExldmVsRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICA6Oj0gICB0eXBlRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgdmFyaWFibGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBjb21iaW5hdG9yRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBkaXNqb2ludFR5cGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBkZXBlbmRlbnRUeXBlRGVjbGFyYXRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgcnVsZSBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGF4aW9tIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbGVtbWEgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB0aGVvcmVtIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgY29uamVjdHVyZSBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG1ldGFsZW1tYSBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cblxudmVydGljYWxTcGFjZSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIDxFTkRfT0ZfTElORT4rIDtcblxuXG5cbmVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAuIDtcblxuXG5cbnR5cGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlR5cGVcIiB0eXBlICggXCI6XCIgdHlwZSApPyA8RU5EX09GX0xJTkU+IDtcbiBcbnZhcmlhYmxlRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICA6Oj0gICBcIlZhcmlhYmxlXCIgdmFyaWFibGUgKCBcIjpcIiB0eXBlICk/IDxFTkRfT0ZfTElORT4gO1xuIFxuY29tYmluYXRvckRlY2xhcmF0aW9uICAgICAgICAgICAgICAgIDo6PSAgIFwiQ29tYmluYXRvclwiIHN0YXRlbWVudC4uLiA8RU5EX09GX0xJTkU+IDtcbiBcbmNvbnN0cnVjdG9yRGVjbGFyYXRpb24gICAgICAgICAgICAgICA6Oj0gICBcIkNvbnN0cnVjdG9yXCIgdGVybS4uLiAoIFwiOlwiIHR5cGUgKT8gPEVORF9PRl9MSU5FPiA7XG4gXG5kaXNqb2ludFR5cGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgOjo9ICAgXCJEaXNqb2ludFR5cGVcIiBkaXNqb2ludFR5cGUgXCI6XCIgdHlwZSAoIFwiLFwiIHR5cGUgKSsgPEVORF9PRl9MSU5FPiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uICAgICAgICAgICAgICA6Oj0gICBcIk1ldGF2YXJpYWJsZVwiIG1ldGF2YXJpYWJsZSBcIjpcIiBtZXRhVHlwZSA8RU5EX09GX0xJTkU+IDtcbiBcbmRlcGVuZGVudFR5cGVEZWNsYXJhdGlvbiAgICAgICAgICAgICA6Oj0gICBcIkRlcGVuZGVudFR5cGVcIiBkZXBlbmRlbnRUeXBlIFwiOlwiIHR5cGUgPEVORF9PRl9MSU5FPiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gIFxucnVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiUnVsZVwiIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCJQcmVtaXNlc1wiIDxFTkRfT0ZfTElORT4gcHJlbWlzZSBwcmVtaXNlKyApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiUHJlbWlzZVwiIDxFTkRfT0ZfTElORT4gcHJlbWlzZSApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29uY2x1c2lvblwiIDxFTkRfT0ZfTElORT4gY29uY2x1c2lvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlUHJvb2Y/ICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbnJ1bGVQcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByb29mXCIgPEVORF9PRl9MSU5FPiBydWxlRGVyaXZhdGlvbiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbnJ1bGVTdWJwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiUHJlbWlzZXNcIiA8RU5EX09GX0xJTkU+IHByZW1pc2UgcHJlbWlzZSsgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIlByZW1pc2VcIiA8RU5EX09GX0xJTkU+IHByZW1pc2UgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZVN1YkRlcml2YXRpb24gOyBcblxucnVsZURlcml2YXRpb24gICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIChcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBydWxlU3VicHJvb2YgfCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ICkrICBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVyZWZvcmVcIiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCApIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbnJ1bGVTdWJEZXJpdmF0aW9uICAgICAgICAgICAgICAgICAgICA6Oj0gICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSGVuY2VcIiA8RU5EX09GX0xJTkU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcnVsZVN1YnByb29mIHwgcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCApKyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ICkgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuXG5cbm1ldGFsZW1tYSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIk1ldGFsZW1tYVwiICggXCIoXCIgbGFiZWwgKCBcIixcIiBsYWJlbCApKiBcIilcIiApPyA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IG1ldGFTdXBwb3NpdGlvbisgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVuXCIgPEVORF9PRl9MSU5FPiBtZXRhQ29uc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YUNvbnNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhcHJvb2YgO1xuXG5tZXRhdGhlb3JlbSAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJNZXRhdGhlb3JlbVwiIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBtZXRhU3VwcG9zaXRpb24rIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gbWV0YUNvbnNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFDb25zZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXByb29mIDtcblxuXG5cbm1ldGFwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByb29mXCIgPEVORF9PRl9MSU5FPiBtZXRhRGVyaXZhdGlvbiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbm1ldGFEZXJpdmF0aW9uICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCApKyAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlcmVmb3JlXCIgPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5heGlvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJBeGlvbVwiIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbmNlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgO1xuXG5sZW1tYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJMZW1tYVwiICggXCIoXCIgbGFiZWwgKCBcIixcIiBsYWJlbCApKiBcIilcIiApPyA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IHN1cHBvc2l0aW9uK1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gY29uc2VxdWVuY2UgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb29mIDtcblxudGhlb3JlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiVGhlb3JlbVwiIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbmNlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZiA7XG5cbmNvbmplY3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIkNvbmplY3R1cmVcIiBcIihcIiBsYWJlbCAoIFwiLFwiIGxhYmVsICkqIFwiKVwiIDxFTkRfT0ZfTElORT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbmNlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZj8gO1xuXG5cblxucHJvb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiUHJvb2ZcIiA8RU5EX09GX0xJTkU+IGRlcml2YXRpb24gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbnN1YnByb29mICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IHN1cHBvc2l0aW9uKyBzdWJEZXJpdmF0aW9uIDtcblxuZGVyaXZhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIChcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzdWJwcm9vZiB8IHF1YWxpZmllZFN0YXRlbWVudCB8IHVucXVhbGlmaWVkU3RhdGVtZW50ICkrIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZXJlZm9yZVwiIDxFTkRfT0ZfTElORT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkU3RhdGVtZW50IHwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgKSA7XG5cbnN1YkRlcml2YXRpb24gICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSGVuY2VcIiA8RU5EX09GX0xJTkU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3VicHJvb2YgfCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCB1bnF1YWxpZmllZFN0YXRlbWVudCApKyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCB1bnF1YWxpZmllZFN0YXRlbWVudCApIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cblxuXG5wcmVtaXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50IDtcblxuY29uY2x1c2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCA7XG5cblxuXG5tZXRhU3VwcG9zaXRpb24gICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50IDtcblxubWV0YUNvbnNlcXVlbmNlICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCA7XG5cblxuXG5zdXBwb3NpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgO1xuXG5jb25zZXF1ZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgO1xuXG5cblxudW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ISAgICAgICAgICAgIDo6PSAgIG1ldGFzdGF0ZW1lbnQuLi4gPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG5vbnNlbnNlLi4uIDxFTkRfT0ZfTElORT4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxucXVhbGlmaWVkTWV0YXN0YXRlbWVudCEgICAgICAgICAgICAgIDo6PSAgIG1ldGFzdGF0ZW1lbnQuLi4gcXVhbGlmaWNhdGlvbiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbm9uc2Vuc2UuLi4gcXVhbGlmaWNhdGlvbiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxudW5xdWFsaWZpZWRTdGF0ZW1lbnQhICAgICAgICAgICAgICAgIDo6PSAgIHN0YXRlbWVudC4uLiA8RU5EX09GX0xJTkU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBub25zZW5zZS4uLiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbnF1YWxpZmllZFN0YXRlbWVudCEgICAgICAgICAgICAgICAgICA6Oj0gICBzdGF0ZW1lbnQuLi4gcXVhbGlmaWNhdGlvbiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbm9uc2Vuc2UuLi4gcXVhbGlmaWNhdGlvbiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuXG5xdWFsaWZpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBcImJ5XCIgfCBcImZyb21cIiApIHJlZmVyZW5jZSA7XG5cblxuXG5ub25zZW5zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBcImJ5XCIgfCBcImZyb21cIiB8IFt0eXBlXSB8IFtvcGVyYXRvcl0gfCBbc3BlY2lhbF0gfCBbcmVzZXJ2ZWRdIHwgW25hbWVdIHwgW3VuYXNzaWduZWRdICkrIDtcblxuXG5cbm1ldGFBcmd1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBzdGF0ZW1lbnQgfCBtZXRhVHlwZSA7XG5cbmFyZ3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICB0ZXJtIHwgdHlwZSA7XG5cblxuXG5kZXBlbmRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW3R5cGVdPE5PX1dISVRFU1BBQ0U+XCIoXCIgYXJndW1lbnQgXCIpXCIgO1xuXG5kaXNqb2ludFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW3R5cGVdIDtcblxubWV0YVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFttZXRhLXR5cGVdIDtcblxudHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFt0eXBlXSA7XG5cblxuXG5tZXRhdmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgYXJndW1lbnQgXCIpXCIgKT8gO1xuXG5yZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgdGVybS4uLiBcIilcIiApPyA7XG5cbmNvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbbmFtZV0gKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiB0ZXJtLi4uIFwiKVwiICk/IDtcblxubGFiZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFtuYW1lXSAoIDxOT19XSElURVNQQUNFPlwiKFwiIHRlcm0uLi4gXCIpXCIgKT8gO1xuXG52YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdIDtgO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3JlbmNlUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hckJORkxleGVyIGV4dGVuZHMgQk5GTGV4ZXIge31cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZQYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyQk5GUGFyc2VyIGV4dGVuZHMgQk5GUGFyc2VyIHt9XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXi5cIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyUGF0dGVybkxleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XG5cbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcblxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xuXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xuXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQ3VzdG9tR3JhbW1hclBhdHRlcm5MZXhlcik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQ3VzdG9tR3JhbW1hclBhdHRlcm5MZXhlciwgcnVsZXMpOyB9XG5cbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKEN1c3RvbUdyYW1tYXJQYXR0ZXJuTGV4ZXIsIGVudHJpZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICA6Oj0gIHBhdHRlcm4gKCB2ZXJ0aWNhbFNwYWNlIHwgZXJyb3IgKSogfCAoIHZlcnRpY2FsU3BhY2UgfCBlcnJvciApKyA7XG5cblxuICAgIHBhdHRlcm4gICAgICAgIDo6PSAgW3VuYXNzaWduZWRdKyA7XG5cblxuICAgIHZlcnRpY2FsU3BhY2UgIDo6PSAgPEVORF9PRl9MSU5FPisgO1xuXG5cbiAgICBlcnJvciAgICAgICAgICA6Oj0gIC4gO1xuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hclBhdHRlcm5QYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhDdXN0b21HcmFtbWFyUGF0dGVyblBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEN1c3RvbUdyYW1tYXJQYXR0ZXJuUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhDdXN0b21HcmFtbWFyUGF0dGVyblBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZVhMZXhlciB9IGZyb20gXCIuL3RlWC9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZVhQYXJzZXIgfSBmcm9tIFwiLi90ZVgvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBsYWluTGV4ZXIgfSBmcm9tIFwiLi9wbGFpbi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbGFpblBhcnNlciB9IGZyb20gXCIuL3BsYWluL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFkbWVMZXhlciB9IGZyb20gXCIuL3JlYWRtZS9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWFkbWVQYXJzZXIgfSBmcm9tIFwiLi9yZWFkbWUvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1ldGFKU09OTGV4ZXIgfSBmcm9tIFwiLi9tZXRhSlNPTi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZXRhSlNPTlBhcnNlciB9IGZyb20gXCIuL21ldGFKU09OL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9yZW5jZUxleGVyIH0gZnJvbSBcIi4vZmxvcmVuY2UvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvcmVuY2VQYXJzZXIgfSBmcm9tIFwiLi9mbG9yZW5jZS9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3VzdG9tR3JhbW1hckJORkxleGVyIH0gZnJvbSBcIi4vY3VzdG9tR3JhbW1hckJORi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21HcmFtbWFyQk5GUGFyc2VyIH0gZnJvbSBcIi4vY3VzdG9tR3JhbW1hckJORi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3VzdG9tR3JhbW1hclBhdHRlcm5MZXhlciB9IGZyb20gXCIuL2N1c3RvbUdyYW1tYXJQYXR0ZXJuL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEN1c3RvbUdyYW1tYXJQYXR0ZXJuUGFyc2VyIH0gZnJvbSBcIi4vY3VzdG9tR3JhbW1hclBhdHRlcm4vcGFyc2VyXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBDdXN0b21HcmFtbWFyIGZyb20gXCIuL2N1c3RvbUdyYW1tYXJcIjtcblxuaW1wb3J0IHsgREVGQVVMVF9DVVNUT01fR1JBTU1BUl9OQU1FIH0gZnJvbSBcIi4vZ3JhbW1hck5hbWVzXCI7XG5cbmV4cG9ydCBjb25zdCB0eXBlUGF0dGVybiA9IFwiT2JqZWN0XCI7XG5cbmV4cG9ydCBjb25zdCBzeW1ib2xQYXR0ZXJuID0gXCJcIjtcblxuZXhwb3J0IGNvbnN0IG9wZXJhdG9yUGF0dGVybiA9IFwiPVwiO1xuXG5leHBvcnQgY29uc3QgdGVybUJORiA9IGB0ZXJtISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgdmFyaWFibGUgO2A7XG5cbmV4cG9ydCBjb25zdCBzdGF0ZW1lbnRCTkYgPSBgc3RhdGVtZW50ISAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiKFwiIG1ldGFBcmd1bWVudCBcIilcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgYXJndW1lbnQgXCI9XCIgYXJndW1lbnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHR5cGVJbmZlcmVuY2VcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHR5cGVBc3NlcnRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG50eXBlSW5mZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgc3RhdGVtZW50IFwifC1cIiB0eXBlQXNzZXJ0aW9uIDtcblxudHlwZUFzc2VydGlvbiAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHRlcm0gXCI6XCIgdHlwZSA7YDtcblxuZXhwb3J0IGNvbnN0IG1ldGFzdGF0ZW1lbnRCTkYgPSBgbWV0YXN0YXRlbWVudCEgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiKFwiIG1ldGFzdGF0ZW1lbnQgXCIpXCIgXG4gICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHJ1bGVTdWJwcm9vZkFzc2VydGlvbiAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGNvbnRleHREZWZpbml0aW9uIFxuICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBwcm9vZkFzc2VydGlvblxuICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG1ldGF2YXJpYWJsZSBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5ydWxlU3VicHJvb2ZBc3NlcnRpb24gICAgICAgICAgICAgICAgOjo9ICAgXCJbXCIgbWV0YXN0YXRlbWVudCAoIFwiLFwiIG1ldGFzdGF0ZW1lbnQgKSogXCJdXCIgXCIuLi5cIiBtZXRhc3RhdGVtZW50IDtcblxuY29udGV4dERlZmluaXRpb24gICAgICAgICAgICAgICAgICAgIDo6PSAgIGNvbnRleHQgXCI9XCIgKCBqdWRnZW1lbnQgfCBjb250ZXh0ICkgKCBcIixcIiAoIGp1ZGdlbWVudCB8IGNvbnRleHQgKSApKiA7XG5cbnByb29mQXNzZXJ0aW9uICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBjb250ZXh0IFwifD1cIiBqdWRnZW1lbnQgO1xuIFxuanVkZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHJlZmVyZW5jZSBcIjo6XCIgbWV0YXN0YXRlbWVudCA7YDtcblxuY29uc3QgbmFtZSA9IERFRkFVTFRfQ1VTVE9NX0dSQU1NQVJfTkFNRSxcbiAgICAgIGpzb24gPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGVQYXR0ZXJuLFxuICAgICAgICBzeW1ib2xQYXR0ZXJuLFxuICAgICAgICBvcGVyYXRvclBhdHRlcm4sXG4gICAgICAgIHRlcm1CTkYsXG4gICAgICAgIHN0YXRlbWVudEJORixcbiAgICAgICAgbWV0YXN0YXRlbWVudEJORlxuICAgICAgfTtcblxuY29uc3QgZGVmYXVsdEN1c3RvbUdyYW1tYXIgPSBDdXN0b21HcmFtbWFyLmZyb21KU09OKGpzb24pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0Q3VzdG9tR3JhbW1hcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcGFyc2VyVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGRlZmF1bHRDdXN0b21HcmFtbWFyIGZyb20gXCIuL2RlZmF1bHRDdXN0b21HcmFtbWFyXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORywgVkVSVElDQUxfQkFSIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBUWVBFX1BBVFRFUk5fTkFNRSwgU1lNQk9MX1BBVFRFUk5fTkFNRSwgT1BFUkFUT1JfUEFUVEVSTl9OQU1FIH0gZnJvbSBcIi4vcGF0dGVybk5hbWVzXCI7XG5cbmNvbnN0IHsgcnVsZXNGcm9tQk5GIH0gPSBwYXJzZXJVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbWJpbmVkQ3VzdG9tR3JhbW1hciB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVzLCBlbnRyaWVzKSB7XG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xuICAgIHRoaXMuZW50cmllcyA9IGVudHJpZXM7XG4gIH1cbiAgXG4gIGdldFJ1bGVzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVzO1xuICB9XG5cbiAgZ2V0RW50cmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGluY2x1ZGVEZWZhdWx0ID0gdHJ1ZSkge1xuICAgIGxldCBjdXN0b21HcmFtbWFycyA9IFtdO1xuXG4gICAgaWYgKGluY2x1ZGVEZWZhdWx0KSB7XG4gICAgICBjdXN0b21HcmFtbWFycyA9IFsgZGVmYXVsdEN1c3RvbUdyYW1tYXIsIC4uLmN1c3RvbUdyYW1tYXJzIF07IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQ3VzdG9tR3JhbW1hcnNBbmREZWZhdWx0Qk5GKGN1c3RvbUdyYW1tYXJzKSxcbiAgICAgICAgICBlbnRyaWVzID0gZW50cmllc0Zyb21DdXN0b21HcmFtbWFycyhjdXN0b21HcmFtbWFycyksXG4gICAgICAgICAgY29tYmluZWRDdXN0b21HcmFtbWFyID0gbmV3IENvbWJpbmVkQ3VzdG9tR3JhbW1hcihydWxlcywgZW50cmllcyk7XG5cbiAgICByZXR1cm4gY29tYmluZWRDdXN0b21HcmFtbWFyO1xuICB9XG5cbiAgc3RhdGljIGZyb21DdXN0b21HcmFtbWFycyhjdXN0b21HcmFtbWFycywgaW5jbHVkZURlZmF1bHQgPSB0cnVlKSB7XG4gICAgaWYgKGluY2x1ZGVEZWZhdWx0KSB7XG4gICAgICBjdXN0b21HcmFtbWFycyA9IFsgZGVmYXVsdEN1c3RvbUdyYW1tYXIsIC4uLmN1c3RvbUdyYW1tYXJzIF07IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQ3VzdG9tR3JhbW1hcnNBbmREZWZhdWx0Qk5GKGN1c3RvbUdyYW1tYXJzKSxcbiAgICAgICAgICBlbnRyaWVzID0gZW50cmllc0Zyb21DdXN0b21HcmFtbWFycyhjdXN0b21HcmFtbWFycyksXG4gICAgICAgICAgY29tYmluZWRDdXN0b21HcmFtbWFyID0gbmV3IENvbWJpbmVkQ3VzdG9tR3JhbW1hcihydWxlcywgZW50cmllcyk7XG4gICAgXG4gICAgcmV0dXJuIGNvbWJpbmVkQ3VzdG9tR3JhbW1hcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBydWxlc0Zyb21DdXN0b21HcmFtbWFyc0FuZERlZmF1bHRCTkYoY3VzdG9tR3JhbW1hcnMpIHtcbiAgY29uc3QgYm5mcyA9IGN1c3RvbUdyYW1tYXJzLm1hcCgoY3VzdG9tR3JhbW1hcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGJuZiA9IGN1c3RvbUdyYW1tYXIuZ2V0Qk5GKCk7XG5cbiAgICAgICAgICByZXR1cm4gYm5mO1xuICAgICAgICB9KSxcbiAgICAgICAgYm5mID0gYm5mcy5qb2luKEVNUFRZX1NUUklORyksXG4gICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZik7XG5cbiAgY29tYmluZVJ1bGVzKHJ1bGVzKVxuXG4gIHJldHVybiBydWxlcztcbn1cblxuZnVuY3Rpb24gZW50cmllc0Zyb21DdXN0b21HcmFtbWFycyhjdXN0b21HcmFtbWFycykge1xuICBjb25zdCBwYXR0ZXJuTmFtZXMgPSBbXG4gICAgICAgICAgVFlQRV9QQVRURVJOX05BTUUsXG4gICAgICAgICAgU1lNQk9MX1BBVFRFUk5fTkFNRSxcbiAgICAgICAgICBPUEVSQVRPUl9QQVRURVJOX05BTUVcbiAgICAgICAgXSxcbiAgICAgICAgZW50cmllcyA9IHBhdHRlcm5OYW1lcy5tYXAoKHBhdHRlcm5OYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyeUZyb21DdXN0b21HcmFtbWFycyhjdXN0b21HcmFtbWFycywgcGF0dGVybk5hbWUpO1xuXG4gICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gZW50cmllcztcbn1cblxuZnVuY3Rpb24gZW50cnlGcm9tQ3VzdG9tR3JhbW1hcnMoY3VzdG9tR3JhbW1hcnMsIHBhdHRlcm5OYW1lKSB7XG4gIGNvbnN0IHBhdHRlcm5zID0gY3VzdG9tR3JhbW1hcnMucmVkdWNlKChwYXR0ZXJucywgY3VzdG9tR3JhbW1hcikgPT4ge1xuICAgIGNvbnN0IHBhdHRlcm4gPSBjdXN0b21HcmFtbWFyLmdldFBhdHRlcm4ocGF0dGVybk5hbWUpO1xuXG4gICAgaWYgKHBhdHRlcm4pIHsgIC8vL1xuICAgICAgcGF0dGVybnMucHVzaChwYXR0ZXJuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0dGVybnM7XG4gIH0sIFtdKTtcblxuICBwYXR0ZXJucy5yZXZlcnNlKCk7XG5cbiAgY29uc3QgcGF0dGVybnNTdHJpbmcgPSBwYXR0ZXJucy5qb2luKFZFUlRJQ0FMX0JBUiksIC8vL1xuICAgICAgICBwYXR0ZXJuID0gKChwYXR0ZXJuTmFtZSA9PT0gVFlQRV9QQVRURVJOX05BTUUpIHx8IChwYXR0ZXJuTmFtZSA9PT0gU1lNQk9MX1BBVFRFUk5fTkFNRSkpP1xuICAgICAgICAgICAgICAgICAgIGBeKD86JHtwYXR0ZXJuc1N0cmluZ30pXFxcXGJgIDpcbiAgICAgICAgICAgICAgICAgICAgIGBeKD86JHtwYXR0ZXJuc1N0cmluZ30pYDtcblxuICBjb25zdCBlbnRyeSA9IHt9O1xuXG4gIGVudHJ5W3BhdHRlcm5OYW1lXSA9IHBhdHRlcm47XG5cbiAgcmV0dXJuIGVudHJ5O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lUnVsZXMocnVsZXMpIHtcbiAgbGV0IG91dGVySW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcnVsZXMubGVuZ3RoO1xuXG4gIHdoaWxlIChvdXRlckluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY29uc3Qgb3V0ZXJSdWxlID0gcnVsZXNbb3V0ZXJJbmRleF0sXG4gICAgICAgICAgb3V0ZXJSdWxlTmFtZSA9IG91dGVyUnVsZS5nZXROYW1lKCk7XG5cbiAgICBsZXQgb3V0ZXJSdWxlRGVmaW5pdGlvbnMgPSBvdXRlclJ1bGUuZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgIGxldCBpbm5lckluZGV4ID0gb3V0ZXJJbmRleCArIDE7XG5cbiAgICB3aGlsZSAoaW5uZXJJbmRleCA8IGxlbmd0aCkge1xuICAgICAgY29uc3QgaW5uZXJSdWxlID0gcnVsZXNbaW5uZXJJbmRleF0sXG4gICAgICAgICAgICBpbm5lclJ1bGVOYW1lID0gaW5uZXJSdWxlLmdldE5hbWUoKTtcblxuICAgICAgaWYgKGlubmVyUnVsZU5hbWUgPT09IG91dGVyUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgaW5uZXJSdWxlRGVmaW5pdGlvbnMgPSBpbm5lclJ1bGUuZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgICAgICBvdXRlclJ1bGVEZWZpbml0aW9ucyA9IFsgIC8vL1xuICAgICAgICAgIC4uLmlubmVyUnVsZURlZmluaXRpb25zLFxuICAgICAgICAgIC4uLm91dGVyUnVsZURlZmluaXRpb25zXG4gICAgICAgIF07XG5cbiAgICAgICAgb3V0ZXJSdWxlLnJlcGxhY2VBbGxEZWZpbml0aW9ucyguLi5vdXRlclJ1bGVEZWZpbml0aW9ucyk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbm5lckluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIHJ1bGVzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIGxlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlubmVySW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvdXRlckluZGV4Kys7XG5cbiAgICBsZW5ndGggPSBydWxlcy5sZW5ndGg7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbGV4ZXJVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5pbXBvcnQgeyBGbG9yZW5jZUxleGVyIH0gZnJvbSBcIm9jY2FtLWdyYW1tYXJzXCI7XG5cbmltcG9ydCBDb21iaW5lZEN1c3RvbUdyYW1tYXIgZnJvbSBcIi4uL2NvbWJpbmVkQ3VzdG9tR3JhbW1hclwiO1xuXG5jb25zdCB7IHJ1bGVzRnJvbUVudHJpZXMgfSA9IGxleGVyVXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvcmVuY2VMZXhlckZyb21Ob3RoaW5nKCkge1xuICBjb25zdCB7IGVudHJpZXMgfSA9IEZsb3JlbmNlTGV4ZXIsXG4gICAgICAgIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciA9IENvbWJpbmVkQ3VzdG9tR3JhbW1hci5mcm9tTm90aGluZygpLFxuICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUVudHJpZXNBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXIoZW50cmllcywgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgZmxvcmVuY2VMZXhlciA9IEZsb3JlbmNlTGV4ZXIuZnJvbVJ1bGVzKHJ1bGVzKTtcblxuICByZXR1cm4gZmxvcmVuY2VMZXhlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3JlbmNlTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyKGNvbWJpbmVkQ3VzdG9tR3JhbW1hcikge1xuICBjb25zdCB7IGVudHJpZXMgfSA9IEZsb3JlbmNlTGV4ZXIsXG4gICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tRW50cmllc0FuZENvbWJpbmVkQ3VzdG9tR3JhbW1hcihlbnRyaWVzLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICBmbG9yZW5jZUxleGVyID0gRmxvcmVuY2VMZXhlci5mcm9tUnVsZXMocnVsZXMpO1xuXG4gIHJldHVybiBmbG9yZW5jZUxleGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvcmVuY2VMZXhlckZyb21FbnRyaWVzQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyKGVudHJpZXMsIGNvbWJpbmVkQ3VzdG9tR3JhbW1hcikge1xuICBjb25zdCBydWxlcyA9IHJ1bGVzRnJvbUVudHJpZXNBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXIoZW50cmllcywgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgZmxvcmVuY2VMZXhlciA9IEZsb3JlbmNlTGV4ZXIuZnJvbVJ1bGVzKHJ1bGVzKTtcblxuICByZXR1cm4gZmxvcmVuY2VMZXhlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmbG9yZW5jZUxleGVyRnJvbU5vdGhpbmcsXG4gIGZsb3JlbmNlTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyLFxuICBmbG9yZW5jZUxleGVyRnJvbUVudHJpZXNBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXJcbn07XG5cbmZ1bmN0aW9uIHJ1bGVzRnJvbUVudHJpZXNBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXIoZW50cmllcywgY29tYmluZWRDdXN0b21HcmFtbWFyKSB7XG4gIGNvbnN0IGN1c3RvbUdyYW1tYXJFbnRyaWVzID0gY29tYmluZWRDdXN0b21HcmFtbWFyLmdldEVudHJpZXMoKTtcblxuICBlbnRyaWVzID0gWyAvLy9cbiAgICAuLi5jdXN0b21HcmFtbWFyRW50cmllcyxcbiAgICAuLi5lbnRyaWVzXG4gIF07XG5cbiAgY29uc3QgcnVsZXMgPSBydWxlc0Zyb21FbnRyaWVzKGVudHJpZXMpO1xuXG4gIHJldHVybiBydWxlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVJlZHVjZWRSdWxlTmFtZShyZWR1Y2VkUnVsZU5hbWUpIHtcbiAgY29uc3QgcnVsZU5hbWUgPSByZWR1Y2VkUnVsZU5hbWUucmVwbGFjZSgvKF9ffF8pJC9nLCBcIlwiKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlTmFtZUZyb21SZXBlYXRlZFJ1bGVOYW1lKHJlcGVhdGVkUnVsZU5hbWUpIHtcbiAgY29uc3QgcnVsZU5hbWUgPSByZXBlYXRlZFJ1bGVOYW1lLnJlcGxhY2UoL35bXn5dK358fiQvLCBcIlwiKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSkge1xuICBjb25zdCBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZSA9IGAke3J1bGVOYW1lfV9gO1xuXG4gIHJldHVybiBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSkge1xuICBjb25zdCBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBgJHtydWxlTmFtZX1+YDtcblxuICByZXR1cm4gZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSkge1xuICBjb25zdCBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lID0gYCR7cnVsZU5hbWV9X19gO1xuXG4gIHJldHVybiBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkge1xuICBjb25zdCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZSA9IGAke3J1bGVOYW1lfX4ke2xlZnRSZWN1cnNpdmVSdWxlTmFtZX1+YDtcblxuICByZXR1cm4gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lRnJvbVJlZHVjZWRSdWxlTmFtZSwgcnVsZU5hbWVGcm9tUmVwZWF0ZWRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmV3cml0dGVuTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoUmV3cml0dGVuTm9kZSk7IH1cblxuICBzdGF0aWMgZnJvbVJlZHVjZWROb2RlKHJlZHVjZWROb2RlKSB7XG4gICAgY29uc3QgcmVkdWNlZE5vZGVSdWxlTmFtZSA9IHJlZHVjZWROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgcmVkdWNlZFJ1bGVOYW1lID0gcmVkdWNlZE5vZGVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVGcm9tUmVkdWNlZFJ1bGVOYW1lKHJlZHVjZWRSdWxlTmFtZSksXG4gICAgICAgICAgY2hpbGROb2RlcyA9IHJlZHVjZWROb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlID0gbmV3IFJld3JpdHRlbk5vZGUocnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbk5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlcGVhdGVkTm9kZShyZXBlYXRlZE5vZGUpIHtcbiAgICBjb25zdCByZXBlYXRlZE5vZGVSdWxlTmFtZSA9IHJlcGVhdGVkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJlcGVhdGVkUnVsZU5hbWUgPSByZXBlYXRlZE5vZGVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVGcm9tUmVwZWF0ZWRSdWxlTmFtZShyZXBlYXRlZFJ1bGVOYW1lKSxcbiAgICAgICAgICBjaGlsZE5vZGVzID0gcmVwZWF0ZWROb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlID0gbmV3IFJld3JpdHRlbk5vZGUocnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbk5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUmV3cml0dGVuTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVkdWNlZE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJlZHVjZWROb2RlKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENsYXNzLCBydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2xhc3MsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSZWR1Y2VkTm9kZSBmcm9tIFwiLi4vcmVkdWNlZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseVJlZHVjZWROb2RlIGV4dGVuZHMgUmVkdWNlZE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gUmVkdWNlZE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEaXJlY3RseVJlZHVjZWROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBlYXRlZE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFJlcGVhdGVkTm9kZSk7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENsYXNzLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVwZWF0ZWROb2RlIGZyb20gXCIuLi9yZXBlYXRlZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseVJlcGVhdGVkTm9kZSBleHRlbmRzIFJlcGVhdGVkTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBSZXBlYXRlZE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEaXJlY3RseVJlcGVhdGVkTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlZHVjZWROb2RlIGZyb20gXCIuLi9yZWR1Y2VkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGlyZWN0bHlSZWR1Y2VkTm9kZSBleHRlbmRzIFJlZHVjZWROb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIFJlZHVjZWROb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoSW5kaXJlY3RseVJlZHVjZWROb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVwZWF0ZWROb2RlIGZyb20gXCIuLi9yZXBlYXRlZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRpcmVjdGx5UmVwZWF0ZWROb2RlIGV4dGVuZHMgUmVwZWF0ZWROb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIFJlcGVhdGVkTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEluZGlyZWN0bHlSZXBlYXRlZE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5leHBvcnQgY29uc3QgeyBmaXJzdCwgbGFzdCwgZmlsdGVyLCBmcm9udCwgaGVhZCwgdGFpbCwgcHVzaCwgdW5zaGlmdCwgYmFja3dhcmRzU29tZSwgYmFja3dhcmRzRmluZCwgYmFja3dhcmRzRXZlcnkgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gbGVmdERpZmZlcmVuY2UoYXJyYXlBLCBhcnJheUIpIHtcbiAgZmlsdGVyKGFycmF5QSwgKGVsZW1lbnRBKSA9PiB7XG4gICAgY29uc3QgYXJyYXlCSW5jbHVkZXNFbGVtZW50QSA9IGFycmF5Qi5pbmNsdWRlcyhlbGVtZW50QSk7XG5cbiAgICBpZiAoIWFycmF5QkluY2x1ZGVzRWxlbWVudEEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVwc2lsb25Ob2RlIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IFJld3JpdHRlbk5vZGUgZnJvbSBcIi4vbm9kZS9yZXdyaXR0ZW5cIjtcbmltcG9ydCBEaXJlY3RseVJlZHVjZWROb2RlIGZyb20gXCIuL25vZGUvcmVkdWNlZC9kaXJlY3RseVwiO1xuaW1wb3J0IERpcmVjdGx5UmVwZWF0ZWROb2RlIGZyb20gXCIuL25vZGUvcmVwZWF0ZWQvZGlyZWN0bHlcIjtcbmltcG9ydCBJbmRpcmVjdGx5UmVkdWNlZE5vZGUgZnJvbSBcIi4vbm9kZS9yZWR1Y2VkL2luZGlyZWN0bHlcIjtcbmltcG9ydCBJbmRpcmVjdGx5UmVwZWF0ZWROb2RlIGZyb20gXCIuL25vZGUvcmVwZWF0ZWQvaW5kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgbGFzdCwgZmlsdGVyLCB1bnNoaWZ0LCBiYWNrd2FyZHNTb21lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJld3JpdGVOb2Rlcyhub2RlKSB7ICAvLy9cbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZTsgLy8vXG5cbiAgcmV3cml0ZShub25UZXJtaW5hbE5vZGUpO1xuXG4gIHJlbW92ZUVwc2lsb25zKG5vblRlcm1pbmFsTm9kZSk7XG5cbiAgcmVtb3ZlSW50ZXJtZWRpYXJpZXMobm9uVGVybWluYWxOb2RlKTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZShub25UZXJtaW5hbE5vZGUpIHtcbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgcmV3cml0ZUluZGlyZWN0UmVwZXRpdGlvbihub25UZXJtaW5hbE5vZGUpO1xuXG4gIHJld3JpdGVEaXJlY3RSZXBldGl0aW9uKG5vblRlcm1pbmFsTm9kZSk7XG5cbiAgcmV3cml0ZURpcmVjdFJlZHVjdGlvbihub25UZXJtaW5hbE5vZGUpO1xuXG4gIHJld3JpdGVJbmRpcmVjdFJlZHVjdGlvbihub25UZXJtaW5hbE5vZGUpO1xuXG4gIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGU7ICAvLy9cblxuICAgICAgcmV3cml0ZShub25UZXJtaW5hbE5vZGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUVwc2lsb25zKG5vblRlcm1pbmFsTm9kZSkge1xuICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICBmaWx0ZXIoY2hpbGROb2RlcywgKGNoaWxkTm9kZSkgPT4ge1xuICAgIGNvbnN0IGNoaWxkTm9kZUVwc2lsb25Ob2RlID0gKGNoaWxkTm9kZSBpbnN0YW5jZW9mIEVwc2lsb25Ob2RlKTtcblxuICAgIGlmICghY2hpbGROb2RlRXBzaWxvbk5vZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZTsgIC8vL1xuXG4gICAgICByZW1vdmVFcHNpbG9ucyhub25UZXJtaW5hbE5vZGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUludGVybWVkaWFyaWVzKG5vblRlcm1pbmFsTm9kZSkge1xuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgc2luZ3VsYXJOb25UZXJtaW5hbE5vZGVzID0gW107XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGNoaWxkTm9kZXNMZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aDtcblxuICAgIGlmIChjaGlsZE5vZGVzTGVuZ3RoID4gMSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZVRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAoZmlyc3RDaGlsZE5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IHNpbmd1bGFyTm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7IC8vL1xuXG4gICAgc2luZ3VsYXJOb25UZXJtaW5hbE5vZGVzLnB1c2goc2luZ3VsYXJOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgbm9uVGVybWluYWxOb2RlID0gc2luZ3VsYXJOb25UZXJtaW5hbE5vZGU7IC8vL1xuICB9XG5cbiAgbm9uVGVybWluYWxOb2RlID0gbnVsbDtcblxuICBiYWNrd2FyZHNTb21lKHNpbmd1bGFyTm9uVGVybWluYWxOb2RlcywgKHNpbmd1bGFyTm9uVGVybWluYWxOb2RlKSA9PiB7XG4gICAgY29uc3Qgc2luZ3VsYXJOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IHNpbmd1bGFyTm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICBpZiAoc2luZ3VsYXJOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gcnVsZU5hbWUpIHtcbiAgICAgIG5vblRlcm1pbmFsTm9kZSA9IHNpbmd1bGFyTm9uVGVybWluYWxOb2RlOyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKG5vblRlcm1pbmFsTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHN0YXJ0ID0gMCxcbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBjaGlsZE5vZGVzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIC4uLm5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMpO1xuICB9XG5cbiAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZTsgIC8vL1xuXG4gICAgICByZW1vdmVJbnRlcm1lZGlhcmllcyhub25UZXJtaW5hbE5vZGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVEaXJlY3RSZWR1Y3Rpb24obm9uVGVybWluYWxOb2RlKSB7XG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBkaXJlY3RseVJlZHVjZWROb2RlID0gY2hpbGROb2Rlcy5maW5kKChjaGlsZE5vZGUpID0+IChjaGlsZE5vZGUgaW5zdGFuY2VvZiBEaXJlY3RseVJlZHVjZWROb2RlKSkgfHwgbnVsbDtcblxuICBpZiAoZGlyZWN0bHlSZWR1Y2VkTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKGRpcmVjdGx5UmVkdWNlZE5vZGUpLFxuICAgICAgICAgIHJlZHVjZWROb2RlID0gZGlyZWN0bHlSZWR1Y2VkTm9kZSwgIC8vL1xuICAgICAgICAgIHJld3JpdHRlbk5vZGUgPSBSZXdyaXR0ZW5Ob2RlLmZyb21SZWR1Y2VkTm9kZShyZWR1Y2VkTm9kZSksXG4gICAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIGNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgcmV3cml0dGVuTm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV3cml0ZURpcmVjdFJlcGV0aXRpb24obm9uVGVybWluYWxOb2RlKSB7XG4gIGxldCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICBjb25zdCBkaXJlY3RseVJlcGVhdGVkTm9kZXMgPSBjaGlsZE5vZGVzLmZpbHRlcigoY2hpbGROb2RlKSA9PiAoY2hpbGROb2RlIGluc3RhbmNlb2YgRGlyZWN0bHlSZXBlYXRlZE5vZGUpKSxcbiAgICAgICAgZGlyZWN0bHlSZXBlYXRlZE5vZGVzTGVuZ3RoID0gZGlyZWN0bHlSZXBlYXRlZE5vZGVzLmxlbmd0aDtcblxuICBpZiAoZGlyZWN0bHlSZXBlYXRlZE5vZGVzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhc3REaXJlY3RseVJlcGVhdGVkTm9kZSA9IGxhc3QoZGlyZWN0bHlSZXBlYXRlZE5vZGVzKSxcbiAgICAgICAgICBpbmRleCA9IGNoaWxkTm9kZXMuaW5kZXhPZihsYXN0RGlyZWN0bHlSZXBlYXRlZE5vZGUpLFxuICAgICAgICAgIHN0YXJ0ID0gMCxcbiAgICAgICAgICBkZWxldGVDb3VudCA9IGluZGV4ICsgMSxcbiAgICAgICAgICByZXBlYXRlZE5vZGUgPSBsYXN0RGlyZWN0bHlSZXBlYXRlZE5vZGUsICAvLy9cbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlID0gUmV3cml0dGVuTm9kZS5mcm9tUmVwZWF0ZWROb2RlKHJlcGVhdGVkTm9kZSksXG4gICAgICAgICAgZGVsZXRlZENoaWxkTm9kZXMgPSBjaGlsZE5vZGVzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIHJld3JpdHRlbk5vZGUpO1xuXG4gICAgbm9uVGVybWluYWxOb2RlID0gcmV3cml0dGVuTm9kZTsgIC8vL1xuXG4gICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7IC8vL1xuXG4gICAgZGVsZXRlZENoaWxkTm9kZXMucG9wKCk7XG5cbiAgICB1bnNoaWZ0KGNoaWxkTm9kZXMsIGRlbGV0ZWRDaGlsZE5vZGVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXdyaXRlSW5kaXJlY3RSZWR1Y3Rpb24obm9uVGVybWluYWxOb2RlKSB7XG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBpbmRpcmVjdGx5UmVkdWNlZE5vZGUgPSBjaGlsZE5vZGVzLmZpbmQoKGNoaWxkTm9kZSkgPT4gKGNoaWxkTm9kZSBpbnN0YW5jZW9mIEluZGlyZWN0bHlSZWR1Y2VkTm9kZSkpIHx8IG51bGw7XG5cbiAgaWYgKGluZGlyZWN0bHlSZWR1Y2VkTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKGluZGlyZWN0bHlSZWR1Y2VkTm9kZSksXG4gICAgICAgICAgcmVkdWNlZE5vZGUgPSBpbmRpcmVjdGx5UmVkdWNlZE5vZGUsICAvLy9cbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlID0gUmV3cml0dGVuTm9kZS5mcm9tUmVkdWNlZE5vZGUocmVkdWNlZE5vZGUpLFxuICAgICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBjaGlsZE5vZGVzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIHJld3JpdHRlbk5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVJbmRpcmVjdFJlcGV0aXRpb24obm9uVGVybWluYWxOb2RlKSB7XG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBpbmRpcmVjdGx5UmVwZWF0ZWROb2RlID0gY2hpbGROb2Rlcy5maW5kKChjaGlsZE5vZGUpID0+IChjaGlsZE5vZGUgaW5zdGFuY2VvZiBJbmRpcmVjdGx5UmVwZWF0ZWROb2RlKSkgfHwgbnVsbDtcblxuICBpZiAoaW5kaXJlY3RseVJlcGVhdGVkTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGluZGlyZWN0bHlSZXBlYXRlZE5vZGVDaGlsZE5vZGVzID0gaW5kaXJlY3RseVJlcGVhdGVkTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZGlyZWN0bHlSZXBlYXRlZE5vZGUgPSBpbmRpcmVjdGx5UmVwZWF0ZWROb2RlQ2hpbGROb2Rlcy5maW5kKChpbmRpcmVjdGx5UmVwZWF0ZWROb2RlQ2hpbGROb2RlKSA9PiAoaW5kaXJlY3RseVJlcGVhdGVkTm9kZUNoaWxkTm9kZSBpbnN0YW5jZW9mIERpcmVjdGx5UmVwZWF0ZWROb2RlKSkgfHwgbnVsbDtcblxuICAgIGlmIChkaXJlY3RseVJlcGVhdGVkTm9kZSAhPT0gbnVsbCkge1xuICAgICAgbGV0IGluZGV4ID0gaW5kaXJlY3RseVJlcGVhdGVkTm9kZUNoaWxkTm9kZXMuaW5kZXhPZihkaXJlY3RseVJlcGVhdGVkTm9kZSksXG4gICAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gSW5maW5pdHk7XG5cbiAgICAgIGNvbnN0IGRpcmVjdGx5UmVwZWF0ZWROb2RlcyA9IGluZGlyZWN0bHlSZXBlYXRlZE5vZGVDaGlsZE5vZGVzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICBpbmRleCA9IGNoaWxkTm9kZXMuaW5kZXhPZihpbmRpcmVjdGx5UmVwZWF0ZWROb2RlKTtcblxuICAgICAgc3RhcnQgPSBpbmRleCArIDE7XG5cbiAgICAgIGRlbGV0ZUNvdW50ID0gMDtcblxuICAgICAgY2hpbGROb2Rlcy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5kaXJlY3RseVJlcGVhdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcGVhdGVkTm9kZSA9IGluZGlyZWN0bHlSZXBlYXRlZE5vZGUsICAvLy9cbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlID0gUmV3cml0dGVuTm9kZS5mcm9tUmVwZWF0ZWROb2RlKHJlcGVhdGVkTm9kZSk7XG5cbiAgICBsZXQgaW5kZXggPSBjaGlsZE5vZGVzLmluZGV4T2YoaW5kaXJlY3RseVJlcGVhdGVkTm9kZSksXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIGNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgcmV3cml0dGVuTm9kZSk7XG5cbiAgICBzdGFydCA9IDA7XG5cbiAgICBkZWxldGVDb3VudCA9IGluZGV4OyAgLy8vXG5cbiAgICBjb25zdCBkZWxldGVDaGlsZE5vZGVzID0gY2hpbGROb2Rlcy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICByZXdyaXR0ZW5Ob2RlQ2hpbGROb2RlcyA9IHJld3JpdHRlbk5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgdW5zaGlmdChyZXdyaXR0ZW5Ob2RlQ2hpbGROb2RlcywgZGVsZXRlQ2hpbGROb2Rlcyk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3BlcmF0aW9uIHtcbiAgaXNFcXVhbFRvKG9wZXJhdGlvbikge1xuICAgIGxldCBlcXVhbFRvID0gZmFsc2U7XG5cbiAgICBjb25zdCB7IGNvbnN0cnVjdG9yIH0gPSB0aGlzO1xuXG4gICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgICBjb25zdCBjb21wYXJlc1RvID0gdGhpcy5jb21wYXJlKG9wZXJhdGlvbik7XG5cbiAgICAgIGVxdWFsVG8gPSBjb21wYXJlc1RvOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGV4ZWN1dGUoLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKTtcblxuICAgIGxldCByZXN1bHQ7XG5cbiAgICBjb25zdCB7IG9wZXJhdGlvbnMgfSA9IGNvbnRleHQ7XG5cbiAgICBsZXQgb3BlcmF0aW9uID0gdGhpcy5maW5kKGNvbnRleHQpO1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gbnVsbCkge1xuICAgICAgb3BlcmF0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKTtcblxuICAgICAgcmVzdWx0ID0gb3BlcmF0aW9uLmFwcGx5KC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IG9wZXJhdGlvbi5yZXRyaWV2ZSguLi5yZW1haW5pbmdBcmd1bWVudHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmaW5kKGNvbnRleHQpIHtcbiAgICBjb25zdCB7IG9wZXJhdGlvbnMgfSA9IGNvbnRleHQsXG4gICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9ucy5maW5kKChvcGVyYXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsVG8gPSB0aGlzLmlzRXF1YWxUbyhvcGVyYXRpb24pO1xuXG4gICAgICAgICAgICBpZiAoZXF1YWxUbykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG9wZXJhdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBPcGVyYXRpb24gZnJvbSBcIi4uL29wZXJhdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlT3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnJ1bGUgPSBydWxlO1xuICB9XG5cbiAgZ2V0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlO1xuICB9XG5cbiAgY29tcGFyZShydWxlT3BlcmF0aW9uKSB7XG4gICAgY29uc3QgcnVsZSA9IHJ1bGVPcGVyYXRpb24uZ2V0UnVsZSgpLFxuICAgICAgICAgIGNvbXBhcmVzVG8gPSAodGhpcy5ydWxlID09PSBydWxlKTtcblxuICAgIHJldHVybiBjb21wYXJlc1RvO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBEaXJlY3RseVJlZHVjZWROb2RlIGZyb20gXCIuLi8uLi9ub2RlL3JlZHVjZWQvZGlyZWN0bHlcIjtcblxuaW1wb3J0IHsgZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpcmVjdGx5UmVkdWNlZFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21SdWxlQW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgYWxsb3dJc29sYXRlZCkge1xuICAgIGxldCBkaXJlY3RseVJlZHVjZWRSdWxlID0gbnVsbDtcblxuICAgIGxldCBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnMuc2xpY2UoMCk7ICAvLy9cblxuICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5mb3JFYWNoKChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldERlZmluaXRpb24oKSxcbiAgICAgICAgICAgIGluZGV4ID0gZGVmaW5pdGlvbnMuaW5kZXhPZihkZWZpbml0aW9uKTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgICAgZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZpbml0aW9uc0xlbmd0aCA9IGRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChkZWZpbml0aW9uc0xlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKCFhbGxvd0lzb2xhdGVkKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbnMgb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBhcmUgaXNvbGF0ZWQgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZSA9IGRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICAgIG5hbWUgPSBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IERpcmVjdGx5UmVkdWNlZE5vZGU7ICAvLy9cblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IG5ldyBEaXJlY3RseVJlZHVjZWRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpcmVjdGx5UmVkdWNlZFJ1bGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBQYXJ0cywgcGFydFR5cGVzIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuY29uc3QgeyBSdWxlTmFtZVBhcnQsIE9wdGlvbmFsUGFydFBhcnQsIE9uZU9yTW9yZVBhcnRzUGFydCwgWmVyb09yTW9yZVBhcnRzUGFydCB9ID0gUGFydHMsXG4gICAgICB7IFJ1bGVOYW1lUGFydFR5cGUsXG4gICAgICAgIE9wdGlvbmFsUGFydFBhcnRUeXBlLFxuICAgICAgICBDaG9pY2VPZlBhcnRzUGFydFR5cGUsXG4gICAgICAgIE9uZU9yTW9yZVBhcnRzUGFydFR5cGUsXG4gICAgICAgIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlLFxuICAgICAgICBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSB9ID0gcGFydFR5cGVzO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hQYXJ0cyhwYXJ0QSwgcGFydEIpIHtcbiAgY29uc3QgcGFydEFTdHJpbmcgPSBwYXJ0QS5hc1N0cmluZygpLFxuICAgICAgICBwYXJ0QlN0cmluZyA9IHBhcnRCLmFzU3RyaW5nKCksXG4gICAgICAgIG1hdGNoZXMgPSAocGFydEFTdHJpbmcgPT09IHBhcnRCU3RyaW5nKTtcblxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFVuYXJ5KHBhcnQpIHtcbiAgbGV0IHBhcnRVbmFyeSA9IGZhbHNlO1xuXG4gIGNvbnN0IHBhcnROb25UZXJtaW5hbFBhcnQgPSBwYXJ0LmlzTm9uVGVybWluYWxQYXJ0KCk7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgICB0eXBlID0gbm9uVGVybWluYWxQYXJ0LmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSdWxlTmFtZVBhcnRUeXBlOlxuICAgICAgICBwYXJ0VW5hcnkgPSB0cnVlO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE9wdGlvbmFsUGFydFBhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBub25UZXJtaW5hbFBhcnQsIC8vL1xuICAgICAgICAgICAgICBwYXJ0ID0gb3B0aW9uYWxQYXJ0UGFydC5nZXRQYXJ0KCk7XG5cbiAgICAgICAgcGFydFVuYXJ5ID0gaXNQYXJ0VW5hcnkocGFydCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgT25lT3JNb3JlUGFydHNQYXJ0VHlwZToge1xuICAgICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBub25UZXJtaW5hbFBhcnQsICAvLy9cbiAgICAgICAgICAgICAgcGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydC5nZXRQYXJ0KCk7XG5cbiAgICAgICAgcGFydFVuYXJ5ID0gaXNQYXJ0VW5hcnkocGFydCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgWmVyb09yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5vblRlcm1pbmFsUGFydCwgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTsgIC8vL1xuXG4gICAgICAgIHBhcnRVbmFyeSA9IGlzUGFydFVuYXJ5KHBhcnQpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIENob2ljZU9mUGFydHNQYXJ0VHlwZTpcbiAgICAgIGNhc2UgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGU6XG4gICAgICAgIHBhcnRVbmFyeSA9IGZhbHNlO1xuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0VW5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcnRDb21wbGV4KHBhcnQpIHtcbiAgbGV0IHBhcnRDb21wbGV4ID0gdHJ1ZTtcblxuICBjb25zdCBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gcGFydC5pc05vblRlcm1pbmFsUGFydCgpO1xuXG4gIGlmIChwYXJ0Tm9uVGVybWluYWxQYXJ0KSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxQYXJ0ID0gcGFydCwgLy8vXG4gICAgICAgICAgdHlwZSA9IG5vblRlcm1pbmFsUGFydC5nZXRUeXBlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUnVsZU5hbWVQYXJ0VHlwZTpcbiAgICAgICAgcGFydENvbXBsZXggPSBmYWxzZTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBPcHRpb25hbFBhcnRQYXJ0VHlwZToge1xuICAgICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAvLy9cbiAgICAgICAgICAgICAgcGFydCA9IG9wdGlvbmFsUGFydFBhcnQuZ2V0UGFydCgpO1xuXG4gICAgICAgIHBhcnRDb21wbGV4ID0gaXNQYXJ0Q29tcGxleChwYXJ0KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IG5vblRlcm1pbmFsUGFydCwgIC8vL1xuICAgICAgICAgICAgICBwYXJ0ID0gb25lT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgICBwYXJ0Q29tcGxleCA9IGlzUGFydENvbXBsZXgocGFydCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgWmVyb09yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5vblRlcm1pbmFsUGFydCwgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTsgIC8vL1xuXG4gICAgICAgIHBhcnRDb21wbGV4ID0gaXNQYXJ0Q29tcGxleChwYXJ0KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBDaG9pY2VPZlBhcnRzUGFydFR5cGU6XG4gICAgICBjYXNlIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlOlxuICAgICAgICBwYXJ0Q29tcGxleCA9IHRydWU7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRDb21wbGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gIGNvbnN0IHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUpO1xuXG4gIHJldHVybiBydWxlTmFtZVBhcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCByZWN1cnNpdmVSdWxlTmFtZXMpIHtcbiAgY29uc3QgcGFydE5vblRlcm1pbmFsUGFydCA9IHBhcnQuaXNOb25UZXJtaW5hbFBhcnQoKTtcblxuICBpZiAocGFydE5vblRlcm1pbmFsUGFydCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsUGFydCA9IHBhcnQsIC8vL1xuICAgICAgICAgIHR5cGUgPSBub25UZXJtaW5hbFBhcnQuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJ1bGVOYW1lUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAgLy8vXG4gICAgICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVQYXJ0LmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUnVsZU5hbWUgPSByZWN1cnNpdmVSdWxlTmFtZXMuaW5jbHVkZXMocnVsZU5hbWUpO1xuXG4gICAgICAgIGlmICghcmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSdWxlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lID0gcnVsZU5hbWU7IC8vL1xuXG4gICAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzLnB1c2gocmVjdXJzaXZlUnVsZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgT3B0aW9uYWxQYXJ0UGFydFR5cGU6IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uYWxQYXJ0UGFydCA9IG5vblRlcm1pbmFsUGFydCwgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSBvcHRpb25hbFBhcnRQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCByZWN1cnNpdmVSdWxlTmFtZXMpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIE9uZU9yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3Qgb25lT3JNb3JlUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQuZ2V0UGFydCgpO1xuXG4gICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgWmVyb09yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5vblRlcm1pbmFsUGFydCwgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTsgIC8vL1xuXG4gICAgICAgIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IGNob2ljZU9mUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAvLy9cbiAgICAgICAgICAgICAgcGFydHMgPSBjaG9pY2VPZlBhcnRzUGFydC5nZXRQYXJ0cygpO1xuXG4gICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcykpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBub25UZXJtaW5hbFBhcnQsICAvLy9cbiAgICAgICAgICAgICAgcGFydHMgPSBzZXF1ZW5jZU9mUGFydHNQYXJ0LmdldFBhcnRzKCk7XG5cbiAgICAgICAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgcmVjdXJzaXZlUnVsZU5hbWVzKSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RseVJlZHVjZWRQYXJ0RnJvbVBhcnQocGFydCkge1xuICBsZXQgZGlyZWN0bHlSZWR1Y2VkUGFydDtcblxuICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgdHlwZSA9IG5vblRlcm1pbmFsUGFydC5nZXRUeXBlKCk7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSdWxlTmFtZVBhcnRUeXBlOiB7XG4gICAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBub25UZXJtaW5hbFBhcnQsICAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVQYXJ0LmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBsb29rQWhlYWQgPSBydWxlTmFtZVBhcnQuaXNMb29rQWhlYWQoKSxcbiAgICAgICAgICAgIGRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lID0gZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICAgICAgZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkaXJlY3RseVJlZHVjZWRSdWxlTmFtZSwgbG9va0FoZWFkKTtcblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUGFydCA9IGRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lUGFydDsgIC8vL1xuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIE9wdGlvbmFsUGFydFBhcnRUeXBlOiB7XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAvLy9cbiAgICAgICAgICAgIHBhcnQgPSBvcHRpb25hbFBhcnRQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUGFydCA9IGRpcmVjdGx5UmVkdWNlZFBhcnRGcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29uc3QgZGlyZWN0bHlSZWR1Y2VkT3B0aW9uYWxQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KGRpcmVjdGx5UmVkdWNlZFBhcnQpO1xuXG4gICAgICBkaXJlY3RseVJlZHVjZWRQYXJ0ID0gZGlyZWN0bHlSZWR1Y2VkT3B0aW9uYWxQYXJ0UGFydDsgIC8vL1xuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIE9uZU9yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IG5vblRlcm1pbmFsUGFydCwgLy8vXG4gICAgICAgICAgICBwYXJ0ID0gb25lT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUGFydCA9IGRpcmVjdGx5UmVkdWNlZFBhcnRGcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29uc3QgZGlyZWN0bHlSZWR1Y2VkT25lT3JNb3JlUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChkaXJlY3RseVJlZHVjZWRQYXJ0KTtcblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUGFydCA9IGRpcmVjdGx5UmVkdWNlZE9uZU9yTW9yZVBhcnRzUGFydDsgIC8vL1xuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlOiB7XG4gICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAvLy9cbiAgICAgICAgICAgIHBhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0LmdldFBhcnQoKTtcblxuICAgICAgZGlyZWN0bHlSZWR1Y2VkUGFydCA9IGRpcmVjdGx5UmVkdWNlZFBhcnRGcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29uc3QgZGlyZWN0bHlSZWR1Y2VkWmVyb09yTW9yZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KGRpcmVjdGx5UmVkdWNlZFBhcnQpO1xuXG4gICAgICBkaXJlY3RseVJlZHVjZWRQYXJ0ID0gZGlyZWN0bHlSZWR1Y2VkWmVyb09yTW9yZVBhcnRzUGFydDsgIC8vL1xuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlyZWN0bHlSZWR1Y2VkUGFydDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKSB7XG4gIGNvbnN0IHBhcnROb25UZXJtaW5hbFBhcnQgPSBwYXJ0LmlzTm9uVGVybWluYWxQYXJ0KCk7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgICB0eXBlID0gbm9uVGVybWluYWxQYXJ0LmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSdWxlTmFtZVBhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydCwgIC8vL1xuICAgICAgICAgICAgICBydWxlTmFtZSA9IHJ1bGVOYW1lUGFydC5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSdWxlTmFtZSA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMuaW5jbHVkZXMocnVsZU5hbWUpO1xuXG4gICAgICAgIGlmICghbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUnVsZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBydWxlTmFtZTsgLy8vXG5cbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzLnB1c2gobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIE9wdGlvbmFsUGFydFBhcnRUeXBlOiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBub25UZXJtaW5hbFBhcnQsIC8vL1xuICAgICAgICAgICAgICBwYXJ0ID0gb3B0aW9uYWxQYXJ0UGFydC5nZXRQYXJ0KCk7XG5cbiAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIE9uZU9yTW9yZVBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3Qgb25lT3JNb3JlUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAgLy8vXG4gICAgICAgICAgICAgIHBhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQuZ2V0UGFydCgpO1xuXG4gICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZToge1xuICAgICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAvLy9cbiAgICAgICAgICAgICAgcGFydCA9IHplcm9Pck1vcmVQYXJ0c1BhcnQuZ2V0UGFydCgpO1xuXG4gICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBDaG9pY2VPZlBhcnRzUGFydFR5cGU6IHtcbiAgICAgICAgY29uc3QgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBub25UZXJtaW5hbFBhcnQsIC8vL1xuICAgICAgICAgICAgICBwYXJ0cyA9IGNob2ljZU9mUGFydHNQYXJ0LmdldFBhcnRzKCk7XG5cbiAgICAgICAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZToge1xuICAgICAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LCAgLy8vXG4gICAgICAgICAgICAgIHBhcnRzID0gc2VxdWVuY2VPZlBhcnRzUGFydC5nZXRQYXJ0cygpLFxuICAgICAgICAgICAgICBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyksXG4gICAgICAgICAgICAgIHBhcnQgPSBmaXJzdFBhcnQ7IC8vL1xuXG4gICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydChwYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUGFydHMgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0LCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQgfSBmcm9tIFwiLi9wYXJ0XCI7XG5cbmNvbnN0IHsgU2VxdWVuY2VPZlBhcnRzUGFydCwgWmVyb09yTW9yZVBhcnRzUGFydCB9ID0gUGFydHM7XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZVBhcnRzKHBhcnRzKSB7XG4gIHBhcnRzID0gcGFydHMubWFwKChwYXJ0KSA9PiBwYXJ0LmNsb25lKCkpOyAgLy8vXG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJlUGFydHNSZWN1cnNpdmUocGFydHMpIHtcbiAgY29uc3QgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnRzKHBhcnRzKSxcbiAgICAgICAgcmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID0gcmVjdXJzaXZlUnVsZU5hbWVzLmxlbmd0aCxcbiAgICAgICAgcGFydHNSZWN1cnNpdmUgPSAocmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID4gMCk7XG5cbiAgcmV0dXJuIHBhcnRzUmVjdXJzaXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2luZ2xlUGFydEZyb21QYXJ0cyhwYXJ0cykge1xuICBsZXQgc2luZ2xlUGFydDtcblxuICBjb25zdCBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcblxuICBpZiAocGFydHNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyk7XG5cbiAgICBzaW5nbGVQYXJ0ID0gZmlyc3RQYXJ0OyAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQocGFydHMpO1xuXG4gICAgc2luZ2xlUGFydCA9IHNlcXVlbmNlT2ZQYXJ0c1BhcnQ7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHNpbmdsZVBhcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmVQYXJ0c0xlZnRSZWN1cnNpdmUocGFydHMpIHtcbiAgY29uc3QgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydHMocGFydHMpLFxuICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcy5sZW5ndGgsXG4gICAgICAgIHBhcnRzTGVmdFJlY3Vyc2l2ZSA9IChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzTGVuZ3RoID4gMCk7XG5cbiAgcmV0dXJuIHBhcnRzTGVmdFJlY3Vyc2l2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkUGFydEZyb21QYXJ0cyhwYXJ0cykge1xuICBjb25zdCBzaW5nbGVQYXJ0ID0gc2luZ2xlUGFydEZyb21QYXJ0cyhwYXJ0cyksXG4gICAgICAgIHBhcnQgPSBzaW5nbGVQYXJ0LFxuICAgICAgICB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCksXG4gICAgICAgIHJlcGVhdGVkUGFydCA9IHplcm9Pck1vcmVQYXJ0c1BhcnQ7ICAvLy9cblxuICByZXR1cm4gcmVwZWF0ZWRQYXJ0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnRzKHBhcnRzKSB7XG4gIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IFtdO1xuXG4gIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0KHBhcnQsIHJlY3Vyc2l2ZVJ1bGVOYW1lcykpO1xuXG4gIHJldHVybiByZWN1cnNpdmVSdWxlTmFtZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnRzKHBhcnRzKSB7XG4gIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBbXSxcbiAgICAgICAgZmlyc3RQYXJ0ID0gZmlyc3QocGFydHMpLFxuICAgICAgICBwYXJ0ID0gZmlyc3RQYXJ0OyAvLy9cblxuICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbVBhcnQocGFydCwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgcmV0dXJuIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNQYXJ0VW5hcnksIGlzUGFydENvbXBsZXggfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnRcIjtcbmltcG9ydCB7IGFyZVBhcnRzUmVjdXJzaXZlLCBhcmVQYXJ0c0xlZnRSZWN1cnNpdmUsIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0cywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21QYXJ0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFydHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5pdGlvblVuYXJ5KGRlZmluaXRpb24pIHtcbiAgbGV0IGRlZmluaXRpb25VbmFyeSA9IGZhbHNlO1xuXG4gIGNvbnN0IHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcblxuICBpZiAocGFydHNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyksXG4gICAgICAgICAgcGFydCA9IGZpcnN0UGFydCwgLy8vXG4gICAgICAgICAgcGFydFVuYXJ5ID0gaXNQYXJ0VW5hcnkocGFydCk7XG5cbiAgICBkZWZpbml0aW9uVW5hcnkgPSBwYXJ0VW5hcnk7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBkZWZpbml0aW9uVW5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluaXRpb25Db21wbGV4KGRlZmluaXRpb24pIHtcbiAgY29uc3QgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgIGZpcnN0UGFydCA9IGZpcnN0KHBhcnRzKSxcbiAgICAgICAgZmlyc3RQYXJ0Q29tcGxleCA9IGlzUGFydENvbXBsZXgoZmlyc3RQYXJ0KSxcbiAgICAgICAgZGVmaW5pdGlvbkNvbXBsZXggPSBmaXJzdFBhcnRDb21wbGV4OyAvLy9cblxuICByZXR1cm4gZGVmaW5pdGlvbkNvbXBsZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluaXRpb25SZWN1cnNpdmUoZGVmaW5pdGlvbikge1xuICBjb25zdCBwYXJ0cyA9IGRlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgcGFydHNSZWN1cnNpdmUgPSBhcmVQYXJ0c1JlY3Vyc2l2ZShwYXJ0cyksXG4gICAgICAgIGRlZmluaXRpb25SZWN1cnNpdmUgPSBwYXJ0c1JlY3Vyc2l2ZTsgLy8vXG5cbiAgcmV0dXJuIGRlZmluaXRpb25SZWN1cnNpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlKGRlZmluaXRpb24pIHtcbiAgY29uc3QgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgIHBhcnRzTGVmdFJlY3Vyc2l2ZSA9IGFyZVBhcnRzTGVmdFJlY3Vyc2l2ZShwYXJ0cyksXG4gICAgICAgIGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlID0gcGFydHNMZWZ0UmVjdXJzaXZlOyAvLy9cblxuICByZXR1cm4gZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gIGNvbnN0IHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXMgPSByZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydHMocGFydHMpO1xuXG4gIHJldHVybiByZWN1cnNpdmVSdWxlTmFtZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICBjb25zdCBwYXJ0cyA9IGRlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tUGFydHMocGFydHMpO1xuXG4gIHJldHVybiBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBpc0RlZmluaXRpb25SZWN1cnNpdmUsIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2RlZmluaXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVjdXJzaXZlRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcykge1xuICAgIHRoaXMucnVsZSA9IHJ1bGU7XG4gICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjtcbiAgICB0aGlzLnJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHJlY3Vyc2l2ZVJ1bGVOYW1lcztcbiAgfVxuXG4gIGdldFJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZTtcbiAgfVxuXG4gIGdldERlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbjtcbiAgfVxuXG4gIGdldFJlY3Vyc2l2ZVJ1bGVOYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZWN1cnNpdmVSdWxlTmFtZXM7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMucnVsZS5nZXROYW1lKCk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWU7XG4gIH1cblxuICBnZXRQYXJ0cygpIHsgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbi5nZXRQYXJ0cygpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlQW5kRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uKSB7XG4gICAgbGV0IHJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvblJlY3Vyc2l2ZSA9IGlzRGVmaW5pdGlvblJlY3Vyc2l2ZShkZWZpbml0aW9uKTtcblxuICAgIGlmIChkZWZpbml0aW9uUmVjdXJzaXZlKSB7XG4gICAgICBjb25zdCByZWN1cnNpdmVSdWxlTmFtZXMgPSByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbihkZWZpbml0aW9uKTtcblxuICAgICAgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vcmVjdXJzaXZlRGVmaW5pdGlvblwiO1xuXG5pbXBvcnQgeyBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlLCByZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9kZWZpbml0aW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGV4dGVuZHMgUmVjdXJzaXZlRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcykge1xuICAgIHN1cGVyKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgICB0aGlzLmxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzO1xuICB9XG5cbiAgZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWVzO1xuICB9XG5cbiAgaWRFcXVhbFRvKGxMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBsTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0RGVmaW5pdGlvbigpLFxuICAgICAgICAgIGVxdWFsVG8gPSAoZGVmaW5pdGlvbiA9PT0gdGhpcy5kZWZpbml0aW9uKTtcblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlQW5kRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uKSB7XG4gICAgbGV0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlID0gaXNEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZShkZWZpbml0aW9uKTtcblxuICAgIGlmIChkZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZSkge1xuICAgICAgY29uc3QgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vcmVjdXJzaXZlRGVmaW5pdGlvbi9sZWZ0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNEZWZpbml0aW9uQ29tcGxleCwgaXNEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZSwgcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNGcm9tRGVmaW5pdGlvbiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZGVmaW5pdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGV4dGVuZHMgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ge1xuICBnZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUoKSB7XG4gICAgY29uc3QgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHRoaXMuZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcygpLFxuICAgICAgICAgIGZpcnN0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gZmlyc3QobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gZmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWU7IC8vL1xuXG4gICAgcmV0dXJuIGxlZnRSZWN1cnNpdmVSdWxlTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZUFuZERlZmluaXRpb24ocnVsZSwgZGVmaW5pdGlvbikge1xuICAgIGxldCBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUgPSBpc0RlZmluaXRpb25MZWZ0UmVjdXJzaXZlKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25MZWZ0UmVjdXJzaXZlKSB7XG4gICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pLFxuICAgICAgICAgICAgZmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBmaXJzdChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKSxcbiAgICAgICAgICAgIHJ1bGVOYW1lRmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IGZpcnN0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKTtcblxuICAgICAgaWYgKHJ1bGVOYW1lRmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbkNvbXBsZXggPSBpc0RlZmluaXRpb25Db21wbGV4KGRlZmluaXRpb24pO1xuXG4gICAgICAgIGlmIChkZWZpbml0aW9uQ29tcGxleCkge1xuICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtkZWZpbml0aW9uU3RyaW5nfScgZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7cnVsZU5hbWV9JyBydWxlIGlzIGNvbXBsZXggYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG5ldyBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdFwiO1xuXG5pbXBvcnQgeyBsYXN0LCBmcm9udCwgZmlyc3QsIGJhY2t3YXJkc0ZpbmQsIGJhY2t3YXJkc0V2ZXJ5IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNEZWZpbml0aW9uVW5hcnksIGlzRGVmaW5pdGlvbkNvbXBsZXgsIGlzRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUsIHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2RlZmluaXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGV4dGVuZHMgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIHN1cGVyKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcyk7XG5cbiAgICB0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnM7XG4gIH1cblxuICBnZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpIHtcbiAgICBjb25zdCBsYXN0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsYXN0KHRoaXMubGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxhc3RMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSB0aGlzLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZXMoKSxcbiAgICAgICAgICBmaXJzdExlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGZpcnN0KGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGZpcnN0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lOyAvLy9cblxuICAgIHJldHVybiBsZWZ0UmVjdXJzaXZlUnVsZU5hbWU7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBkZWZpbml0aW9ucyA9IHRoaXMubGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLm1hcCgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmdldERlZmluaXRpb24oKTtcblxuICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfSk7XG5cbiAgICBkZWZpbml0aW9ucy5wdXNoKHRoaXMuZGVmaW5pdGlvbik7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZGVwdGggPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNMZW5ndGggLSAxOyAgLy8vXG5cbiAgICByZXR1cm4gZGVwdGg7XG4gIH1cblxuICBpc0xlYXN0KCkge1xuICAgIGNvbnN0IGRlcHRoID0gdGhpcy5nZXREZXB0aCgpLFxuICAgICAgICAgIGxlYXN0ID0gKGRlcHRoID09PSAwKTtcblxuICAgIHJldHVybiBsZWFzdDtcbiAgfVxuXG4gIGlzR3JlYXRlclRoYW4oaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVwdGggPSB0aGlzLmdldERlcHRoKCksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uRGVwdGggPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0RGVwdGgoKSxcbiAgICAgICAgICBncmVhdGVyVGhhbkluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IChkZXB0aCA+IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkRlcHRoKTtcblxuICAgIHJldHVybiBncmVhdGVyVGhhbkluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxuXG4gIGlzRXF1aXZhbGVudFRvKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IGRlZmluaXRpb25zID0gdGhpcy5nZXREZWZpbml0aW9ucygpLFxuICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkRlZmluaXRpb25zID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldERlZmluaXRpb25zKCksXG4gICAgICAgICAgZXF1aXZhbGVudFRvID0gY29tcGFyZURlZmluaXRpb25zKGRlZmluaXRpb25zLCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25EZWZpbml0aW9ucyk7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbnRUbztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZURlZmluaXRpb25BbmRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGxldCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZSA9IGlzRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUoZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGVmaW5pdGlvbkxlZnRSZWN1cnNpdmUpIHtcbiAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBmaXJzdExlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGZpcnN0KGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMpLFxuICAgICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gZmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIC8vL1xuICAgICAgICAgICAgcnVsZU5hbWVMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IGxlZnRSZWN1cnNpdmVSdWxlTmFtZSk7XG5cbiAgICAgIGlmICghcnVsZU5hbWVMZWZ0UmVjdXJzaXZlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5mcm9tUnVsZUFuZERlZmluaXRpb24ocnVsZSwgZGVmaW5pdGlvbik7XG5cbiAgICAgICAgcmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBbIC4uLnJlY3Vyc2l2ZURlZmluaXRpb25zLCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBdOyAgLy8vXG5cbiAgICAgICAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gZmluZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhyZWN1cnNpdmVEZWZpbml0aW9ucyk7XG5cbiAgICAgICAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25VbmFyeSA9IGlzRGVmaW5pdGlvblVuYXJ5KGRlZmluaXRpb24pLFxuICAgICAgICAgICAgICAgIGRlZmluaXRpb25Db21wbGV4ID0gaXNEZWZpbml0aW9uQ29tcGxleChkZWZpbml0aW9uKTtcblxuICAgICAgICAgIGlmIChkZWZpbml0aW9uVW5hcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1VuYXJ5ID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmV2ZXJ5KChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0RGVmaW5pdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uVW5hcnkxID0gaXNEZWZpbml0aW9uVW5hcnkoZGVmaW5pdGlvbik7XG5cbiAgICAgICAgICAgICAgaWYgKGRlZmluaXRpb25VbmFyeTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNVbmFyeSkge1xuICAgICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gZGVmaW5pdGlvbi5hc1N0cmluZygpO1xuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke2RlZmluaXRpb25TdHJpbmd9JyBpbmRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBhbmQgYWxsIG9mIGl0cyBpbnRlcm1lZGlhdGUgZGVmaW5pdGlvbnMgYXJlIHVuYXJ5IGFuZCB0aGVyZWZvcmUgaXQgY2Fubm90IGJlIHJld3JpdHRlbi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGVmaW5pdGlvbkNvbXBsZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke2RlZmluaXRpb25TdHJpbmd9JyBpbmRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBpcyBjb21wbGV4IGFuZCB0aGVyZWZvcmUgaXQgY2Fubm90IGJlIHJld3JpdHRlbi5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuZm9yRWFjaCgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgICAgICAgICBkZWZpbml0aW9uQ29tcGxleCA9IGlzRGVmaW5pdGlvbkNvbXBsZXgoZGVmaW5pdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uQ29tcGxleCkge1xuICAgICAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGluZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7cnVsZU5hbWV9JyBydWxlIGlzIGNvbXBsZXggYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgcmVjdXJzaXZlUnVsZU5hbWVzID0gcmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbik7XG5cbiAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBuZXcgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24sIHJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lcywgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbURlZmluaXRpb25BbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKSB7XG4gICAgY29uc3QgbGFzdExlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbGFzdChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc0Zyb250ID0gZnJvbnQobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgIGNvbnN0IHJ1bGUgPSBsYXN0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpO1xuXG4gICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zRnJvbnQ7ICAvLy9cblxuICAgIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbmV3IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7ICAvLy9cblxuICAgIHJldHVybiBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVEZWZpbml0aW9uQW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGNvbnN0IHJlY3Vyc2l2ZVJ1bGVOYW1lcyA9IHJlY3Vyc2l2ZVJ1bGVOYW1lc0Zyb21EZWZpbml0aW9uKGRlZmluaXRpb24pLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzRnJvbURlZmluaXRpb24oZGVmaW5pdGlvbiksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbmV3IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7ICAvLy9cblxuICAgIHJldHVybiBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGFyZURlZmluaXRpb25zKGRlZmluaXRpb25zQSwgZGVmaW5pdGlvbnNCKSB7XG4gIGxldCBlcXVhbFRvID0gZmFsc2U7XG5cbiAgY29uc3QgZGVmaW5pdGlvbnNBTGVuZ3RoID0gZGVmaW5pdGlvbnNBLmxlbmd0aCxcbiAgICAgICAgZGVmaW5pdGlvbnNCTGVuZ3RoID0gZGVmaW5pdGlvbnNCLmxlbmd0aDtcblxuICBpZiAoZGVmaW5pdGlvbnNBTGVuZ3RoID09PSBkZWZpbml0aW9uc0JMZW5ndGgpIHtcbiAgICBjb25zdCBmaXJzdERlZmluaXRpb25CID0gZmlyc3QoZGVmaW5pdGlvbnNCKSxcbiAgICAgICAgICBvZmZzZXQgPSBkZWZpbml0aW9uc0EuaW5kZXhPZihmaXJzdERlZmluaXRpb25CKTtcblxuICAgIGlmIChvZmZzZXQgPiAtMSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gZGVmaW5pdGlvbnNBTGVuZ3RoOyAgLy8vXG5cbiAgICAgIGVxdWFsVG8gPSBkZWZpbml0aW9uc0EuZXZlcnkoKGRlZmluaXRpb25BLCBpbmRleCkgPT4ge1xuICAgICAgICBpbmRleCA9IChsZW5ndGggKyBpbmRleCAtIG9mZnNldCkgJSBsZW5ndGg7XG5cbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbkIgPSBkZWZpbml0aW9uc0JbaW5kZXhdO1xuXG4gICAgICAgIGlmIChkZWZpbml0aW9uQSA9PT0gZGVmaW5pdGlvbkIpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVxdWFsVG87XG59XG5cbmZ1bmN0aW9uIGZpbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpIHtcbiAgY29uc3QgbGFzdExlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbGFzdChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpLFxuICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzID0gbGFzdExlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZXMoKSxcbiAgICAgICAgZmlyc3RMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBmaXJzdChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKSxcbiAgICAgICAgbExlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGZpcnN0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gYmFja3dhcmRzRmluZChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgICAgIGlmIChydWxlTmFtZSA9PT0gbExlZnRSZWN1cnNpdmVSdWxlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIHJldHVybiBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbn1cblxuZnVuY3Rpb24gbWF0Y2hMZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICBjb25zdCBydWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMubWFwKChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgICAgIHJldHVybiBydWxlTmFtZTtcbiAgICAgICAgfSksXG4gICAgICAgIHJ1bGVOYW1lID0gcnVsZU5hbWVzLnNoaWZ0KCk7XG5cbiAgcnVsZU5hbWVzLnB1c2gocnVsZU5hbWUpO1xuXG4gIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZXNNYXRjaCA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5ldmVyeSgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZXNbaW5kZXhdLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZXMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc0luY2x1ZGVzUnVsZU5hbWUgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzLmluY2x1ZGVzKHJ1bGVOYW1lKTtcblxuICAgIGlmIChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzSW5jbHVkZXNSdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc01hdGNoO1xufVxuXG5mdW5jdGlvbiBmaW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJlY3Vyc2l2ZURlZmluaXRpb25zKSB7XG4gIGxldCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNGcm9tUmVjdXJzaXZlRGVmaW5pdGlvbnMocmVjdXJzaXZlRGVmaW5pdGlvbnMpO1xuXG4gIGlmIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgIT09IG51bGwpIHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGZpbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpO1xuXG4gICAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICB0cnVuY2F0ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgICAgY29uc3QgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lc01hdGNoID0gbWF0Y2hMZWZ0UmVjdXJzaXZlUnVsZU5hbWVzKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7XG5cbiAgICAgIGlmIChsZWZ0UmVjdXJzaXZlUnVsZU5hbWVzTWF0Y2gpIHtcbiAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zO1xufVxuXG5mdW5jdGlvbiB0cnVuY2F0ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gIGNvbnN0IGluZGV4ID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmluZGV4T2YobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pLFxuICAgICAgc3RhcnQgPSAwLFxuICAgICAgZGVsZXRlQ291bnQgPSBpbmRleDsgIC8vL1xuXG4gIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbn1cblxuZnVuY3Rpb24gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zRnJvbVJlY3Vyc2l2ZURlZmluaXRpb25zKHJlY3Vyc2l2ZURlZmluaXRpb25zKSB7XG4gIGxldCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBbXTtcblxuICBiYWNrd2FyZHNFdmVyeShyZWN1cnNpdmVEZWZpbml0aW9ucywgKHJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICBjb25zdCByZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSAocmVjdXJzaXZlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gcmVjdXJzaXZlRGVmaW5pdGlvbjsgIC8vL1xuXG4gICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMudW5zaGlmdChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zTGVuZ3RoID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmxlbmd0aDtcblxuICBpZiAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zTGVuZ3RoIDwgMikge1xuICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vcmVjdXJzaXZlRGVmaW5pdGlvbi9sZWZ0L2RpcmVjdGx5XCI7XG5pbXBvcnQgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuLi9yZWN1cnNpdmVEZWZpbml0aW9uL2xlZnQvaW5kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBwdXNoLCBsZWZ0RGlmZmVyZW5jZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKGFkZGVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgeyBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSA9IGNvbnRleHQ7XG5cbiAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLnB1c2goYWRkZWRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMoYWRkZWRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSA9IGNvbnRleHQ7XG5cbiAgcHVzaChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIGFkZGVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgY29udGV4dCkge1xuICBsZXQgeyBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSA9IGNvbnRleHQ7XG5cbiAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmZpbHRlcigobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHsgIC8vL1xuICAgIGlmIChydWxlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNSdWxlID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpO1xuXG4gICAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1J1bGUgPT09IHJ1bGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhyZW1vdmVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zIH0gPSBjb250ZXh0O1xuXG4gIGxlZnREaWZmZXJlbmNlKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgcmVtb3ZlZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihydWxlLCBjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICBjb250ZXh0ID0gcnVsZTsgLy8vXG4gICAgcnVsZSA9IG51bGw7XG4gIH1cblxuICBjb25zdCB7IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9ID0gY29udGV4dCxcbiAgICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5maW5kKChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuXG4gICAgICAgICAgaWYgKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgICAgICAgICAgaWYgKHJ1bGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgIC8vL1xuICAgICAgICAgICAgICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKTtcblxuICAgICAgICAgICAgaWYgKHJ1bGUgPT09IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25SdWxlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICByZXR1cm4gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zIH0gPSBjb250ZXh0LFxuICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuZmlsdGVyKChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gaW5zdGFuY2VvZiBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgICAgICBpZiAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25EaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgICAgICAgaWYgKHJ1bGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgIC8vL1xuICAgICAgICAgICAgICBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1J1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKTtcblxuICAgICAgICAgIGlmIChkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1J1bGUgPT09IHJ1bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgcmV0dXJuIGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnRleHQgPSBjYWxsYmFjaztcbiAgICBjYWxsYmFjayA9IChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHRydWVcbiAgfVxuXG4gIGNvbnN0IHsgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zIH0gPSBjb250ZXh0LFxuICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLmZpbHRlcigobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG5cbiAgICAgICAgICBpZiAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICAgICAgICAgIGlmIChydWxlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgIC8vL1xuICAgICAgICAgICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCk7XG5cbiAgICAgICAgICAgIGlmIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25SdWxlID09PSBydWxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gY2FsbGJhY2soaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXRyaWV2ZUdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKGNvbnRleHQpIHtcbiAgbGV0IGdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbnVsbDtcblxuICBjb25zdCB7IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9ID0gY29udGV4dDtcblxuICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuZm9yRWFjaCgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG5cbiAgICBpZiAobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uOyAgLy8vXG5cbiAgICAgIGlmIChncmVhdGVzdEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICBncmVhdGVzdEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjsgLy8vXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25HcmVhdGVyVGhhbkdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmlzR3JlYXRlclRoYW4oZ3JlYXRlc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuXG4gICAgICAgIGlmIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25HcmVhdGVyVGhhbkdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgICAgICAgZ3JlYXRlc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247IC8vL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZ3JlYXRlc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9vcGVyYXRpb24vcnVsZVwiO1xuaW1wb3J0IERpcmVjdGx5UmVkdWNlZFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGUvcmVkdWNlZC9kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBmaW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbiBleHRlbmRzIFJ1bGVPcGVyYXRpb24ge1xuICBhcHBseShkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBhbGxvd0lzb2xhdGVkLCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyBydWxlTWFwIH0gPSBjb250ZXh0LFxuICAgICAgICAgIHJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBmaW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQpLFxuICAgICAgICAgIGRpcmVjdGx5UmVkdWNlZFJ1bGUgPSBEaXJlY3RseVJlZHVjZWRSdWxlLmZyb21SdWxlQW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgYWxsb3dJc29sYXRlZCk7XG5cbiAgICBpZiAoZGlyZWN0bHlSZWR1Y2VkUnVsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWUgPSBkaXJlY3RseVJlZHVjZWRSdWxlLmdldE5hbWUoKTtcblxuICAgICAgcnVsZU1hcFtkaXJlY3RseVJlZHVjZWRSdWxlTmFtZV0gPSBkaXJlY3RseVJlZHVjZWRSdWxlO1xuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3RseVJlZHVjZWRSdWxlO1xuICB9XG5cbiAgcmV0cmlldmUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgYWxsb3dJc29sYXRlZCwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgcnVsZU1hcCB9ID0gY29udGV4dCxcbiAgICAgICAgICBydWxlID0gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlTmFtZSA9IGRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlID0gcnVsZU1hcFtkaXJlY3RseVJlZHVjZWRSdWxlTmFtZV0gfHwgbnVsbDtcblxuICAgIHJldHVybiBkaXJlY3RseVJlZHVjZWRSdWxlO1xuICB9XG5cbiAgc3RhdGljIGV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgYWxsb3dJc29sYXRlZCwgY29udGV4dCkge1xuICAgIGNvbnN0IHJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlT3BlcmF0aW9uID0gbmV3IERpcmVjdGx5UmVkdWNlZFJ1bGVPcGVyYXRpb24ocnVsZSksXG4gICAgICAgICAgZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IGRpcmVjdGx5UmVkdWNlZFJ1bGVPcGVyYXRpb24uZXhlY3V0ZShkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBhbGxvd0lzb2xhdGVkLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBkaXJlY3RseVJlZHVjZWRSdWxlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSwgRGVmaW5pdGlvbiB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBEaXJlY3RseVJlcGVhdGVkTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9yZXBlYXRlZC9kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBtYXRjaFBhcnRzIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9wYXJ0XCI7XG5pbXBvcnQgeyBjbG9uZVBhcnRzIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9wYXJ0c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHRhaWwgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc0RlZmluaXRpb25VbmFyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseVJlcGVhdGVkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbVJ1bGVBbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBsZXQgZGVmaW5pdGlvbnMgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5yZWR1Y2UoKGRlZmluaXRpb25zLCBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgICBkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbiA9IGRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgICBpZiAoIWRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICAgIGRlZmluaXRpb25zLnB1c2goZGVmaW5pdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBmaXJzdERlZmluaXRpb24gPSBmaXJzdChkZWZpbml0aW9ucyksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IGZpcnN0RGVmaW5pdGlvbiwgLy8vXG4gICAgICAgICAgcGFydHMgPSBkZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgICAgZmlyc3RQYXJ0ID0gZmlyc3QocGFydHMpLFxuICAgICAgICAgIHByZXZpb3VzRmlyc3RQYXJ0ID0gZmlyc3RQYXJ0OyAgLy8vXG5cbiAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25zLm1hcCgoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgbGV0IHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpO1xuXG4gICAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyksXG4gICAgICAgICAgICBwYXJ0c1RhaWwgPSB0YWlsKHBhcnRzKTtcblxuICAgICAgY29uc3QgbWF0Y2hlcyA9IG1hdGNoUGFydHMoZmlyc3RQYXJ0LCBwcmV2aW91c0ZpcnN0UGFydCksXG4gICAgICAgICAgICBkZWZpbml0aW9uVW5hcnkgPSBpc0RlZmluaXRpb25VbmFyeShkZWZpbml0aW9uKTtcblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBkb2VzIG5vdCBtYXRjaCBvbmUgb2YgaXRzIHNpYmxpbmcgZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbnMgYW5kIHRoZXJlZm9yZSB0aGUgcnVsZSBjYW5ub3QgYmUgcmV3cml0dGVuLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmaW5pdGlvblVuYXJ5KSB7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb24gb2YgdGhlICcke3J1bGVOYW1lfScgcnVsZSBpcyB1bmFyeSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSByZXdyaXR0ZW4uYCk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzID0gcGFydHNUYWlsOyAgLy8vXG5cbiAgICAgIHBhcnRzID0gY2xvbmVQYXJ0cyhwYXJ0cyk7ICAvLy9cblxuICAgICAgZGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uKHBhcnRzKTtcblxuICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfSk7XG5cbiAgICBjb25zdCBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICAgIG5hbWUgPSBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IERpcmVjdGx5UmVwZWF0ZWROb2RlLCAgLy8vXG4gICAgICAgICAgZGlyZWN0bHlSZXBlYXRlZFJ1bGUgPSBuZXcgRGlyZWN0bHlSZXBlYXRlZFJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBkaXJlY3RseVJlcGVhdGVkUnVsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9vcGVyYXRpb24vcnVsZVwiO1xuaW1wb3J0IERpcmVjdGx5UmVwZWF0ZWRSdWxlIGZyb20gXCIuLi8uLi9ydWxlL3JlcGVhdGVkL2RpcmVjdGx5XCI7XG5cbmltcG9ydCB7IGZpbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbiBleHRlbmRzIFJ1bGVPcGVyYXRpb24ge1xuICBhcHBseShkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyBydWxlTWFwIH0gPSBjb250ZXh0LFxuICAgICAgICAgIHJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGZpbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBjb250ZXh0KSxcbiAgICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZSA9IERpcmVjdGx5UmVwZWF0ZWRSdWxlLmZyb21SdWxlQW5kRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpO1xuXG4gICAgaWYgKGRpcmVjdGx5UmVwZWF0ZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBkaXJlY3RseVJlcGVhdGVkUnVsZS5nZXROYW1lKCk7XG5cbiAgICAgIHJ1bGVNYXBbZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lXSA9IGRpcmVjdGx5UmVwZWF0ZWRSdWxlO1xuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3RseVJlcGVhdGVkUnVsZTtcbiAgfVxuXG4gIHJldHJpZXZlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJ1bGVNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgICAgcnVsZSA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZSA9IHJ1bGVNYXBbZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lXSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRpcmVjdGx5UmVwZWF0ZWRSdWxlO1xuICB9XG5cbiAgc3RhdGljIGV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IHJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbiA9IG5ldyBEaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbihydWxlKSxcbiAgICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZSA9IGRpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uLmV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZGlyZWN0bHlSZXBlYXRlZFJ1bGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCIuLi9vcGVyYXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbk9wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGUsIGRlZmluaXRpb24pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5ydWxlID0gcnVsZTtcbiAgICB0aGlzLmRlZmluaXRpb24gPSBkZWZpbml0aW9uO1xuICB9XG5cbiAgZ2V0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlO1xuICB9XG5cbiAgZ2V0RGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uO1xuICB9XG5cbiAgY29tcGFyZShkZWZpbml0aW9uT3BlcmF0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25PcGVyYXRpb24uZ2V0RGVmaW5pdGlvbigpLFxuICAgICAgICAgIGNvbXBhcmVzVG8gPSAodGhpcy5kZWZpbml0aW9uID09PSBkZWZpbml0aW9uKTtcblxuICAgIHJldHVybiBjb21wYXJlc1RvO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUGFydHMsIERlZmluaXRpb24gfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgeyBjbG9uZVBhcnRzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJ0c1wiO1xuaW1wb3J0IHsgZmlyc3QsIGhlYWQsIHRhaWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBydWxlTmFtZVBhcnRGcm9tUnVsZU5hbWUsIGRpcmVjdGx5UmVkdWNlZFBhcnRGcm9tUGFydCB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFydFwiO1xuaW1wb3J0IHsgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lLCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuY29uc3QgeyBaZXJvT3JNb3JlUGFydHNQYXJ0IH0gPSBQYXJ0cztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwbGFjZW1lbnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGlzUHJlc2VudChydWxlKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5hc1N0cmluZygpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gcnVsZS5nZXREZWZpbml0aW9ucygpLFxuICAgICAgICAgIHJlcGxhY2VtZW50RGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucy5maWx0ZXIoKGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25SZXBsYWNlbWVudERlZmluaXRpb24gPSAoZGVmaW5pdGlvbiBpbnN0YW5jZW9mIFJlcGxhY2VtZW50RGVmaW5pdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uUmVwbGFjZW1lbnREZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHByZXNlbnQgPSByZXBsYWNlbWVudERlZmluaXRpb25zLnNvbWUoKHJlcGxhY2VtZW50RGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnREZWZpbml0aW9uU3RyaW5nID0gcmVwbGFjZW1lbnREZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudERlZmluaXRpb25TdHJpbmcgPT09IHN0cmluZykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBwcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgcnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lUGFydCA9IHJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZShsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0ID0gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lKTtcblxuICAgIGxldCBwYXJ0cyA9IFtcbiAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZVBhcnQsXG4gICAgICBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnRcbiAgICBdO1xuXG4gICAgcGFydHMgPSBjbG9uZVBhcnRzKHBhcnRzKTsgIC8vL1xuXG4gICAgbGV0IHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IG5ldyBSZXBsYWNlbWVudERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgY29uc3QgcHJlc2VudCA9IHJlcGxhY2VtZW50RGVmaW5pdGlvbi5pc1ByZXNlbnQocnVsZSk7XG5cbiAgICBpZiAocHJlc2VudCkge1xuICAgICAgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnREZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkFuZEluZGlyZWN0bHlSZWR1Y2VkUnVsZShsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseVJlZHVjZWRSdWxlKSB7XG4gICAgbGV0IHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgICBpZiAoaW5kaXJlY3RseVJlZHVjZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlZHVjZWRSdWxlLmdldE5hbWUoKSxcbiAgICAgICAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUGFydHMgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0c1RhaWwgPSB0YWlsKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUGFydHMpLFxuICAgICAgICAgICAgcmVkdWNlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgcmVkdWNlZFJ1bGVOYW1lUGFydCA9IHJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZShyZWR1Y2VkUnVsZU5hbWUpO1xuXG4gICAgICBsZXQgcGFydHMgPSBbXG4gICAgICAgIHJlZHVjZWRSdWxlTmFtZVBhcnQsXG4gICAgICAgIC4uLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUGFydHNUYWlsXG4gICAgICBdO1xuXG4gICAgICBwYXJ0cyA9IGNsb25lUGFydHMocGFydHMpOyAgLy8vXG5cbiAgICAgIHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IG5ldyBSZXBsYWNlbWVudERlZmluaXRpb24ocGFydHMpO1xuICAgIH1cblxuICAgIHJldHVybiByZXBsYWNlbWVudERlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbURpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25BbmREaXJlY3RseVJlZHVjZWRSdWxlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGRpcmVjdGx5UmVkdWNlZFJ1bGUpIHtcbiAgICBsZXQgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gbnVsbDtcblxuICAgIGlmIChkaXJlY3RseVJlZHVjZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBydWxlTmFtZSA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0cyA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgICAgIGZpcnN0RGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblBhcnRzID0gZmlyc3QoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblBhcnRzKSxcbiAgICAgICAgICAgIHBhcnQgPSBmaXJzdERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0cywgLy8vXG4gICAgICAgICAgICBkaXJlY3RseVJlZHVjZWRQYXJ0ID0gZGlyZWN0bHlSZWR1Y2VkUGFydEZyb21QYXJ0KHBhcnQpLFxuICAgICAgICAgICAgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICAgIGRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnQgPSBydWxlTmFtZVBhcnRGcm9tUnVsZU5hbWUoZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lKSxcbiAgICAgICAgICAgIHplcm9Pck1vcmVEaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0UGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KGRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnQpO1xuXG4gICAgICBsZXQgcGFydHMgPSBbXG4gICAgICAgIGRpcmVjdGx5UmVkdWNlZFBhcnQsXG4gICAgICAgIHplcm9Pck1vcmVEaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgXTtcblxuICAgICAgcGFydHMgPSBjbG9uZVBhcnRzKHBhcnRzKTsgIC8vL1xuXG4gICAgICByZXBsYWNlbWVudERlZmluaXRpb24gPSBuZXcgUmVwbGFjZW1lbnREZWZpbml0aW9uKHBhcnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnREZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25BbmREaXJlY3RseVJlcGVhdGVkUnVsZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGRpcmVjdGx5UmVwZWF0ZWRSdWxlKSB7XG4gICAgbGV0IHBhcnRzO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gZGlyZWN0bHlSZXBlYXRlZFJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIGRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnQgPSBydWxlTmFtZVBhcnRGcm9tUnVsZU5hbWUoZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlRGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQoZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydCk7ICAvLy9cblxuICAgIHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpO1xuXG4gICAgcGFydHMgPSBbIC8vL1xuICAgICAgLi4ucGFydHMsXG4gICAgICB6ZXJvT3JNb3JlRGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgXTtcblxuICAgIHBhcnRzID0gY2xvbmVQYXJ0cyhwYXJ0cyk7ICAvLy9cblxuICAgIGNvbnN0IHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IG5ldyBSZXBsYWNlbWVudERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50RGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uQW5kSW5kaXJlY3RseVJlcGVhdGVkUnVsZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUpIHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0cyA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFBhcnRzKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0ID0gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblBhcnRzVGFpbCA9IHRhaWwobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0cyksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUGFydHMgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UGFydHMoKSxcbiAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25QYXJ0c0hlYWQgPSBoZWFkKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblBhcnRzKTtcblxuICAgIGxldCBwYXJ0cyA9IFtcbiAgICAgIC4uLmluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvblBhcnRzSGVhZCxcbiAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydCxcbiAgICAgIC4uLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uUGFydHNUYWlsXG4gICAgXTtcblxuICAgIHBhcnRzID0gY2xvbmVQYXJ0cyhwYXJ0cyk7ICAvLy9cblxuICAgIGNvbnN0IHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IG5ldyBSZXBsYWNlbWVudERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50RGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9vcGVyYXRpb24vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJlcGxhY2VtZW50RGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9yZXBsYWNlbWVudFwiO1xuXG5pbXBvcnQgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9yZWN1cnNpdmVEZWZpbml0aW9uL2xlZnQvaW5kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBmaW5kSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbk9wZXJhdGlvbiB7XG4gIGFwcGx5KGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGRpcmVjdGx5UmVwZWF0ZWRSdWxlLCBkaXJlY3RseVJlZHVjZWRSdWxlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcnVsZSA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpO1xuXG4gICAgbGV0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBmaW5kSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBjb250ZXh0KTtcblxuICAgIHJ1bGUucmVtb3ZlQWxsRGVmaW5pdGlvbnMoKTtcblxuICAgIGNvbnN0IHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IFJlcGxhY2VtZW50RGVmaW5pdGlvbi5mcm9tRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkFuZERpcmVjdGx5UmVkdWNlZFJ1bGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgZGlyZWN0bHlSZWR1Y2VkUnVsZSk7XG5cbiAgICBpZiAocmVwbGFjZW1lbnREZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gcmVwbGFjZW1lbnREZWZpbml0aW9uOyAvLy9cblxuICAgICAgcnVsZS5hZGREZWZpbml0aW9uKGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLm1hcCgoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7ICAvLy9cbiAgICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICAgIHJlcGxhY2VtZW50RGVmaW5pdGlvbiA9IFJlcGxhY2VtZW50RGVmaW5pdGlvbi5mcm9tSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uQW5kRGlyZWN0bHlSZXBlYXRlZFJ1bGUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBkaXJlY3RseVJlcGVhdGVkUnVsZSksXG4gICAgICAgICAgICBkZWZpbml0aW9uID0gcmVwbGFjZW1lbnREZWZpbml0aW9uOyAvLy9cblxuICAgICAgcnVsZS5hZGREZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbVJ1bGVEZWZpbml0aW9uQW5kTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7XG5cbiAgICAgIHJldHVybiBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucztcbiAgfVxuXG4gIHJldHJpZXZlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGRpcmVjdGx5UmVwZWF0ZWRSdWxlLCBkaXJlY3RseVJlZHVjZWRSdWxlLCBjb250ZXh0KSB7XG4gICAgLy8vXG4gIH1cblxuICBzdGF0aWMgZXhlY3V0ZShkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBkaXJlY3RseVJlcGVhdGVkUnVsZSwgZGlyZWN0bHlSZWR1Y2VkUnVsZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHJ1bGUgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbiA9IG5ldyBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uKHJ1bGUsIGRlZmluaXRpb24pLFxuICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uLmV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgZGlyZWN0bHlSZXBlYXRlZFJ1bGUsIGRpcmVjdGx5UmVkdWNlZFJ1bGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnM7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vcnVsZS9kaXJlY3RseVJlZHVjZWRcIjtcbmltcG9ydCBEaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vcnVsZS9kaXJlY3RseVJlcGVhdGVkXCI7XG5pbXBvcnQgRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vZGVmaW5pdGlvbi9kaXJlY3RseUxlZnRSZWN1cnNpdmVcIjtcblxuaW1wb3J0IHsgcmVtb3ZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLFxuICAgICAgICAgZmluZERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sXG4gICAgICAgICBmaW5kRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbGltaW5hdGVEaXJlY3RMZWZ0UmVjdXJzaW9uKGNvbnRleHQpIHtcbiAgbGV0IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBmaW5kRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihjb250ZXh0KTtcblxuICB3aGlsZSAoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiAhPT0gbnVsbCkge1xuICAgIHJld3JpdGVEaXJlY3RMZWZ0UmVjdXJzaW9uKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpO1xuXG4gICAgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGZpbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKGNvbnRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVEaXJlY3RMZWZ0UmVjdXJzaW9uKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgYWxsb3dJc29sYXRlZCA9IGZhbHNlLFxuICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlID0gRGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbi5leGVjdXRlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGFsbG93SXNvbGF0ZWQsIGNvbnRleHQpLFxuICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZSA9IERpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uLmV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCk7XG5cbiAgRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbi5leGVjdXRlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGRpcmVjdGx5UmVwZWF0ZWRSdWxlLCBkaXJlY3RseVJlZHVjZWRSdWxlLCBjb250ZXh0KTtcblxuICBjb25zdCBydWxlID0gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgIGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gZmluZERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQpLFxuICAgICAgICByZW1vdmVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnM7IC8vL1xuXG4gIHJlbW92ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhyZW1vdmVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBjb250ZXh0KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBJbmRpcmVjdGx5UmVkdWNlZE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvcmVkdWNlZC9pbmRpcmVjdGx5XCI7XG5cbmltcG9ydCB7IGluZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGlyZWN0bHlSZWR1Y2VkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbVJ1bGVBbmRJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMpIHtcbiAgICBsZXQgaW5kaXJlY3RseVJlZHVjZWRSdWxlID0gbnVsbDtcblxuICAgIGxldCBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKTtcblxuICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnMuc2xpY2UoMCk7ICAvLy9cblxuICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMuZm9yRWFjaCgoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldERlZmluaXRpb24oKSxcbiAgICAgICAgICAgIGluZGV4ID0gZGVmaW5pdGlvbnMuaW5kZXhPZihkZWZpbml0aW9uKTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgICAgZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZpbml0aW9uc0xlbmd0aCA9IGRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChkZWZpbml0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgICBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZShydWxlTmFtZSksXG4gICAgICAgICAgICBuYW1lID0gaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IEluZGlyZWN0bHlSZWR1Y2VkTm9kZTsgIC8vL1xuXG4gICAgICBpbmRpcmVjdGx5UmVkdWNlZFJ1bGUgPSBuZXcgSW5kaXJlY3RseVJlZHVjZWRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGlyZWN0bHlSZWR1Y2VkUnVsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9vcGVyYXRpb24vcnVsZVwiO1xuaW1wb3J0IEluZGlyZWN0bHlSZWR1Y2VkUnVsZSBmcm9tIFwiLi4vLi4vcnVsZS9yZWR1Y2VkL2luZGlyZWN0bHlcIjtcblxuaW1wb3J0IHsgaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZUZyb21SdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcbmltcG9ydCB7IGZpbmRJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbiBleHRlbmRzIFJ1bGVPcGVyYXRpb24ge1xuICBhcHBseShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJ1bGVNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgICAgcnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGZpbmRJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IEluZGlyZWN0bHlSZWR1Y2VkUnVsZS5mcm9tUnVsZUFuZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyk7XG5cbiAgICBpZiAoaW5kaXJlY3RseVJlZHVjZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlZHVjZWRSdWxlLmdldE5hbWUoKTtcblxuICAgICAgcnVsZU1hcFtpbmRpcmVjdGx5UmVkdWNlZFJ1bGVOYW1lXSA9IGluZGlyZWN0bHlSZWR1Y2VkUnVsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kaXJlY3RseVJlZHVjZWRSdWxlO1xuICB9XG5cbiAgcmV0cmlldmUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyBydWxlTWFwIH0gPSBjb250ZXh0LFxuICAgICAgICAgIHJ1bGUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZSA9IGluZGlyZWN0bHlSZWR1Y2VkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IHJ1bGVNYXBbaW5kaXJlY3RseVJlZHVjZWRSdWxlTmFtZV0gfHwgbnVsbDtcblxuICAgIHJldHVybiBpbmRpcmVjdGx5UmVkdWNlZFJ1bGU7XG4gIH1cblxuICBzdGF0aWMgZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBpbmRpcmVjdGx5UmVkdWNlZFJ1bGVPcGVyYXRpb24gPSBuZXcgSW5kaXJlY3RseVJlZHVjZWRSdWxlT3BlcmF0aW9uKHJ1bGUpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IGluZGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbi5leGVjdXRlKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaW5kaXJlY3RseVJlZHVjZWRSdWxlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUnVsZSwgUGFydHMsIERlZmluaXRpb24gfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgSW5kaXJlY3RseVJlcGVhdGVkTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9yZXBlYXRlZC9pbmRpcmVjdGx5XCI7XG5cbmltcG9ydCB7IG1hdGNoUGFydHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3BhcnRcIjtcbmltcG9ydCB7IGNsb25lUGFydHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3BhcnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgdGFpbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5jb25zdCB7IEVwc2lsb25QYXJ0IH0gPSBQYXJ0cztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5kaXJlY3RseVJlcGVhdGVkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbVJ1bGVMZWZ0UmVjdXJzaXZlUnVsZU5hbWVBbmRJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucykge1xuICAgIGNvbnN0IGZpcnN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gZmlyc3QoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gZmlyc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247IC8vL1xuXG4gICAgbGV0IGRlZmluaXRpb25zID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucy5yZWR1Y2UoKGRlZmluaXRpb25zLCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0RGVmaW5pdGlvbigpLFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSBkZWZpbml0aW9ucy5pbmNsdWRlcyhkZWZpbml0aW9uKTtcblxuICAgICAgaWYgKCFkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbikge1xuICAgICAgICBkZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgZmlyc3REZWZpbml0aW9uID0gZmlyc3QoZGVmaW5pdGlvbnMpLFxuICAgICAgICAgIGRlZmluaXRpb24gPSBmaXJzdERlZmluaXRpb24sIC8vL1xuICAgICAgICAgIHBhcnRzID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpLFxuICAgICAgICAgIGZpcnN0UGFydCA9IGZpcnN0KHBhcnRzKSxcbiAgICAgICAgICBwcmV2aW91c0ZpcnN0UGFydCA9IGZpcnN0UGFydDsgIC8vL1xuXG4gICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucy5yZWR1Y2UoKGRlZmluaXRpb25zLCBkZWZpbml0aW9uKSA9PiB7XG4gICAgICBsZXQgcGFydHMgID0gZGVmaW5pdGlvbi5nZXRQYXJ0cygpO1xuXG4gICAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdChwYXJ0cyksXG4gICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2hQYXJ0cyhmaXJzdFBhcnQsIHByZXZpb3VzRmlyc3RQYXJ0KTtcblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgIGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7ZGVmaW5pdGlvblN0cmluZ30nIGluZGlyZWN0bHkgbGVmdCByZWN1cnNpdmUgZGVmaW5pdGlvbiBvZiB0aGUgJyR7cnVsZU5hbWV9JyBydWxlIGRvZXMgbm90IG1hdGNoIG9uZSBvZiBpdHMgc2libGluZyBpbmRpcmVjdGx5IGxlZnQgcmVjdXJzaXZlIGRlZmluaXRpb25zIGFuZCB0aGVyZWZvcmUgdGhlIHJ1bGUgY2Fubm90IGJlIHJld3JpdHRlbi5gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFydHNMZW5ndGggPSBwYXJ0cy5sZW5ndGg7XG5cbiAgICAgIGlmIChwYXJ0c0xlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgcGFydHNUYWlsID0gdGFpbChwYXJ0cyk7XG5cbiAgICAgICAgcGFydHMgPSBwYXJ0c1RhaWw7ICAvLy9cblxuICAgICAgICBwYXJ0cyA9IGNsb25lUGFydHMocGFydHMpOyAgLy8vXG5cbiAgICAgICAgZGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uKHBhcnRzKTtcblxuICAgICAgICBkZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSBkZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoZGVmaW5pdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gbmV3IEVwc2lsb25QYXJ0KCksXG4gICAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgICAgZXBzaWxvblBhcnRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgICBkZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVOYW1lID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZShydWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSxcbiAgICAgICAgICBuYW1lID0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBJbmRpcmVjdGx5UmVwZWF0ZWROb2RlLCAgLy8vXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZSA9IG5ldyBJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gaW5kaXJlY3RseVJlcGVhdGVkUnVsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9vcGVyYXRpb24vcnVsZVwiO1xuaW1wb3J0IEluZGlyZWN0bHlSZXBlYXRlZFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGUvcmVwZWF0ZWQvaW5kaXJlY3RseVwiO1xuXG5pbXBvcnQgeyBmaW5kSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGlyZWN0bHlSZXBlYXRlZFJ1bGVPcGVyYXRpb24gZXh0ZW5kcyBSdWxlT3BlcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSB7XG4gICAgc3VwZXIocnVsZSk7XG5cbiAgICB0aGlzLmxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZTtcbiAgfVxuXG4gIGdldExlZnRSZWN1cnNpdmVSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWU7XG4gIH1cblxuICBhcHBseShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJ1bGVNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgICAgcnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZSgpLFxuICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBmaW5kSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCAoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCk7XG5cbiAgICAgICAgICAgIGlmIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPT09IGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBjb250ZXh0KSxcbiAgICAgICAgICBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlID0gSW5kaXJlY3RseVJlcGVhdGVkUnVsZS5mcm9tUnVsZUxlZnRSZWN1cnNpdmVSdWxlTmFtZUFuZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lLCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgIGlmIChpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZSA9IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgICBydWxlTWFwW2luZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lXSA9IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGU7XG4gIH1cblxuICByZXRyaWV2ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJ1bGVNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgICAgcnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZShydWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSxcbiAgICAgICAgICBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlID0gcnVsZU1hcFtpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZV0gfHwgbnVsbDtcblxuICAgIHJldHVybiBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlO1xuICB9XG5cbiAgY29tcGFyZShpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uKSB7XG4gICAgY29uc3QgcnVsZSA9IHRoaXMuZ2V0UnVsZSgpLFxuICAgICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVPcGVyYXRpb25SdWxlID0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbkxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVPcGVyYXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgY29tcGFyZXNUbyA9ICgocnVsZSA9PT0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvblJ1bGUpICYmICh0aGlzLmxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9PT0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbkxlZnRSZWN1cnNpdmVSdWxlTmFtZSkpO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG87XG4gIH1cblxuICBzdGF0aWMgZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU9wZXJhdGlvbiA9IG5ldyBJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uKHJ1bGUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSksXG4gICAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZSA9IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVPcGVyYXRpb24uZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbk9wZXJhdGlvbiBmcm9tIFwiLi4vLi4vb3BlcmF0aW9uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSZXBsYWNlbWVudERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcmVwbGFjZW1lbnRcIjtcblxuaW1wb3J0IERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdC9kaXJlY3RseVwiO1xuaW1wb3J0IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vcmVjdXJzaXZlRGVmaW5pdGlvbi9sZWZ0L2luZGlyZWN0bHlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uT3BlcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZSwgZGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lLCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgIHN1cGVyKHJ1bGUsIGRlZmluaXRpb24pO1xuXG4gICAgdGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWU7XG4gICAgdGhpcy5sZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnRSZWN1cnNpdmVSdWxlTmFtZTtcbiAgfVxuXG4gIGdldExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgYXBwbHkoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlLCBpbmRpcmVjdGx5UmVkdWNlZFJ1bGUsIGNvbnRleHQpIHtcbiAgICBsZXQgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKTtcblxuICAgIGNvbnN0IHJ1bGUgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCk7XG5cbiAgICBsZXQgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gUmVwbGFjZW1lbnREZWZpbml0aW9uLmZyb21MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkFuZEluZGlyZWN0bHlSZWR1Y2VkUnVsZShsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseVJlZHVjZWRSdWxlKTtcblxuICAgIGlmIChyZXBsYWNlbWVudERlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSByZXBsYWNlbWVudERlZmluaXRpb247IC8vL1xuXG4gICAgICBydWxlLmFkZERlZmluaXRpb24oZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgbGV0IGRlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCk7XG5cbiAgICBjb25zdCBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbiA9IGRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gUmVwbGFjZW1lbnREZWZpbml0aW9uLmZyb21JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25BbmRJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseVJlcGVhdGVkUnVsZSk7XG5cbiAgICBjb25zdCByZXBsYWNlZERlZmluaXRpb24gPSBkZWZpbml0aW9uOyAgLy8vXG5cbiAgICBkZWZpbml0aW9uID0gcmVwbGFjZW1lbnREZWZpbml0aW9uOyAvLy9cblxuICAgIGNvbnN0IGxlYXN0ID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmlzTGVhc3QoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKCk7XG5cbiAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlYXN0ID8gLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbVJ1bGVBbmREZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbURlZmluaXRpb25BbmRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbiwgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgIGRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uID9cbiAgICAgIHJ1bGUucmVwbGFjZURlZmluaXRpb24ocmVwbGFjZWREZWZpbml0aW9uLCByZXBsYWNlbWVudERlZmluaXRpb24pIDpcbiAgICAgICAgcnVsZS5hZGREZWZpbml0aW9uKGRlZmluaXRpb24pO1xuXG4gICAgcmV0dXJuIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uO1xuICB9XG5cbiAgcmV0cmlldmUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlLCBpbmRpcmVjdGx5UmVkdWNlZFJ1bGUsIGNvbnRleHQpIHtcbiAgICAvLy9cbiAgfVxuXG4gIGNvbXBhcmUobGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24pIHtcbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbi5nZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uLmdldExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKCksXG4gICAgICAgICAgY29tcGFyZXNUbyA9ICgodGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPT09IGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkgJiYgKHRoaXMubGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPT09IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUbztcbiAgfVxuXG4gIHN0YXRpYyBleGVjdXRlKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseVJlcGVhdGVkUnVsZSwgaW5kaXJlY3RseVJlZHVjZWRSdWxlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcnVsZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRSdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXREZWZpbml0aW9uKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVSdWxlTmFtZSgpO1xuXG4gICAgbGV0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldExlZnRSZWN1cnNpdmVEZWZpbml0aW9uKCk7XG5cbiAgICBjb25zdCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbiA9IG5ldyBMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbihydWxlLCBkZWZpbml0aW9uLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24uZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUsIGluZGlyZWN0bHlSZWR1Y2VkUnVsZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGVmdFJlY3Vyc2l2ZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbk9wZXJhdGlvbiBmcm9tIFwiLi4vLi4vb3BlcmF0aW9uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSZXBsYWNlbWVudERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcmVwbGFjZW1lbnRcIjtcblxuaW1wb3J0IHsgZmluZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbk9wZXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGUsIGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pIHtcbiAgICBzdXBlcihydWxlLCBkZWZpbml0aW9uKTtcblxuICAgIHRoaXMubGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID0gbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lO1xuICAgIHRoaXMubGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxuXG4gIGdldExlZnRSZWN1cnNpdmVSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlUnVsZU5hbWU7XG4gIH1cblxuICBnZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjtcbiAgfVxuXG4gIGFwcGx5KGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IHJ1bGUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUoKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBmaW5kSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCAoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID09PSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikgJiYgKGxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9PT0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBjb250ZXh0KSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMubWFwKChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0RGVmaW5pdGlvbigpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICB9KTtcblxuICAgIHJ1bGUucmVtb3ZlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpO1xuXG4gICAgY29uc3QgcmVwbGFjZW1lbnREZWZpbml0aW9uID0gUmVwbGFjZW1lbnREZWZpbml0aW9uLmZyb21JbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKTtcblxuICAgIGlmIChyZXBsYWNlbWVudERlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSByZXBsYWNlbWVudERlZmluaXRpb247IC8vL1xuXG4gICAgICBydWxlLmFkZERlZmluaXRpb24oZGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmV0cmlldmUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gICAgLy8vXG4gIH1cblxuICBjb21wYXJlKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbikge1xuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmdldFJ1bGUoKSxcbiAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb25SdWxlID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKSxcbiAgICAgICAgICBjb21wYXJlc1RvID0gKChydWxlID09PSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb25SdWxlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID09PSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUpJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID09PSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb25MZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikpO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG87XG4gIH1cblxuICBzdGF0aWMgZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldERlZmluaXRpb24oKSxcbiAgICAgICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKSxcbiAgICAgICAgICBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24gPSBuZXcgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uKHJ1bGUsIGRlZmluaXRpb24sIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuXG4gICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uLmV4ZWN1dGUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEaXJlY3RseVJlZHVjZWRSdWxlT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9ydWxlL2RpcmVjdGx5UmVkdWNlZFwiO1xuaW1wb3J0IERpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9ydWxlL2RpcmVjdGx5UmVwZWF0ZWRcIjtcbmltcG9ydCBJbmRpcmVjdGx5UmVkdWNlZFJ1bGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL3J1bGUvaW5kaXJlY3RseVJlZHVjZWRcIjtcbmltcG9ydCBJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9ydWxlL2luZGlyZWN0bHlSZXBlYXRlZFwiO1xuaW1wb3J0IExlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9kZWZpbml0aW9uL2xlZnRSZWN1cnNpdmVcIjtcbmltcG9ydCBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9kZWZpbml0aW9uL2RpcmVjdGx5TGVmdFJlY3Vyc2l2ZVwiO1xuaW1wb3J0IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbk9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vZGVmaW5pdGlvbi9pbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZVwiO1xuXG5pbXBvcnQgeyBhZGRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbixcbiAgICAgICAgIGFkZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyxcbiAgICAgICAgIHJlbW92ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyxcbiAgICAgICAgIGZpbmREaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLFxuICAgICAgICAgZmluZERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLFxuICAgICAgICAgZmluZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsXG4gICAgICAgICByZXRyaWV2ZUdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NvbnRleHRcIlxuXG5sZXQgY291bnQgPSAwO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbGltaW5hdGVJbmRpcmVjdExlZnRSZWN1cnNpb24oY29udGV4dCkge1xuICBsZXQgZ3JlYXRlc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSByZXRyaWV2ZUdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKGNvbnRleHQpO1xuXG4gIHdoaWxlIChncmVhdGVzdEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCAvLy9cbiAgICAgICAgICBydWxlID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGUoKSxcbiAgICAgICAgICBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gZmluZERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ocnVsZSwgY29udGV4dCk7XG5cbiAgICAoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiAhPT0gbnVsbCkgP1xuICAgICAgcmV3cml0ZURpcmVjdExlZnRSZWN1cnNpb24oZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSA6XG4gICAgICAgIHJld3JpdGVJbmRpcmVjdExlZnRSZWN1cnNpb24oaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KTtcblxuICAgIGdyZWF0ZXN0SW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gKytjb3VudCA+IEluZmluaXR5ID8gbnVsbCA6IHJldHJpZXZlR3JlYXRlc3RJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oY29udGV4dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV3cml0ZURpcmVjdExlZnRSZWN1cnNpb24oZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFsbG93SXNvbGF0ZWQgPSB0cnVlLFxuICAgICAgICBkaXJlY3RseVJlZHVjZWRSdWxlID0gRGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbi5leGVjdXRlKGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGFsbG93SXNvbGF0ZWQsIGNvbnRleHQpLFxuICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZSA9IERpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uLmV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCk7XG5cbiAgY29uc3QgcnVsZSA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpO1xuXG4gIGxldCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gZmluZEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgY29udGV4dCk7XG5cbiAgY29uc3QgZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBmaW5kRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMocnVsZSwgY29udGV4dCksXG4gICAgICAgIHJlbW92ZWRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgLi4uZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsXG4gICAgICAgICAgLi4uaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1xuICAgICAgICBdO1xuXG4gIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBEaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uT3BlcmF0aW9uLmV4ZWN1dGUoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgZGlyZWN0bHlSZXBlYXRlZFJ1bGUsIGRpcmVjdGx5UmVkdWNlZFJ1bGUsIGNvbnRleHQpO1xuXG4gIGNvbnN0IGFkZGVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uczsgLy8vXG5cbiAgcmVtb3ZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJlbW92ZWRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMsIGNvbnRleHQpO1xuXG4gIGFkZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhhZGRlZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucywgY29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVJbmRpcmVjdExlZnRSZWN1cnNpb24oaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGluZGlyZWN0bHlSZWR1Y2VkUnVsZSA9IEluZGlyZWN0bHlSZWR1Y2VkUnVsZU9wZXJhdGlvbi5leGVjdXRlKGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgY29udGV4dCksXG4gICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUgPSBJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlT3BlcmF0aW9uLmV4ZWN1dGUoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KTtcblxuICBJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24uZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGNvbnRleHQpO1xuXG4gIGNvbnN0IHJ1bGUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0UnVsZSgpO1xuXG4gIGxldCBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbigpO1xuXG4gIGNvbnN0IGxlZnRSZWN1cnNpdmVSdWxlTmFtZSA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5nZXRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUoKSxcbiAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGZpbmRJbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZ2V0TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24oKTtcblxuICAgICAgICAgIGlmICgobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPT09IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSAmJiAobGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lID09PSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25MZWZ0UmVjdXJzaXZlUnVsZU5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGNvbnRleHQpO1xuXG4gIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25PcGVyYXRpb24uZXhlY3V0ZShpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24sIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUsIGluZGlyZWN0bHlSZWR1Y2VkUnVsZSwgY29udGV4dCk7XG5cbiAgY29uc3QgYWRkZWRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCAvLy9cbiAgICAgICAgcmVtb3ZlZExlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnM7IC8vL1xuXG4gIHJlbW92ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyhyZW1vdmVkTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLCBjb250ZXh0KTtcblxuICBhZGRMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbihhZGRlZExlZnRSZWN1cnNpdmVEZWZpbml0aW9uLCBjb250ZXh0KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4vcmVjdXJzaXZlRGVmaW5pdGlvblwiO1xuaW1wb3J0IExlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdFwiO1xuaW1wb3J0IERpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gZnJvbSBcIi4vcmVjdXJzaXZlRGVmaW5pdGlvbi9sZWZ0L2RpcmVjdGx5XCI7XG5pbXBvcnQgSW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uIGZyb20gXCIuL3JlY3Vyc2l2ZURlZmluaXRpb24vbGVmdC9pbmRpcmVjdGx5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJldHJpZXZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQsIHJlY3Vyc2l2ZURlZmluaXRpb25zID0gW10pIHtcbiAgY29uc3QgZGVmaW5pdGlvbnMgPSBydWxlLmdldERlZmluaXRpb25zKCk7XG5cbiAgZGVmaW5pdGlvbnMuZm9yRWFjaCgoZGVmaW5pdGlvbikgPT4ge1xuICAgIGNvbnN0IHJlY3Vyc2l2ZURlZmluaXRpb24gPSByZXRyaWV2ZUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24sIGNvbnRleHQsIHJlY3Vyc2l2ZURlZmluaXRpb25zKTtcblxuICAgIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25zID0gWyAuLi5yZWN1cnNpdmVEZWZpbml0aW9ucywgcmVjdXJzaXZlRGVmaW5pdGlvbiBdLFxuICAgICAgICAgICAgcHJldmlvdXNSZWN1cnNpdmVSdWxlTmFtZXMgPSBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25zLm1hcCgocHJldmlvdXNSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUmVjdXJzaXZlRGVmaW5pdGlvblJ1bGVOYW1lID0gcHJldmlvdXNSZWN1cnNpdmVEZWZpbml0aW9uLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUmVjdXJzaXZlUnVsZU5hbWUgPSBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25SdWxlTmFtZTsgIC8vL1xuXG4gICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1JlY3Vyc2l2ZVJ1bGVOYW1lO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICByZWN1cnNpdmVSdWxlTmFtZXMgPSByZWN1cnNpdmVEZWZpbml0aW9uLmdldFJlY3Vyc2l2ZVJ1bGVOYW1lcygpO1xuXG4gICAgICByZWN1cnNpdmVSdWxlTmFtZXMuZm9yRWFjaCgocmVjdXJzaXZlUnVsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNSZWN1cnNpdmVSdWxlTmFtZXNJbmNsdWRlc1JlY3Vyc2l2ZVJ1bGVOYW1lID0gcHJldmlvdXNSZWN1cnNpdmVSdWxlTmFtZXMuaW5jbHVkZXMocmVjdXJzaXZlUnVsZU5hbWUpO1xuXG4gICAgICAgIGlmICghcHJldmlvdXNSZWN1cnNpdmVSdWxlTmFtZXNJbmNsdWRlc1JlY3Vyc2l2ZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgeyBydWxlTWFwIH0gPSBjb250ZXh0LFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gcmVjdXJzaXZlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICAgICAgICBydWxlID0gcnVsZU1hcFtydWxlTmFtZV0gfHwgbnVsbDsgLy8vXG5cbiAgICAgICAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlRGVmaW5pdGlvbnMgPSBwcmV2aW91c1JlY3Vyc2l2ZURlZmluaXRpb25zOyAgLy8vXG5cbiAgICAgICAgICAgIHJldHJpZXZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQsIHJlY3Vyc2l2ZURlZmluaXRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24ocnVsZSwgZGVmaW5pdGlvbiwgY29udGV4dCwgcmVjdXJzaXZlRGVmaW5pdGlvbnMpIHtcbiAgbGV0IHJlY3Vyc2l2ZURlZmluaXRpb24gPSBudWxsO1xuXG4gIGlmIChyZWN1cnNpdmVEZWZpbml0aW9uID09PSBudWxsKSB7XG4gICAgbGV0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5mcm9tUnVsZURlZmluaXRpb25BbmRSZWN1cnNpdmVEZWZpbml0aW9ucyhydWxlLCBkZWZpbml0aW9uLCByZWN1cnNpdmVEZWZpbml0aW9ucyk7XG5cbiAgICBpZiAoaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9ucyB9ID0gY29udGV4dDtcblxuICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLnNvbWUoKGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgIGlmIChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiBpbnN0YW5jZW9mIEluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbikge1xuICAgICAgICAgIGNvbnN0IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbkEgPSBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgLy8vXG4gICAgICAgICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uQiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiwgLy8vXG4gICAgICAgICAgICAgICAgaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uQUVxdWl2YWxlbnRUb1JlY3Vyc2l2ZURlZmluaXRpb25CID0gaW5kaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uQS5pc0VxdWl2YWxlbnRUbyhpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25CKTtcblxuICAgICAgICAgIGlmIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb25BRXF1aXZhbGVudFRvUmVjdXJzaXZlRGVmaW5pdGlvbkIpIHtcbiAgICAgICAgICAgIGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb24gPSBpbmRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247ICAvLy9cblxuICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMucHVzaChsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IGluZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbjsgIC8vL1xuICB9XG5cbiAgaWYgKHJlY3Vyc2l2ZURlZmluaXRpb24gPT09IG51bGwpIHtcbiAgICBjb25zdCBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gRGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbi5mcm9tUnVsZUFuZERlZmluaXRpb24ocnVsZSwgZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGlyZWN0bHlMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgfSA9IGNvbnRleHQsXG4gICAgICAgICAgICBsZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbiA9IGRpcmVjdGx5TGVmdFJlY3Vyc2l2ZURlZmluaXRpb247ICAvLy9cblxuICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zLnB1c2gobGVmdFJlY3Vyc2l2ZURlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHJlY3Vyc2l2ZURlZmluaXRpb24gPSBkaXJlY3RseUxlZnRSZWN1cnNpdmVEZWZpbml0aW9uOyAgLy8vXG4gIH1cblxuICBpZiAocmVjdXJzaXZlRGVmaW5pdGlvbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uID0gTGVmdFJlY3Vyc2l2ZURlZmluaXRpb24uZnJvbVJ1bGVBbmREZWZpbml0aW9uKHJ1bGUsIGRlZmluaXRpb24pO1xuXG4gICAgcmVjdXJzaXZlRGVmaW5pdGlvbiA9IGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uOyAgLy8vXG4gIH1cblxuICBpZiAocmVjdXJzaXZlRGVmaW5pdGlvbiA9PT0gbnVsbCkge1xuICAgIHJlY3Vyc2l2ZURlZmluaXRpb24gPSBSZWN1cnNpdmVEZWZpbml0aW9uLmZyb21SdWxlQW5kRGVmaW5pdGlvbihydWxlLCBkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHJldHVybiByZWN1cnNpdmVEZWZpbml0aW9uO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBydWxlc1V0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBlbGltaW5hdGVEaXJlY3RMZWZ0UmVjdXJzaW9uIGZyb20gXCIuL2VsaW1pbmF0ZURpcmVjdExlZnRSZWN1cnNpb25cIjtcbmltcG9ydCBlbGltaW5hdGVJbmRpcmVjdExlZnRSZWN1cnNpb24gZnJvbSBcIi4vZWxpbWluYXRlSW5kaXJlY3RMZWZ0UmVjdXJzaW9uXCI7XG5pbXBvcnQgcmV0cmlldmVMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnMgZnJvbSBcIi4vcmV0cmlldmVMZWZ0UmVjdXJzaXZlRGVmaW5pdGlvbnNcIjtcblxuY29uc3QgeyBydWxlTWFwRnJvbVJ1bGVzLCBzdGFydFJ1bGVGcm9tUnVsZXMsIHJ1bGVzRnJvbVN0YXJ0UnVsZUFuZFJ1bGVNYXAgfSA9IHJ1bGVzVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbGltaW5hdGVMZWZ0UmVjdXJzaW9uKHJ1bGVzKSB7XG4gIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcnVsZSA9IHN0YXJ0UnVsZSwgLy8vXG4gICAgICAgIG9wZXJhdGlvbnMgPSBbXSxcbiAgICAgICAgbGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zID0gW10sXG4gICAgICAgIGNvbnRleHQgPSB7XG4gICAgICAgICAgcnVsZU1hcCxcbiAgICAgICAgICBvcGVyYXRpb25zLFxuICAgICAgICAgIGxlZnRSZWN1cnNpdmVEZWZpbml0aW9uc1xuICAgICAgICB9O1xuXG4gIHJldHJpZXZlTGVmdFJlY3Vyc2l2ZURlZmluaXRpb25zKHJ1bGUsIGNvbnRleHQpO1xuXG4gIGVsaW1pbmF0ZUluZGlyZWN0TGVmdFJlY3Vyc2lvbihjb250ZXh0KTtcblxuICBlbGltaW5hdGVEaXJlY3RMZWZ0UmVjdXJzaW9uKGNvbnRleHQpO1xuXG4gIHJ1bGVzID0gcnVsZXNGcm9tU3RhcnRSdWxlQW5kUnVsZU1hcChzdGFydFJ1bGUsIHJ1bGVNYXApOyAvLy9cblxuICByZXR1cm4gcnVsZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4YW1wbGVMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhFeGFtcGxlTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4YW1wbGVQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge31cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHJld3JpdGVOb2RlcyB9IGZyb20gXCIuL3Jld3JpdGVOb2Rlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbGltaW5hdGVMZWZ0UmVjdXJzaW9uIH0gZnJvbSBcIi4vZWxpbWluYXRlTGVmdFJlY3Vyc2lvblwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEV4YW1wbGVMZXhlciB9IGZyb20gXCIuL2xleGVyL2V4YW1wbGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXhhbXBsZVBhcnNlciB9IGZyb20gXCIuL3BhcnNlci9leGFtcGxlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEZsb3JlbmNlUGFyc2VyIH0gZnJvbSBcIm9jY2FtLWdyYW1tYXJzXCI7XG5pbXBvcnQgeyBwYXJzZXJVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuaW1wb3J0IHsgZWxpbWluYXRlTGVmdFJlY3Vyc2lvbiB9IGZyb20gXCJvY2NhbS1ncmFtbWFyLXV0aWxpdGllc1wiO1xuXG5pbXBvcnQgQ29tYmluZWRDdXN0b21HcmFtbWFyIGZyb20gXCIuLi9jb21iaW5lZEN1c3RvbUdyYW1tYXJcIjtcblxuY29uc3QgeyBydWxlc0Zyb21CTkYsIHBhcnNlckZyb21SdWxlcywgcGFyc2VyRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZSB9ID0gcGFyc2VyVXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvcmVuY2VQYXJzZXJGcm9tTm90aGluZygpIHtcbiAgY29uc3QgeyBibmYgfSA9IEZsb3JlbmNlUGFyc2VyLFxuICAgICAgICBjb21iaW5lZEN1c3RvbUdyYW1tYXIgPSBDb21iaW5lZEN1c3RvbUdyYW1tYXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgcnVsZXMgPSBydWxlc0Zyb21CTkZBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXIoYm5mLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICBmbG9yZW5jZVBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhGbG9yZW5jZVBhcnNlciwgcnVsZXMpO1xuXG4gIHJldHVybiBmbG9yZW5jZVBhcnNlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3JlbmNlUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihjb21iaW5lZEN1c3RvbUdyYW1tYXIpIHtcbiAgY29uc3QgeyBibmYgfSA9IEZsb3JlbmNlUGFyc2VyLFxuICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUJORkFuZENvbWJpbmVkQ3VzdG9tR3JhbW1hcihibmYsIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciksXG4gICAgICAgIGZsb3JlbmNlUGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKEZsb3JlbmNlUGFyc2VyLCBydWxlcyk7XG5cbiAgcmV0dXJuIGZsb3JlbmNlUGFyc2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvcmVuY2VQYXJzZXJGcm9tQk5GQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyKGJuZiwgY29tYmluZWRDdXN0b21HcmFtbWFyKSB7XG4gIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQk5GQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyKGJuZiwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgZmxvcmVuY2VQYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoRmxvcmVuY2VQYXJzZXIsIHJ1bGVzKTtcblxuICByZXR1cm4gZmxvcmVuY2VQYXJzZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9yZW5jZVBhcnNlckZyb21CTkZTdGFydFJ1bGVOYW1lQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyKGJuZiwgc3RhcnRSdWxlTmFtZSwgY29tYmluZWRDdXN0b21HcmFtbWFyKSB7XG4gIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQk5GQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyKGJuZiwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgZmxvcmVuY2VQYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lKEZsb3JlbmNlUGFyc2VyLCBydWxlcywgc3RhcnRSdWxlTmFtZSk7XG5cbiAgcmV0dXJuIGZsb3JlbmNlUGFyc2VyO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGZsb3JlbmNlUGFyc2VyRnJvbU5vdGhpbmcsXG4gIGZsb3JlbmNlUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcixcbiAgZmxvcmVuY2VQYXJzZXJGcm9tQk5GQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyLFxuICBmbG9yZW5jZVBhcnNlckZyb21CTkZTdGFydFJ1bGVOYW1lQW5kQ29tYmluZWRDdXN0b21HcmFtbWFyXG59O1xuXG5mdW5jdGlvbiBydWxlc0Zyb21CTkZBbmRDb21iaW5lZEN1c3RvbUdyYW1tYXIoYm5mLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpIHtcbiAgbGV0IHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZik7XG5cbiAgY29uc3QgY29tYmluZWRDdXN0b21HcmFtbWFyUnVsZXMgPSBjb21iaW5lZEN1c3RvbUdyYW1tYXIuZ2V0UnVsZXMoKTtcblxuICBydWxlcyA9IFsgLy8vXG4gICAgLi4ucnVsZXMsXG4gICAgLi4uY29tYmluZWRDdXN0b21HcmFtbWFyUnVsZXNcbiAgXTtcblxuICBydWxlcyA9IGVsaW1pbmF0ZUxlZnRSZWN1cnNpb24ocnVsZXMpOyAgLy8vXG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBERUZBVUxUX0NVU1RPTV9HUkFNTUFSX05BTUUgfSBmcm9tIFwiLi9ncmFtbWFyTmFtZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBydWxlTmFtZXMgfSBmcm9tIFwiLi9ydWxlTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0dGVybk5hbWVzIH0gZnJvbSBcIi4vcGF0dGVybk5hbWVzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3VzdG9tR3JhbW1hciB9IGZyb20gXCIuL2N1c3RvbUdyYW1tYXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV4ZXJzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2xleGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJzZXJzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhcnNlcnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGVmYXVsdEN1c3RvbUdyYW1tYXIgfSBmcm9tIFwiLi9kZWZhdWx0Q3VzdG9tR3JhbW1hclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21iaW5lZEN1c3RvbUdyYW1tYXIgfSBmcm9tIFwiLi9jb21iaW5lZEN1c3RvbUdyYW1tYXJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuY29uc3QgU3ViSGVhZGluZyA9IHdpdGhTdHlsZS5oMmBcblxuICBtYXJnaW46IDFyZW0gMCAwLjVyZW0gMDtcbiAgZm9udC1zaXplOiAycmVtO1xuICBcbiAgOmZpcnN0LW9mLXR5cGUge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgU3ViSGVhZGluZztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFNlbGVjdClgXG5cbiAgYm9yZGVyOiAxcHggc29saWQgZGFya2dyZXk7XG4gIHBhZGRpbmc6IDAuMjVyZW07XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICBtYXJnaW4tYm90dG9tOiAwLjhyZW07XG4gIFxuICA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBERUZBVUxUX0NVU1RPTV9HUkFNTUFSX05BTUUgfSBmcm9tIFwiLi4vZ3JhbW1hck5hbWVzXCI7XG5cbmV4cG9ydCBjb25zdCBVU0VSX0RFRklORURfQ1VTVE9NX0dSQU1NQVJfTkFNRV8xID0gXCJVc2VyIGRlZmluZWQgMVwiO1xuZXhwb3J0IGNvbnN0IFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzIgPSBcIlVzZXIgZGVmaW5lZCAyXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTZWxlY3QgZnJvbSBcIi4uL3NlbGVjdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX0NVU1RPTV9HUkFNTUFSX05BTUUsIFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzEsIFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzIgfSBmcm9tIFwiLi4vZ3JhbW1hck5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVTZWxlY3QgZXh0ZW5kcyBTZWxlY3Qge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIG5hbWUgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBbXG4gICAgICAgICAgICBERUZBVUxUX0NVU1RPTV9HUkFNTUFSX05BTUUsXG4gICAgICAgICAgICBVU0VSX0RFRklORURfQ1VTVE9NX0dSQU1NQVJfTkFNRV8xLFxuICAgICAgICAgICAgVVNFUl9ERUZJTkVEX0NVU1RPTV9HUkFNTUFSX05BTUVfMlxuICAgICAgICAgIF0sXG4gICAgICAgICAgb3B0aW9ucyA9IG5hbWVzLm1hcCgobmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmFtZSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gKGluZGV4ID09PSAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIChcblxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXt2YWx1ZX0gc2VsZWN0ZWQ9e3NlbGVjdGVkfSA+XG4gICAgICAgICAgICAgICAge25hbWV9XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNoaWxkRWxlbWVudHMgPSBbXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgICAgXTtcblxuICAgIHJldHVybiBjaGlsZEVsZW1lbnRzO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXROYW1lID0gdGhpcy5nZXROYW1lLmJpbmQodGhpcyk7IC8vL1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXROYW1lXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm5hbWVcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFNpemVhYmxlRGl2IH0gZnJvbSBcImVhc3ktbGF5b3V0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTaXplYWJsZURpdilgXG5cbiAgd2lkdGg6IDY0cmVtO1xuICBtaW4td2lkdGg6IDI0cmVtO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFRleHRhcmVhIH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFRleHRhcmVhKWBcblxuICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTtcbiAgaGVpZ2h0OiAyNHJlbTtcbiAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIGdldEJORigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBibmYgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gYm5mO1xuICB9XG5cbiAgc2V0Qk5GKGJuZikge1xuICAgIGNvbnN0IHZhbHVlID0gYm5mO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldEJORiA9IHRoaXMuZ2V0Qk5GLmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0Qk5GID0gdGhpcy5zZXRCTkYuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0Qk5GLFxuICAgICAgc2V0Qk5GXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImJuZlwiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IElucHV0IH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKElucHV0KWBcblxuICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dCBmcm9tIFwiLi4vaW5wdXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGF0dGVybklucHV0IGV4dGVuZHMgSW5wdXQge1xuICBnZXRQYXR0ZXJuKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHBhdHRlcm4gPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gcGF0dGVybjtcbiAgfVxuXG4gIHNldFBhdHRlcm4ocGF0dGVybikge1xuICAgIGNvbnN0IHZhbHVlID0gcGF0dGVybjsgLy8vXG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0UGF0dGVybiA9IHRoaXMuZ2V0UGF0dGVybi5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldFBhdHRlcm4gPSB0aGlzLnNldFBhdHRlcm4uYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0UGF0dGVybixcbiAgICAgIHNldFBhdHRlcm5cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicGF0dGVyblwiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTZWxlY3QgZnJvbSBcIi4uL3NlbGVjdFwiO1xuXG5pbXBvcnQgeyBURVJNX1JVTEVfTkFNRSwgU1RBVEVNRU5UX1JVTEVfTkFNRSwgTUVUQVNUQVRFTUVOVF9SVUxFX05BTUUgfSAgZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVNlbGVjdCBleHRlbmRzIFNlbGVjdCB7XG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lO1xuICB9XG5cbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICBjb25zdCBydWxlTmFtZXMgPSBbXG4gICAgICAgICAgICBURVJNX1JVTEVfTkFNRSxcbiAgICAgICAgICAgIFNUQVRFTUVOVF9SVUxFX05BTUUsXG4gICAgICAgICAgICBNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRVxuICAgICAgICAgIF0sXG4gICAgICAgICAgb3B0aW9ucyA9IHJ1bGVOYW1lcy5tYXAoKHJ1bGVOYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBydWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gKGluZGV4ID09PSAyKTtcblxuICAgICAgICAgICAgcmV0dXJuIChcblxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXt2YWx1ZX0gc2VsZWN0ZWQ9e3NlbGVjdGVkfSA+XG4gICAgICAgICAgICAgICAge3J1bGVOYW1lfVxuICAgICAgICAgICAgICA8L29wdGlvbj5cblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjaGlsZEVsZW1lbnRzID0gW1xuICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICAgIF07XG5cbiAgICByZXR1cm4gY2hpbGRFbGVtZW50cztcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0UnVsZU5hbWUgPSB0aGlzLmdldFJ1bGVOYW1lLmJpbmQodGhpcyk7IC8vL1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRSdWxlTmFtZVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJydWxlLW5hbWVcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuY2xhc3MgQ29udGVudFRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHNldENvbnRlbnQoY29udGVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gY29udGVudDtcblxuICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRDb250ZW50ID0gdGhpcy5nZXRDb250ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0Q29udGVudCA9IHRoaXMuc2V0Q29udGVudC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRDb250ZW50LFxuICAgICAgc2V0Q29udGVudFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb250ZW50XCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb250ZW50VGV4dGFyZWEpYFxuXG4gIGhlaWdodDogMTJyZW07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNlbGVjdCBmcm9tIFwiLi4vc2VsZWN0XCI7XG5cbmltcG9ydCB7IFRZUEVfUEFUVEVSTl9OQU1FLCBTWU1CT0xfUEFUVEVSTl9OQU1FLCBPUEVSQVRPUl9QQVRURVJOX05BTUUgfSAgZnJvbSBcIi4uLy4uL3BhdHRlcm5OYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXR0ZXJuTmFtZVNlbGVjdCBleHRlbmRzIFNlbGVjdCB7XG4gIGdldFBhdHRlcm5OYW1lKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHBhdHRlcm5OYW1lID0gdmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIHBhdHRlcm5OYW1lO1xuICB9XG5cbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICBjb25zdCBwYXR0ZXJuTmFtZXMgPSBbXG4gICAgICAgICAgICBUWVBFX1BBVFRFUk5fTkFNRSxcbiAgICAgICAgICAgIFNZTUJPTF9QQVRURVJOX05BTUUsXG4gICAgICAgICAgICBPUEVSQVRPUl9QQVRURVJOX05BTUVcbiAgICAgICAgICBdLFxuICAgICAgICAgIG9wdGlvbnMgID0gcGF0dGVybk5hbWVzLm1hcCgocGF0dGVybk5hbWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhdHRlcm5OYW1lLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSAoaW5kZXggPT09IDApO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9e3ZhbHVlfSBzZWxlY3RlZD17c2VsZWN0ZWR9ID5cbiAgICAgICAgICAgICAgICB7cGF0dGVybk5hbWV9XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNoaWxkRWxlbWVudHMgPSBbXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgICAgXTtcblxuXG4gICAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldFBhdHRlcm5OYW1lID0gdGhpcy5nZXRQYXR0ZXJuTmFtZS5iaW5kKHRoaXMpOyAvLy9cblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0UGF0dGVybk5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwicnVsZS1uYW1lXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIHNldFBhcnNlVHJlZShwYXJzZVRyZWUpIHtcbiAgICBpZiAocGFyc2VUcmVlICE9PSBudWxsKSB7XG4gICAgICBwYXJzZVRyZWUuc2hpZnRMaW5lKCk7ICAvL1xuXG4gICAgICBjb25zdCBwYXJzZVRyZWVTdHJpbmcgPSBwYXJzZVRyZWUuYXNTdHJpbmcoKSxcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VUcmVlU3RyaW5nOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyUGFyc2VUcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJQYXJzZVRyZWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3Qgc2V0UGFyc2VUcmVlID0gdGhpcy5zZXRQYXJzZVRyZWUuYmluZCh0aGlzKSxcbiAgICAgICAgICBjbGVhclBhcnNlVHJlZSA9IHRoaXMuY2xlYXJQYXJzZVRyZWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgc2V0UGFyc2VUcmVlLFxuICAgICAgY2xlYXJQYXJzZVRyZWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9rZW5zXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IElucHV0IGZyb20gXCIuLi9pbnB1dFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydFJ1bGVOYW1lSW5wdXQgZXh0ZW5kcyBJbnB1dCB7XG4gIGdldFN0YXJ0UnVsZU5hbWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgICAgc3RhcnRSdWxlTmFtZSA9IHZhbHVlOyAvLy9cblxuICAgIHJldHVybiBzdGFydFJ1bGVOYW1lO1xuICB9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBnZXRTdGFydFJ1bGVOYW1lID0gdGhpcy5nZXRTdGFydFJ1bGVOYW1lLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldFN0YXJ0UnVsZU5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwic3RhcnQtcnVsZS1uYW1lXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIEZsb3JlbmNlQk5GVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIGdldEZsb3JlbmNlQk5GKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGZsb3JlbmNlQk5GID0gdmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIGZsb3JlbmNlQk5GO1xuICB9XG5cbiAgc2V0RmxvcmVuY2VCTkYoZmxvcmVuY2VCTkYpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGZsb3JlbmNlQk5GOyAgLy8vXG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyRmxvcmVuY2VCTkYoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0RmxvcmVuY2VCTkYgPSB0aGlzLmdldEZsb3JlbmNlQk5GLmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0RmxvcmVuY2VCTkYgPSB0aGlzLnNldEZsb3JlbmNlQk5GLmJpbmQodGhpcyksXG4gICAgICAgICAgY2xlYXJGbG9yZW5jZUJORiA9IHRoaXMuY2xlYXJGbG9yZW5jZUJORi5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRGbG9yZW5jZUJORixcbiAgICAgIHNldEZsb3JlbmNlQk5GLFxuICAgICAgY2xlYXJGbG9yZW5jZUJORlxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJmbG9yZW5jZS1ibmZcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEZsb3JlbmNlQk5GVGV4dGFyZWEpYFxuXG4gIGhlaWdodDogNDhyZW07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ3VzdG9tR3JhbW1hciB9IGZyb20gXCIuLi9pbmRleFwiOyAvLy9cblxuaW1wb3J0IHsgVVNFUl9ERUZJTkVEX0NVU1RPTV9HUkFNTUFSX05BTUVfMSB9IGZyb20gXCIuLi9ncmFtbWFyTmFtZXNcIjtcblxuY29uc3QgbmFtZSA9IFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzEsXG4gICAgICB0eXBlUGF0dGVybiA9IFwiSW50ZWdlclwiLFxuICAgICAgb3BlcmF0b3JQYXR0ZXJuID0gXCJcIixcbiAgICAgIHRlcm1CTkYgPSBgYCxcbiAgICAgIHN0YXRlbWVudEJORiA9IGBgLFxuICAgICAgbWV0YXN0YXRlbWVudEJORiA9IGBgLFxuICAgICAganNvbiA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZVBhdHRlcm4sXG4gICAgICAgIG9wZXJhdG9yUGF0dGVybixcbiAgICAgICAgdGVybUJORixcbiAgICAgICAgc3RhdGVtZW50Qk5GLFxuICAgICAgICBtZXRhc3RhdGVtZW50Qk5GXG4gICAgICB9LFxuICAgICAgdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMSA9IEN1c3RvbUdyYW1tYXIuZnJvbUpTT04oanNvbik7XG5cbmV4cG9ydCBkZWZhdWx0IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjE7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEN1c3RvbUdyYW1tYXIgfSBmcm9tIFwiLi4vaW5kZXhcIjsgLy8vXG5cbmltcG9ydCB7IFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzIgfSBmcm9tIFwiLi4vZ3JhbW1hck5hbWVzXCI7XG5cbmNvbnN0IG5hbWUgPSBVU0VSX0RFRklORURfQ1VTVE9NX0dSQU1NQVJfTkFNRV8yLFxuICAgICAgdHlwZVBhdHRlcm4gPSBcIlwiLFxuICAgICAgb3BlcmF0b3JQYXR0ZXJuID0gXCJcIixcbiAgICAgIHRlcm1CTkYgPSBgYCxcbiAgICAgIHN0YXRlbWVudEJORiA9IGBgLFxuICAgICAgbWV0YXN0YXRlbWVudEJORiA9IGBgLFxuICAgICAganNvbiA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZVBhdHRlcm4sXG4gICAgICAgIG9wZXJhdG9yUGF0dGVybixcbiAgICAgICAgdGVybUJORixcbiAgICAgICAgc3RhdGVtZW50Qk5GLFxuICAgICAgICBtZXRhc3RhdGVtZW50Qk5GXG4gICAgICB9LFxuICAgICAgdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMiA9IEN1c3RvbUdyYW1tYXIuZnJvbUpTT04oanNvbik7XG5cbmV4cG9ydCBkZWZhdWx0IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpbHRlciB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21QYXJzZXIocGFyc2VyKSB7XG4gIGNvbnN0IHJ1bGVNYXAgPSBwYXJzZXIuZ2V0UnVsZU1hcCgpLFxuICAgICAgICBzdGFydFJ1bGUgPSBwYXJzZXIuZ2V0U3RhcnRSdWxlKCksXG4gICAgICAgIHN0YXJ0UnVsZU5hbWUgPSBzdGFydFJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICBydWxlTWFwVmFsdWVzID0gT2JqZWN0LnZhbHVlcyhydWxlTWFwKSxcbiAgICAgICAgcnVsZXMgPSBydWxlTWFwVmFsdWVzOyAgLy8vXG5cbiAgZmlsdGVyKHJ1bGVzLCAocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBpZiAocnVsZU5hbWUgIT09IHN0YXJ0UnVsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcnVsZXMudW5zaGlmdChzdGFydFJ1bGUpO1xuXG4gIHJldHVybiBydWxlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBydWxlc1V0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5pbXBvcnQgeyBSb3dzRGl2LCBDb2x1bW5EaXYsIENvbHVtbnNEaXYsIFZlcnRpY2FsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiZWFzeS1sYXlvdXRcIjtcbmltcG9ydCB7IGRlZmF1bHRDdXN0b21HcmFtbWFyLCBDb21iaW5lZEN1c3RvbUdyYW1tYXIsIGxleGVyc1V0aWxpdGllcywgcGFyc2Vyc1V0aWxpdGllcyB9IGZyb20gXCIuLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCBTdWJIZWFkaW5nIGZyb20gXCIuL3N1YkhlYWRpbmdcIjtcbmltcG9ydCBOYW1lU2VsZWN0IGZyb20gXCIuL3NlbGVjdC9uYW1lXCI7XG5pbXBvcnQgU2l6ZWFibGVEaXYgZnJvbSBcIi4vZGl2L3NpemVhYmxlXCI7XG5pbXBvcnQgQk5GVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvYm5mXCI7XG5pbXBvcnQgUGF0dGVybklucHV0IGZyb20gXCIuL2lucHV0L3BhdHRlcm5cIjtcbmltcG9ydCBSdWxlTmFtZVNlbGVjdCBmcm9tIFwiLi9zZWxlY3QvcnVsZU5hbWVcIjtcbmltcG9ydCBDb250ZW50VGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvY29udGVudFwiO1xuaW1wb3J0IFBhdHRlcm5OYW1lU2VsZWN0IGZyb20gXCIuL3NlbGVjdC9wYXR0ZXJuTmFtZVwiO1xuaW1wb3J0IFBhcnNlVHJlZVRleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL3BhcnNlVHJlZVwiO1xuaW1wb3J0IFN0YXJ0UnVsZU5hbWVJbnB1dCBmcm9tIFwiLi9pbnB1dC9zdGFydFJ1bGVOYW1lXCI7XG5pbXBvcnQgRmxvcmVuY2VCTkZUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9mbG9yZW5jZUJORlwiO1xuaW1wb3J0IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjEgZnJvbSBcIi4vdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMVwiO1xuaW1wb3J0IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjIgZnJvbSBcIi4vdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMlwiO1xuXG5pbXBvcnQgeyBydWxlc0Zyb21QYXJzZXIgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0NVU1RPTV9HUkFNTUFSX05BTUUsIFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzEsIFVTRVJfREVGSU5FRF9DVVNUT01fR1JBTU1BUl9OQU1FXzIgfSBmcm9tIFwiLi4vZ3JhbW1hck5hbWVzXCI7XG5cbmNvbnN0IHsgcnVsZXNBc1N0cmluZyB9ID0gcnVsZXNVdGlsaXRpZXMsXG4gICAgICB7IGZsb3JlbmNlTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyIH0gPSBsZXhlcnNVdGlsaXRpZXMsXG4gICAgICB7IGZsb3JlbmNlUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciB9ID0gcGFyc2Vyc1V0aWxpdGllcztcblxuY2xhc3MgVmlldyBleHRlbmRzIEVsZW1lbnQge1xuICBrZXlVcEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgYm5mID0gdGhpcy5nZXRCTkYoKSxcbiAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzLmdldFBhdHRlcm4oKSxcbiAgICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgcGF0dGVybk5hbWUgPSB0aGlzLmdldFBhdHRlcm5OYW1lKCk7XG5cbiAgICAgIGlmIChuYW1lID09PSBVU0VSX0RFRklORURfQ1VTVE9NX0dSQU1NQVJfTkFNRV8xKSB7XG4gICAgICAgIHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjEuc2V0Qk5GKHJ1bGVOYW1lLCBibmYpO1xuICAgICAgICB1c2VyRGVmaW5lZEN1c3RvbUdyYW1tYXIxLnNldFBhdHRlcm4ocGF0dGVybk5hbWUsIHBhdHRlcm4pO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gVVNFUl9ERUZJTkVEX0NVU1RPTV9HUkFNTUFSX05BTUVfMikge1xuICAgICAgICB1c2VyRGVmaW5lZEN1c3RvbUdyYW1tYXIyLnNldEJORihydWxlTmFtZSwgYm5mKTtcbiAgICAgICAgdXNlckRlZmluZWRDdXN0b21HcmFtbWFyMi5zZXRQYXR0ZXJuKHBhdHRlcm5OYW1lLCBwYXR0ZXJuKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VzdG9tR3JhbW1hcnMgPSBbXG4gICAgICAgICAgICAgIHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjEsXG4gICAgICAgICAgICAgIHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjb21iaW5lZEN1c3RvbUdyYW1tYXIgPSBDb21iaW5lZEN1c3RvbUdyYW1tYXIuZnJvbUN1c3RvbUdyYW1tYXJzKGN1c3RvbUdyYW1tYXJzKSxcbiAgICAgICAgICAgIGZsb3JlbmNlTGV4ZXIgPSBmbG9yZW5jZUxleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICAgICAgZmxvcmVuY2VQYXJzZXIgPSBmbG9yZW5jZVBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICAgIHJ1bGVNYXAgPSBmbG9yZW5jZVBhcnNlci5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgICBzdGFydFJ1bGVOYW1lID0gdGhpcy5nZXRTdGFydFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBzdGFydFJ1bGUgPSBydWxlTWFwW3N0YXJ0UnVsZU5hbWVdLCAvLy9cbiAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgIHRva2VucyA9IGZsb3JlbmNlTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgICAgICBub2RlID0gZmxvcmVuY2VQYXJzZXIucGFyc2UodG9rZW5zLCBzdGFydFJ1bGUpO1xuXG4gICAgICBsZXQgcGFyc2VUcmVlID0gbnVsbDtcblxuICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VUcmVlID0gbm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFBhcnNlVHJlZShwYXJzZVRyZWUpO1xuXG4gICAgICBjb25zdCBmbG9yZW5jZVJ1bGVzID0gcnVsZXNGcm9tUGFyc2VyKGZsb3JlbmNlUGFyc2VyKSxcbiAgICAgICAgICAgIG11bHRpTGluZSA9IHRydWUsXG4gICAgICAgICAgICBydWxlc1N0cmluZyA9IHJ1bGVzQXNTdHJpbmcoZmxvcmVuY2VSdWxlcywgbXVsdGlMaW5lKSxcbiAgICAgICAgICAgIGZsb3JlbmNlQk5GID0gcnVsZXNTdHJpbmc7ICAvLy9cblxuICAgICAgdGhpcy5zZXRGbG9yZW5jZUJORihmbG9yZW5jZUJORik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcblxuICAgICAgdGhpcy5jbGVhclBhcnNlVHJlZSgpO1xuXG4gICAgICB0aGlzLmNsZWFyRmxvcmVuY2VCTkYoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgbGV0IGN1c3RvbUdyYW1tYXI7XG5cbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0aGlzLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgcGF0dGVybk5hbWUgPSB0aGlzLmdldFBhdHRlcm5OYW1lKCk7XG5cbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgREVGQVVMVF9DVVNUT01fR1JBTU1BUl9OQU1FOlxuICAgICAgICBjdXN0b21HcmFtbWFyID0gZGVmYXVsdEN1c3RvbUdyYW1tYXI7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVVNFUl9ERUZJTkVEX0NVU1RPTV9HUkFNTUFSX05BTUVfMTpcbiAgICAgICAgY3VzdG9tR3JhbW1hciA9IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjE7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgVVNFUl9ERUZJTkVEX0NVU1RPTV9HUkFNTUFSX05BTUVfMjpcbiAgICAgICAgY3VzdG9tR3JhbW1hciA9IHVzZXJEZWZpbmVkQ3VzdG9tR3JhbW1hcjI7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgYm5mID0gY3VzdG9tR3JhbW1hci5nZXRCTkYocnVsZU5hbWUpLFxuICAgICAgICAgIHBhdHRlcm4gPSBjdXN0b21HcmFtbWFyLmdldFBhdHRlcm4ocGF0dGVybk5hbWUpO1xuXG4gICAgdGhpcy5zZXRCTkYoYm5mKTtcblxuICAgIHRoaXMuc2V0UGF0dGVybihwYXR0ZXJuKTtcbiAgfVxuXG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgY29uc3Qga2V5VXBIYW5kbGVyID0gdGhpcy5rZXlVcEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gdGhpcy5jaGFuZ2VIYW5kbGVyLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKFtcblxuICAgICAgPENvbHVtbnNEaXY+XG4gICAgICAgIDxTaXplYWJsZURpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBDdXN0b20gZ3JhbW1hclxuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPE5hbWVTZWxlY3Qgb25DaGFuZ2U9e2NoYW5nZUhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgQk5GXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8UnVsZU5hbWVTZWxlY3Qgb25DaGFuZ2U9e2NoYW5nZUhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8Qk5GVGV4dGFyZWEgb25LZXlVcD17a2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFBhdHRlcm5cbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxQYXR0ZXJuTmFtZVNlbGVjdCBvbkNoYW5nZT17Y2hhbmdlSGFuZGxlcn0gLz5cbiAgICAgICAgICAgIDxQYXR0ZXJuSW5wdXQgb25LZXlVcD17a2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFN0YXJ0IHJ1bGVcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxTdGFydFJ1bGVOYW1lSW5wdXQgb25LZXlVcD17a2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9TaXplYWJsZURpdj5cbiAgICAgICAgPFZlcnRpY2FsU3BsaXR0ZXJEaXYgLz5cbiAgICAgICAgPENvbHVtbkRpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBDb250ZW50XG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8Q29udGVudFRleHRhcmVhIG9uS2V5VXA9e2tleVVwSGFuZGxlcn0gLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBQYXJzZSB0cmVlXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8UGFyc2VUcmVlVGV4dGFyZWEgLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBGbG9yZW5jZSBCTkZcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxGbG9yZW5jZUJORlRleHRhcmVhIC8+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L0NvbHVtbkRpdj5cbiAgICAgIDwvQ29sdW1uc0Rpdj5cblxuICAgIF0pO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIGNvbnN0IHsgaW5pdGlhbENvbnRlbnQgfSA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICBjb25zdCBjb250ZW50ID0gaW5pdGlhbENvbnRlbnQ7IC8vL1xuXG4gICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQpO1xuXG4gICAgdGhpcy5jaGFuZ2VIYW5kbGVyKCk7XG5cbiAgICB0aGlzLmtleVVwSGFuZGxlcigpO1xuICB9XG5cbiAgc3RhdGljIGluaXRpYWxDb250ZW50ID0gYEludGVnZXJgO1xuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZpZXdcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVmlldylgXG5cbiAgcGFkZGluZzogMXJlbTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCJqdXh0YXBvc2VcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgQm9keSB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCBWaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlld1wiO1xuXG5jb25zdCB7IHJlbmRlclN0eWxlcyB9ID0gd2l0aFN0eWxlO1xuXG5jb25zdCBib2R5ID0gbmV3IEJvZHkoKTtcblxucmVuZGVyU3R5bGVzKCk7XG5cbmJvZHkubW91bnQoXG5cbiAgPFZpZXcvPlxuXG4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7OztBQUFBOzs7Ozs7OztlQUVxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7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