@tricoteuses/assemblee
Version:
Retrieve, clean up & handle French Assemblée nationale's open data
628 lines (625 loc) • 74.7 kB
JavaScript
"use strict";
require("core-js/modules/es.symbol.js");
require("core-js/modules/es.symbol.description.js");
require("core-js/modules/es.symbol.iterator.js");
require("core-js/modules/es.array.iterator.js");
require("core-js/modules/es.object.define-property.js");
require("core-js/modules/es.string.iterator.js");
require("core-js/modules/web.dom-collections.iterator.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TypeReunion = exports.TypePointOdj = exports.ReunionXsiType = exports.Quantieme = exports.Procedure = exports.Presence = exports.PointOdjXsiType = exports.PersonneAuditionneeXsiType = exports.NatureTravauxOdj = exports.FormatReunion = exports.EtatCycleDeVie = exports.Convert = exports.Civ = void 0;
require("core-js/modules/es.symbol.to-primitive.js");
require("core-js/modules/es.array.concat.js");
require("core-js/modules/es.array.for-each.js");
require("core-js/modules/es.array.index-of.js");
require("core-js/modules/es.array.is-array.js");
require("core-js/modules/es.array.map.js");
require("core-js/modules/es.date.to-json.js");
require("core-js/modules/es.date.to-primitive.js");
require("core-js/modules/es.date.to-string.js");
require("core-js/modules/es.number.constructor.js");
require("core-js/modules/es.object.get-own-property-names.js");
require("core-js/modules/es.object.keys.js");
require("core-js/modules/es.object.to-string.js");
require("core-js/modules/web.dom-collections.for-each.js");
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
// To parse this data:
//
// import { Convert, Reunion, Agendas } from "./file";
//
// const reunion = Convert.toReunion(json);
// const agendas = Convert.toAgendas(json);
//
// These functions will throw an error if the JSON doesn't
// match the expected interface, even if the JSON is valid.
var ReunionXsiType = exports.ReunionXsiType = /*#__PURE__*/function (ReunionXsiType) {
ReunionXsiType["ReunionCommissionType"] = "reunionCommission_type";
ReunionXsiType["ReunionInitParlementaireType"] = "reunionInitParlementaire_type";
ReunionXsiType["SeanceType"] = "seance_type";
return ReunionXsiType;
}({});
var PointOdjXsiType = exports.PointOdjXsiType = /*#__PURE__*/function (PointOdjXsiType) {
PointOdjXsiType["PodjReunionType"] = "podjReunion_type";
PointOdjXsiType["PodjSeanceConfPresType"] = "podjSeanceConfPres_type";
return PointOdjXsiType;
}({});
var EtatCycleDeVie = exports.EtatCycleDeVie = /*#__PURE__*/function (EtatCycleDeVie) {
EtatCycleDeVie["Annul\xE9"] = "Annul\xE9";
EtatCycleDeVie["Confirm\xE9"] = "Confirm\xE9";
EtatCycleDeVie["Eventuel"] = "Eventuel";
EtatCycleDeVie["Supprim\xE9"] = "Supprim\xE9";
return EtatCycleDeVie;
}({});
var NatureTravauxOdj = exports.NatureTravauxOdj = /*#__PURE__*/function (NatureTravauxOdj) {
NatureTravauxOdj["Odjpr"] = "ODJPR";
NatureTravauxOdj["Odjsn"] = "ODJSN";
return NatureTravauxOdj;
}({});
var Procedure = exports.Procedure = /*#__PURE__*/function (Procedure) {
Procedure["DiscussionG\xE9n\xE9raleCommune"] = "discussion g\xE9n\xE9rale commune";
Procedure["Proc\xE9dureDExamenSimplifi\xE9eArticle103"] = "proc\xE9dure d'examen simplifi\xE9e-Article 103";
Procedure["Proc\xE9dureDExamenSimplifi\xE9eArticle106"] = "proc\xE9dure d'examen simplifi\xE9e-Article 106";
Procedure["Proc\xE9dureDExamenSimplifi\xE9eArticle107"] = "proc\xE9dure d'examen simplifi\xE9e-Article 107";
Procedure["Proc\xE9dureDeL\xE9gislationEnCommissionArticle1071"] = "proc\xE9dure de l\xE9gislation en commission-Article 107-1";
return Procedure;
}({});
var TypePointOdj = exports.TypePointOdj = /*#__PURE__*/function (TypePointOdj) {
TypePointOdj["AmendementsArt88"] = "Amendements (Art. 88)";
TypePointOdj["AmendementsArt91"] = "Amendements (Art. 91)";
TypePointOdj["Audition"] = "Audition";
TypePointOdj["AuditionMinistre"] = "Audition ministre";
TypePointOdj["AuditionMinistreOuverte\xC0LaPresse"] = "Audition ministre ouverte \xE0 la presse";
TypePointOdj["AuditionOuverte\xC0LaPresse"] = "Audition ouverte \xE0 la presse";
TypePointOdj["Communication"] = "Communication";
TypePointOdj["ConstitutionDeMissionDInformation"] = "Constitution de mission d'information";
TypePointOdj["Discussion"] = "Discussion";
TypePointOdj["D\xE9batDInitiativeParlementaire"] = "D\xE9bat d'initiative parlementaire";
TypePointOdj["D\xE9clarationDuGouvernementSuivieDUnD\xE9bat"] = "D\xE9claration du Gouvernement suivie d'un d\xE9bat";
TypePointOdj["EchangesDeVues"] = "Echanges de vues";
TypePointOdj["Examen"] = "Examen";
TypePointOdj["ExplicationsDeVoteDesGroupesEtVoteParScrutinPublic"] = "Explications de vote des groupes et vote par scrutin public";
TypePointOdj["ExplicationsDeVoteEtVoteParScrutinPublic"] = "Explications de vote et vote par scrutin public";
TypePointOdj["FixationDeLOrdreDuJour"] = "Fixation de l'ordre du jour";
TypePointOdj["NominationBureau"] = "Nomination bureau";
TypePointOdj["NominationCandidatsOrganismeExtraparlementaire"] = "Nomination candidats organisme extraparlementaire";
TypePointOdj["NominationDUnMembreDUneMissionDInformation"] = "Nomination d'un membre d'une mission d'information";
TypePointOdj["NominationRapporteur"] = "Nomination rapporteur";
TypePointOdj["NominationRapporteurDApplication"] = "Nomination rapporteur d'application";
TypePointOdj["NominationRapporteurDInformation"] = "Nomination rapporteur d'information";
TypePointOdj["NominationRapporteurPourAvis"] = "Nomination rapporteur pour avis";
TypePointOdj["OuvertureEtCl\xF4tureDeSession"] = "Ouverture et cl\xF4ture de session";
TypePointOdj["QuestionsAuGouvernement"] = "Questions au Gouvernement";
TypePointOdj["QuestionsOralesSansD\xE9bat"] = "Questions orales sans d\xE9bat";
TypePointOdj["Rapport"] = "Rapport";
TypePointOdj["RapportDInformation"] = "Rapport d'information";
TypePointOdj["RapportPourAvis"] = "Rapport pour avis";
TypePointOdj["SeancesReserveesGroupeOppositionOuMinoritaire"] = "S\xE9ances r\xE9serv\xE9es \xE0 un groupe de l'opposition ou minoritaire";
TypePointOdj["SuiteDeLaDiscussion"] = "Suite de la discussion";
TypePointOdj["TableRonde"] = "Table ronde";
TypePointOdj["VoteParScrutinPublic"] = "Vote par scrutin public";
TypePointOdj["VoteSolennel"] = "Vote solennel";
return TypePointOdj;
}({});
var FormatReunion = exports.FormatReunion = /*#__PURE__*/function (FormatReunion) {
FormatReunion["AuditionExterne"] = "AuditionExterne";
FormatReunion["AuditionParPresidentCommission"] = "AuditionParPresidentCommission";
FormatReunion["AuditionParRapporteur"] = "AuditionParRapporteur";
FormatReunion["Ordinaire"] = "Ordinaire";
return FormatReunion;
}({});
var Quantieme = exports.Quantieme = /*#__PURE__*/function (Quantieme) {
Quantieme["Deuxi\xE8me"] = "Deuxi\xE8me";
Quantieme["Premi\xE8re"] = "Premi\xE8re";
Quantieme["Troisi\xE8me"] = "Troisi\xE8me";
Quantieme["Unique"] = "Unique";
return Quantieme;
}({});
var Presence = exports.Presence = /*#__PURE__*/function (Presence) {
Presence["Absent"] = "absent";
Presence["Excus\xE9"] = "excus\xE9";
Presence["Pr\xE9sent"] = "pr\xE9sent";
return Presence;
}({});
var Civ = exports.Civ = /*#__PURE__*/function (Civ) {
Civ["M"] = "M.";
Civ["Mme"] = "Mme";
return Civ;
}({});
var PersonneAuditionneeXsiType = exports.PersonneAuditionneeXsiType = /*#__PURE__*/function (PersonneAuditionneeXsiType) {
PersonneAuditionneeXsiType["IdActeurType"] = "IdActeur_type";
PersonneAuditionneeXsiType["IdPersonneExterneType"] = "IdPersonneExterne_type";
return PersonneAuditionneeXsiType;
}({});
var TypeReunion = exports.TypeReunion = /*#__PURE__*/function (TypeReunion) {
TypeReunion["Dep"] = "DEP";
// Député
TypeReunion["Ga"] = "GA";
// Groupe d'amitié
TypeReunion["Ge"] = "GE";
// Groupe d'étude
TypeReunion["Gevi"] = "GEVI";
// Groupe d'étude à vocation internationale
TypeReunion["Gp"] = "GP";
// Groupe parlementaire
TypeReunion["H\xE9Aur\xE9lien"] = "H\xC9 Aur\xE9lien";
return TypeReunion;
}({}); // Converts JSON strings to/from your types
// and asserts the results of JSON.parse at runtime
var Convert = exports.Convert = /*#__PURE__*/function () {
function Convert() {
_classCallCheck(this, Convert);
}
return _createClass(Convert, null, [{
key: "toAgendas",
value: function toAgendas(json) {
return cast(JSON.parse(json), r("Agendas"));
}
}, {
key: "agendasToJson",
value: function agendasToJson(value) {
return JSON.stringify(uncast(value, r("Agendas")), null, 2);
}
}, {
key: "toReunion",
value: function toReunion(json) {
return cast(JSON.parse(json), r("Reunion"));
}
}, {
key: "reunionToJson",
value: function reunionToJson(value) {
return JSON.stringify(uncast(value, r("Reunion")), null, 2);
}
}]);
}();
function invalidValue(typ, val) {
var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
if (key) {
throw Error("Invalid value for key \"".concat(key, "\". Expected type ").concat(JSON.stringify(typ), " but got ").concat(JSON.stringify(val)));
}
throw Error("Invalid value ".concat(JSON.stringify(val), " for type ").concat(JSON.stringify(typ)));
}
function jsonToJSProps(typ) {
if (typ.jsonToJS === undefined) {
var map = {};
typ.props.forEach(function (p) {
return map[p.json] = {
key: p.js,
typ: p.typ
};
});
typ.jsonToJS = map;
}
return typ.jsonToJS;
}
function jsToJSONProps(typ) {
if (typ.jsToJSON === undefined) {
var map = {};
typ.props.forEach(function (p) {
return map[p.js] = {
key: p.json,
typ: p.typ
};
});
typ.jsToJSON = map;
}
return typ.jsToJSON;
}
function transform(val, typ, getProps) {
var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
function transformPrimitive(typ, val) {
if (_typeof(typ) === _typeof(val)) return val;
return invalidValue(typ, val, key);
}
function transformUnion(typs, val) {
// val must validate against one typ in typs
var l = typs.length;
for (var i = 0; i < l; i++) {
var _typ = typs[i];
try {
return transform(val, _typ, getProps);
} catch (_) {}
}
return invalidValue(typs, val);
}
function transformEnum(cases, val) {
if (cases.indexOf(val) !== -1) return val;
return invalidValue(cases, val);
}
function transformArray(typ, val) {
// val must be an array with no invalid elements
if (!Array.isArray(val)) return invalidValue("array", val);
return val.map(function (el) {
return transform(el, typ, getProps);
});
}
function transformDate(val) {
if (val === null) {
return null;
}
var d = new Date(val);
if (isNaN(d.valueOf())) {
return invalidValue("Date", val);
}
return d;
}
function transformObject(props, additional, val) {
if (val === null || _typeof(val) !== "object" || Array.isArray(val)) {
return invalidValue("object", val);
}
var result = {};
Object.getOwnPropertyNames(props).forEach(function (key) {
var prop = props[key];
var v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
result[prop.key] = transform(v, prop.typ, getProps, prop.key);
});
Object.getOwnPropertyNames(val).forEach(function (key) {
if (!Object.prototype.hasOwnProperty.call(props, key)) {
result[key] = transform(val[key], additional, getProps, key);
}
});
return result;
}
if (typ === "any") return val;
if (typ === null) {
if (val === null) return val;
return invalidValue(typ, val);
}
// if (typ === false) return invalidValue(typ, val)
while (_typeof(typ) === "object" && typ.ref !== undefined) {
typ = typeMap[typ.ref];
}
if (Array.isArray(typ)) return transformEnum(typ, val);
if (_typeof(typ) === "object") {
return typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val) : typ.hasOwnProperty("arrayItems") ? transformArray(typ.arrayItems, val) : typ.hasOwnProperty("props") ? transformObject(getProps(typ), typ.additional, val) : invalidValue(typ, val);
}
// Numbers can be parsed by Date but shouldn't be.
if (typ === Date && typeof val !== "number") return transformDate(val);
return transformPrimitive(typ, val);
}
function cast(val, typ) {
return transform(val, typ, jsonToJSProps);
}
function uncast(val, typ) {
return transform(val, typ, jsToJSONProps);
}
function a(typ) {
return {
arrayItems: typ
};
}
function u() {
for (var _len = arguments.length, typs = new Array(_len), _key = 0; _key < _len; _key++) {
typs[_key] = arguments[_key];
}
return {
unionMembers: typs
};
}
function o(props, additional) {
return {
props: props,
additional: additional
};
}
// function m(additional: any) {
// return { props: [], additional }
// }
function r(name) {
return {
ref: name
};
}
var typeMap = {
Agendas: o([{
json: "reunions",
js: "reunions",
typ: a(r("Reunion"))
}], false),
Reunion: o([{
json: "schemaVersion",
js: "schemaVersion",
typ: u(undefined, "")
}, {
json: "xsiType",
js: "xsiType",
typ: u(undefined, r("ReunionXsiType"))
}, {
json: "uid",
js: "uid",
typ: ""
}, {
json: "timestampDebut",
js: "timestampDebut",
typ: Date
}, {
json: "timestampFin",
js: "timestampFin",
typ: u(undefined, Date)
}, {
json: "lieu",
js: "lieu",
typ: u(undefined, r("Lieu"))
}, {
json: "cycleDeVie",
js: "cycleDeVie",
typ: r("CycleDeVie")
}, {
json: "demandeurs",
js: "demandeurs",
typ: u(undefined, r("Demandeurs"))
}, {
json: "organeReuniRef",
js: "organeReuniRef",
typ: u(undefined, "")
}, {
json: "typeReunion",
js: "typeReunion",
typ: u(undefined, r("TypeReunion"))
}, {
json: "participants",
js: "participants",
typ: u(undefined, r("Participants"))
}, {
json: "sessionRef",
js: "sessionRef",
typ: u(undefined, "")
}, {
json: "ouverturePresse",
js: "ouverturePresse",
typ: u(undefined, false)
}, {
json: "odj",
js: "odj",
typ: u(undefined, r("Odj"))
}, {
json: "compteRenduRef",
js: "compteRenduRef",
typ: u(undefined, "")
}, {
json: "identifiants",
js: "identifiants",
typ: u(undefined, r("Identifiants"))
}, {
json: "formatReunion",
js: "formatReunion",
typ: u(undefined, r("FormatReunion"))
}, {
json: "infosReunionsInternationale",
js: "infosReunionsInternationale",
typ: u(undefined, r("InfosReunionsInternationale"))
}, {
json: "captationVideo",
js: "captationVideo",
typ: u(undefined, false)
}, {
json: "visioConference",
js: "visioConference",
typ: u(undefined, "")
}], false),
Odj: o([{
json: "convocationOdj",
js: "convocationOdj",
typ: u(undefined, a(""))
}, {
json: "resumeOdj",
js: "resumeOdj",
typ: u(undefined, a(""))
}, {
json: "pointsOdj",
js: "pointsOdj",
typ: u(undefined, a(r("PointOdj")))
}], false),
PointOdj: o([{
json: "xsiType",
js: "xsiType",
typ: r("PointOdjXsiType")
}, {
json: "uid",
js: "uid",
typ: ""
}, {
json: "cycleDeVie",
js: "cycleDeVie",
typ: r("CycleDeVie")
}, {
json: "objet",
js: "objet",
typ: ""
}, {
json: "procedure",
js: "procedure",
typ: u(undefined, r("Procedure"))
}, {
json: "dossiersLegislatifsRefs",
js: "dossiersLegislatifsRefs",
typ: u(undefined, a(""))
}, {
json: "typePointOdj",
js: "typePointOdj",
typ: r("TypePointOdj")
}, {
json: "comiteSecret",
js: "comiteSecret",
typ: false
}, {
json: "natureTravauxOdj",
js: "natureTravauxOdj",
typ: u(undefined, r("NatureTravauxOdj"))
}, {
json: "dateConfPres",
js: "dateConfPres",
typ: u(undefined, Date)
}, {
json: "dateLettreMinistre",
js: "dateLettreMinistre",
typ: u(undefined, Date)
}], false),
CycleDeVie: o([{
json: "etat",
js: "etat",
typ: r("EtatCycleDeVie")
}, {
json: "chrono",
js: "chrono",
typ: r("Chrono")
}], false),
Chrono: o([{
json: "creation",
js: "creation",
typ: Date
}, {
json: "cloture",
js: "cloture",
typ: u(undefined, Date)
}], false),
Demandeurs: o([{
json: "acteurs",
js: "acteurs",
typ: u(undefined, a(r("DemandeurActeur")))
}, {
json: "organe",
js: "organe",
typ: u(undefined, r("DemandeurOrgane"))
}], false),
DemandeurActeur: o([{
json: "nom",
js: "nom",
typ: u(undefined, "")
}, {
json: "acteurRef",
js: "acteurRef",
typ: ""
}], false),
DemandeurOrgane: o([{
json: "nom",
js: "nom",
typ: ""
}, {
json: "organeRef",
js: "organeRef",
typ: ""
}], false),
Identifiants: o([{
json: "numSeanceJo",
js: "numSeanceJo",
typ: u(undefined, "")
}, {
json: "idJo",
js: "idJo",
typ: u(undefined, "")
}, {
json: "quantieme",
js: "quantieme",
typ: r("Quantieme")
}, {
json: "dateSeance",
js: "dateSeance",
typ: Date
}], false),
InfosReunionsInternationale: o([{
json: "estReunionInternationale",
js: "estReunionInternationale",
typ: false
}, {
json: "listePays",
js: "listePays",
typ: u(undefined, a(""))
}, {
json: "informationsComplementaires",
js: "informationsComplementaires",
typ: u(undefined, "")
}], false),
Lieu: o([{
json: "code",
js: "code",
typ: u(undefined, "")
}, {
json: "libelleCourt",
js: "libelleCourt",
typ: u(undefined, "")
}, {
json: "libelleLong",
js: "libelleLong",
typ: u(undefined, "")
}, {
json: "lieuRef",
js: "lieuRef",
typ: u(undefined, "")
}], false),
Participants: o([{
json: "participantsInternes",
js: "participantsInternes",
typ: u(undefined, a(r("ParticipantInterne")))
}, {
json: "personnesAuditionnees",
js: "personnesAuditionnees",
typ: u(undefined, a(r("PersonneAuditionnee")))
}], false),
ParticipantInterne: o([{
json: "acteurRef",
js: "acteurRef",
typ: ""
}, {
json: "presence",
js: "presence",
typ: r("Presence")
}], false),
PersonneAuditionnee: o([{
json: "xsiType",
js: "xsiType",
typ: r("PersonneAuditionneeXsiType")
}, {
json: "uid",
js: "uid",
typ: ""
}, {
json: "ident",
js: "ident",
typ: r("Ident")
}, {
json: "dateNais",
js: "dateNais",
typ: u(undefined, Date)
}], false),
Ident: o([{
json: "civ",
js: "civ",
typ: r("Civ")
}, {
json: "prenom",
js: "prenom",
typ: ""
}, {
json: "nom",
js: "nom",
typ: ""
}, {
json: "alpha",
js: "alpha",
typ: u(undefined, "")
}, {
json: "trigramme",
js: "trigramme",
typ: u(undefined, "")
}], false),
ReunionXsiType: ["reunionCommission_type", "reunionInitParlementaire_type", "seance_type"],
PointOdjXsiType: ["podjReunion_type", "podjSeanceConfPres_type"],
EtatCycleDeVie: ["Annulé", "Confirmé", "Eventuel", "Supprimé"],
NatureTravauxOdj: ["ODJPR", "ODJSN"],
Procedure: ["discussion générale commune", "procédure d'examen simplifiée-Article 103", "procédure d'examen simplifiée-Article 106", "procédure d'examen simplifiée-Article 107", "procédure de législation en commission-Article 107-1"],
TypePointOdj: ["Amendements (Art. 88)", "Amendements (Art. 91)", "Audition", "Audition ministre", "Audition ministre ouverte à la presse", "Audition ouverte à la presse", "Communication", "Constitution de mission d'information", "Discussion", "Débat d'initiative parlementaire", "Déclaration du Gouvernement suivie d'un débat", "Echanges de vues", "Examen", "Explications de vote des groupes et vote par scrutin public", "Explications de vote et vote par scrutin public", "Fixation de l'ordre du jour", "Nomination bureau", "Nomination candidats organisme extraparlementaire", "Nomination d'un membre d'une mission d'information", "Nomination rapporteur", "Nomination rapporteur d'application", "Nomination rapporteur d'information", "Nomination rapporteur pour avis", "Ouverture et clôture de session", "Questions au Gouvernement", "Questions orales sans débat", "Rapport", "Rapport d'information", "Rapport pour avis", "Séances réservées à un groupe de l'opposition ou minoritaire", "Suite de la discussion", "Table ronde", "Vote par scrutin public", "Vote solennel"],
FormatReunion: ["AuditionExterne", "AuditionParPresidentCommission", "AuditionParRapporteur", "Ordinaire"],
Quantieme: ["Deuxième", "Première", "Troisième", "Unique"],
Presence: ["absent", "excusé", "présent"],
Civ: ["M.", "Mme"],
PersonneAuditionneeXsiType: ["IdActeur_type", "IdPersonneExterne_type"],
TypeReunion: ["DEP", "GA", "GE", "GEVI", "GP", "HÉ Aurélien"]
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZXVuaW9uWHNpVHlwZSIsImV4cG9ydHMiLCJQb2ludE9kalhzaVR5cGUiLCJFdGF0Q3ljbGVEZVZpZSIsIk5hdHVyZVRyYXZhdXhPZGoiLCJQcm9jZWR1cmUiLCJUeXBlUG9pbnRPZGoiLCJGb3JtYXRSZXVuaW9uIiwiUXVhbnRpZW1lIiwiUHJlc2VuY2UiLCJDaXYiLCJQZXJzb25uZUF1ZGl0aW9ubmVlWHNpVHlwZSIsIlR5cGVSZXVuaW9uIiwiQ29udmVydCIsIl9jbGFzc0NhbGxDaGVjayIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwidG9BZ2VuZGFzIiwianNvbiIsImNhc3QiLCJKU09OIiwicGFyc2UiLCJyIiwiYWdlbmRhc1RvSnNvbiIsInN0cmluZ2lmeSIsInVuY2FzdCIsInRvUmV1bmlvbiIsInJldW5pb25Ub0pzb24iLCJpbnZhbGlkVmFsdWUiLCJ0eXAiLCJ2YWwiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJFcnJvciIsImNvbmNhdCIsImpzb25Ub0pTUHJvcHMiLCJqc29uVG9KUyIsIm1hcCIsInByb3BzIiwiZm9yRWFjaCIsInAiLCJqcyIsImpzVG9KU09OUHJvcHMiLCJqc1RvSlNPTiIsInRyYW5zZm9ybSIsImdldFByb3BzIiwidHJhbnNmb3JtUHJpbWl0aXZlIiwiX3R5cGVvZiIsInRyYW5zZm9ybVVuaW9uIiwidHlwcyIsImwiLCJpIiwiXyIsInRyYW5zZm9ybUVudW0iLCJjYXNlcyIsImluZGV4T2YiLCJ0cmFuc2Zvcm1BcnJheSIsIkFycmF5IiwiaXNBcnJheSIsImVsIiwidHJhbnNmb3JtRGF0ZSIsImQiLCJEYXRlIiwiaXNOYU4iLCJ2YWx1ZU9mIiwidHJhbnNmb3JtT2JqZWN0IiwiYWRkaXRpb25hbCIsInJlc3VsdCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm9wIiwidiIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInJlZiIsInR5cGVNYXAiLCJ1bmlvbk1lbWJlcnMiLCJhcnJheUl0ZW1zIiwiYSIsInUiLCJfbGVuIiwiX2tleSIsIm8iLCJuYW1lIiwiQWdlbmRhcyIsIlJldW5pb24iLCJPZGoiLCJQb2ludE9kaiIsIkN5Y2xlRGVWaWUiLCJDaHJvbm8iLCJEZW1hbmRldXJzIiwiRGVtYW5kZXVyQWN0ZXVyIiwiRGVtYW5kZXVyT3JnYW5lIiwiSWRlbnRpZmlhbnRzIiwiSW5mb3NSZXVuaW9uc0ludGVybmF0aW9uYWxlIiwiTGlldSIsIlBhcnRpY2lwYW50cyIsIlBhcnRpY2lwYW50SW50ZXJuZSIsIlBlcnNvbm5lQXVkaXRpb25uZWUiLCJJZGVudCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9hZ2VuZGFzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRvIHBhcnNlIHRoaXMgZGF0YTpcbi8vXG4vLyAgIGltcG9ydCB7IENvbnZlcnQsIFJldW5pb24sIEFnZW5kYXMgfSBmcm9tIFwiLi9maWxlXCI7XG4vL1xuLy8gICBjb25zdCByZXVuaW9uID0gQ29udmVydC50b1JldW5pb24oanNvbik7XG4vLyAgIGNvbnN0IGFnZW5kYXMgPSBDb252ZXJ0LnRvQWdlbmRhcyhqc29uKTtcbi8vXG4vLyBUaGVzZSBmdW5jdGlvbnMgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgSlNPTiBkb2Vzbid0XG4vLyBtYXRjaCB0aGUgZXhwZWN0ZWQgaW50ZXJmYWNlLCBldmVuIGlmIHRoZSBKU09OIGlzIHZhbGlkLlxuXG5pbXBvcnQgeyBBY3RldXIsIE9yZ2FuZSB9IGZyb20gXCIuL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbmRhcyB7XG4gIHJldW5pb25zOiBSZXVuaW9uW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXVuaW9uIHtcbiAgc2NoZW1hVmVyc2lvbj86IHN0cmluZ1xuICB4c2lUeXBlPzogUmV1bmlvblhzaVR5cGVcbiAgdWlkOiBzdHJpbmdcbiAgdGltZXN0YW1wRGVidXQ6IERhdGVcbiAgdGltZXN0YW1wRmluPzogRGF0ZVxuICBsaWV1PzogTGlldVxuICBjeWNsZURlVmllOiBDeWNsZURlVmllXG4gIGRlbWFuZGV1cnM/OiBEZW1hbmRldXJzXG4gIG9yZ2FuZVJldW5pUmVmPzogc3RyaW5nXG4gIG9yZ2FuZVJldW5pPzogT3JnYW5lIC8vIEFkZGVkIGJ5IFRyaWNvdGV1c2VzXG4gIHR5cGVSZXVuaW9uPzogVHlwZVJldW5pb25cbiAgcGFydGljaXBhbnRzPzogUGFydGljaXBhbnRzXG4gIHNlc3Npb25SZWY/OiBzdHJpbmdcbiAgb3V2ZXJ0dXJlUHJlc3NlPzogYm9vbGVhblxuICBvZGo/OiBPZGpcbiAgY29tcHRlUmVuZHVSZWY/OiBzdHJpbmdcbiAgaWRlbnRpZmlhbnRzPzogSWRlbnRpZmlhbnRzXG4gIGZvcm1hdFJldW5pb24/OiBGb3JtYXRSZXVuaW9uXG4gIGluZm9zUmV1bmlvbnNJbnRlcm5hdGlvbmFsZT86IEluZm9zUmV1bmlvbnNJbnRlcm5hdGlvbmFsZVxuICBjYXB0YXRpb25WaWRlbz86IGJvb2xlYW5cbiAgdmlzaW9Db25mZXJlbmNlPzogc3RyaW5nXG59XG5cbmV4cG9ydCBlbnVtIFJldW5pb25Yc2lUeXBlIHtcbiAgUmV1bmlvbkNvbW1pc3Npb25UeXBlID0gXCJyZXVuaW9uQ29tbWlzc2lvbl90eXBlXCIsXG4gIFJldW5pb25Jbml0UGFybGVtZW50YWlyZVR5cGUgPSBcInJldW5pb25Jbml0UGFybGVtZW50YWlyZV90eXBlXCIsXG4gIFNlYW5jZVR5cGUgPSBcInNlYW5jZV90eXBlXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2RqIHtcbiAgY29udm9jYXRpb25PZGo/OiBzdHJpbmdbXVxuICByZXN1bWVPZGo/OiBzdHJpbmdbXVxuICBwb2ludHNPZGo/OiBQb2ludE9kaltdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnRPZGoge1xuICB4c2lUeXBlOiBQb2ludE9kalhzaVR5cGVcbiAgdWlkOiBzdHJpbmdcbiAgY3ljbGVEZVZpZTogQ3ljbGVEZVZpZVxuICBvYmpldDogc3RyaW5nXG4gIHByb2NlZHVyZT86IFByb2NlZHVyZVxuICBkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcz86IHN0cmluZ1tdXG4gIHR5cGVQb2ludE9kajogVHlwZVBvaW50T2RqXG4gIGNvbWl0ZVNlY3JldDogYm9vbGVhblxuICBuYXR1cmVUcmF2YXV4T2RqPzogTmF0dXJlVHJhdmF1eE9kalxuICBkYXRlQ29uZlByZXM/OiBEYXRlXG4gIGRhdGVMZXR0cmVNaW5pc3RyZT86IERhdGVcbn1cblxuZXhwb3J0IGVudW0gUG9pbnRPZGpYc2lUeXBlIHtcbiAgUG9kalJldW5pb25UeXBlID0gXCJwb2RqUmV1bmlvbl90eXBlXCIsXG4gIFBvZGpTZWFuY2VDb25mUHJlc1R5cGUgPSBcInBvZGpTZWFuY2VDb25mUHJlc190eXBlXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3ljbGVEZVZpZSB7XG4gIGV0YXQ6IEV0YXRDeWNsZURlVmllXG4gIGNocm9ubzogQ2hyb25vXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hyb25vIHtcbiAgY3JlYXRpb246IERhdGVcbiAgY2xvdHVyZT86IERhdGVcbn1cblxuZXhwb3J0IGVudW0gRXRhdEN5Y2xlRGVWaWUge1xuICBBbm51bMOpID0gXCJBbm51bMOpXCIsXG4gIENvbmZpcm3DqSA9IFwiQ29uZmlybcOpXCIsXG4gIEV2ZW50dWVsID0gXCJFdmVudHVlbFwiLFxuICBTdXBwcmltw6kgPSBcIlN1cHByaW3DqVwiLFxufVxuXG5leHBvcnQgZW51bSBOYXR1cmVUcmF2YXV4T2RqIHtcbiAgT2RqcHIgPSBcIk9ESlBSXCIsXG4gIE9kanNuID0gXCJPREpTTlwiLFxufVxuXG5leHBvcnQgZW51bSBQcm9jZWR1cmUge1xuICBEaXNjdXNzaW9uR8OpbsOpcmFsZUNvbW11bmUgPSBcImRpc2N1c3Npb24gZ8OpbsOpcmFsZSBjb21tdW5lXCIsXG4gIFByb2PDqWR1cmVERXhhbWVuU2ltcGxpZmnDqWVBcnRpY2xlMTAzID0gXCJwcm9jw6lkdXJlIGQnZXhhbWVuIHNpbXBsaWZpw6llLUFydGljbGUgMTAzXCIsXG4gIFByb2PDqWR1cmVERXhhbWVuU2ltcGxpZmnDqWVBcnRpY2xlMTA2ID0gXCJwcm9jw6lkdXJlIGQnZXhhbWVuIHNpbXBsaWZpw6llLUFydGljbGUgMTA2XCIsXG4gIFByb2PDqWR1cmVERXhhbWVuU2ltcGxpZmnDqWVBcnRpY2xlMTA3ID0gXCJwcm9jw6lkdXJlIGQnZXhhbWVuIHNpbXBsaWZpw6llLUFydGljbGUgMTA3XCIsXG4gIFByb2PDqWR1cmVEZUzDqWdpc2xhdGlvbkVuQ29tbWlzc2lvbkFydGljbGUxMDcxID0gXCJwcm9jw6lkdXJlIGRlIGzDqWdpc2xhdGlvbiBlbiBjb21taXNzaW9uLUFydGljbGUgMTA3LTFcIixcbn1cblxuZXhwb3J0IGVudW0gVHlwZVBvaW50T2RqIHtcbiAgQW1lbmRlbWVudHNBcnQ4OCA9IFwiQW1lbmRlbWVudHMgKEFydC4gODgpXCIsXG4gIEFtZW5kZW1lbnRzQXJ0OTEgPSBcIkFtZW5kZW1lbnRzIChBcnQuIDkxKVwiLFxuICBBdWRpdGlvbiA9IFwiQXVkaXRpb25cIixcbiAgQXVkaXRpb25NaW5pc3RyZSA9IFwiQXVkaXRpb24gbWluaXN0cmVcIixcbiAgQXVkaXRpb25NaW5pc3RyZU91dmVydGXDgExhUHJlc3NlID0gXCJBdWRpdGlvbiBtaW5pc3RyZSBvdXZlcnRlIMOgIGxhIHByZXNzZVwiLFxuICBBdWRpdGlvbk91dmVydGXDgExhUHJlc3NlID0gXCJBdWRpdGlvbiBvdXZlcnRlIMOgIGxhIHByZXNzZVwiLFxuICBDb21tdW5pY2F0aW9uID0gXCJDb21tdW5pY2F0aW9uXCIsXG4gIENvbnN0aXR1dGlvbkRlTWlzc2lvbkRJbmZvcm1hdGlvbiA9IFwiQ29uc3RpdHV0aW9uIGRlIG1pc3Npb24gZCdpbmZvcm1hdGlvblwiLFxuICBEaXNjdXNzaW9uID0gXCJEaXNjdXNzaW9uXCIsXG4gIETDqWJhdERJbml0aWF0aXZlUGFybGVtZW50YWlyZSA9IFwiRMOpYmF0IGQnaW5pdGlhdGl2ZSBwYXJsZW1lbnRhaXJlXCIsXG4gIETDqWNsYXJhdGlvbkR1R291dmVybmVtZW50U3VpdmllRFVuRMOpYmF0ID0gXCJEw6ljbGFyYXRpb24gZHUgR291dmVybmVtZW50IHN1aXZpZSBkJ3VuIGTDqWJhdFwiLFxuICBFY2hhbmdlc0RlVnVlcyA9IFwiRWNoYW5nZXMgZGUgdnVlc1wiLFxuICBFeGFtZW4gPSBcIkV4YW1lblwiLFxuICBFeHBsaWNhdGlvbnNEZVZvdGVEZXNHcm91cGVzRXRWb3RlUGFyU2NydXRpblB1YmxpYyA9IFwiRXhwbGljYXRpb25zIGRlIHZvdGUgZGVzIGdyb3VwZXMgZXQgdm90ZSBwYXIgc2NydXRpbiBwdWJsaWNcIixcbiAgRXhwbGljYXRpb25zRGVWb3RlRXRWb3RlUGFyU2NydXRpblB1YmxpYyA9IFwiRXhwbGljYXRpb25zIGRlIHZvdGUgZXQgdm90ZSBwYXIgc2NydXRpbiBwdWJsaWNcIixcbiAgRml4YXRpb25EZUxPcmRyZUR1Sm91ciA9IFwiRml4YXRpb24gZGUgbCdvcmRyZSBkdSBqb3VyXCIsXG4gIE5vbWluYXRpb25CdXJlYXUgPSBcIk5vbWluYXRpb24gYnVyZWF1XCIsXG4gIE5vbWluYXRpb25DYW5kaWRhdHNPcmdhbmlzbWVFeHRyYXBhcmxlbWVudGFpcmUgPSBcIk5vbWluYXRpb24gY2FuZGlkYXRzIG9yZ2FuaXNtZSBleHRyYXBhcmxlbWVudGFpcmVcIixcbiAgTm9taW5hdGlvbkRVbk1lbWJyZURVbmVNaXNzaW9uREluZm9ybWF0aW9uID0gXCJOb21pbmF0aW9uIGQndW4gbWVtYnJlIGQndW5lIG1pc3Npb24gZCdpbmZvcm1hdGlvblwiLFxuICBOb21pbmF0aW9uUmFwcG9ydGV1ciA9IFwiTm9taW5hdGlvbiByYXBwb3J0ZXVyXCIsXG4gIE5vbWluYXRpb25SYXBwb3J0ZXVyREFwcGxpY2F0aW9uID0gXCJOb21pbmF0aW9uIHJhcHBvcnRldXIgZCdhcHBsaWNhdGlvblwiLFxuICBOb21pbmF0aW9uUmFwcG9ydGV1ckRJbmZvcm1hdGlvbiA9IFwiTm9taW5hdGlvbiByYXBwb3J0ZXVyIGQnaW5mb3JtYXRpb25cIixcbiAgTm9taW5hdGlvblJhcHBvcnRldXJQb3VyQXZpcyA9IFwiTm9taW5hdGlvbiByYXBwb3J0ZXVyIHBvdXIgYXZpc1wiLFxuICBPdXZlcnR1cmVFdENsw7R0dXJlRGVTZXNzaW9uID0gXCJPdXZlcnR1cmUgZXQgY2zDtHR1cmUgZGUgc2Vzc2lvblwiLFxuICBRdWVzdGlvbnNBdUdvdXZlcm5lbWVudCA9IFwiUXVlc3Rpb25zIGF1IEdvdXZlcm5lbWVudFwiLFxuICBRdWVzdGlvbnNPcmFsZXNTYW5zRMOpYmF0ID0gXCJRdWVzdGlvbnMgb3JhbGVzIHNhbnMgZMOpYmF0XCIsXG4gIFJhcHBvcnQgPSBcIlJhcHBvcnRcIixcbiAgUmFwcG9ydERJbmZvcm1hdGlvbiA9IFwiUmFwcG9ydCBkJ2luZm9ybWF0aW9uXCIsXG4gIFJhcHBvcnRQb3VyQXZpcyA9IFwiUmFwcG9ydCBwb3VyIGF2aXNcIixcbiAgU2VhbmNlc1Jlc2VydmVlc0dyb3VwZU9wcG9zaXRpb25PdU1pbm9yaXRhaXJlID0gXCJTw6lhbmNlcyByw6lzZXJ2w6llcyDDoCB1biBncm91cGUgZGUgbCdvcHBvc2l0aW9uIG91IG1pbm9yaXRhaXJlXCIsXG4gIFN1aXRlRGVMYURpc2N1c3Npb24gPSBcIlN1aXRlIGRlIGxhIGRpc2N1c3Npb25cIixcbiAgVGFibGVSb25kZSA9IFwiVGFibGUgcm9uZGVcIixcbiAgVm90ZVBhclNjcnV0aW5QdWJsaWMgPSBcIlZvdGUgcGFyIHNjcnV0aW4gcHVibGljXCIsXG4gIFZvdGVTb2xlbm5lbCA9IFwiVm90ZSBzb2xlbm5lbFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbWFuZGV1cnMge1xuICBhY3RldXJzPzogRGVtYW5kZXVyQWN0ZXVyW11cbiAgb3JnYW5lPzogRGVtYW5kZXVyT3JnYW5lXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVtYW5kZXVyQWN0ZXVyIHtcbiAgbm9tPzogc3RyaW5nXG4gIGFjdGV1clJlZjogc3RyaW5nXG4gIGFjdGV1cj86IEFjdGV1ciAvLyBBZGRlZCBieSBUcmljb3RldXNlc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbWFuZGV1ck9yZ2FuZSB7XG4gIG5vbTogc3RyaW5nXG4gIG9yZ2FuZVJlZjogc3RyaW5nXG4gIG9yZ2FuZT86IE9yZ2FuZSAvLyBBZGRlZCBieSBUcmljb3RldXNlc1xufVxuXG5leHBvcnQgZW51bSBGb3JtYXRSZXVuaW9uIHtcbiAgQXVkaXRpb25FeHRlcm5lID0gXCJBdWRpdGlvbkV4dGVybmVcIixcbiAgQXVkaXRpb25QYXJQcmVzaWRlbnRDb21taXNzaW9uID0gXCJBdWRpdGlvblBhclByZXNpZGVudENvbW1pc3Npb25cIixcbiAgQXVkaXRpb25QYXJSYXBwb3J0ZXVyID0gXCJBdWRpdGlvblBhclJhcHBvcnRldXJcIixcbiAgT3JkaW5haXJlID0gXCJPcmRpbmFpcmVcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGlmaWFudHMge1xuICBudW1TZWFuY2VKbz86IHN0cmluZ1xuICBpZEpvPzogc3RyaW5nXG4gIHF1YW50aWVtZTogUXVhbnRpZW1lXG4gIGRhdGVTZWFuY2U6IHN0cmluZ1xufVxuXG5leHBvcnQgZW51bSBRdWFudGllbWUge1xuICBEZXV4acOobWUgPSBcIkRldXhpw6htZVwiLFxuICBQcmVtacOocmUgPSBcIlByZW1pw6hyZVwiLFxuICBUcm9pc2nDqG1lID0gXCJUcm9pc2nDqG1lXCIsXG4gIFVuaXF1ZSA9IFwiVW5pcXVlXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5mb3NSZXVuaW9uc0ludGVybmF0aW9uYWxlIHtcbiAgZXN0UmV1bmlvbkludGVybmF0aW9uYWxlOiBib29sZWFuXG4gIGxpc3RlUGF5cz86IHN0cmluZ1tdXG4gIGluZm9ybWF0aW9uc0NvbXBsZW1lbnRhaXJlcz86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpZXUge1xuICBjb2RlPzogc3RyaW5nXG4gIGxpYmVsbGVDb3VydD86IHN0cmluZ1xuICBsaWJlbGxlTG9uZz86IHN0cmluZ1xuICBsaWV1UmVmPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGljaXBhbnRzIHtcbiAgcGFydGljaXBhbnRzSW50ZXJuZXM/OiBQYXJ0aWNpcGFudEludGVybmVbXVxuICBwZXJzb25uZXNBdWRpdGlvbm5lZXM/OiBQZXJzb25uZUF1ZGl0aW9ubmVlW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJ0aWNpcGFudEludGVybmUge1xuICBhY3RldXJSZWY6IHN0cmluZ1xuICBhY3RldXI/OiBBY3RldXIgLy8gQWRkZWQgYnkgVHJpY290ZXVzZXNcbiAgcHJlc2VuY2U6IFByZXNlbmNlXG59XG5cbmV4cG9ydCBlbnVtIFByZXNlbmNlIHtcbiAgQWJzZW50ID0gXCJhYnNlbnRcIixcbiAgRXhjdXPDqSA9IFwiZXhjdXPDqVwiLFxuICBQcsOpc2VudCA9IFwicHLDqXNlbnRcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJzb25uZUF1ZGl0aW9ubmVlIHtcbiAgeHNpVHlwZTogUGVyc29ubmVBdWRpdGlvbm5lZVhzaVR5cGVcbiAgdWlkOiBzdHJpbmdcbiAgaWRlbnQ6IElkZW50XG4gIGRhdGVOYWlzPzogRGF0ZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50IHtcbiAgY2l2OiBDaXZcbiAgcHJlbm9tOiBzdHJpbmdcbiAgbm9tOiBzdHJpbmdcbiAgYWxwaGE/OiBzdHJpbmdcbiAgdHJpZ3JhbW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBlbnVtIENpdiB7XG4gIE0gPSBcIk0uXCIsXG4gIE1tZSA9IFwiTW1lXCIsXG59XG5cbmV4cG9ydCBlbnVtIFBlcnNvbm5lQXVkaXRpb25uZWVYc2lUeXBlIHtcbiAgSWRBY3RldXJUeXBlID0gXCJJZEFjdGV1cl90eXBlXCIsXG4gIElkUGVyc29ubmVFeHRlcm5lVHlwZSA9IFwiSWRQZXJzb25uZUV4dGVybmVfdHlwZVwiLFxufVxuXG5leHBvcnQgZW51bSBUeXBlUmV1bmlvbiB7XG4gIERlcCA9IFwiREVQXCIsIC8vIETDqXB1dMOpXG4gIEdhID0gXCJHQVwiLCAvLyBHcm91cGUgZCdhbWl0acOpXG4gIEdlID0gXCJHRVwiLCAvLyBHcm91cGUgZCfDqXR1ZGVcbiAgR2V2aSA9IFwiR0VWSVwiLCAvLyBHcm91cGUgZCfDqXR1ZGUgw6Agdm9jYXRpb24gaW50ZXJuYXRpb25hbGVcbiAgR3AgPSBcIkdQXCIsIC8vIEdyb3VwZSBwYXJsZW1lbnRhaXJlXG4gIEjDqUF1csOpbGllbiA9IFwiSMOJIEF1csOpbGllblwiLFxufVxuXG4vLyBDb252ZXJ0cyBKU09OIHN0cmluZ3MgdG8vZnJvbSB5b3VyIHR5cGVzXG4vLyBhbmQgYXNzZXJ0cyB0aGUgcmVzdWx0cyBvZiBKU09OLnBhcnNlIGF0IHJ1bnRpbWVcbmV4cG9ydCBjbGFzcyBDb252ZXJ0IHtcbiAgcHVibGljIHN0YXRpYyB0b0FnZW5kYXMoanNvbjogc3RyaW5nKTogQWdlbmRhcyB7XG4gICAgcmV0dXJuIGNhc3QoSlNPTi5wYXJzZShqc29uKSwgcihcIkFnZW5kYXNcIikpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFnZW5kYXNUb0pzb24odmFsdWU6IEFnZW5kYXMpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh1bmNhc3QodmFsdWUsIHIoXCJBZ2VuZGFzXCIpKSwgbnVsbCwgMilcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdG9SZXVuaW9uKGpzb246IHN0cmluZyk6IFJldW5pb24ge1xuICAgIHJldHVybiBjYXN0KEpTT04ucGFyc2UoanNvbiksIHIoXCJSZXVuaW9uXCIpKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZXVuaW9uVG9Kc29uKHZhbHVlOiBSZXVuaW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodW5jYXN0KHZhbHVlLCByKFwiUmV1bmlvblwiKSksIG51bGwsIDIpXG4gIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZFZhbHVlKHR5cDogYW55LCB2YWw6IGFueSwga2V5OiBhbnkgPSBcIlwiKTogbmV2ZXIge1xuICBpZiAoa2V5KSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgSW52YWxpZCB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIuIEV4cGVjdGVkIHR5cGUgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdHlwLFxuICAgICAgKX0gYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbCl9YCxcbiAgICApXG4gIH1cbiAgdGhyb3cgRXJyb3IoXG4gICAgYEludmFsaWQgdmFsdWUgJHtKU09OLnN0cmluZ2lmeSh2YWwpfSBmb3IgdHlwZSAke0pTT04uc3RyaW5naWZ5KHR5cCl9YCxcbiAgKVxufVxuXG5mdW5jdGlvbiBqc29uVG9KU1Byb3BzKHR5cDogYW55KTogYW55IHtcbiAgaWYgKHR5cC5qc29uVG9KUyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIG1hcDogYW55ID0ge31cbiAgICB0eXAucHJvcHMuZm9yRWFjaCgocDogYW55KSA9PiAobWFwW3AuanNvbl0gPSB7IGtleTogcC5qcywgdHlwOiBwLnR5cCB9KSlcbiAgICB0eXAuanNvblRvSlMgPSBtYXBcbiAgfVxuICByZXR1cm4gdHlwLmpzb25Ub0pTXG59XG5cbmZ1bmN0aW9uIGpzVG9KU09OUHJvcHModHlwOiBhbnkpOiBhbnkge1xuICBpZiAodHlwLmpzVG9KU09OID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgbWFwOiBhbnkgPSB7fVxuICAgIHR5cC5wcm9wcy5mb3JFYWNoKChwOiBhbnkpID0+IChtYXBbcC5qc10gPSB7IGtleTogcC5qc29uLCB0eXA6IHAudHlwIH0pKVxuICAgIHR5cC5qc1RvSlNPTiA9IG1hcFxuICB9XG4gIHJldHVybiB0eXAuanNUb0pTT05cbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtKHZhbDogYW55LCB0eXA6IGFueSwgZ2V0UHJvcHM6IGFueSwga2V5OiBhbnkgPSBcIlwiKTogYW55IHtcbiAgZnVuY3Rpb24gdHJhbnNmb3JtUHJpbWl0aXZlKHR5cDogc3RyaW5nLCB2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiB0eXAgPT09IHR5cGVvZiB2YWwpIHJldHVybiB2YWxcbiAgICByZXR1cm4gaW52YWxpZFZhbHVlKHR5cCwgdmFsLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1Vbmlvbih0eXBzOiBhbnlbXSwgdmFsOiBhbnkpOiBhbnkge1xuICAgIC8vIHZhbCBtdXN0IHZhbGlkYXRlIGFnYWluc3Qgb25lIHR5cCBpbiB0eXBzXG4gICAgY29uc3QgbCA9IHR5cHMubGVuZ3RoXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IHR5cCA9IHR5cHNbaV1cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm0odmFsLCB0eXAsIGdldFByb3BzKVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9XG4gICAgcmV0dXJuIGludmFsaWRWYWx1ZSh0eXBzLCB2YWwpXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1FbnVtKGNhc2VzOiBzdHJpbmdbXSwgdmFsOiBhbnkpOiBhbnkge1xuICAgIGlmIChjYXNlcy5pbmRleE9mKHZhbCkgIT09IC0xKSByZXR1cm4gdmFsXG4gICAgcmV0dXJuIGludmFsaWRWYWx1ZShjYXNlcywgdmFsKVxuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtQXJyYXkodHlwOiBhbnksIHZhbDogYW55KTogYW55IHtcbiAgICAvLyB2YWwgbXVzdCBiZSBhbiBhcnJheSB3aXRoIG5vIGludmFsaWQgZWxlbWVudHNcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIGludmFsaWRWYWx1ZShcImFycmF5XCIsIHZhbClcbiAgICByZXR1cm4gdmFsLm1hcCgoZWwpID0+IHRyYW5zZm9ybShlbCwgdHlwLCBnZXRQcm9wcykpXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBjb25zdCBkID0gbmV3IERhdGUodmFsKVxuICAgIGlmIChpc05hTihkLnZhbHVlT2YoKSkpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUoXCJEYXRlXCIsIHZhbClcbiAgICB9XG4gICAgcmV0dXJuIGRcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybU9iamVjdChcbiAgICBwcm9wczogeyBbazogc3RyaW5nXTogYW55IH0sXG4gICAgYWRkaXRpb25hbDogYW55LFxuICAgIHZhbDogYW55LFxuICApOiBhbnkge1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUoXCJvYmplY3RcIiwgdmFsKVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvcHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IHByb3BzW2tleV1cbiAgICAgIGNvbnN0IHYgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsLCBrZXkpXG4gICAgICAgID8gdmFsW2tleV1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJlc3VsdFtwcm9wLmtleV0gPSB0cmFuc2Zvcm0odiwgcHJvcC50eXAsIGdldFByb3BzLCBwcm9wLmtleSlcbiAgICB9KVxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRyYW5zZm9ybSh2YWxba2V5XSwgYWRkaXRpb25hbCwgZ2V0UHJvcHMsIGtleSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGlmICh0eXAgPT09IFwiYW55XCIpIHJldHVybiB2YWxcbiAgaWYgKHR5cCA9PT0gbnVsbCkge1xuICAgIGlmICh2YWwgPT09IG51bGwpIHJldHVybiB2YWxcbiAgICByZXR1cm4gaW52YWxpZFZhbHVlKHR5cCwgdmFsKVxuICB9XG4gIC8vIGlmICh0eXAgPT09IGZhbHNlKSByZXR1cm4gaW52YWxpZFZhbHVlKHR5cCwgdmFsKVxuICB3aGlsZSAodHlwZW9mIHR5cCA9PT0gXCJvYmplY3RcIiAmJiB0eXAucmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICB0eXAgPSB0eXBlTWFwW3R5cC5yZWZdXG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodHlwKSkgcmV0dXJuIHRyYW5zZm9ybUVudW0odHlwLCB2YWwpXG4gIGlmICh0eXBlb2YgdHlwID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHR5cC5oYXNPd25Qcm9wZXJ0eShcInVuaW9uTWVtYmVyc1wiKVxuICAgICAgPyB0cmFuc2Zvcm1Vbmlvbih0eXAudW5pb25NZW1iZXJzLCB2YWwpXG4gICAgICA6IHR5cC5oYXNPd25Qcm9wZXJ0eShcImFycmF5SXRlbXNcIilcbiAgICAgICAgPyB0cmFuc2Zvcm1BcnJheSh0eXAuYXJyYXlJdGVtcywgdmFsKVxuICAgICAgICA6IHR5cC5oYXNPd25Qcm9wZXJ0eShcInByb3BzXCIpXG4gICAgICAgICAgPyB0cmFuc2Zvcm1PYmplY3QoZ2V0UHJvcHModHlwKSwgdHlwLmFkZGl0aW9uYWwsIHZhbClcbiAgICAgICAgICA6IGludmFsaWRWYWx1ZSh0eXAsIHZhbClcbiAgfVxuICAvLyBOdW1iZXJzIGNhbiBiZSBwYXJzZWQgYnkgRGF0ZSBidXQgc2hvdWxkbid0IGJlLlxuICBpZiAodHlwID09PSBEYXRlICYmIHR5cGVvZiB2YWwgIT09IFwibnVtYmVyXCIpIHJldHVybiB0cmFuc2Zvcm1EYXRlKHZhbClcbiAgcmV0dXJuIHRyYW5zZm9ybVByaW1pdGl2ZSh0eXAsIHZhbClcbn1cblxuZnVuY3Rpb24gY2FzdDxUPih2YWw6IGFueSwgdHlwOiBhbnkpOiBUIHtcbiAgcmV0dXJuIHRyYW5zZm9ybSh2YWwsIHR5cCwganNvblRvSlNQcm9wcylcbn1cblxuZnVuY3Rpb24gdW5jYXN0PFQ+KHZhbDogVCwgdHlwOiBhbnkpOiBhbnkge1xuICByZXR1cm4gdHJhbnNmb3JtKHZhbCwgdHlwLCBqc1RvSlNPTlByb3BzKVxufVxuXG5mdW5jdGlvbiBhKHR5cDogYW55KSB7XG4gIHJldHVybiB7IGFycmF5SXRlbXM6IHR5cCB9XG59XG5cbmZ1bmN0aW9uIHUoLi4udHlwczogYW55W10pIHtcbiAgcmV0dXJuIHsgdW5pb25NZW1iZXJzOiB0eXBzIH1cbn1cblxuZnVuY3Rpb24gbyhwcm9wczogYW55W10sIGFkZGl0aW9uYWw6IGFueSkge1xuICByZXR1cm4geyBwcm9wcywgYWRkaXRpb25hbCB9XG59XG5cbi8vIGZ1bmN0aW9uIG0oYWRkaXRpb25hbDogYW55KSB7XG4vLyAgIHJldHVybiB7IHByb3BzOiBbXSwgYWRkaXRpb25hbCB9XG4vLyB9XG5cbmZ1bmN0aW9uIHIobmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiB7IHJlZjogbmFtZSB9XG59XG5cbmNvbnN0IHR5cGVNYXA6IGFueSA9IHtcbiAgQWdlbmRhczogbyhcbiAgICBbeyBqc29uOiBcInJldW5pb25zXCIsIGpzOiBcInJldW5pb25zXCIsIHR5cDogYShyKFwiUmV1bmlvblwiKSkgfV0sXG4gICAgZmFsc2UsXG4gICksXG4gIFJldW5pb246IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcInNjaGVtYVZlcnNpb25cIiwganM6IFwic2NoZW1hVmVyc2lvblwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInhzaVR5cGVcIixcbiAgICAgICAganM6IFwieHNpVHlwZVwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCByKFwiUmV1bmlvblhzaVR5cGVcIikpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJ1aWRcIiwganM6IFwidWlkXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInRpbWVzdGFtcERlYnV0XCIsIGpzOiBcInRpbWVzdGFtcERlYnV0XCIsIHR5cDogRGF0ZSB9LFxuICAgICAgeyBqc29uOiBcInRpbWVzdGFtcEZpblwiLCBqczogXCJ0aW1lc3RhbXBGaW5cIiwgdHlwOiB1KHVuZGVmaW5lZCwgRGF0ZSkgfSxcbiAgICAgIHsganNvbjogXCJsaWV1XCIsIGpzOiBcImxpZXVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkxpZXVcIikpIH0sXG4gICAgICB7IGpzb246IFwiY3ljbGVEZVZpZVwiLCBqczogXCJjeWNsZURlVmllXCIsIHR5cDogcihcIkN5Y2xlRGVWaWVcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJkZW1hbmRldXJzXCIsXG4gICAgICAgIGpzOiBcImRlbWFuZGV1cnNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkRlbWFuZGV1cnNcIikpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJvcmdhbmVSZXVuaVJlZlwiLCBqczogXCJvcmdhbmVSZXVuaVJlZlwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInR5cGVSZXVuaW9uXCIsXG4gICAgICAgIGpzOiBcInR5cGVSZXVuaW9uXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHIoXCJUeXBlUmV1bmlvblwiKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInBhcnRpY2lwYW50c1wiLFxuICAgICAgICBqczogXCJwYXJ0aWNpcGFudHNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIlBhcnRpY2lwYW50c1wiKSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcInNlc3Npb25SZWZcIiwganM6IFwic2Vzc2lvblJlZlwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcIm91dmVydHVyZVByZXNzZVwiLFxuICAgICAgICBqczogXCJvdXZlcnR1cmVQcmVzc2VcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgZmFsc2UpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJvZGpcIiwganM6IFwib2RqXCIsIHR5cDogdSh1bmRlZmluZWQsIHIoXCJPZGpcIikpIH0sXG4gICAgICB7IGpzb246IFwiY29tcHRlUmVuZHVSZWZcIiwganM6IFwiY29tcHRlUmVuZHVSZWZcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJpZGVudGlmaWFudHNcIixcbiAgICAgICAganM6IFwiaWRlbnRpZmlhbnRzXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHIoXCJJZGVudGlmaWFudHNcIikpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJmb3JtYXRSZXVuaW9uXCIsXG4gICAgICAgIGpzOiBcImZvcm1hdFJldW5pb25cIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkZvcm1hdFJldW5pb25cIikpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJpbmZvc1JldW5pb25zSW50ZXJuYXRpb25hbGVcIixcbiAgICAgICAganM6IFwiaW5mb3NSZXVuaW9uc0ludGVybmF0aW9uYWxlXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHIoXCJJbmZvc1JldW5pb25zSW50ZXJuYXRpb25hbGVcIikpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJjYXB0YXRpb25WaWRlb1wiLFxuICAgICAgICBqczogXCJjYXB0YXRpb25WaWRlb1wiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCBmYWxzZSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcInZpc2lvQ29uZmVyZW5jZVwiLCBqczogXCJ2aXNpb0NvbmZlcmVuY2VcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBPZGo6IG8oXG4gICAgW1xuICAgICAge1xuICAgICAgICBqc29uOiBcImNvbnZvY2F0aW9uT2RqXCIsXG4gICAgICAgIGpzOiBcImNvbnZvY2F0aW9uT2RqXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIGEoXCJcIikpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJyZXN1bWVPZGpcIiwganM6IFwicmVzdW1lT2RqXCIsIHR5cDogdSh1bmRlZmluZWQsIGEoXCJcIikpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwicG9pbnRzT2RqXCIsXG4gICAgICAgIGpzOiBcInBvaW50c09kalwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCBhKHIoXCJQb2ludE9kalwiKSkpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBQb2ludE9kajogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwieHNpVHlwZVwiLCBqczogXCJ4c2lUeXBlXCIsIHR5cDogcihcIlBvaW50T2RqWHNpVHlwZVwiKSB9LFxuICAgICAgeyBqc29uOiBcInVpZFwiLCBqczogXCJ1aWRcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiY3ljbGVEZVZpZVwiLCBqczogXCJjeWNsZURlVmllXCIsIHR5cDogcihcIkN5Y2xlRGVWaWVcIikgfSxcbiAgICAgIHsganNvbjogXCJvYmpldFwiLCBqczogXCJvYmpldFwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJwcm9jZWR1cmVcIiwganM6IFwicHJvY2VkdXJlXCIsIHR5cDogdSh1bmRlZmluZWQsIHIoXCJQcm9jZWR1cmVcIikpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnNcIixcbiAgICAgICAganM6IFwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgYShcIlwiKSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcInR5cGVQb2ludE9kalwiLCBqczogXCJ0eXBlUG9pbnRPZGpcIiwgdHlwOiByKFwiVHlwZVBvaW50T2RqXCIpIH0sXG4gICAgICB7IGpzb246IFwiY29taXRlU2VjcmV0XCIsIGpzOiBcImNvbWl0ZVNlY3JldFwiLCB0eXA6IGZhbHNlIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwibmF0dXJlVHJhdmF1eE9kalwiLFxuICAgICAgICBqczogXCJuYXR1cmVUcmF2YXV4T2RqXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHIoXCJOYXR1cmVUcmF2YXV4T2RqXCIpKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwiZGF0ZUNvbmZQcmVzXCIsIGpzOiBcImRhdGVDb25mUHJlc1wiLCB0eXA6IHUodW5kZWZpbmVkLCBEYXRlKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImRhdGVMZXR0cmVNaW5pc3RyZVwiLFxuICAgICAgICBqczogXCJkYXRlTGV0dHJlTWluaXN0cmVcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgRGF0ZSksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIEN5Y2xlRGVWaWU6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImV0YXRcIiwganM6IFwiZXRhdFwiLCB0eXA6IHIoXCJFdGF0Q3ljbGVEZVZpZVwiKSB9LFxuICAgICAgeyBqc29uOiBcImNocm9ub1wiLCBqczogXCJjaHJvbm9cIiwgdHlwOiByKFwiQ2hyb25vXCIpIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgQ2hyb25vOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJjcmVhdGlvblwiLCBqczogXCJjcmVhdGlvblwiLCB0eXA6IERhdGUgfSxcbiAgICAgIHsganNvbjogXCJjbG90dXJlXCIsIGpzOiBcImNsb3R1cmVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgRGF0ZSkgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBEZW1hbmRldXJzOiBvKFxuICAgIFtcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJhY3RldXJzXCIsXG4gICAgICAgIGpzOiBcImFjdGV1cnNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgYShyKFwiRGVtYW5kZXVyQWN0ZXVyXCIpKSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcIm9yZ2FuZVwiLCBqczogXCJvcmdhbmVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkRlbWFuZGV1ck9yZ2FuZVwiKSkgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBEZW1hbmRldXJBY3RldXI6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcIm5vbVwiLCBqczogXCJub21cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJhY3RldXJSZWZcIiwganM6IFwiYWN0ZXVyUmVmXCIsIHR5cDogXCJcIiB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIERlbWFuZGV1ck9yZ2FuZTogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwibm9tXCIsIGpzOiBcIm5vbVwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJvcmdhbmVSZWZcIiwganM6IFwib3JnYW5lUmVmXCIsIHR5cDogXCJcIiB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIElkZW50aWZpYW50czogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwibnVtU2VhbmNlSm9cIiwganM6IFwibnVtU2VhbmNlSm9cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJpZEpvXCIsIGpzOiBcImlkSm9cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJxdWFudGllbWVcIiwganM6IFwicXVhbnRpZW1lXCIsIHR5cDogcihcIlF1YW50aWVtZVwiKSB9LFxuICAgICAgeyBqc29uOiBcImRhdGVTZWFuY2VcIiwganM6IFwiZGF0ZVNlYW5jZVwiLCB0eXA6IERhdGUgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBJbmZvc1JldW5pb25zSW50ZXJuYXRpb25hbGU6IG8oXG4gICAgW1xuICAgICAge1xuICAgICAgICBqc29uOiBcImVzdFJldW5pb25JbnRlcm5hdGlvbmFsZVwiLFxuICAgICAgICBqczogXCJlc3RSZXVuaW9uSW50ZXJuYXRpb25hbGVcIixcbiAgICAgICAgdHlwOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwibGlzdGVQYXlzXCIsIGpzOiBcImxpc3RlUGF5c1wiLCB0eXA6IHUodW5kZWZpbmVkLCBhKFwiXCIpKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImluZm9ybWF0aW9uc0NvbXBsZW1lbnRhaXJlc1wiLFxuICAgICAgICBqczogXCJpbmZvcm1hdGlvbnNDb21wbGVtZW50YWlyZXNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIiksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIExpZXU6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImNvZGVcIiwganM6IFwiY29kZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImxpYmVsbGVDb3VydFwiLCBqczogXCJsaWJlbGxlQ291cnRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJsaWJlbGxlTG9uZ1wiLCBqczogXCJsaWJlbGxlTG9uZ1wiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImxpZXVSZWZcIiwganM6IFwibGlldVJlZlwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFBhcnRpY2lwYW50czogbyhcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGpzb246IFwicGFydGljaXBhbnRzSW50ZXJuZXNcIixcbiAgICAgICAganM6IFwicGFydGljaXBhbnRzSW50ZXJuZXNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgYShyKFwiUGFydGljaXBhbnRJbnRlcm5lXCIpKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInBlcnNvbm5lc0F1ZGl0aW9ubmVlc1wiLFxuICAgICAgICBqczogXCJwZXJzb25uZXNBdWRpdGlvbm5lZXNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgYShyKFwiUGVyc29ubmVBdWRpdGlvbm5lZVwiKSkpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBQYXJ0aWNpcGFudEludGVybmU6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImFjdGV1clJlZlwiLCBqczogXCJhY3RldXJSZWZcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwicHJlc2VuY2VcIiwganM6IFwicHJlc2VuY2VcIiwgdHlwOiByKFwiUHJlc2VuY2VcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBQZXJzb25uZUF1ZGl0aW9ubmVlOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJ4c2lUeXBlXCIsIGpzOiBcInhzaVR5cGVcIiwgdHlwOiByKFwiUGVyc29ubmVBdWRpdGlvbm5lZVhzaVR5cGVcIikgfSxcbiAgICAgIHsganNvbjogXCJ1aWRcIiwganM6IFwidWlkXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImlkZW50XCIsIGpzOiBcImlkZW50XCIsIHR5cDogcihcIklkZW50XCIpIH0sXG4gICAgICB7IGpzb246IFwiZGF0ZU5haXNcIiwganM6IFwiZGF0ZU5haXNcIiwgdHlwOiB1KHVuZGVmaW5lZCwgRGF0ZSkgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBJZGVudDogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwiY2l2XCIsIGpzOiBcImNpdlwiLCB0eXA6IHIoXCJDaXZcIikgfSxcbiAgICAgIHsganNvbjogXCJwcmVub21cIiwganM6IFwicHJlbm9tXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcIm5vbVwiLCBqczogXCJub21cIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiYWxwaGFcIiwganM6IFwiYWxwaGFcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJ0cmlncmFtbWVcIiwganM6IFwidHJpZ3JhbW1lXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgUmV1bmlvblhzaVR5cGU6IFtcbiAgICBcInJldW5pb25Db21taXNzaW9uX3R5cGVcIixcbiAgICBcInJldW5pb25Jbml0UGFybGVtZW50YWlyZV90eXBlXCIsXG4gICAgXCJzZWFuY2VfdHlwZVwiLFxuICBdLFxuICBQb2ludE9kalhzaVR5cGU6IFtcInBvZGpSZXVuaW9uX3R5cGVcIiwgXCJwb2RqU2VhbmNlQ29uZlByZXNfdHlwZVwiXSxcbiAgRXRhdEN5Y2xlRGVWaWU6IFtcIkFubnVsw6lcIiwgXCJDb25maXJtw6lcIiwgXCJFdmVudHVlbFwiLCBcIlN1cHByaW3DqVwiXSxcbiAgTmF0dXJlVHJhdmF1eE9kajogW1wiT0RKUFJcIiwgXCJPREpTTlwiXSxcbiAgUHJvY2VkdXJlOiBbXG4gICAgXCJkaXNjdXNzaW9uIGfDqW7DqXJhbGUgY29tbXVuZVwiLFxuICAgIFwicHJvY8OpZHVyZSBkJ2V4YW1lbiBzaW1wbGlmacOpZS1BcnRpY2xlIDEwM1wiLFxuICAgIFwicHJvY8OpZHVyZSBkJ2V4YW1lbiBzaW1wbGlmacOpZS1BcnRpY2xlIDEwNlwiLFxuICAgIFwicHJvY8OpZHVyZSBkJ2V4YW1lbiBzaW1wbGlmacOpZS1BcnRpY2xlIDEwN1wiLFxuICAgIFwicHJvY8OpZHVyZSBkZSBsw6lnaXNsYXRpb24gZW4gY29tbWlzc2lvbi1BcnRpY2xlIDEwNy0xXCIsXG4gIF0sXG4gIFR5cGVQb2ludE9kajogW1xuICAgIFwiQW1lbmRlbWVudHMgKEFydC4gODgpXCIsXG4gICAgXCJBbWVuZGVtZW50cyAoQXJ0LiA5MSlcIixcbiAgICBcIkF1ZGl0aW9uXCIsXG4gICAgXCJBdWRpdGlvbiBtaW5pc3RyZVwiLFxuICAgIFwiQXVkaXRpb24gbWluaXN0cmUgb3V2ZXJ0ZSDDoCBsYSBwc