/*!***************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/main.css ***!
  \***************************************************************************************************************/
@import url(https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&family=Roboto:ital,wght@0,300;0,400;0,500;0,700;0,900;1,300;1,400;1,500;1,700;1,900&display=swap);
/*!**************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/app.css ***!
  \**************************************************************************************************************/
/* Document
 * ========================================================================== */

:root {
    --color-dark-grey: #181823;
    --color-khaki: #A6A14E;
    --color-dark-purple: #473357;
    --color-light-purple: #4D4D70;
    --color-light-grey: #D9D9D9;
    --color-dark-rose: #A75F6D;
    --color-dark-cyan: #2E4D59;
}

/**
 * Add border box sizing in all browsers (opinionated).
 */

 *,
 ::before,
 ::after {
   box-sizing: border-box;
 }
 
 /**
  * 1. Add text decoration inheritance in all browsers (opinionated).
  * 2. Add vertical alignment inheritance in all browsers (opinionated).
  */
 
 ::before,
 ::after {
   text-decoration: inherit; /* 1 */
   vertical-align: inherit; /* 2 */
 }
 
 /**
  * 1. Use the default cursor in all browsers (opinionated).
  * 2. Change the line height in all browsers (opinionated).
  * 3. Use a 4-space tab width in all browsers (opinionated).
  * 4. Remove the grey highlight on links in iOS (opinionated).
  * 5. Prevent adjustments of font size after orientation changes in
  *    IE on Windows Phone and in iOS.
  * 6. Breaks words to prevent overflow in all browsers (opinionated).
  */
 
 html {
   cursor: default; /* 1 */
   line-height: 1.5; /* 2 */
   -moz-tab-size: 4; /* 3 */
   tab-size: 4; /* 3 */
   -webkit-tap-highlight-color: transparent /* 4 */;
   -ms-text-size-adjust: 100%; /* 5 */
   -webkit-text-size-adjust: 100%; /* 5 */
   word-break: break-word; /* 6 */
 }
 
 /* Sections
  * ========================================================================== */
 
 /**
  * Remove the margin in all browsers (opinionated).
  */
 
 body {
   margin: 0;
 }

 html, body{
    -ms-overflow-style: none;  /* IE and Edge */
    scrollbar-width: none;  /* Firefox */
 }

::-webkit-scrollbar {
    display: none;
}
 
 /**
  * Correct the font size and margin on `h1` elements within `section` and
  * `article` contexts in Chrome, Edge, Firefox, and Safari.
  */
 
 h1 {
   font-size: 2em;
   margin: 0.67em 0; 
 }
 
 /* Grouping content
  * ========================================================================== */

li{
    list-style: none;
}
 
 /**
  * Remove the margin on nested lists in Chrome, Edge, IE, and Safari.
  */
 
 dl dl,
 dl ol,
 dl ul,
 ol dl,
 ul dl {
   margin: 0;
 }
 
 /**
  * Remove the margin on nested lists in Edge 18- and IE.
  */
 
 ol ol,
 ol ul,
 ul ol,
 ul ul {
   margin: 0;
 }
 
 /**
  * 1. Add the correct sizing in Firefox.
  * 2. Show the overflow in Edge 18- and IE.
  */
 
 hr {
   height: 0; /* 1 */
   overflow: visible; /* 2 */
 }
 
 /**
  * Add the correct display in IE.
  */
 
 main {
   display: block;
 }
 
 /**
  * Remove the list style on navigation lists in all browsers (opinionated).
  */
 
 nav ol,
 nav ul {
   list-style: none;
   padding: 0;
 }
 
 /**
  * 1. Correct the inheritance and scaling of font size in all browsers.
  * 2. Correct the odd `em` font sizing in all browsers.
  */
 
 pre {
   font-family: monospace, monospace; /* 1 */
   font-size: 1em; /* 2 */
 }
 
 /* Text-level semantics
  * ========================================================================== */
 
 /**
  * Remove the gray background on active links in IE 10.
  */
 
 a {
   background-color: transparent;
   color: inherit;
   text-transform: inherit;
 }
 
 /**
  * Add the correct text decoration in Edge 18-, IE, and Safari.
  */
 
 abbr[title] {
   text-decoration: underline;
   text-decoration: underline dotted;
 }
 
 /**
  * Add the correct font weight in Chrome, Edge, and Safari.
  */
 
 b,
 strong {
   font-weight: bolder;
 }
 
 /**
  * 1. Correct the inheritance and scaling of font size in all browsers.
  * 2. Correct the odd `em` font sizing in all browsers.
  */
 
 code,
 kbd,
 samp {
   font-family: monospace, monospace; /* 1 */
   font-size: 1em; /* 2 */
 }
 
 /**
  * Add the correct font size in all browsers.
  */
 
 small {
   font-size: 80%;
 }
 
 /* Embedded content
  * ========================================================================== */
 
 /*
  * Change the alignment on media elements in all browsers (opinionated).
  */
 
 audio,
 canvas,
 iframe,
 img,
 svg,
 video {
   vertical-align: middle;
 }
 
 /**
  * Add the correct display in IE 9-.
  */
 
 audio,
 video {
   display: inline-block;
 }
 
 /**
  * Add the correct display in iOS 4-7.
  */
 
 audio:not([controls]) {
   display: none;
   height: 0;
 }
 
 /**
  * Remove the border on iframes in all browsers (opinionated).
  */
 
 iframe {
   border-style: none;
 }
 
 /**
  * Remove the border on images within links in IE 10-.
  */
 
 img {
   border-style: none;
 }
 
 /**
  * Change the fill color to match the text color in all browsers (opinionated).
  */
 
 svg:not([fill]) {
   fill: currentColor;
 }
 
 /**
  * Hide the overflow in IE.
  */
 
 svg:not(:root) {
   overflow: hidden;
 }
 
 /* Tabular data
  * ========================================================================== */
 
 /**
  * Collapse border spacing in all browsers (opinionated).
  */
 
 table {
   border-collapse: collapse;
 }
 
 /* Forms
  * ========================================================================== */
 
 /**
  * Remove the margin on controls in Safari.
  */
 
 button,
 input,
 select {
   margin: 0;
 }
 
 /**
  * 1. Show the overflow in IE.
  * 2. Remove the inheritance of text transform in Edge 18-, Firefox, and IE.
  */
 
 button {
   overflow: visible; /* 1 */
   text-transform: none; /* 2 */
 }
 
 /**
  * Correct the inability to style buttons in iOS and Safari.
  */
 
 button,
 [type="button"],
 [type="reset"],
 [type="submit"] {
   -webkit-appearance: button;
 }
 
 /**
  * 1. Change the inconsistent appearance in all browsers (opinionated).
  * 2. Correct the padding in Firefox.
  */
 
 fieldset {
   border: 1px solid #a0a0a0; /* 1 */
   padding: 0.35em 0.75em 0.625em; /* 2 */
 }
 
 /**
  * Show the overflow in Edge 18- and IE.
  */
 
 input {
   overflow: visible;
 }
 
 /**
  * 1. Correct the text wrapping in Edge 18- and IE.
  * 2. Correct the color inheritance from `fieldset` elements in IE.
  */
 
 legend {
   color: inherit; /* 2 */
   display: table; /* 1 */
   max-width: 100%; /* 1 */
   white-space: normal; /* 1 */
 }
 
 /**
  * 1. Add the correct display in Edge 18- and IE.
  * 2. Add the correct vertical alignment in Chrome, Edge, and Firefox.
  */
 
 progress {
   display: inline-block; /* 1 */
   vertical-align: baseline; /* 2 */
 }
 
 /**
  * Remove the inheritance of text transform in Firefox.
  */
 
 select {
   text-transform: none;
 }
 
 /**
  * 1. Remove the margin in Firefox and Safari.
  * 2. Remove the default vertical scrollbar in IE.
  * 3. Change the resize direction in all browsers (opinionated).
  */
 
 textarea {
   margin: 0; /* 1 */
   overflow: auto; /* 2 */
   resize: vertical; /* 3 */
 }
 
 /**
  * Remove the padding in IE 10-.
  */
 
 [type="checkbox"],
 [type="radio"] {
   padding: 0;
 }
 
 /**
  * 1. Correct the odd appearance in Chrome, Edge, and Safari.
  * 2. Correct the outline style in Safari.
  */
 
 [type="search"] {
   -webkit-appearance: textfield; /* 1 */
   outline-offset: -2px; /* 2 */
 }
 
 /**
  * Correct the cursor style of increment and decrement buttons in Safari.
  */
 
 ::-webkit-inner-spin-button,
 ::-webkit-outer-spin-button {
   height: auto;
 }
 
 /**
  * Correct the text style of placeholders in Chrome, Edge, and Safari.
  */
 
 ::-webkit-input-placeholder {
   color: inherit;
   opacity: 0.54;
 }
 
 /**
  * Remove the inner padding in Chrome, Edge, and Safari on macOS.
  */
 
 ::-webkit-search-decoration {
   -webkit-appearance: none;
 }
 
 /**
  * 1. Correct the inability to style upload buttons in iOS and Safari.
  * 2. Change font properties to `inherit` in Safari.
  */
 
 ::-webkit-file-upload-button {
   -webkit-appearance: button; /* 1 */
   font: inherit; /* 2 */
 }
 
 /**
  * Remove the inner border and padding of focus outlines in Firefox.
  */
 
 ::-moz-focus-inner {
   border-style: none;
   padding: 0;
 }
 
 /**
  * Restore the focus outline styles unset by the previous rule in Firefox.
  */
 
 :-moz-focusring {
   outline: 1px dotted ButtonText;
 }
 
 /**
  * Remove the additional :invalid styles in Firefox.
  */
 
 :-moz-ui-invalid {
   box-shadow: none;
 }
 
 /* Interactive
  * ========================================================================== */
 
 /*
  * Add the correct display in Edge 18- and IE.
  */
 
 details {
   display: block;
 }
 
 /*
  * Add the correct styles in Edge 18-, IE, and Safari.
  */
 
 dialog {
   background-color: white;
   border: solid;
   color: black;
   display: block;
   height: -moz-fit-content;
   height: -webkit-fit-content;
   height: fit-content;
   left: 0;
   margin: auto;
   padding: 1em;
   position: absolute;
   right: 0;
   width: -moz-fit-content;
   width: -webkit-fit-content;
   width: fit-content;
 }
 
 dialog:not([open]) {
   display: none;
 }
 
 /*
  * Add the correct display in all browsers.
  */
 
 summary {
   display: list-item;
 }
 
 /* Scripting
  * ========================================================================== */
 
 /**
  * Add the correct display in IE 9-.
  */
 
 canvas {
   display: inline-block;
 }
 
 /**
  * Add the correct display in IE.
  */
 
 template {
   display: none;
 }
 
 /* User interaction
  * ========================================================================== */
 
 /*
  * 1. Remove the tapping delay in IE 10.
  * 2. Remove the tapping delay on clickable elements
       in all browsers (opinionated).
  */
 
 a,
 area,
 button,
 input,
 label,
 select,
 summary,
 textarea,
 [tabindex] {
   -ms-touch-action: manipulation; /* 1 */
   touch-action: manipulation; /* 2 */
 }
 
 /**
  * Add the correct display in IE 10-.
  */
 
 [hidden] {
   display: none;
 }
 
 /* Accessibility
  * ========================================================================== */
 
 /**
  * Change the cursor on busy elements in all browsers (opinionated).
  */
 
 [aria-busy="true"] {
   cursor: progress;
 }
 
 /*
  * Change the cursor on control elements in all browsers (opinionated).
  */
 
 [aria-controls] {
   cursor: pointer;
 }
 
 /*
  * Change the cursor on disabled, not-editable, or otherwise
  * inoperable elements in all browsers (opinionated).
  */
 
 [aria-disabled="true"],
 [disabled] {
   cursor: not-allowed;
 }
 
 /*
  * Change the display on visually hidden accessible elements
  * in all browsers (opinionated).
  */
 
 [aria-hidden="false"][hidden] {
   display: initial;
 }
 
 [aria-hidden="false"][hidden]:not(:focus) {
   clip: rect(0, 0, 0, 0);
   position: absolute;
 }
 
/*!*******************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/main.css (1) ***!
  \*******************************************************************************************************************/
body{position: relative;font-family: 'Roboto', sans-serif;color: #ffffff;}
.alert{opacity: 1;color: #ffffff;position: absolute;width: 100%;text-align: center;top: 0;animation: disapear 2s linear;animation-fill-mode: forwards;}
.page-wrapper{height: 100vh;overflow: hidden;display: flex;align-items: center;}
.container{position: relative;width: 100%;max-width: 1440px;margin: auto;}
.flex{display: flex;justify-content: space-between;align-items: center;}
.summary{line-height: 27px;text-align: justify;letter-spacing: 1px;font-size: 1.25em;}
.summary .highlight{text-shadow: 0 5px 15px rgba(0, 0, 0, 0.8);}

#back-to-top{width: 25px;min-height: 25px;cursor: pointer;transition: transform 0.2s linear;}
#back-to-top:hover{transform: translate( -2px, -2px );}

header{position: fixed;top: 0;z-index: 2;width: 100vw;color: #ffffff;background-color: transparent;}
header .container{display: flex;align-items: center;justify-content: space-between;}
header .container :is(.brand, .brand-mobile){font-family: 'JetBrains Mono', sans-serif;font-weight: 900;font-size : 3.4em;line-height: 48px;}
header .container :is(.brand, .brand-mobile) a{text-decoration: none;}
header .container .brand-mobile{display: none;}
header .container menu {display: flex;align-items: center;justify-content: space-around;min-width: 50%;font-size: 20px;}
header .container menu .contact{cursor: pointer;color: var(--color-dark-grey);padding: 17px 36px ;border-radius: 50px;background-color: var(--color-khaki);transition: box-shadow 0.3s ease;}
header .container menu li{display: flex;align-items: center;gap: 5px;}
header .container menu li span{display: inline-block;width: 10px;height: 10px;border-radius: 50%;background-color: transparent;}
header .container menu li:hover{animation: floating 10s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;}
header .container menu .contact:hover{box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);}
footer{display: flex;justify-content: space-between;width: 100vw;position: fixed;bottom: 0;font-family: 'Roboto', sans-serif;color: #ffffff;}

#main{position: relative;display: flex;align-items: center;background-color: var(--color-dark-grey);}
#experience{background-color: var(--color-light-purple);}
#competences{background-color: var(--color-dark-rose);}
#portfolio{background-color: var(--color-dark-cyan);}
#reseaux{background-color: var(--color-khaki);}

/* BURGER MENU */
#burger-menu{display: none; position: fixed; right: 0; width: 50vw; z-index: 10;}
#burger-menu .hide{display: none;}
#burger-menu nav{position: absolute; width: 100%; background-color: var(--color-khaki); min-height: 100vh; padding-top: 1.25em;}
#burger-menu nav ol{margin: 0;}
#burger-menu nav ol li{padding: 0.62em 1.25em; text-align: right; font-size: 1.25em;}
#burger-menu nav ol li a{text-decoration: none;}
#burger-menu .burger{cursor: pointer;width: 40px;height: 40px;margin: 1.25em 1.25em 1.25em auto;}
#burger-menu .close-burger{cursor: pointer;width: 35px;height: 35px;margin: 0 1.25em 1.25em auto;}

/* MAIN */
#main h2{font-family: "JetBrains Mono", sans-serif;color : #ffffff;font-size: 12.5em;font-weight: 400;white-space: nowrap;position: relative;user-select: none;}
#main .scroll{position: absolute;bottom: 70px;left: 50%; transform: translate(-50%);animation: bounce 2s infinite;}

/* EXPERIENCES */

#experience{flex-direction: column;}
#experience .timeline{user-select: none;scroll-behavior: smooth;scrollbar-width: none;cursor: grab;overflow: auto;white-space: nowrap;position: relative;background: linear-gradient(45deg, #473357 1%, transparent 1%, transparent 49%, #473357 49%, #473357 51%, transparent 51%, transparent 99%, #473357 99%);background-size: 6px 6px;background-position: 50px 50px;}
#experience .timeline::before {content: "";display: inline-block;height: 1px;width: 50vw;}
#experience .timeline::after {content: "";display: inline-block;height: 1px;width: 50vw;}
#experience .controls{width: fit-content;display: flex;margin: 30px auto 10px;}
#experience .controls .scroll{width: 30px;max-height: 30px;margin: 0 30px;cursor: pointer;user-select: none;transition: transform 0.2s ease-in-out;}
#experience .controls .scroll.left:hover{transform: translate(-5px);}
#experience .controls .scroll.right:hover{transform: translate(5px);}
#experience .summaries{min-height: 15vh;}
#experience .experience-summary{user-select: none;width: 50%;margin: auto;}
#experience .experience-summary:not(:first-child){display: none;}
#experience .experience-summary p span{font-weight: 500;text-decoration: underline;}
#experience .timeline .experience-name{user-select: none;display: inline-block;text-align: center;}
#experience .timeline .experience-name.odd:first-child{background-image: linear-gradient(to right, transparent 1%, #181823 50%);}
#experience .timeline .experience-name.odd:not(:first-child){background-color: var(--color-dark-grey);}
#experience .timeline .experience-name.even{background-color: var(--color-dark-purple);}

/* COMPETENCES */

#competences .comp-container{display: flex;align-items: center;margin: 0 0 0 280px;gap : 34px;}
#competences .comp-container.hide{display: none;}
#competences .comp-container .arrow{transition: transform 0.3s ease-in-out;}
#competences .comp-container .arrow.unfold{transform: rotate(90deg);}
#competences .comp-container img{cursor: pointer;}
#competences .comp-container p.main-skill-title{text-transform: uppercase;font-size: 2em;}
#competences .sub-comp{display: flex;justify-content: left;gap: 1.7em;width: 100%;}
#competences .sub-comp > div{margin: 0 10px;}
#competences .sub-comp-container{display: none;opacity: 0;transition: all 1s ease-in-out;}
#competences .sub-comp-container.show{display: block;opacity: 1;transition: all 1s ease-in-out;}
#competences .sub-comp-container .rate{display: flex;align-items: center;}
#competences :is(.comp-summary, .sub-comp) p{font-size: 1.25em;font-weight: 400;line-height: 27px;text-align: justify;}

/* PORTFOLIO */

#portfolio .project-container{display: flex;align-items: center;margin: 0 0 0 280px;gap : 34px;}
#portfolio .project-container.hide{display: none;}
#portfolio .project-container .arrow{transition: transform 0.3s ease-in-out;}
#portfolio .project-container .arrow.unfold{transform: rotate(90deg);}
#portfolio .project-container img{cursor: pointer;}
#portfolio .project-container p.main-skill-title{text-transform: uppercase;font-size: 2em;}
#portfolio .project-container p.main-skill-title span{text-transform: none;}
#portfolio .summary-project-container{display: none;opacity: 0;transition: all 1s ease-in-out;}
#portfolio .summary-project-container.show{display: block;opacity: 1;transition: all 1s ease-in-out;}
#portfolio .summary-project-container .rate{display: flex;align-items: center;}
#portfolio .project-summary p{font-size: 1.25em;font-weight: 400;line-height: 27px;text-align: justify;}

/* MODALE */

#modal{position: relative;width: 950px;padding: 47px 54px 37px;border: inherit;background-color: var(--color-dark-grey);color: #ffffff;}
#modal::backdrop{background: rgba(0, 0, 0, 0.75);}
#modal :is(.form-block, .submit-block) > div{width: 100%;display: flex;justify-content: space-between;margin-block: 6.5px;}
#modal .disclaimer > p{font-size: 0.625em;font-weight: 300;text-align: right;line-height: 1.69em;margin-block: 5px;}
#modal .close-modal{cursor: pointer;position: absolute;right: 15px;top: 10px;width: 25px;height: 25px;}
#modal :is(input, textarea){font-family: 'Roboto', sans-serif;width: 75%;padding: 12px 20px;box-sizing: border-box;border-radius: 4px;background-color: #f8f8f8;font-size: 16px;}
#modal textarea{height: 150px;resize: none;}
#modal button{background-color: var(--color-khaki);border: none;color: white;padding: 15px 32px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;margin-left: auto;cursor: pointer;}

@media screen and (max-width: 1440px) {
    .container{padding-inline: 1em;}
}
@media screen and (max-width: 1220px){
    header .container menu{display: none;}
    header .container .brand{display: none;}
    header .container .brand-mobile{display: block; margin-top: 20px;}
    .summary{font-size: 1em; line-height: 17px;}

    #burger-menu{display: block;}
    
    #competences .comp-container{margin: 0;}
    #competences .comp-container .arrow{width: 36px;}
    #competences .comp-container p.main-skill-title{margin-block: 10px;}
    #competences .sub-comp{display: grid; grid-template-columns: 25% 25% 25% 25%;grid-column-gap:20px;grid-row-gap: 0px; align-items: center;}
    #competences .sub-comp p{margin-block: 10px;}

    #portfolio .project-container{margin: 0;}
    #portfolio .project-container .arrow{width: 36px;}
    #portfolio .project-container p.main-skill-title{margin-block: 10px;}
    #portfolio .summary-project-container p{margin-block: 10px;}

    #reseaux .container.flex{justify-content: initial; flex-direction: column; gap: 10px}
    #reseaux .container a img{width: 350px;}
}
@media screen and (max-width: 440px){
    #burger-menu{ width: 75vw;}
    #modal{padding: 0 1em;}
    #modal form{margin-top: 2.5em;}
    #modal :is(.form-block, .submit-block) > div{flex-direction: column; align-items: center;}
    #experience .experience-summary {width: 100%;}

    #competences .sub-comp{display: grid; grid-template-columns: 50% 25%;grid-column-gap:10px;grid-row-gap: 0px; align-items: center;}

    #portfolio .project-container{gap: 14px;}
    #portfolio .project-container p.main-skill-title{font-size: 1.25em;}

    #reseaux .container a img {width: 250px;}
}


@keyframes bounce {
    0%, 20%, 50%, 80%, 100% {
        transform: translateY(0);
    }
    40% {
        transform: translateY(-20px);
    }
    60% {
        transform: translateY(-10px);
    }
}

@keyframes floating {
    0% { transform: translate(0px, 0px);}
    25% { transform: translate(3px, 6px); }
    50% { transform: translate(6px, 3px); }
    75% { transform: translate(4px, 6px);}
    100% { transform: translate(0px, 0px); }
}

@keyframes disapear {
    0% { opacity: 1;}
    100% { opacity: 0;}
}

/*!****************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/admin.css ***!
  \****************************************************************************************************************/
.admin{background-color: black;}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxNQUFNLDhCQUE4QixFQUFFO0lBQ3RDLE1BQU0sOEJBQThCLEVBQUU7SUFDdEMsTUFBTSw4QkFBOEIsQ0FBQztJQUNyQyxPQUFPLDhCQUE4QixFQUFFO0FBQzNDOztBQUVBO0lBQ0ksS0FBSyxVQUFVLENBQUM7SUFDaEIsT0FBTyxVQUFVLENBQUM7QUFDdEI7Ozs7O0FDektBLE9BQU8sdUJBQXVCLENBQUMsQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9zdHlsZXMvYXBwLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL21haW4uY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zdHlsZXMvYWRtaW4uY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIERvY3VtZW50XG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG46cm9vdCB7XG4gICAgLS1jb2xvci1kYXJrLWdyZXk6ICMxODE4MjM7XG4gICAgLS1jb2xvci1raGFraTogI0E2QTE0RTtcbiAgICAtLWNvbG9yLWRhcmstcHVycGxlOiAjNDczMzU3O1xuICAgIC0tY29sb3ItbGlnaHQtcHVycGxlOiAjNEQ0RDcwO1xuICAgIC0tY29sb3ItbGlnaHQtZ3JleTogI0Q5RDlEOTtcbiAgICAtLWNvbG9yLWRhcmstcm9zZTogI0E3NUY2RDtcbiAgICAtLWNvbG9yLWRhcmstY3lhbjogIzJFNEQ1OTtcbn1cblxuLyoqXG4gKiBBZGQgYm9yZGVyIGJveCBzaXppbmcgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKi9cblxuICosXG4gOjpiZWZvcmUsXG4gOjphZnRlciB7XG4gICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuIH1cbiBcbiAvKipcbiAgKiAxLiBBZGQgdGV4dCBkZWNvcmF0aW9uIGluaGVyaXRhbmNlIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAqIDIuIEFkZCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW5oZXJpdGFuY2UgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gICovXG4gXG4gOjpiZWZvcmUsXG4gOjphZnRlciB7XG4gICB0ZXh0LWRlY29yYXRpb246IGluaGVyaXQ7IC8qIDEgKi9cbiAgIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0OyAvKiAyICovXG4gfVxuIFxuIC8qKlxuICAqIDEuIFVzZSB0aGUgZGVmYXVsdCBjdXJzb3IgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gICogMi4gQ2hhbmdlIHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgKiAzLiBVc2UgYSA0LXNwYWNlIHRhYiB3aWR0aCBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgKiA0LiBSZW1vdmUgdGhlIGdyZXkgaGlnaGxpZ2h0IG9uIGxpbmtzIGluIGlPUyAob3BpbmlvbmF0ZWQpLlxuICAqIDUuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW5cbiAgKiAgICBJRSBvbiBXaW5kb3dzIFBob25lIGFuZCBpbiBpT1MuXG4gICogNi4gQnJlYWtzIHdvcmRzIHRvIHByZXZlbnQgb3ZlcmZsb3cgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gICovXG4gXG4gaHRtbCB7XG4gICBjdXJzb3I6IGRlZmF1bHQ7IC8qIDEgKi9cbiAgIGxpbmUtaGVpZ2h0OiAxLjU7IC8qIDIgKi9cbiAgIC1tb3otdGFiLXNpemU6IDQ7IC8qIDMgKi9cbiAgIHRhYi1zaXplOiA0OyAvKiAzICovXG4gICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50IC8qIDQgKi87XG4gICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogNSAqL1xuICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiA1ICovXG4gICB3b3JkLWJyZWFrOiBicmVhay13b3JkOyAvKiA2ICovXG4gfVxuIFxuIC8qIFNlY3Rpb25zXG4gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbiBcbiAvKipcbiAgKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgKi9cbiBcbiBib2R5IHtcbiAgIG1hcmdpbjogMDtcbiB9XG5cbiBodG1sLCBib2R5e1xuICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgIC8qIElFIGFuZCBFZGdlICovXG4gICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOyAgLyogRmlyZWZveCAqL1xuIH1cblxuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbiBcbiAvKipcbiAgKiBDb3JyZWN0IHRoZSBmb250IHNpemUgYW5kIG1hcmdpbiBvbiBgaDFgIGVsZW1lbnRzIHdpdGhpbiBgc2VjdGlvbmAgYW5kXG4gICogYGFydGljbGVgIGNvbnRleHRzIGluIENocm9tZSwgRWRnZSwgRmlyZWZveCwgYW5kIFNhZmFyaS5cbiAgKi9cbiBcbiBoMSB7XG4gICBmb250LXNpemU6IDJlbTtcbiAgIG1hcmdpbjogMC42N2VtIDA7IFxuIH1cbiBcbiAvKiBHcm91cGluZyBjb250ZW50XG4gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxubGl7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbiBcbiAvKipcbiAgKiBSZW1vdmUgdGhlIG1hcmdpbiBvbiBuZXN0ZWQgbGlzdHMgaW4gQ2hyb21lLCBFZGdlLCBJRSwgYW5kIFNhZmFyaS5cbiAgKi9cbiBcbiBkbCBkbCxcbiBkbCBvbCxcbiBkbCB1bCxcbiBvbCBkbCxcbiB1bCBkbCB7XG4gICBtYXJnaW46IDA7XG4gfVxuIFxuIC8qKlxuICAqIFJlbW92ZSB0aGUgbWFyZ2luIG9uIG5lc3RlZCBsaXN0cyBpbiBFZGdlIDE4LSBhbmQgSUUuXG4gICovXG4gXG4gb2wgb2wsXG4gb2wgdWwsXG4gdWwgb2wsXG4gdWwgdWwge1xuICAgbWFyZ2luOiAwO1xuIH1cbiBcbiAvKipcbiAgKiAxLiBBZGQgdGhlIGNvcnJlY3Qgc2l6aW5nIGluIEZpcmVmb3guXG4gICogMi4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZSAxOC0gYW5kIElFLlxuICAqL1xuIFxuIGhyIHtcbiAgIGhlaWdodDogMDsgLyogMSAqL1xuICAgb3ZlcmZsb3c6IHZpc2libGU7IC8qIDIgKi9cbiB9XG4gXG4gLyoqXG4gICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUuXG4gICovXG4gXG4gbWFpbiB7XG4gICBkaXNwbGF5OiBibG9jaztcbiB9XG4gXG4gLyoqXG4gICogUmVtb3ZlIHRoZSBsaXN0IHN0eWxlIG9uIG5hdmlnYXRpb24gbGlzdHMgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gICovXG4gXG4gbmF2IG9sLFxuIG5hdiB1bCB7XG4gICBsaXN0LXN0eWxlOiBub25lO1xuICAgcGFkZGluZzogMDtcbiB9XG4gXG4gLyoqXG4gICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAgKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gICovXG4gXG4gcHJlIHtcbiAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLyogMSAqL1xuICAgZm9udC1zaXplOiAxZW07IC8qIDIgKi9cbiB9XG4gXG4gLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuIFxuIC8qKlxuICAqIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAgKi9cbiBcbiBhIHtcbiAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgY29sb3I6IGluaGVyaXQ7XG4gICB0ZXh0LXRyYW5zZm9ybTogaW5oZXJpdDtcbiB9XG4gXG4gLyoqXG4gICogQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBFZGdlIDE4LSwgSUUsIGFuZCBTYWZhcmkuXG4gICovXG4gXG4gYWJiclt0aXRsZV0ge1xuICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XG4gfVxuIFxuIC8qKlxuICAqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gICovXG4gXG4gYixcbiBzdHJvbmcge1xuICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbiB9XG4gXG4gLyoqXG4gICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAgKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gICovXG4gXG4gY29kZSxcbiBrYmQsXG4gc2FtcCB7XG4gICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IC8qIDEgKi9cbiAgIGZvbnQtc2l6ZTogMWVtOyAvKiAyICovXG4gfVxuIFxuIC8qKlxuICAqIEFkZCB0aGUgY29ycmVjdCBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICAqL1xuIFxuIHNtYWxsIHtcbiAgIGZvbnQtc2l6ZTogODAlO1xuIH1cbiBcbiAvKiBFbWJlZGRlZCBjb250ZW50XG4gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbiBcbiAvKlxuICAqIENoYW5nZSB0aGUgYWxpZ25tZW50IG9uIG1lZGlhIGVsZW1lbnRzIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAqL1xuIFxuIGF1ZGlvLFxuIGNhbnZhcyxcbiBpZnJhbWUsXG4gaW1nLFxuIHN2ZyxcbiB2aWRlbyB7XG4gICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuIH1cbiBcbiAvKipcbiAgKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS5cbiAgKi9cbiBcbiBhdWRpbyxcbiB2aWRlbyB7XG4gICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gfVxuIFxuIC8qKlxuICAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGlPUyA0LTcuXG4gICovXG4gXG4gYXVkaW86bm90KFtjb250cm9sc10pIHtcbiAgIGRpc3BsYXk6IG5vbmU7XG4gICBoZWlnaHQ6IDA7XG4gfVxuIFxuIC8qKlxuICAqIFJlbW92ZSB0aGUgYm9yZGVyIG9uIGlmcmFtZXMgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gICovXG4gXG4gaWZyYW1lIHtcbiAgIGJvcmRlci1zdHlsZTogbm9uZTtcbiB9XG4gXG4gLyoqXG4gICogUmVtb3ZlIHRoZSBib3JkZXIgb24gaW1hZ2VzIHdpdGhpbiBsaW5rcyBpbiBJRSAxMC0uXG4gICovXG4gXG4gaW1nIHtcbiAgIGJvcmRlci1zdHlsZTogbm9uZTtcbiB9XG4gXG4gLyoqXG4gICogQ2hhbmdlIHRoZSBmaWxsIGNvbG9yIHRvIG1hdGNoIHRoZSB0ZXh0IGNvbG9yIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAqL1xuIFxuIHN2Zzpub3QoW2ZpbGxdKSB7XG4gICBmaWxsOiBjdXJyZW50Q29sb3I7XG4gfVxuIFxuIC8qKlxuICAqIEhpZGUgdGhlIG92ZXJmbG93IGluIElFLlxuICAqL1xuIFxuIHN2Zzpub3QoOnJvb3QpIHtcbiAgIG92ZXJmbG93OiBoaWRkZW47XG4gfVxuIFxuIC8qIFRhYnVsYXIgZGF0YVxuICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4gXG4gLyoqXG4gICogQ29sbGFwc2UgYm9yZGVyIHNwYWNpbmcgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gICovXG4gXG4gdGFibGUge1xuICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiB9XG4gXG4gLyogRm9ybXNcbiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuIFxuIC8qKlxuICAqIFJlbW92ZSB0aGUgbWFyZ2luIG9uIGNvbnRyb2xzIGluIFNhZmFyaS5cbiAgKi9cbiBcbiBidXR0b24sXG4gaW5wdXQsXG4gc2VsZWN0IHtcbiAgIG1hcmdpbjogMDtcbiB9XG4gXG4gLyoqXG4gICogMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gICogMi4gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlIDE4LSwgRmlyZWZveCwgYW5kIElFLlxuICAqL1xuIFxuIGJ1dHRvbiB7XG4gICBvdmVyZmxvdzogdmlzaWJsZTsgLyogMSAqL1xuICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7IC8qIDIgKi9cbiB9XG4gXG4gLyoqXG4gICogQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGJ1dHRvbnMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gICovXG4gXG4gYnV0dG9uLFxuIFt0eXBlPVwiYnV0dG9uXCJdLFxuIFt0eXBlPVwicmVzZXRcIl0sXG4gW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XG4gfVxuIFxuIC8qKlxuICAqIDEuIENoYW5nZSB0aGUgaW5jb25zaXN0ZW50IGFwcGVhcmFuY2UgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gICogMi4gQ29ycmVjdCB0aGUgcGFkZGluZyBpbiBGaXJlZm94LlxuICAqL1xuIFxuIGZpZWxkc2V0IHtcbiAgIGJvcmRlcjogMXB4IHNvbGlkICNhMGEwYTA7IC8qIDEgKi9cbiAgIHBhZGRpbmc6IDAuMzVlbSAwLjc1ZW0gMC42MjVlbTsgLyogMiAqL1xuIH1cbiBcbiAvKipcbiAgKiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlIDE4LSBhbmQgSUUuXG4gICovXG4gXG4gaW5wdXQge1xuICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gfVxuIFxuIC8qKlxuICAqIDEuIENvcnJlY3QgdGhlIHRleHQgd3JhcHBpbmcgaW4gRWRnZSAxOC0gYW5kIElFLlxuICAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS5cbiAgKi9cbiBcbiBsZWdlbmQge1xuICAgY29sb3I6IGluaGVyaXQ7IC8qIDIgKi9cbiAgIGRpc3BsYXk6IHRhYmxlOyAvKiAxICovXG4gICBtYXgtd2lkdGg6IDEwMCU7IC8qIDEgKi9cbiAgIHdoaXRlLXNwYWNlOiBub3JtYWw7IC8qIDEgKi9cbiB9XG4gXG4gLyoqXG4gICogMS4gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSAxOC0gYW5kIElFLlxuICAqIDIuIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gQ2hyb21lLCBFZGdlLCBhbmQgRmlyZWZveC5cbiAgKi9cbiBcbiBwcm9ncmVzcyB7XG4gICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIDEgKi9cbiAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgLyogMiAqL1xuIH1cbiBcbiAvKipcbiAgKiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guXG4gICovXG4gXG4gc2VsZWN0IHtcbiAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuIH1cbiBcbiAvKipcbiAgKiAxLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gICogMi4gUmVtb3ZlIHRoZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRS5cbiAgKiAzLiBDaGFuZ2UgdGhlIHJlc2l6ZSBkaXJlY3Rpb24gaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gICovXG4gXG4gdGV4dGFyZWEge1xuICAgbWFyZ2luOiAwOyAvKiAxICovXG4gICBvdmVyZmxvdzogYXV0bzsgLyogMiAqL1xuICAgcmVzaXplOiB2ZXJ0aWNhbDsgLyogMyAqL1xuIH1cbiBcbiAvKipcbiAgKiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAtLlxuICAqL1xuIFxuIFt0eXBlPVwiY2hlY2tib3hcIl0sXG4gW3R5cGU9XCJyYWRpb1wiXSB7XG4gICBwYWRkaW5nOiAwO1xuIH1cbiBcbiAvKipcbiAgKiAxLiBDb3JyZWN0IHRoZSBvZGQgYXBwZWFyYW5jZSBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gICogMi4gQ29ycmVjdCB0aGUgb3V0bGluZSBzdHlsZSBpbiBTYWZhcmkuXG4gICovXG4gXG4gW3R5cGU9XCJzZWFyY2hcIl0ge1xuICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyAvKiAyICovXG4gfVxuIFxuIC8qKlxuICAqIENvcnJlY3QgdGhlIGN1cnNvciBzdHlsZSBvZiBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBidXR0b25zIGluIFNhZmFyaS5cbiAgKi9cbiBcbiA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgIGhlaWdodDogYXV0bztcbiB9XG4gXG4gLyoqXG4gICogQ29ycmVjdCB0aGUgdGV4dCBzdHlsZSBvZiBwbGFjZWhvbGRlcnMgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICAqL1xuIFxuIDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICBjb2xvcjogaW5oZXJpdDtcbiAgIG9wYWNpdHk6IDAuNTQ7XG4gfVxuIFxuIC8qKlxuICAqIFJlbW92ZSB0aGUgaW5uZXIgcGFkZGluZyBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkgb24gbWFjT1MuXG4gICovXG4gXG4gOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiB9XG4gXG4gLyoqXG4gICogMS4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIHVwbG9hZCBidXR0b25zIGluIGlPUyBhbmQgU2FmYXJpLlxuICAqIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cbiAgKi9cbiBcbiA6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvKiAxICovXG4gICBmb250OiBpbmhlcml0OyAvKiAyICovXG4gfVxuIFxuIC8qKlxuICAqIFJlbW92ZSB0aGUgaW5uZXIgYm9yZGVyIGFuZCBwYWRkaW5nIG9mIGZvY3VzIG91dGxpbmVzIGluIEZpcmVmb3guXG4gICovXG4gXG4gOjotbW96LWZvY3VzLWlubmVyIHtcbiAgIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgIHBhZGRpbmc6IDA7XG4gfVxuIFxuIC8qKlxuICAqIFJlc3RvcmUgdGhlIGZvY3VzIG91dGxpbmUgc3R5bGVzIHVuc2V0IGJ5IHRoZSBwcmV2aW91cyBydWxlIGluIEZpcmVmb3guXG4gICovXG4gXG4gOi1tb3otZm9jdXNyaW5nIHtcbiAgIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbiB9XG4gXG4gLyoqXG4gICogUmVtb3ZlIHRoZSBhZGRpdGlvbmFsIDppbnZhbGlkIHN0eWxlcyBpbiBGaXJlZm94LlxuICAqL1xuIFxuIDotbW96LXVpLWludmFsaWQge1xuICAgYm94LXNoYWRvdzogbm9uZTtcbiB9XG4gXG4gLyogSW50ZXJhY3RpdmVcbiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuIFxuIC8qXG4gICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSAxOC0gYW5kIElFLlxuICAqL1xuIFxuIGRldGFpbHMge1xuICAgZGlzcGxheTogYmxvY2s7XG4gfVxuIFxuIC8qXG4gICogQWRkIHRoZSBjb3JyZWN0IHN0eWxlcyBpbiBFZGdlIDE4LSwgSUUsIGFuZCBTYWZhcmkuXG4gICovXG4gXG4gZGlhbG9nIHtcbiAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgYm9yZGVyOiBzb2xpZDtcbiAgIGNvbG9yOiBibGFjaztcbiAgIGRpc3BsYXk6IGJsb2NrO1xuICAgaGVpZ2h0OiAtbW96LWZpdC1jb250ZW50O1xuICAgaGVpZ2h0OiAtd2Via2l0LWZpdC1jb250ZW50O1xuICAgaGVpZ2h0OiBmaXQtY29udGVudDtcbiAgIGxlZnQ6IDA7XG4gICBtYXJnaW46IGF1dG87XG4gICBwYWRkaW5nOiAxZW07XG4gICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICByaWdodDogMDtcbiAgIHdpZHRoOiAtbW96LWZpdC1jb250ZW50O1xuICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7XG4gICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gfVxuIFxuIGRpYWxvZzpub3QoW29wZW5dKSB7XG4gICBkaXNwbGF5OiBub25lO1xuIH1cbiBcbiAvKlxuICAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGFsbCBicm93c2Vycy5cbiAgKi9cbiBcbiBzdW1tYXJ5IHtcbiAgIGRpc3BsYXk6IGxpc3QtaXRlbTtcbiB9XG4gXG4gLyogU2NyaXB0aW5nXG4gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbiBcbiAvKipcbiAgKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS5cbiAgKi9cbiBcbiBjYW52YXMge1xuICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuIH1cbiBcbiAvKipcbiAgKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS5cbiAgKi9cbiBcbiB0ZW1wbGF0ZSB7XG4gICBkaXNwbGF5OiBub25lO1xuIH1cbiBcbiAvKiBVc2VyIGludGVyYWN0aW9uXG4gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbiBcbiAvKlxuICAqIDEuIFJlbW92ZSB0aGUgdGFwcGluZyBkZWxheSBpbiBJRSAxMC5cbiAgKiAyLiBSZW1vdmUgdGhlIHRhcHBpbmcgZGVsYXkgb24gY2xpY2thYmxlIGVsZW1lbnRzXG4gICAgICAgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gICovXG4gXG4gYSxcbiBhcmVhLFxuIGJ1dHRvbixcbiBpbnB1dCxcbiBsYWJlbCxcbiBzZWxlY3QsXG4gc3VtbWFyeSxcbiB0ZXh0YXJlYSxcbiBbdGFiaW5kZXhdIHtcbiAgIC1tcy10b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsgLyogMSAqL1xuICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247IC8qIDIgKi9cbiB9XG4gXG4gLyoqXG4gICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAtLlxuICAqL1xuIFxuIFtoaWRkZW5dIHtcbiAgIGRpc3BsYXk6IG5vbmU7XG4gfVxuIFxuIC8qIEFjY2Vzc2liaWxpdHlcbiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuIFxuIC8qKlxuICAqIENoYW5nZSB0aGUgY3Vyc29yIG9uIGJ1c3kgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gICovXG4gXG4gW2FyaWEtYnVzeT1cInRydWVcIl0ge1xuICAgY3Vyc29yOiBwcm9ncmVzcztcbiB9XG4gXG4gLypcbiAgKiBDaGFuZ2UgdGhlIGN1cnNvciBvbiBjb250cm9sIGVsZW1lbnRzIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAqL1xuIFxuIFthcmlhLWNvbnRyb2xzXSB7XG4gICBjdXJzb3I6IHBvaW50ZXI7XG4gfVxuIFxuIC8qXG4gICogQ2hhbmdlIHRoZSBjdXJzb3Igb24gZGlzYWJsZWQsIG5vdC1lZGl0YWJsZSwgb3Igb3RoZXJ3aXNlXG4gICogaW5vcGVyYWJsZSBlbGVtZW50cyBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAgKi9cbiBcbiBbYXJpYS1kaXNhYmxlZD1cInRydWVcIl0sXG4gW2Rpc2FibGVkXSB7XG4gICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuIH1cbiBcbiAvKlxuICAqIENoYW5nZSB0aGUgZGlzcGxheSBvbiB2aXN1YWxseSBoaWRkZW4gYWNjZXNzaWJsZSBlbGVtZW50c1xuICAqIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICAqL1xuIFxuIFthcmlhLWhpZGRlbj1cImZhbHNlXCJdW2hpZGRlbl0ge1xuICAgZGlzcGxheTogaW5pdGlhbDtcbiB9XG4gXG4gW2FyaWEtaGlkZGVuPVwiZmFsc2VcIl1baGlkZGVuXTpub3QoOmZvY3VzKSB7XG4gICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICAgcG9zaXRpb246IGFic29sdXRlO1xuIH1cbiAiLCJAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1KZXRCcmFpbnMrTW9ubzppdGFsLHdnaHRAMCwzMDA7MCw0MDA7MCw1MDA7MCw2MDA7MCw3MDA7MCw4MDA7MSwzMDA7MSw0MDA7MSw1MDA7MSw2MDA7MSw3MDA7MSw4MDAmZmFtaWx5PVJvYm90bzppdGFsLHdnaHRAMCwzMDA7MCw0MDA7MCw1MDA7MCw3MDA7MCw5MDA7MSwzMDA7MSw0MDA7MSw1MDA7MSw3MDA7MSw5MDAmZGlzcGxheT1zd2FwJyk7XHJcblxyXG5ib2R5e3Bvc2l0aW9uOiByZWxhdGl2ZTtmb250LWZhbWlseTogJ1JvYm90bycsIHNhbnMtc2VyaWY7Y29sb3I6ICNmZmZmZmY7fVxyXG4uYWxlcnR7b3BhY2l0eTogMTtjb2xvcjogI2ZmZmZmZjtwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDEwMCU7dGV4dC1hbGlnbjogY2VudGVyO3RvcDogMDthbmltYXRpb246IGRpc2FwZWFyIDJzIGxpbmVhcjthbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczt9XHJcbi5wYWdlLXdyYXBwZXJ7aGVpZ2h0OiAxMDB2aDtvdmVyZmxvdzogaGlkZGVuO2Rpc3BsYXk6IGZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjt9XHJcbi5jb250YWluZXJ7cG9zaXRpb246IHJlbGF0aXZlO3dpZHRoOiAxMDAlO21heC13aWR0aDogMTQ0MHB4O21hcmdpbjogYXV0bzt9XHJcbi5mbGV4e2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOiBjZW50ZXI7fVxyXG4uc3VtbWFyeXtsaW5lLWhlaWdodDogMjdweDt0ZXh0LWFsaWduOiBqdXN0aWZ5O2xldHRlci1zcGFjaW5nOiAxcHg7Zm9udC1zaXplOiAxLjI1ZW07fVxyXG4uc3VtbWFyeSAuaGlnaGxpZ2h0e3RleHQtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC44KTt9XHJcblxyXG4jYmFjay10by10b3B7d2lkdGg6IDI1cHg7bWluLWhlaWdodDogMjVweDtjdXJzb3I6IHBvaW50ZXI7dHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgbGluZWFyO31cclxuI2JhY2stdG8tdG9wOmhvdmVye3RyYW5zZm9ybTogdHJhbnNsYXRlKCAtMnB4LCAtMnB4ICk7fVxyXG5cclxuaGVhZGVye3Bvc2l0aW9uOiBmaXhlZDt0b3A6IDA7ei1pbmRleDogMjt3aWR0aDogMTAwdnc7Y29sb3I6ICNmZmZmZmY7YmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7fVxyXG5oZWFkZXIgLmNvbnRhaW5lcntkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO31cclxuaGVhZGVyIC5jb250YWluZXIgOmlzKC5icmFuZCwgLmJyYW5kLW1vYmlsZSl7Zm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsIHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6IDkwMDtmb250LXNpemUgOiAzLjRlbTtsaW5lLWhlaWdodDogNDhweDt9XHJcbmhlYWRlciAuY29udGFpbmVyIDppcyguYnJhbmQsIC5icmFuZC1tb2JpbGUpIGF7dGV4dC1kZWNvcmF0aW9uOiBub25lO31cclxuaGVhZGVyIC5jb250YWluZXIgLmJyYW5kLW1vYmlsZXtkaXNwbGF5OiBub25lO31cclxuaGVhZGVyIC5jb250YWluZXIgbWVudSB7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO2p1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO21pbi13aWR0aDogNTAlO2ZvbnQtc2l6ZTogMjBweDt9XHJcbmhlYWRlciAuY29udGFpbmVyIG1lbnUgLmNvbnRhY3R7Y3Vyc29yOiBwb2ludGVyO2NvbG9yOiB2YXIoLS1jb2xvci1kYXJrLWdyZXkpO3BhZGRpbmc6IDE3cHggMzZweCA7Ym9yZGVyLXJhZGl1czogNTBweDtiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1raGFraSk7dHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjNzIGVhc2U7fVxyXG5oZWFkZXIgLmNvbnRhaW5lciBtZW51IGxpe2Rpc3BsYXk6IGZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjtnYXA6IDVweDt9XHJcbmhlYWRlciAuY29udGFpbmVyIG1lbnUgbGkgc3BhbntkaXNwbGF5OiBpbmxpbmUtYmxvY2s7d2lkdGg6IDEwcHg7aGVpZ2h0OiAxMHB4O2JvcmRlci1yYWRpdXM6IDUwJTtiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDt9XHJcbmhlYWRlciAuY29udGFpbmVyIG1lbnUgbGk6aG92ZXJ7YW5pbWF0aW9uOiBmbG9hdGluZyAxMHMgY3ViaWMtYmV6aWVyKDAuNjgsIC0wLjU1LCAwLjI2NSwgMS41NSkgaW5maW5pdGU7fVxyXG5oZWFkZXIgLmNvbnRhaW5lciBtZW51IC5jb250YWN0OmhvdmVye2JveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjMpO31cclxuZm9vdGVye2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO3dpZHRoOiAxMDB2dztwb3NpdGlvbjogZml4ZWQ7Ym90dG9tOiAwO2ZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjtjb2xvcjogI2ZmZmZmZjt9XHJcblxyXG4jbWFpbntwb3NpdGlvbjogcmVsYXRpdmU7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO2JhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWRhcmstZ3JleSk7fVxyXG4jZXhwZXJpZW5jZXtiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1saWdodC1wdXJwbGUpO31cclxuI2NvbXBldGVuY2Vze2JhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWRhcmstcm9zZSk7fVxyXG4jcG9ydGZvbGlve2JhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWRhcmstY3lhbik7fVxyXG4jcmVzZWF1eHtiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1raGFraSk7fVxyXG5cclxuLyogQlVSR0VSIE1FTlUgKi9cclxuI2J1cmdlci1tZW51e2Rpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBmaXhlZDsgcmlnaHQ6IDA7IHdpZHRoOiA1MHZ3OyB6LWluZGV4OiAxMDt9XHJcbiNidXJnZXItbWVudSAuaGlkZXtkaXNwbGF5OiBub25lO31cclxuI2J1cmdlci1tZW51IG5hdntwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1raGFraSk7IG1pbi1oZWlnaHQ6IDEwMHZoOyBwYWRkaW5nLXRvcDogMS4yNWVtO31cclxuI2J1cmdlci1tZW51IG5hdiBvbHttYXJnaW46IDA7fVxyXG4jYnVyZ2VyLW1lbnUgbmF2IG9sIGxpe3BhZGRpbmc6IDAuNjJlbSAxLjI1ZW07IHRleHQtYWxpZ246IHJpZ2h0OyBmb250LXNpemU6IDEuMjVlbTt9XHJcbiNidXJnZXItbWVudSBuYXYgb2wgbGkgYXt0ZXh0LWRlY29yYXRpb246IG5vbmU7fVxyXG4jYnVyZ2VyLW1lbnUgLmJ1cmdlcntjdXJzb3I6IHBvaW50ZXI7d2lkdGg6IDQwcHg7aGVpZ2h0OiA0MHB4O21hcmdpbjogMS4yNWVtIDEuMjVlbSAxLjI1ZW0gYXV0bzt9XHJcbiNidXJnZXItbWVudSAuY2xvc2UtYnVyZ2Vye2N1cnNvcjogcG9pbnRlcjt3aWR0aDogMzVweDtoZWlnaHQ6IDM1cHg7bWFyZ2luOiAwIDEuMjVlbSAxLjI1ZW0gYXV0bzt9XHJcblxyXG4vKiBNQUlOICovXHJcbiNtYWluIGgye2ZvbnQtZmFtaWx5OiBcIkpldEJyYWlucyBNb25vXCIsIHNhbnMtc2VyaWY7Y29sb3IgOiAjZmZmZmZmO2ZvbnQtc2l6ZTogMTIuNWVtO2ZvbnQtd2VpZ2h0OiA0MDA7d2hpdGUtc3BhY2U6IG5vd3JhcDtwb3NpdGlvbjogcmVsYXRpdmU7dXNlci1zZWxlY3Q6IG5vbmU7fVxyXG4jbWFpbiAuc2Nyb2xse3Bvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDcwcHg7bGVmdDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlKTthbmltYXRpb246IGJvdW5jZSAycyBpbmZpbml0ZTt9XHJcblxyXG4vKiBFWFBFUklFTkNFUyAqL1xyXG5cclxuI2V4cGVyaWVuY2V7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjt9XHJcbiNleHBlcmllbmNlIC50aW1lbGluZXt1c2VyLXNlbGVjdDogbm9uZTtzY3JvbGwtYmVoYXZpb3I6IHNtb290aDtzY3JvbGxiYXItd2lkdGg6IG5vbmU7Y3Vyc29yOiBncmFiO292ZXJmbG93OiBhdXRvO3doaXRlLXNwYWNlOiBub3dyYXA7cG9zaXRpb246IHJlbGF0aXZlO2JhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgIzQ3MzM1NyAxJSwgdHJhbnNwYXJlbnQgMSUsIHRyYW5zcGFyZW50IDQ5JSwgIzQ3MzM1NyA0OSUsICM0NzMzNTcgNTElLCB0cmFuc3BhcmVudCA1MSUsIHRyYW5zcGFyZW50IDk5JSwgIzQ3MzM1NyA5OSUpO2JhY2tncm91bmQtc2l6ZTogNnB4IDZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MHB4IDUwcHg7fVxyXG4jZXhwZXJpZW5jZSAudGltZWxpbmU6OmJlZm9yZSB7Y29udGVudDogXCJcIjtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7aGVpZ2h0OiAxcHg7d2lkdGg6IDUwdnc7fVxyXG4jZXhwZXJpZW5jZSAudGltZWxpbmU6OmFmdGVyIHtjb250ZW50OiBcIlwiO2Rpc3BsYXk6IGlubGluZS1ibG9jaztoZWlnaHQ6IDFweDt3aWR0aDogNTB2dzt9XHJcbiNleHBlcmllbmNlIC5jb250cm9sc3t3aWR0aDogZml0LWNvbnRlbnQ7ZGlzcGxheTogZmxleDttYXJnaW46IDMwcHggYXV0byAxMHB4O31cclxuI2V4cGVyaWVuY2UgLmNvbnRyb2xzIC5zY3JvbGx7d2lkdGg6IDMwcHg7bWF4LWhlaWdodDogMzBweDttYXJnaW46IDAgMzBweDtjdXJzb3I6IHBvaW50ZXI7dXNlci1zZWxlY3Q6IG5vbmU7dHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZS1pbi1vdXQ7fVxyXG4jZXhwZXJpZW5jZSAuY29udHJvbHMgLnNjcm9sbC5sZWZ0OmhvdmVye3RyYW5zZm9ybTogdHJhbnNsYXRlKC01cHgpO31cclxuI2V4cGVyaWVuY2UgLmNvbnRyb2xzIC5zY3JvbGwucmlnaHQ6aG92ZXJ7dHJhbnNmb3JtOiB0cmFuc2xhdGUoNXB4KTt9XHJcbiNleHBlcmllbmNlIC5zdW1tYXJpZXN7bWluLWhlaWdodDogMTV2aDt9XHJcbiNleHBlcmllbmNlIC5leHBlcmllbmNlLXN1bW1hcnl7dXNlci1zZWxlY3Q6IG5vbmU7d2lkdGg6IDUwJTttYXJnaW46IGF1dG87fVxyXG4jZXhwZXJpZW5jZSAuZXhwZXJpZW5jZS1zdW1tYXJ5Om5vdCg6Zmlyc3QtY2hpbGQpe2Rpc3BsYXk6IG5vbmU7fVxyXG4jZXhwZXJpZW5jZSAuZXhwZXJpZW5jZS1zdW1tYXJ5IHAgc3Bhbntmb250LXdlaWdodDogNTAwO3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO31cclxuI2V4cGVyaWVuY2UgLnRpbWVsaW5lIC5leHBlcmllbmNlLW5hbWV7dXNlci1zZWxlY3Q6IG5vbmU7ZGlzcGxheTogaW5saW5lLWJsb2NrO3RleHQtYWxpZ246IGNlbnRlcjt9XHJcbiNleHBlcmllbmNlIC50aW1lbGluZSAuZXhwZXJpZW5jZS1uYW1lLm9kZDpmaXJzdC1jaGlsZHtiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50IDElLCAjMTgxODIzIDUwJSk7fVxyXG4jZXhwZXJpZW5jZSAudGltZWxpbmUgLmV4cGVyaWVuY2UtbmFtZS5vZGQ6bm90KDpmaXJzdC1jaGlsZCl7YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZGFyay1ncmV5KTt9XHJcbiNleHBlcmllbmNlIC50aW1lbGluZSAuZXhwZXJpZW5jZS1uYW1lLmV2ZW57YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZGFyay1wdXJwbGUpO31cclxuXHJcbi8qIENPTVBFVEVOQ0VTICovXHJcblxyXG4jY29tcGV0ZW5jZXMgLmNvbXAtY29udGFpbmVye2Rpc3BsYXk6IGZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjttYXJnaW46IDAgMCAwIDI4MHB4O2dhcCA6IDM0cHg7fVxyXG4jY29tcGV0ZW5jZXMgLmNvbXAtY29udGFpbmVyLmhpZGV7ZGlzcGxheTogbm9uZTt9XHJcbiNjb21wZXRlbmNlcyAuY29tcC1jb250YWluZXIgLmFycm93e3RyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2UtaW4tb3V0O31cclxuI2NvbXBldGVuY2VzIC5jb21wLWNvbnRhaW5lciAuYXJyb3cudW5mb2xke3RyYW5zZm9ybTogcm90YXRlKDkwZGVnKTt9XHJcbiNjb21wZXRlbmNlcyAuY29tcC1jb250YWluZXIgaW1ne2N1cnNvcjogcG9pbnRlcjt9XHJcbiNjb21wZXRlbmNlcyAuY29tcC1jb250YWluZXIgcC5tYWluLXNraWxsLXRpdGxle3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Zm9udC1zaXplOiAyZW07fVxyXG4jY29tcGV0ZW5jZXMgLnN1Yi1jb21we2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBsZWZ0O2dhcDogMS43ZW07d2lkdGg6IDEwMCU7fVxyXG4jY29tcGV0ZW5jZXMgLnN1Yi1jb21wID4gZGl2e21hcmdpbjogMCAxMHB4O31cclxuI2NvbXBldGVuY2VzIC5zdWItY29tcC1jb250YWluZXJ7ZGlzcGxheTogbm9uZTtvcGFjaXR5OiAwO3RyYW5zaXRpb246IGFsbCAxcyBlYXNlLWluLW91dDt9XHJcbiNjb21wZXRlbmNlcyAuc3ViLWNvbXAtY29udGFpbmVyLnNob3d7ZGlzcGxheTogYmxvY2s7b3BhY2l0eTogMTt0cmFuc2l0aW9uOiBhbGwgMXMgZWFzZS1pbi1vdXQ7fVxyXG4jY29tcGV0ZW5jZXMgLnN1Yi1jb21wLWNvbnRhaW5lciAucmF0ZXtkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7fVxyXG4jY29tcGV0ZW5jZXMgOmlzKC5jb21wLXN1bW1hcnksIC5zdWItY29tcCkgcHtmb250LXNpemU6IDEuMjVlbTtmb250LXdlaWdodDogNDAwO2xpbmUtaGVpZ2h0OiAyN3B4O3RleHQtYWxpZ246IGp1c3RpZnk7fVxyXG5cclxuLyogUE9SVEZPTElPICovXHJcblxyXG4jcG9ydGZvbGlvIC5wcm9qZWN0LWNvbnRhaW5lcntkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7bWFyZ2luOiAwIDAgMCAyODBweDtnYXAgOiAzNHB4O31cclxuI3BvcnRmb2xpbyAucHJvamVjdC1jb250YWluZXIuaGlkZXtkaXNwbGF5OiBub25lO31cclxuI3BvcnRmb2xpbyAucHJvamVjdC1jb250YWluZXIgLmFycm93e3RyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2UtaW4tb3V0O31cclxuI3BvcnRmb2xpbyAucHJvamVjdC1jb250YWluZXIgLmFycm93LnVuZm9sZHt0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7fVxyXG4jcG9ydGZvbGlvIC5wcm9qZWN0LWNvbnRhaW5lciBpbWd7Y3Vyc29yOiBwb2ludGVyO31cclxuI3BvcnRmb2xpbyAucHJvamVjdC1jb250YWluZXIgcC5tYWluLXNraWxsLXRpdGxle3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Zm9udC1zaXplOiAyZW07fVxyXG4jcG9ydGZvbGlvIC5wcm9qZWN0LWNvbnRhaW5lciBwLm1haW4tc2tpbGwtdGl0bGUgc3Bhbnt0ZXh0LXRyYW5zZm9ybTogbm9uZTt9XHJcbiNwb3J0Zm9saW8gLnN1bW1hcnktcHJvamVjdC1jb250YWluZXJ7ZGlzcGxheTogbm9uZTtvcGFjaXR5OiAwO3RyYW5zaXRpb246IGFsbCAxcyBlYXNlLWluLW91dDt9XHJcbiNwb3J0Zm9saW8gLnN1bW1hcnktcHJvamVjdC1jb250YWluZXIuc2hvd3tkaXNwbGF5OiBibG9jaztvcGFjaXR5OiAxO3RyYW5zaXRpb246IGFsbCAxcyBlYXNlLWluLW91dDt9XHJcbiNwb3J0Zm9saW8gLnN1bW1hcnktcHJvamVjdC1jb250YWluZXIgLnJhdGV7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO31cclxuI3BvcnRmb2xpbyAucHJvamVjdC1zdW1tYXJ5IHB7Zm9udC1zaXplOiAxLjI1ZW07Zm9udC13ZWlnaHQ6IDQwMDtsaW5lLWhlaWdodDogMjdweDt0ZXh0LWFsaWduOiBqdXN0aWZ5O31cclxuXHJcbi8qIE1PREFMRSAqL1xyXG5cclxuI21vZGFse3Bvc2l0aW9uOiByZWxhdGl2ZTt3aWR0aDogOTUwcHg7cGFkZGluZzogNDdweCA1NHB4IDM3cHg7Ym9yZGVyOiBpbmhlcml0O2JhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWRhcmstZ3JleSk7Y29sb3I6ICNmZmZmZmY7fVxyXG4jbW9kYWw6OmJhY2tkcm9we2JhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC43NSk7fVxyXG4jbW9kYWwgOmlzKC5mb3JtLWJsb2NrLCAuc3VibWl0LWJsb2NrKSA+IGRpdnt3aWR0aDogMTAwJTtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjttYXJnaW4tYmxvY2s6IDYuNXB4O31cclxuI21vZGFsIC5kaXNjbGFpbWVyID4gcHtmb250LXNpemU6IDAuNjI1ZW07Zm9udC13ZWlnaHQ6IDMwMDt0ZXh0LWFsaWduOiByaWdodDtsaW5lLWhlaWdodDogMS42OWVtO21hcmdpbi1ibG9jazogNXB4O31cclxuI21vZGFsIC5jbG9zZS1tb2RhbHtjdXJzb3I6IHBvaW50ZXI7cG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAxNXB4O3RvcDogMTBweDt3aWR0aDogMjVweDtoZWlnaHQ6IDI1cHg7fVxyXG4jbW9kYWwgOmlzKGlucHV0LCB0ZXh0YXJlYSl7Zm9udC1mYW1pbHk6ICdSb2JvdG8nLCBzYW5zLXNlcmlmO3dpZHRoOiA3NSU7cGFkZGluZzogMTJweCAyMHB4O2JveC1zaXppbmc6IGJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czogNHB4O2JhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7Zm9udC1zaXplOiAxNnB4O31cclxuI21vZGFsIHRleHRhcmVhe2hlaWdodDogMTUwcHg7cmVzaXplOiBub25lO31cclxuI21vZGFsIGJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1raGFraSk7Ym9yZGVyOiBub25lO2NvbG9yOiB3aGl0ZTtwYWRkaW5nOiAxNXB4IDMycHg7dGV4dC1hbGlnbjogY2VudGVyO3RleHQtZGVjb3JhdGlvbjogbm9uZTtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Zm9udC1zaXplOiAxNnB4O21hcmdpbi1sZWZ0OiBhdXRvO2N1cnNvcjogcG9pbnRlcjt9XHJcblxyXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxNDQwcHgpIHtcclxuICAgIC5jb250YWluZXJ7cGFkZGluZy1pbmxpbmU6IDFlbTt9XHJcbn1cclxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTIyMHB4KXtcclxuICAgIGhlYWRlciAuY29udGFpbmVyIG1lbnV7ZGlzcGxheTogbm9uZTt9XHJcbiAgICBoZWFkZXIgLmNvbnRhaW5lciAuYnJhbmR7ZGlzcGxheTogbm9uZTt9XHJcbiAgICBoZWFkZXIgLmNvbnRhaW5lciAuYnJhbmQtbW9iaWxle2Rpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOiAyMHB4O31cclxuICAgIC5zdW1tYXJ5e2ZvbnQtc2l6ZTogMWVtOyBsaW5lLWhlaWdodDogMTdweDt9XHJcblxyXG4gICAgI2J1cmdlci1tZW51e2Rpc3BsYXk6IGJsb2NrO31cclxuICAgIFxyXG4gICAgI2NvbXBldGVuY2VzIC5jb21wLWNvbnRhaW5lcnttYXJnaW46IDA7fVxyXG4gICAgI2NvbXBldGVuY2VzIC5jb21wLWNvbnRhaW5lciAuYXJyb3d7d2lkdGg6IDM2cHg7fVxyXG4gICAgI2NvbXBldGVuY2VzIC5jb21wLWNvbnRhaW5lciBwLm1haW4tc2tpbGwtdGl0bGV7bWFyZ2luLWJsb2NrOiAxMHB4O31cclxuICAgICNjb21wZXRlbmNlcyAuc3ViLWNvbXB7ZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyNSUgMjUlIDI1JSAyNSU7Z3JpZC1jb2x1bW4tZ2FwOjIwcHg7Z3JpZC1yb3ctZ2FwOiAwcHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7fVxyXG4gICAgI2NvbXBldGVuY2VzIC5zdWItY29tcCBwe21hcmdpbi1ibG9jazogMTBweDt9XHJcblxyXG4gICAgI3BvcnRmb2xpbyAucHJvamVjdC1jb250YWluZXJ7bWFyZ2luOiAwO31cclxuICAgICNwb3J0Zm9saW8gLnByb2plY3QtY29udGFpbmVyIC5hcnJvd3t3aWR0aDogMzZweDt9XHJcbiAgICAjcG9ydGZvbGlvIC5wcm9qZWN0LWNvbnRhaW5lciBwLm1haW4tc2tpbGwtdGl0bGV7bWFyZ2luLWJsb2NrOiAxMHB4O31cclxuICAgICNwb3J0Zm9saW8gLnN1bW1hcnktcHJvamVjdC1jb250YWluZXIgcHttYXJnaW4tYmxvY2s6IDEwcHg7fVxyXG5cclxuICAgICNyZXNlYXV4IC5jb250YWluZXIuZmxleHtqdXN0aWZ5LWNvbnRlbnQ6IGluaXRpYWw7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogMTBweH1cclxuICAgICNyZXNlYXV4IC5jb250YWluZXIgYSBpbWd7d2lkdGg6IDM1MHB4O31cclxufVxyXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NDBweCl7XHJcbiAgICAjYnVyZ2VyLW1lbnV7IHdpZHRoOiA3NXZ3O31cclxuICAgICNtb2RhbHtwYWRkaW5nOiAwIDFlbTt9XHJcbiAgICAjbW9kYWwgZm9ybXttYXJnaW4tdG9wOiAyLjVlbTt9XHJcbiAgICAjbW9kYWwgOmlzKC5mb3JtLWJsb2NrLCAuc3VibWl0LWJsb2NrKSA+IGRpdntmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyO31cclxuICAgICNleHBlcmllbmNlIC5leHBlcmllbmNlLXN1bW1hcnkge3dpZHRoOiAxMDAlO31cclxuXHJcbiAgICAjY29tcGV0ZW5jZXMgLnN1Yi1jb21we2Rpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogNTAlIDI1JTtncmlkLWNvbHVtbi1nYXA6MTBweDtncmlkLXJvdy1nYXA6IDBweDsgYWxpZ24taXRlbXM6IGNlbnRlcjt9XHJcblxyXG4gICAgI3BvcnRmb2xpbyAucHJvamVjdC1jb250YWluZXJ7Z2FwOiAxNHB4O31cclxuICAgICNwb3J0Zm9saW8gLnByb2plY3QtY29udGFpbmVyIHAubWFpbi1za2lsbC10aXRsZXtmb250LXNpemU6IDEuMjVlbTt9XHJcblxyXG4gICAgI3Jlc2VhdXggLmNvbnRhaW5lciBhIGltZyB7d2lkdGg6IDI1MHB4O31cclxufVxyXG5cclxuXHJcbkBrZXlmcmFtZXMgYm91bmNlIHtcclxuICAgIDAlLCAyMCUsIDUwJSwgODAlLCAxMDAlIHtcclxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XHJcbiAgICB9XHJcbiAgICA0MCUge1xyXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XHJcbiAgICB9XHJcbiAgICA2MCUge1xyXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkBrZXlmcmFtZXMgZmxvYXRpbmcge1xyXG4gICAgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDBweCk7fVxyXG4gICAgMjUlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoM3B4LCA2cHgpOyB9XHJcbiAgICA1MCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2cHgsIDNweCk7IH1cclxuICAgIDc1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKDRweCwgNnB4KTt9XHJcbiAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAwcHgpOyB9XHJcbn1cclxuXHJcbkBrZXlmcmFtZXMgZGlzYXBlYXIge1xyXG4gICAgMCUgeyBvcGFjaXR5OiAxO31cclxuICAgIDEwMCUgeyBvcGFjaXR5OiAwO31cclxufVxyXG4iLCIuYWRtaW57YmFja2dyb3VuZC1jb2xvcjogYmxhY2s7fSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==*/